LyoKICogQ29weXJpZ2h0IChjKSAxOTk5IEt1bmdsaWdhIFRla25pc2thIEj2Z3Nrb2xhbgogKiAoUm95YWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIFN0b2NraG9sbSwgU3dlZGVuKS4KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBLVEggbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQogKiAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CiAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBLVEggQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCiAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEtUSCBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFCiAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCiAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAogKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCiAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqLwoKLyogJEhlaW1kYWw6IGhhc2guaCx2IDEuMSAxOTk5LzAzLzIyIDE5OjE2OjI1IGpvZGEgRXhwICQKICAgJE5ldEJTRDogaGFzaC5oLHYgMS4xLjEuMyAyMDAyLzA5LzEyIDEyOjQxOjQyIGpvZGEgRXhwICQgKi8KCi8qIHN0dWZmIGluIGNvbW1vbiBiZXR3ZWVuIG1kNCwgbWQ1LCBhbmQgc2hhMSAqLwoKI2lmbmRlZiBfX2hhc2hfaF9fCiNkZWZpbmUgX19oYXNoX2hfXwoKI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgojaWZuZGVmIG1pbgojZGVmaW5lIG1pbihhLCBiKSAoKChhKSA+IChiKSkgPyAoYikgOiAoYSkpCiNlbmRpZgoKLyogVmVjdG9yIENyYXlzIGRvZXNuJ3QgaGF2ZSBhIGdvb2QgMzItYml0IHR5cGUsIG9yIG1vcmUgcHJlY2lzZWx5LAogICBpbnQzMl90IGFzIGRlZmluZWQgYnkgPGJpbmQvYml0eXBlcy5oPiBpc24ndCAzMiBiaXRzLCBhbmQgd2UgZG9uJ3QKICAgd2FudCB0byBkZXBlbmQgaW4gYmVpbmcgYWJsZSB0byByZWRlZmluZSB0aGlzIHR5cGUuICBUbyBjb3BlIHdpdGgKICAgdGhpcyB3ZSBoYXZlIHRvIGNsYW1wIHRoZSByZXN1bHQgaW4gc29tZSBwbGFjZXMgdG8gWzAsMl4zMik7IG5vCiAgIG5lZWQgdG8gZG8gdGhpcyBvbiBvdGhlciBtYWNoaW5lcy4gIERpZCBJIHNheSB0aGlzIHdhcyBhIG1lc3M/CiAgICovCgojaWZkZWYgX0NSQVkKI2RlZmluZSBDUkFZRklYKFgpICgoWCkmMHhmZmZmZmZmZikKI2Vsc2UKI2RlZmluZSBDUkFZRklYKFgpIChYKQojZW5kaWYKCnN0YXRpYyBpbmxpbmUgdV9pbnQzMl90IGNzaGlmdCh1X2ludDMyX3QgeCwgdW5zaWduZWQgaW50IG4pIHsKICAgIHggPSBDUkFZRklYKHgpOwogICAgcmV0dXJuIENSQVlGSVgoKHggPDwgbikgfCAoeCA+PiAoMzIgLSBuKSkpOwp9CgojZW5kaWYgLyogX19oYXNoX2hfXyAqLwo=