LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQWdlcmUgU3lzdGVtcyBJbmMuCiAqIFdpcmVsZXNzIGRldmljZSBkcml2ZXIgZm9yIExpbnV4ICh3bGFnczQ5KS4KICoKICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgQWdlcmUgU3lzdGVtcyBJbmMuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KICoKICogSW5pdGlhbGx5IGRldmVsb3BlZCBieSBUcmlwbGVQb2ludCwgSW5jLgogKiAgIGh0dHA6Ly93d3cudHJpcGxlcG9pbnQuY29tCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqCiAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGFuZCBtYWNyb3MgZm9yIGRlYnVnZ2luZy4KICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICoKICogU09GVFdBUkUgTElDRU5TRQogKgogKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwogKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCiAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KICoKICogQ29weXJpZ2h0IChjKSAyMDAzIEFnZXJlIFN5c3RlbXMgSW5jLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAqCiAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCiAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCiAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogKiAgICBkaXN0cmlidXRpb24uCiAqCiAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAogKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCiAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKgogKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycwogKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIERpc2NsYWltZXIKICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCiAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQogKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgogKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAogKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAogKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAogKiBEQU1BR0UuCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWZuZGVmIF9ERUJVR19ICiNkZWZpbmUgX0RFQlVHX0gKCgoKCi8qIFR1cm4gb24gZGVidWdnaW5nIGhlcmUgaWYgbm90IGRvbmUgd2l0aCBhIHByZXByb2Nlc3NvciBkZWZpbmUgKi8KI2lmbmRlZiBEQkcKI2RlZmluZSBEQkcgMAojZWxzZQojdW5kZWYJREJHCiNkZWZpbmUgREJHIDEKI2VuZGlmIC8qIERCRyAqLwoKCgoKI2lmIERCRwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qIFNldCB0aGUgbGV2ZWwgb2YgZGVidWdnaW5nIGlmIG5vdCBkb25lIHdpdGggYSBwcmVwcm9jZXNzb3IgZGVmaW5lLiBTZWUKICAgd2xfbWFpbi5jLCBpbml0X21vZHVsZSgpIGZvciBob3cgdGhlIGRlYnVnIGxldmVsIHRyYW5zbGF0ZXMgaW50byB0aGUKICAgdGhlIHR5cGVzIG9mIG1lc3NhZ2VzIGRpc3BsYXllZCAqLwojaWZuZGVmIERCR19MVkwKI2RlZmluZSBEQkdfTFZMIDUJCQkvKiB5aWVsZHMgbm90aGluZyB2aWEgaW5pdF9tb2R1bGUsCgkJCQkJCQkgICBvcmlnaW5hbCB2YWx1ZSBvZiA1IHlpZWxkcyBEQkdfVFJBQ0VfT04gYW5kIERCR19WRVJCT1NFX09OICovCiNlbmRpZiAgLyogIERCR19MVkwqLwoKCiNkZWZpbmUgREJHX0VSUk9SX09OICAgICAgICAweDAwMDAwMDAxTAojZGVmaW5lIERCR19XQVJOSU5HX09OICAgICAgMHgwMDAwMDAwMkwKI2RlZmluZSBEQkdfTk9USUNFX09OICAgICAgIDB4MDAwMDAwMDRMCiNkZWZpbmUgREJHX1RSQUNFX09OICAgICAgICAweDAwMDAwMDA4TAojZGVmaW5lIERCR19WRVJCT1NFX09OICAgICAgMHgwMDAwMDAxMEwKI2RlZmluZSBEQkdfUEFSQU1fT04gICAgICAgIDB4MDAwMDAwMjBMCiNkZWZpbmUgREJHX0JSRUFLX09OICAgICAgICAweDAwMDAwMDQwTAojZGVmaW5lIERCR19SWF9PTiAgICAgICAgICAgMHgwMDAwMDEwMEwKI2RlZmluZSBEQkdfVFhfT04gICAgICAgICAgIDB4MDAwMDAyMDBMCiNkZWZpbmUgREJHX0RTX09OICAgICAgICAgICAweDAwMDAwNDAwTAoKI2RlZmluZSBEQkdfREVGQVVMVFMgICAgICAgIChEQkdfRVJST1JfT04gfCBEQkdfV0FSTklOR19PTiB8IERCR19CUkVBS19PTikKCiNkZWZpbmUgREJHX0ZMQUdTKEEpICAgICAgICAoKEEpLT5EZWJ1Z0ZsYWcpCiNkZWZpbmUgREJHX05BTUUoQSkgICAgICAgICAoKEEpLT5kYmdOYW1lKQojZGVmaW5lIERCR19MRVZFTChBKSAgICAgICAgKChBKS0+ZGJnTGV2ZWwpCgoKI2lmbmRlZiBQUklOVEsKIyAgIGRlZmluZSBQUklOVEsoUy4uLikgICAgIHByaW50ayhTKQojZW5kaWYgLyogUFJJTlRLICovCgoKI2lmbmRlZiBEQkdfUFJJTlQKIyAgIGRlZmluZSBEQkdfUFJJTlQoUy4uLikgIFBSSU5USyhLRVJOX0RFQlVHIFMpCiNlbmRpZiAvKiBEQkdfUFJJTlQgKi8KCgojaWZuZGVmIERCR19QUklOVEMKIyAgIGRlZmluZSBEQkdfUFJJTlRDKFMuLi4pIFBSSU5USyhTKQojZW5kaWYgLyogREJHX1BSSU5UQyAqLwoKCiNpZm5kZWYgREJHX1RSQVAKIyAgIGRlZmluZSBEQkdfVFJBUCAgICAgICAgIHt9CiNlbmRpZiAvKiBEQkdfVFJBUCAqLwoKCiNkZWZpbmUgX0VOVEVSX1NUUiAgICAgICAgICAiPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiIKI2RlZmluZSBfTEVBVkVfU1RSICAgICAgICAgICI8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8IgoKCiNkZWZpbmUgX0RCR19FTlRFUihBKSAgICAgICBEQkdfUFJJTlQoIiVzOiUuKnM6JXNcbiIsIERCR19OQU1FKEEpLCArK0RCR19MRVZFTChBKSwgX0VOVEVSX1NUUiwgX19GVU5DX18pCiNkZWZpbmUgX0RCR19MRUFWRShBKSAgICAgICBEQkdfUFJJTlQoIiVzOiUuKnM6JXNcbiIsIERCR19OQU1FKEEpLCBEQkdfTEVWRUwoQSktLSwgX0xFQVZFX1NUUiwgX19GVU5DX18pCgoKI2RlZmluZSBEQkdfRlVOQyhGKSAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyICpfX0ZVTkNfXyA9IEY7CgojZGVmaW5lIERCR19FTlRFUihBKSAgICAgICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfVFJBQ0VfT04pIFwKCQkJCV9EQkdfRU5URVIoQSk7IH0KCiNkZWZpbmUgREJHX0xFQVZFKEEpICAgICAgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19UUkFDRV9PTikgXAoJCQkJIF9EQkdfTEVBVkUoQSk7IH0KCiNkZWZpbmUgREJHX1BBUkFNKEEsIE4sIEYsIFMuLi4pICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfUEFSQU1fT04pIFwKCQkJCURCR19QUklOVCgiICAlcyAtLSAiRiJcbiIsIE4sIFMpOyB9CgoKI2RlZmluZSBEQkdfRVJST1IoQSwgUy4uLikgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19FUlJPUl9PTikge1wKCQkJCURCR19QUklOVCgiJXM6RVJST1I6JXMgIiwgREJHX05BTUUoQSksIF9fRlVOQ19fKTtcCgkJCQlEQkdfUFJJTlRDKFMpOyBcCgkJCQlEQkdfVFJBUDsgXAoJCQkJfSBcCgkJCQl9CgoKI2RlZmluZSBEQkdfV0FSTklORyhBLCBTLi4uKSB7aWYgKERCR19GTEFHUyhBKSAmIERCR19XQVJOSU5HX09OKSB7XAoJCQkJREJHX1BSSU5UKCIlczpXQVJOSU5HOiVzICIsIERCR19OQU1FKEEpLCBfX0ZVTkNfXyk7XAoJCQkJREJHX1BSSU5UQyhTKTsgfSB9CgoKI2RlZmluZSBEQkdfTk9USUNFKEEsIFMuLi4pICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19OT1RJQ0VfT04pIHtcCgkJCQlEQkdfUFJJTlQoIiVzOk5PVElDRTolcyAiLCBEQkdfTkFNRShBKSwgX19GVU5DX18pO1wKCQkJCURCR19QUklOVEMoUyk7IFwKCQkJCX0gXAoJCQkJfQoKCiNkZWZpbmUgREJHX1RSQUNFKEEsIFMuLi4pICAgZG8ge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfVFJBQ0VfT04pIHtcCgkJCQlEQkdfUFJJTlQoIiVzOiVzICIsIERCR19OQU1FKEEpLCBfX0ZVTkNfXyk7XAoJCQkJREJHX1BSSU5UQyhTKTsgfSB9IHdoaWxlICgwKQoKCiNkZWZpbmUgREJHX1JYKEEsIFMuLi4pICAgICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfUlhfT04pIHtcCgkJCQlEQkdfUFJJTlQoUyk7IH0gfQoKCiNkZWZpbmUgREJHX1RYKEEsIFMuLi4pICAgICAge2lmIChEQkdfRkxBR1MoQSkgJiBEQkdfVFhfT04pIHtcCgkJCQlEQkdfUFJJTlQoUyk7IH0gfQoKI2RlZmluZSBEQkdfRFMoQSwgUy4uLikgICAgICB7aWYgKERCR19GTEFHUyhBKSAmIERCR19EU19PTikge1wKCQkJCURCR19QUklOVChTKTsgfSB9CgoKI2RlZmluZSBEQkdfQVNTRVJUKEMpCQl7IFwKCQkJCWlmICghKEMpKSB7XAoJCQkJCURCR19QUklOVCgiQVNTRVJUKCVzKSAtLSAlcyMlZCAoJXMpXG4iLCBcCgkJCQkJI0MsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DX18pOyBcCgkJCQkJREJHX1RSQVA7IFwKCQkJCQl9IFwKCQkJCQl9Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyICAgICAgICAgICAqZGJnTmFtZTsKICAgIGludCAgICAgICAgICAgICBkYmdMZXZlbDsKICAgIHVuc2lnbmVkIGxvbmcgICBEZWJ1Z0ZsYWc7Cn0gZGJnX2luZm9fdDsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2Vsc2UgLyogREJHICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2RlZmluZSBEQkdfREVGTgojZGVmaW5lIERCR19UUkFQCiNkZWZpbmUgREJHX0ZVTkMoRikKI2RlZmluZSBEQkdfUFJJTlQoUy4uLikKI2RlZmluZSBEQkdfRU5URVIoQSkKI2RlZmluZSBEQkdfTEVBVkUoQSkKI2RlZmluZSBEQkdfUEFSQU0oQSwgTiwgRiwgUy4uLikKI2RlZmluZSBEQkdfRVJST1IoQSwgUy4uLikKI2RlZmluZSBEQkdfV0FSTklORyhBLCBTLi4uKQojZGVmaW5lIERCR19OT1RJQ0UoQSwgUy4uLikKI2RlZmluZSBEQkdfVFJBQ0UoQSwgUy4uLikKI2RlZmluZSBEQkdfUlgoQSwgUy4uLikKI2RlZmluZSBEQkdfVFgoQSwgUy4uLikKI2RlZmluZSBEQkdfRFMoQSwgUy4uLikKI2RlZmluZSBEQkdfQVNTRVJUKEMpCgojZW5kaWYgLyogREJHICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKI2VuZGlmIC8qIF9ERUJVR19IICovCgo=