Ci8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAoKqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEyIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAxLiAgICBJTlRST0RVQ1RJT04KVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkICgiRkRLIEFBQyBDb2RlYyIpIGlzIHNvZnR3YXJlIHRoYXQgaW1wbGVtZW50cwp0aGUgTVBFRyBBZHZhbmNlZCBBdWRpbyBDb2RpbmcgKCJBQUMiKSBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgc2NoZW1lIGZvciBkaWdpdGFsIGF1ZGlvLgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHdpZGUgdmFyaWV0eSBvZiBBbmRyb2lkIGRldmljZXMuCgpBQUMncyBIRS1BQUMgYW5kIEhFLUFBQyB2MiB2ZXJzaW9ucyBhcmUgcmVnYXJkZWQgYXMgdG9kYXkncyBtb3N0IGVmZmljaWVudCBnZW5lcmFsIHBlcmNlcHR1YWwKYXVkaW8gY29kZWNzLiBBQUMtRUxEIGlzIGNvbnNpZGVyZWQgdGhlIGJlc3QtcGVyZm9ybWluZyBmdWxsLWJhbmR3aWR0aCBjb21tdW5pY2F0aW9ucyBjb2RlYyBieQppbmRlcGVuZGVudCBzdHVkaWVzIGFuZCBpcyB3aWRlbHkgZGVwbG95ZWQuIEFBQyBoYXMgYmVlbiBzdGFuZGFyZGl6ZWQgYnkgSVNPIGFuZCBJRUMgYXMgcGFydApvZiB0aGUgTVBFRyBzcGVjaWZpY2F0aW9ucy4KClBhdGVudCBsaWNlbnNlcyBmb3IgbmVjZXNzYXJ5IHBhdGVudCBjbGFpbXMgZm9yIHRoZSBGREsgQUFDIENvZGVjIChpbmNsdWRpbmcgdGhvc2Ugb2YgRnJhdW5ob2ZlcikKbWF5IGJlIG9idGFpbmVkIHRocm91Z2ggVmlhIExpY2Vuc2luZyAod3d3LnZpYWxpY2Vuc2luZy5jb20pIG9yIHRocm91Z2ggdGhlIHJlc3BlY3RpdmUgcGF0ZW50IG93bmVycwppbmRpdmlkdWFsbHkgZm9yIHRoZSBwdXJwb3NlIG9mIGVuY29kaW5nIG9yIGRlY29kaW5nIGJpdCBzdHJlYW1zIGluIHByb2R1Y3RzIHRoYXQgYXJlIGNvbXBsaWFudCB3aXRoCnRoZSBJU08vSUVDIE1QRUcgYXVkaW8gc3RhbmRhcmRzLiBQbGVhc2Ugbm90ZSB0aGF0IG1vc3QgbWFudWZhY3R1cmVycyBvZiBBbmRyb2lkIGRldmljZXMgYWxyZWFkeSBsaWNlbnNlCnRoZXNlIHBhdGVudCBjbGFpbXMgdGhyb3VnaCBWaWEgTGljZW5zaW5nIG9yIGRpcmVjdGx5IGZyb20gdGhlIHBhdGVudCBvd25lcnMsIGFuZCB0aGVyZWZvcmUgRkRLIEFBQyBDb2RlYwpzb2Z0d2FyZSBtYXkgYWxyZWFkeSBiZSBjb3ZlcmVkIHVuZGVyIHRob3NlIHBhdGVudCBsaWNlbnNlcyB3aGVuIGl0IGlzIHVzZWQgZm9yIHRob3NlIGxpY2Vuc2VkIHB1cnBvc2VzIG9ubHkuCgpDb21tZXJjaWFsbHktbGljZW5zZWQgQUFDIHNvZnR3YXJlIGxpYnJhcmllcywgaW5jbHVkaW5nIGZsb2F0aW5nLXBvaW50IHZlcnNpb25zIHdpdGggZW5oYW5jZWQgc291bmQgcXVhbGl0eSwKYXJlIGFsc28gYXZhaWxhYmxlIGZyb20gRnJhdW5ob2Zlci4gVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEZyYXVuaG9mZXIgd2Vic2l0ZSBmb3IgYWRkaXRpb25hbAphcHBsaWNhdGlvbnMgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24uCgoyLiAgICBDT1BZUklHSFQgTElDRU5TRQoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCB3aXRob3V0CnBheW1lbnQgb2YgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBwcm92aWRlZCB0aGF0IHlvdSBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCllvdSBtdXN0IHJldGFpbiB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGlzIHNvZnR3YXJlIGxpY2Vuc2UgaW4gcmVkaXN0cmlidXRpb25zIG9mIHRoZSBGREsgQUFDIENvZGVjIG9yCnlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvIGluIHNvdXJjZSBjb2RlIGZvcm0uCgpZb3UgbXVzdCByZXRhaW4gdGhlIGNvbXBsZXRlIHRleHQgb2YgdGhpcyBzb2Z0d2FyZSBsaWNlbnNlIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKcHJvdmlkZWQgd2l0aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIEZESyBBQUMgQ29kZWMgb3IgeW91ciBtb2RpZmljYXRpb25zIHRoZXJldG8gaW4gYmluYXJ5IGZvcm0uCllvdSBtdXN0IG1ha2UgYXZhaWxhYmxlIGZyZWUgb2YgY2hhcmdlIGNvcGllcyBvZiB0aGUgY29tcGxldGUgc291cmNlIGNvZGUgb2YgdGhlIEZESyBBQUMgQ29kZWMgYW5kIHlvdXIKbW9kaWZpY2F0aW9ucyB0aGVyZXRvIHRvIHJlY2lwaWVudHMgb2YgY29waWVzIGluIGJpbmFyeSBmb3JtLgoKVGhlIG5hbWUgb2YgRnJhdW5ob2ZlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIGxpYnJhcnkgd2l0aG91dApwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpZb3UgbWF5IG5vdCBjaGFyZ2UgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBmb3IgYW55b25lIHRvIHVzZSwgY29weSBvciBkaXN0cmlidXRlIHRoZSBGREsgQUFDIENvZGVjCnNvZnR3YXJlIG9yIHlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvLgoKWW91ciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYyBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgc29mdHdhcmUKYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIEZvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYywgdGhlIHRlcm0KIkZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkIiBtdXN0IGJlIHJlcGxhY2VkIGJ5IHRoZSB0ZXJtCiJUaGlyZC1QYXJ0eSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZC4iCgozLiAgICBOTyBQQVRFTlQgTElDRU5TRQoKTk8gRVhQUkVTUyBPUiBJTVBMSUVEIExJQ0VOU0VTIFRPIEFOWSBQQVRFTlQgQ0xBSU1TLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBwYXRlbnRzIG9mIEZyYXVuaG9mZXIsCkFSRSBHUkFOVEVEIEJZIFRISVMgU09GVFdBUkUgTElDRU5TRS4gRnJhdW5ob2ZlciBwcm92aWRlcyBubyB3YXJyYW50eSBvZiBwYXRlbnQgbm9uLWluZnJpbmdlbWVudCB3aXRoCnJlc3BlY3QgdG8gdGhpcyBzb2Z0d2FyZS4KCllvdSBtYXkgdXNlIHRoaXMgRkRLIEFBQyBDb2RlYyBzb2Z0d2FyZSBvciBtb2RpZmljYXRpb25zIHRoZXJldG8gb25seSBmb3IgcHVycG9zZXMgdGhhdCBhcmUgYXV0aG9yaXplZApieSBhcHByb3ByaWF0ZSBwYXRlbnQgbGljZW5zZXMuCgo0LiAgICBESVNDTEFJTUVSCgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYnkgRnJhdW5ob2ZlciBvbiBiZWhhbGYgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZCBjb250cmlidXRvcnMKIkFTIElTIiBhbmQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGltcGxpZWQgd2FycmFudGllcwpvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgpDT05UUklCVVRPUlMgQkUgTElBQkxFIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsCmluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcHJvY3VyZW1lbnQgb2Ygc3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlczsgbG9zcyBvZiB1c2UsIGRhdGEsIG9yIHByb2ZpdHMsCm9yIGJ1c2luZXNzIGludGVycnVwdGlvbiwgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgbGlhYmlsaXR5LCB3aGV0aGVyIGluIGNvbnRyYWN0LCBzdHJpY3QKbGlhYmlsaXR5LCBvciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGFyaXNpbmcgaW4gYW55IHdheSBvdXQgb2YgdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCBldmVuIGlmCmFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgoKNS4gICAgQ09OVEFDVCBJTkZPUk1BVElPTgoKRnJhdW5ob2ZlciBJbnN0aXR1dGUgZm9yIEludGVncmF0ZWQgQ2lyY3VpdHMgSUlTCkF0dGVudGlvbjogQXVkaW8gYW5kIE11bHRpbWVkaWEgRGVwYXJ0bWVudHMgLSBGREsgQUFDIExMCkFtIFdvbGZzbWFudGVsIDMzCjkxMDU4IEVybGFuZ2VuLCBHZXJtYW55Cgp3d3cuaWlzLmZyYXVuaG9mZXIuZGUvYW1tCmFtbS1pbmZvQGlpcy5mcmF1bmhvZmVyLmRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqICBGcmF1bmhvZmVyIElJUyBGREsgVG9vbHMgICoqKioqKioqKioqKioqKioqKioqKioKCiAgIEF1dGhvcihzKTogICBNLiBMb2h3YXNzZXIsIE0uIEdheWVyCiAgIERlc2NyaXB0aW9uOiBGbGV4aWJsZSBmaXhwb2ludCBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZm5kZWYgX0NPTU1PTl9GSVhfSAojZGVmaW5lIF9DT01NT05fRklYX0gKCiNpbmNsdWRlICJGREtfYXJjaGRlZi5oIgojaW5jbHVkZSAibWFjaGluZV90eXBlLmgiCgovKiAqKioqKiBTdGFydCBvZiBmb3JtZXIgZml4LmggKioqKioqICovCgovKiBDb25maWd1cmUgZnJhY3Rpb25hbCBvciBpbnRlZ2VyIGFyaXRobWV0aWMgKi8KICAjZGVmaW5lIEZJWF9GUkFDVCAwIC8qIERlZmluZSB0aGlzIHRvICIxIiB0byB1c2UgZnJhY3Rpb25hbCBhcml0aG1ldGljIHNpbXVsYXRpb24gaW4gY2xhc3MgZnJhY3QgaW5zdGVhZCBvZiBpbnRlZ2VyIGFyaXRobWV0aWMgKi8KICAgICAgICAgICAgICAgICAgICAgIC8qIDEgZm9yIGRlYnVnIHdpdGggZXh0cmEgcnVudGltZSBvdmVyZmxvdyBjaGVja2luZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKLyogRGVmaW5lIGJpdCBzaXplcyBvZiBpbnRlZ2VyIGZpeHBvaW50IGZyYWN0aW9uYWwgZGF0YSB0eXBlcyAqLwojZGVmaW5lIEZSQUNUX0JJVFMgICAgICAxNiAvKiBzaW5nbGUgcHJlY2lzaW9uICovCiNkZWZpbmUgREZSQUNUX0JJVFMgICAgIDMyIC8qIGRvdWJsZSBwcmVjaXNpb24gKi8KI2RlZmluZSBBQ0NVX0JJVFMgICAgICAgNDAgLyogZG91YmxlIHByZWNpc2lvbiBwbHVzIG92ZXJmbG93ICovCgovKiBGaXhwb2ludCBlcXVpdmFsZW50IHR5cGUgZm90IFBDTSBhdWRpbyB0aW1lIGRvbWFpbiBkYXRhLiAqLwojaWYgZGVmaW5lZChTQU1QTEVfQklUUykKI2lmIChTQU1QTEVfQklUUyA9PSBERlJBQ1RfQklUUykKICAjZGVmaW5lIEZJWFBfUENNICAgICAgRklYUF9EQkwKICAjZGVmaW5lIEZYX1BDTTJGWF9EQkwoeCkgKChGSVhQX0RCTCkoeCkpCiAgI2RlZmluZSBGWF9EQkwyRlhfUENNKHgpICgoSU5UX1BDTSkoeCkpCiNlbGlmIChTQU1QTEVfQklUUyA9PSBGUkFDVF9CSVRTKQogICNkZWZpbmUgRklYUF9QQ00gICAgICBGSVhQX1NHTAogICNkZWZpbmUgRlhfUENNMkZYX0RCTCh4KSBGWF9TR0wyRlhfREJMKChGSVhQX1NHTCkoeCkpCiAgI2RlZmluZSBGWF9EQkwyRlhfUENNKHgpIEZYX0RCTDJGWF9TR0woeCkKI2Vsc2UKICAjZXJyb3IgU0FNUExFX0JJVFMgZGlmZmVyZW50IGZyb20gRlJBQ1RfQklUUyBvciBERlJBQ1RfQklUUyBub3QgaW1wbGVtZW50ZWQhCiNlbmRpZgojZW5kaWYKCi8qICoqKioqKiBFbmQgb2YgZm9ybWVyIGZpeC5oICoqKioqKiAqLwoKI2RlZmluZSBTR0xfTUFTSyAgICAgICAgICAgICgoMVVMPDxGUkFDVF9CSVRTKS0xKSAgIC8qIDE2Yml0OiAoMl4xNiktMSA9IDB4RkZGRiAqLwoKI2RlZmluZSBNQVhfU0hJRlRfU0dMIChGUkFDVF9CSVRTLTEpICAgLyogbWF4aW11bSBwb3NzaWJsZSBzaGlmdCBmb3IgRklYUF9TR0wgdmFsdWVzICovCiNkZWZpbmUgTUFYX1NISUZUX0RCTCAoREZSQUNUX0JJVFMtMSkgIC8qIG1heGltdW0gcG9zc2libGUgc2hpZnQgZm9yIEZJWFBfREJMIHZhbHVlcyAqLwoKLyogU2NhbGUgZmFjdG9yIGZyb20vdG8gZmxvYXQvZml4cG9pbnQgdmFsdWVzLiBETyBOT1QgVVNFIFRIRVNFIFZBTFVFUyBBUyBTQVRVUkFUSU9OIExJTUlUUyAhISAqLwojZGVmaW5lIEZSQUNUX0ZJWF9TQ0FMRSAgICAgKChJTlQ2NCgxKTw8KEZSQUNUX0JJVFMtMSkpKQojZGVmaW5lIERGUkFDVF9GSVhfU0NBTEUgICAgKChJTlQ2NCgxKTw8KERGUkFDVF9CSVRTLTEpKSkKCi8qIE1heCBhbmQgTWluIHZhbHVlcyBmb3Igc2F0dXJhdGlvbiBwdXJwb3Nlcy4gRE8gTk9UIFVTRSBUSEVTRSBWQUxVRVMgQVMgU0NBTEUgVkFMVUVTICEhICovCiNkZWZpbmUgIE1BWFZBTF9TR0wgICAgICgoc2lnbmVkKTB4MDAwMDdGRkYpICAgIC8qIHRoaXMgaGFzIHRvIGJlIHN5bmNocm9uaXplZCB0byBGUkFDVF9CSVRTICovCiNkZWZpbmUgIE1JTlZBTF9TR0wgICAgICgoc2lnbmVkKTB4RkZGRjgwMDApICAgIC8qIHRoaXMgaGFzIHRvIGJlIHN5bmNocm9uaXplZCB0byBGUkFDVF9CSVRTICovCiNkZWZpbmUgIE1BWFZBTF9EQkwgICAgICgoc2lnbmVkKTB4N0ZGRkZGRkYpICAgIC8qIHRoaXMgaGFzIHRvIGJlIHN5bmNocm9uaXplZCB0byBERlJBQ1RfQklUUyAqLwojZGVmaW5lICBNSU5WQUxfREJMICAgICAoKHNpZ25lZCkweDgwMDAwMDAwKSAgICAvKiB0aGlzIGhhcyB0byBiZSBzeW5jaHJvbml6ZWQgdG8gREZSQUNUX0JJVFMgKi8KCgojZGVmaW5lIEZYX0RCTDJGWENPTlNUX1NHTCh2YWwpICggKCAoKCgodmFsKSA+PiAoREZSQUNUX0JJVFMtRlJBQ1RfQklUUy0xKSkgKyAxKSA+ICgoKExPTkcpMTw8RlJBQ1RfQklUUyktMSkpICYmICgoTE9ORykodmFsKSA+IDApICkgPyBcCiAgIChGSVhQX1NHTCkoU0hPUlQpKCgoTE9ORykxPDwoRlJBQ1RfQklUUy0xKSktMSk6KEZJWFBfU0dMKShTSE9SVCkoKCgodmFsKSA+PiAoREZSQUNUX0JJVFMtRlJBQ1RfQklUUy0xKSkgKyAxKSA+PiAxKSApCgoKCiNkZWZpbmUgc2hvdWxkQmVVbmlvbiB1bmlvbiAgICAgLyogdW5pb25zIGFyZSBwb3NzaWJsZSAqLwoKICAgIHR5cGVkZWYgU0hPUlQgICAgICAgRklYUF9TR0w7CiAgICB0eXBlZGVmIExPTkcgICAgICAgIEZJWFBfREJMOwoKLyogbWFjcm9zIGZvciBjb21waWxlLXRpbWUgY29udmVyc2lvbiBvZiBjb25zdGFudCBmbG9hdCB2YWx1ZXMgdG8gZml4ZWRwb2ludCAqLwojZGVmaW5lIEZMMkZYQ09OU1RfU1BDIEZMMkZYQ09OU1RfREJMCgojZGVmaW5lIE1JTlZBTF9EQkxfQ09OU1QgTUlOVkFMX0RCTAojZGVmaW5lIE1JTlZBTF9TR0xfQ09OU1QgTUlOVkFMX1NHTAoKI2RlZmluZSBGTDJGWENPTlNUX1NHTCh2YWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCihGSVhQX1NHTCkoICggKHZhbCkgPj0gMCkgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKCgoIChkb3VibGUpKHZhbCkgKiAoRlJBQ1RfRklYX1NDQUxFKSArIDAuNSApID49IChkb3VibGUpKE1BWFZBTF9TR0wpICkgPyAoU0hPUlQpKE1BWFZBTF9TR0wpIDogKFNIT1JUKSggKGRvdWJsZSkodmFsKSAqIChkb3VibGUpKEZSQUNUX0ZJWF9TQ0FMRSkgKyAwLjUpKSA6ICAgXAooKCggKGRvdWJsZSkodmFsKSAqIChGUkFDVF9GSVhfU0NBTEUpIC0gMC41KSA8PSAgKGRvdWJsZSkoTUlOVkFMX1NHTF9DT05TVCkgKSA/IChTSE9SVCkoTUlOVkFMX1NHTF9DT05TVCkgOiAoU0hPUlQpKCAoZG91YmxlKSh2YWwpICogKGRvdWJsZSkoRlJBQ1RfRklYX1NDQUxFKSAtIDAuNSkpICkKCiNkZWZpbmUgRkwyRlhDT05TVF9EQkwodmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAooRklYUF9EQkwpKCAoICh2YWwpID49IDApID8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCigoKCAoZG91YmxlKSh2YWwpICogKERGUkFDVF9GSVhfU0NBTEUpICsgMC41ICkgPj0gKGRvdWJsZSkoTUFYVkFMX0RCTCkgKSA/IChMT05HKShNQVhWQUxfREJMKSA6IChMT05HKSggKGRvdWJsZSkodmFsKSAqIChkb3VibGUpKERGUkFDVF9GSVhfU0NBTEUpICsgMC41KSkgOiBcCigoKCAoZG91YmxlKSh2YWwpICogKERGUkFDVF9GSVhfU0NBTEUpIC0gMC41KSA8PSAgKGRvdWJsZSkoTUlOVkFMX0RCTF9DT05TVCkgKSA/IChMT05HKShNSU5WQUxfREJMX0NPTlNUKSA6IChMT05HKSggKGRvdWJsZSkodmFsKSAqIChkb3VibGUpKERGUkFDVF9GSVhfU0NBTEUpIC0gMC41KSkgKQoKLyogbWFjcm9zIGZvciBydW50aW1lIGNvbnZlcnNpb24gb2YgZmxvYXQgdmFsdWVzIHRvIGludGVnZXIgZml4ZWRwb2ludC4gTk8gT1ZFUkZMT1cgQ0hFQ0shISEgKi8KI2RlZmluZSBGTDJGWF9TUEMgRkwyRlhfREJMCiNkZWZpbmUgRkwyRlhfU0dMKHZhbCkgKCAodmFsKT4wLjBmID8gKFNIT1JUKSggKHZhbCkqKGZsb2F0KShGUkFDVF9GSVhfU0NBTEUpKzAuNWYgKSA6IChTSE9SVCkoICh2YWwpKihmbG9hdCkoRlJBQ1RfRklYX1NDQUxFKS0wLjVmICkgKQojZGVmaW5lIEZMMkZYX0RCTCh2YWwpICggKHZhbCk+MC4wZiA/IChMT05HKSggKHZhbCkqKGZsb2F0KShERlJBQ1RfRklYX1NDQUxFKSswLjVmICkgOiAoTE9ORykoICh2YWwpKihmbG9hdCkoREZSQUNUX0ZJWF9TQ0FMRSktMC41ZiApICkKCi8qIG1hY3JvcyBmb3IgcnVudGltZSBjb252ZXJzaW9uIG9mIGZpeGVkcG9pbnQgdmFsdWVzIHRvIG90aGVyIGZpeGVkcG9pbnQuIE5PIFJPVU5ESU5HISEhICovCiNkZWZpbmUgRlhfQUNDMkZYX1NHTCh2YWwpICgoRklYUF9TR0wpKCh2YWwpPj4oQUNDVV9CSVRTLUZSQUNUX0JJVFMpKSkKI2RlZmluZSBGWF9BQ0MyRlhfREJMKHZhbCkgKChGSVhQX0RCTCkoKHZhbCk+PihBQ0NVX0JJVFMtREZSQUNUX0JJVFMpKSkKI2RlZmluZSBGWF9TR0wyRlhfQUNDKHZhbCkgKChGSVhQX0FDQykoKExPTkcpKHZhbCk8PChBQ0NVX0JJVFMtRlJBQ1RfQklUUykpKQojZGVmaW5lIEZYX1NHTDJGWF9EQkwodmFsKSAoKEZJWFBfREJMKSgoTE9ORykodmFsKTw8KERGUkFDVF9CSVRTLUZSQUNUX0JJVFMpKSkKI2RlZmluZSBGWF9EQkwyRlhfU0dMKHZhbCkgKChGSVhQX1NHTCkoKHZhbCk+PihERlJBQ1RfQklUUy1GUkFDVF9CSVRTKSkpCgovKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCgovKiBtYWNyb3MgZm9yIHJ1bnRpbWUgY29udmVyc2lvbiBvZiBpbnRlZ2VyIGZpeGVkcG9pbnQgdmFsdWVzIHRvIGZsb2F0LiAqLwovKiBUaGlzIGlzIGp1c3QgZm9yIHRlbXBvcmFyeSB1c2UgYW5kIHNob3VsZCBub3QgYmUgcmVxdWlyZWQgaW4gYSBmaW5hbCB2ZXJzaW9uISAqLwoKLyogI2RlZmluZSBGWF9EQkwyRkwodmFsKSAgKChmbG9hdCkocG93KDIuLC0zMS4pKihmbG9hdCl2YWwpKSAqLyAgLyogdmVyc2lvbiAjMSAqLwojZGVmaW5lIEZYX0RCTDJGTCh2YWwpICAoKGZsb2F0KSgoZG91YmxlKSh2YWwpLyhkb3VibGUpREZSQUNUX0ZJWF9TQ0FMRSkpICAgLyogdmVyc2lvbiAjMiAtIGlkZW50aWNhbCB0byBjbGFzcyBkZnJhY3QgY2FzdCBmcm9tIGRmcmFjdCB0byBmbG9hdCAqLwoKLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLwojaW5jbHVkZSAiZml4bXVsLmgiCgpGREtfSU5MSU5FIExPTkcgZk11bHQoU0hPUlQgYSwgU0hPUlQgYikgICAgICAgICB7IHJldHVybiBmaXhtdWxfU1MoYSwgYik7IH0KRkRLX0lOTElORSBMT05HIGZNdWx0KFNIT1JUIGEsIExPTkcgYikgICAgICAgICAgeyByZXR1cm4gZml4bXVsX1NEKGEsIGIpOyB9CkZES19JTkxJTkUgTE9ORyBmTXVsdChMT05HIGEsIFNIT1JUIGIpICAgICAgICAgIHsgcmV0dXJuIGZpeG11bF9EUyhhLCBiKTsgfQpGREtfSU5MSU5FIExPTkcgZk11bHQoTE9ORyBhLCBMT05HIGIpICAgICAgICAgICB7IHJldHVybiBmaXhtdWxfREQoYSwgYik7IH0KRkRLX0lOTElORSBMT05HIGZQb3cyKExPTkcgYSkgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gZml4cG93Ml9EKGEpOyAgICB9CkZES19JTkxJTkUgTE9ORyBmUG93MihTSE9SVCBhKSAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpeHBvdzJfUyhhKTsgICAgfQoKRkRLX0lOTElORSBJTlQgIGZNdWx0SShMT05HIGEsIFNIT1JUIGIpICAgICAgICAgeyByZXR1cm4gKCAoSU5UKSgoKDE8PChGUkFDVF9CSVRTLTIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhtdWxkaXYyX0REKGEsKChJTlQpYjw8RlJBQ1RfQklUUykpKT4+KEZSQUNUX0JJVFMtMSkpICk7IH0KCkZES19JTkxJTkUgSU5UICBmTXVsdElmbG9vcihMT05HIGEsIElOVCBiKSAgICAgIHsgcmV0dXJuICggKElOVCkoKDEgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4bXVsZGl2Ml9ERChhLChiPDxGUkFDVF9CSVRTKSkpID4+IChGUkFDVF9CSVRTLTEpKSApOyB9CgpGREtfSU5MSU5FIElOVCAgZk11bHRJY2VpbChMT05HIGEsIElOVCBiKSAgICAgICB7IHJldHVybiAoIChJTlQpKCgoSU5UKTB4N2ZmZiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhtdWxkaXYyX0REKGEsKGI8PEZSQUNUX0JJVFMpKSkgPj4gKEZSQUNUX0JJVFMtMSkpICk7IH0KCkZES19JTkxJTkUgTE9ORyBmTXVsdERpdjIoU0hPUlQgYSwgU0hPUlQgYikgICAgIHsgcmV0dXJuIGZpeG11bGRpdjJfU1MoYSwgYik7IH0KRkRLX0lOTElORSBMT05HIGZNdWx0RGl2MihTSE9SVCBhLCBMT05HIGIpICAgICAgeyByZXR1cm4gZml4bXVsZGl2Ml9TRChhLCBiKTsgfQpGREtfSU5MSU5FIExPTkcgZk11bHREaXYyKExPTkcgYSwgU0hPUlQgYikgICAgICB7IHJldHVybiBmaXhtdWxkaXYyX0RTKGEsIGIpOyB9CkZES19JTkxJTkUgTE9ORyBmTXVsdERpdjIoTE9ORyBhLCBMT05HIGIpICAgICAgIHsgcmV0dXJuIGZpeG11bGRpdjJfREQoYSwgYik7IH0KRkRLX0lOTElORSBMT05HIGZQb3cyRGl2MihMT05HIGEpICAgICAgICAgICAgICAgeyByZXR1cm4gZml4cG93MmRpdjJfRChhKTsgICAgfQpGREtfSU5MSU5FIExPTkcgZlBvdzJEaXYyKFNIT1JUIGEpICAgICAgICAgICAgICB7IHJldHVybiBmaXhwb3cyZGl2Ml9TKGEpOyAgICB9CgpGREtfSU5MSU5FIExPTkcgZk11bHREaXYyQml0RXhhY3QoTE9ORyBhLCBMT05HIGIpICAgeyByZXR1cm4gZml4bXVsZGl2MkJpdEV4YWN0X0REKGEsIGIpOyB9CkZES19JTkxJTkUgTE9ORyBmTXVsdERpdjJCaXRFeGFjdChTSE9SVCBhLCBMT05HICBiKSB7IHJldHVybiBmaXhtdWxkaXYyQml0RXhhY3RfU0QoYSwgYik7IH0KRkRLX0lOTElORSBMT05HIGZNdWx0RGl2MkJpdEV4YWN0KExPTkcgIGEsIFNIT1JUIGIpIHsgcmV0dXJuIGZpeG11bGRpdjJCaXRFeGFjdF9EUyhhLCBiKTsgfQpGREtfSU5MSU5FIExPTkcgZk11bHRCaXRFeGFjdChMT05HIGEsIExPTkcgYikgICAgICAgeyByZXR1cm4gZml4bXVsQml0RXhhY3RfREQoYSwgYik7IH0KRkRLX0lOTElORSBMT05HIGZNdWx0Qml0RXhhY3QoU0hPUlQgYSwgTE9ORyAgYikgICAgIHsgcmV0dXJuIGZpeG11bEJpdEV4YWN0X1NEKGEsIGIpOyB9CkZES19JTkxJTkUgTE9ORyBmTXVsdEJpdEV4YWN0KExPTkcgIGEsIFNIT1JUIGIpICAgICB7IHJldHVybiBmaXhtdWxCaXRFeGFjdF9EUyhhLCBiKTsgfQoKLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KI2luY2x1ZGUgImFicy5oIgoKRkRLX0lOTElORSBGSVhQX0RCTCBmQWJzKEZJWFBfREJMIHgpCiAgICAgICAgICAgICAgICB7IHJldHVybiBmaXhhYnNfRCh4KTsgfQpGREtfSU5MSU5FIEZJWFBfU0dMIGZBYnMoRklYUF9TR0wgeCkKICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpeGFic19TKHgpOyB9CgovKiB3b3JrYXJvdW5kIGZvciBUSSBDNnggY29tcGlsZXIgYnV0IG5vdCBmb3IgVEkgQVJNOUUgY29tcGlsZXIgKi8KI2lmICghZGVmaW5lZChfX1RJX0NPTVBJTEVSX1ZFUlNJT05fXykgfHwgZGVmaW5lZChfX1RJX1RNUzQ3MF9WNV9fKSkgJiYgIWRlZmluZWQoX194ODZfNjRfXykKRkRLX0lOTElORSBJTlQgIGZBYnMoSU5UIHgpCiAgICAgICAgICAgICAgICB7IHJldHVybiBmaXhhYnNfSSh4KTsgfQojZW5kaWYKCi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCgojaW5jbHVkZSAiY2x6LmgiCgpGREtfSU5MSU5FIElOVCBmTm9ybXooRklYUF9EQkwgeCkKICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bm9ybXpfRCh4KTsgfQpGREtfSU5MSU5FIElOVCBmTm9ybXooRklYUF9TR0wgeCkKICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bm9ybXpfUyh4KTsgfQpGREtfSU5MSU5FIElOVCBmTm9ybShGSVhQX0RCTCB4KQogICAgICAgICAgICAgICB7IHJldHVybiBmaXhub3JtX0QoeCk7IH0KRkRLX0lOTElORSBJTlQgZk5vcm0oRklYUF9TR0wgeCkKICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bm9ybV9TKHgpOyB9CgoKLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KCiNpbmNsdWRlICJjbHouaCIKI2RlZmluZSBmaXhwX2Ficyh4KSBmQWJzKHgpCiNkZWZpbmUgZml4TWluKGEsYikgZk1pbihhLGIpCiNkZWZpbmUgZml4TWF4KGEsYikgZk1heChhLGIpCiNkZWZpbmUgQ250TGVhZGluZ1plcm9zKHgpICBmaXhub3Jtel9EKHgpCiNkZWZpbmUgQ291bnRMZWFkaW5nQml0cyh4KSBmaXhub3JtX0QoeCkKCiNpbmNsdWRlICJmaXhtYWRkLmgiCgovKiB5ID0gKHgrMC41KmEqYikgKi8KRkRLX0lOTElORSBGSVhQX0RCTCBmTXVsdEFkZERpdjIoRklYUF9EQkwgeCwgRklYUF9EQkwgYSwgRklYUF9EQkwgYikKICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpeG1hZGRkaXYyX0REKHgsIGEsIGIpOyB9CkZES19JTkxJTkUgRklYUF9EQkwgZk11bHRBZGREaXYyKEZJWFBfREJMIHgsIEZJWFBfU0dMIGEsIEZJWFBfREJMIGIpCiAgICAgICAgICAgICAgICB7IHJldHVybiBmaXhtYWRkZGl2Ml9TRCh4LCBhLCBiKTsgfQpGREtfSU5MSU5FIEZJWFBfREJMIGZNdWx0QWRkRGl2MihGSVhQX0RCTCB4LCBGSVhQX0RCTCBhLCBGSVhQX1NHTCBiKQogICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bWFkZGRpdjJfRFMoeCwgYSwgYik7IH0KRkRLX0lOTElORSBGSVhQX0RCTCBmTXVsdEFkZERpdjIoRklYUF9EQkwgeCwgRklYUF9TR0wgYSwgRklYUF9TR0wgYikKICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpeG1hZGRkaXYyX1NTKHgsIGEsIGIpOyB9CgpGREtfSU5MSU5FIEZJWFBfREJMIGZQb3cyQWRkRGl2MihGSVhQX0RCTCB4LCBGSVhQX0RCTCBhKQogICAgICAgICAgICAgICAgeyByZXR1cm4gZml4cGFkZGRpdjJfRCh4LCBhKTsgfQpGREtfSU5MSU5FIEZJWFBfREJMIGZQb3cyQWRkRGl2MihGSVhQX0RCTCB4LCBGSVhQX1NHTCBhKQogICAgICAgICAgICAgICAgeyByZXR1cm4gZml4cGFkZGRpdjJfUyh4LCBhKTsgfQoKCi8qIHkgPSAyKih4KzAuNSphKmIpID0gKDJ4K2EqYikgKi8KRkRLX0lOTElORSBGSVhQX0RCTCBmTXVsdEFkZChGSVhQX0RCTCB4LCBGSVhQX0RCTCBhLCBGSVhQX0RCTCBiKQogICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bWFkZF9ERCh4LCBhLCBiKTsgfQppbmxpbmUgRklYUF9EQkwgZk11bHRBZGQoRklYUF9EQkwgeCwgRklYUF9TR0wgYSwgRklYUF9EQkwgYikKICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpeG1hZGRfU0QoeCwgYSwgYik7IH0KaW5saW5lIEZJWFBfREJMIGZNdWx0QWRkKEZJWFBfREJMIHgsIEZJWFBfREJMIGEsIEZJWFBfU0dMIGIpCiAgICAgICAgICAgICAgICB7IHJldHVybiBmaXhtYWRkX0RTKHgsIGEsIGIpOyB9CmlubGluZSBGSVhQX0RCTCBmTXVsdEFkZChGSVhQX0RCTCB4LCBGSVhQX1NHTCBhLCBGSVhQX1NHTCBiKQogICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bWFkZF9TUyh4LCBhLCBiKTsgfQoKaW5saW5lIEZJWFBfREJMIGZQb3cyQWRkKEZJWFBfREJMIHgsIEZJWFBfREJMIGEpCiAgICAgICAgICAgICAgICB7IHJldHVybiBmaXhwYWRkX0QoeCwgYSk7IH0KaW5saW5lIEZJWFBfREJMIGZQb3cyQWRkKEZJWFBfREJMIHgsIEZJWFBfU0dMIGEpCiAgICAgICAgICAgICAgICB7IHJldHVybiBmaXhwYWRkX1MoeCwgYSk7IH0KCgovKiB5ID0gKHgtMC41KmEqYikgKi8KaW5saW5lIEZJWFBfREJMIGZNdWx0U3ViRGl2MihGSVhQX0RCTCB4LCBGSVhQX0RCTCBhLCBGSVhQX0RCTCBiKQogICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bXN1YmRpdjJfREQoeCwgYSwgYik7IH0KaW5saW5lIEZJWFBfREJMIGZNdWx0U3ViRGl2MihGSVhQX0RCTCB4LCBGSVhQX1NHTCBhLCBGSVhQX0RCTCBiKQogICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bXN1YmRpdjJfU0QoeCwgYSwgYik7IH0KaW5saW5lIEZJWFBfREJMIGZNdWx0U3ViRGl2MihGSVhQX0RCTCB4LCBGSVhQX0RCTCBhLCBGSVhQX1NHTCBiKQogICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bXN1YmRpdjJfRFMoeCwgYSwgYik7IH0KaW5saW5lIEZJWFBfREJMIGZNdWx0U3ViRGl2MihGSVhQX0RCTCB4LCBGSVhQX1NHTCBhLCBGSVhQX1NHTCBiKQogICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bXN1YmRpdjJfU1MoeCwgYSwgYik7IH0KCi8qIHkgPSAyKih4LTAuNSphKmIpID0gKDIqeC1hKmIpICovCkZES19JTkxJTkUgRklYUF9EQkwgZk11bHRTdWIoRklYUF9EQkwgeCwgRklYUF9EQkwgYSwgRklYUF9EQkwgYikKICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpeG1zdWJfREQoeCwgYSwgYik7IH0KaW5saW5lIEZJWFBfREJMIGZNdWx0U3ViKEZJWFBfREJMIHgsIEZJWFBfU0dMIGEsIEZJWFBfREJMIGIpCiAgICAgICAgICAgICAgICB7IHJldHVybiBmaXhtc3ViX1NEKHgsIGEsIGIpOyB9CmlubGluZSBGSVhQX0RCTCBmTXVsdFN1YihGSVhQX0RCTCB4LCBGSVhQX0RCTCBhLCBGSVhQX1NHTCBiKQogICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bXN1Yl9EUyh4LCBhLCBiKTsgfQppbmxpbmUgRklYUF9EQkwgZk11bHRTdWIoRklYUF9EQkwgeCwgRklYUF9TR0wgYSwgRklYUF9TR0wgYikKICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpeG1zdWJfU1MoeCwgYSwgYik7IH0KCkZES19JTkxJTkUgRklYUF9EQkwgZk11bHRBZGREaXYyQml0RXhhY3QoRklYUF9EQkwgeCwgRklYUF9EQkwgYSwgRklYUF9EQkwgYikKICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpeG1hZGRkaXYyQml0RXhhY3RfREQoeCwgYSwgYik7IH0KRkRLX0lOTElORSBGSVhQX0RCTCBmTXVsdEFkZERpdjJCaXRFeGFjdChGSVhQX0RCTCB4LCBGSVhQX1NHTCBhLCBGSVhQX0RCTCBiKQogICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bWFkZGRpdjJCaXRFeGFjdF9TRCh4LCBhLCBiKTsgfQpGREtfSU5MSU5FIEZJWFBfREJMIGZNdWx0QWRkRGl2MkJpdEV4YWN0KEZJWFBfREJMIHgsIEZJWFBfREJMIGEsIEZJWFBfU0dMIGIpCiAgICAgICAgICAgICAgICB7IHJldHVybiBmaXhtYWRkZGl2MkJpdEV4YWN0X0RTKHgsIGEsIGIpOyB9CkZES19JTkxJTkUgRklYUF9EQkwgZk11bHRTdWJEaXYyQml0RXhhY3QoRklYUF9EQkwgeCwgRklYUF9EQkwgYSwgRklYUF9EQkwgYikKICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpeG1zdWJkaXYyQml0RXhhY3RfREQoeCwgYSwgYik7IH0KRkRLX0lOTElORSBGSVhQX0RCTCBmTXVsdFN1YkRpdjJCaXRFeGFjdChGSVhQX0RCTCB4LCBGSVhQX1NHTCBhLCBGSVhQX0RCTCBiKQogICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bXN1YmRpdjJCaXRFeGFjdF9TRCh4LCBhLCBiKTsgfQpGREtfSU5MSU5FIEZJWFBfREJMIGZNdWx0U3ViRGl2MkJpdEV4YWN0KEZJWFBfREJMIHgsIEZJWFBfREJMIGEsIEZJWFBfU0dMIGIpCiAgICAgICAgICAgICAgICB7IHJldHVybiBmaXhtc3ViZGl2MkJpdEV4YWN0X0RTKHgsIGEsIGIpOyB9CgojaW5jbHVkZSAiZml4bWlubWF4LmgiCgpGREtfSU5MSU5FIEZJWFBfREJMIGZNaW4oRklYUF9EQkwgYSwgRklYUF9EQkwgYikKICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpeG1pbl9EKGEsYik7IH0KRkRLX0lOTElORSBGSVhQX0RCTCBmTWF4KEZJWFBfREJMIGEsIEZJWFBfREJMIGIpCiAgICAgICAgICAgICAgICB7IHJldHVybiBmaXhtYXhfRChhLGIpOyB9CgpGREtfSU5MSU5FIEZJWFBfU0dMIGZNaW4oRklYUF9TR0wgYSwgRklYUF9TR0wgYikKICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpeG1pbl9TKGEsYik7IH0KRkRLX0lOTElORSBGSVhQX1NHTCBmTWF4KEZJWFBfU0dMIGEsIEZJWFBfU0dMIGIpCiAgICAgICAgICAgICAgICB7IHJldHVybiBmaXhtYXhfUyhhLGIpOyB9CgovKiB3b3JrYXJvdW5kIGZvciBUSSBDNnggY29tcGlsZXIgYnV0IG5vdCBmb3IgVEkgQVJNOUUgKi8KI2lmICgoIWRlZmluZWQoX19USV9DT01QSUxFUl9WRVJTSU9OX18pIHx8IGRlZmluZWQoX19USV9UTVM0NzBfVjVfXykpICYmICFkZWZpbmVkKF9feDg2XzY0X18pKSB8fCAoRklYX0ZSQUNUID09IDEpCkZES19JTkxJTkUgSU5UIGZNYXgoSU5UIGEsIElOVCBiKQogICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bWF4X0koYSxiKTsgfQpGREtfSU5MSU5FIElOVCBmTWluKElOVCBhLCBJTlQgYikKICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpeG1pbl9JKGEsYik7IH0KI2VuZGlmCgppbmxpbmUgVUlOVCBmTWF4KFVJTlQgYSwgVUlOVCBiKQogICAgICAgICAgICAgICAgeyByZXR1cm4gZml4bWF4X1VJKGEsYik7IH0KaW5saW5lIFVJTlQgZk1pbihVSU5UIGEsIFVJTlQgYikKICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpeG1pbl9VSShhLGIpOyB9CgovKiBDb21wbGV4IGRhdGEgdHlwZXMgKi8KdHlwZWRlZiBzaG91bGRCZVVuaW9uIHsKICAvKiB2ZWN0b3IgcmVwcmVzZW50YXRpb24gZm9yIGFyaXRobWV0aWMgKi8KICBzdHJ1Y3QgewogICAgRklYUF9TR0wgcmU7CiAgICBGSVhQX1NHTCBpbTsKICB9IHY7CiAgLyogd29yZCByZXByZXNlbnRhdGlvbiBmb3IgbWVtb3J5IG1vdmUgKi8KICBMT05HIHc7Cn0gRklYUF9TUEs7Cgp0eXBlZGVmIHNob3VsZEJlVW5pb24gewogIC8qIHZlY3RvciByZXByZXNlbnRhdGlvbiBmb3IgYXJpdGhtZXRpYyAqLwogIHN0cnVjdCB7CiAgICBGSVhQX0RCTCByZTsKICAgIEZJWFBfREJMIGltOwogIH0gdjsKICAvKiB3b3JkIHJlcHJlc2VudGF0aW9uIGZvciBtZW1vcnkgbW92ZSAqLwogIElOVDY0IHc7Cn0gRklYUF9EUEs7CgojaW5jbHVkZSAiZml4bXVsLmgiCiNpbmNsdWRlICJmaXhtYWRkLmgiCiNpbmNsdWRlICJjcGx4X211bC5oIgojaW5jbHVkZSAic2NhbGUuaCIKI2luY2x1ZGUgImZpeHBvaW50X21hdGguaCIKCiNlbmRpZgo=