LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQ29weXJpZ2h0IChDKSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLiBhbmQgaXRzIGFmZmlsaWF0ZXMKClRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgb3duZWQgYW5kIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgCkludGVybmF0aW9uYWwgTHRkLiBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMgKCJNYXJ2ZWxsIikgdW5kZXIgdGhlIGZvbGxvd2luZwphbHRlcm5hdGl2ZSBsaWNlbnNpbmcgdGVybXMuICBPbmNlIHlvdSBoYXZlIG1hZGUgYW4gZWxlY3Rpb24gdG8gZGlzdHJpYnV0ZSB0aGUKRmlsZSB1bmRlciBvbmUgb2YgdGhlIGZvbGxvd2luZyBsaWNlbnNlIGFsdGVybmF0aXZlcywgcGxlYXNlIChpKSBkZWxldGUgdGhpcwppbnRyb2R1Y3Rvcnkgc3RhdGVtZW50IHJlZ2FyZGluZyBsaWNlbnNlIGFsdGVybmF0aXZlcywgKGlpKSBkZWxldGUgdGhlIHR3bwpsaWNlbnNlIGFsdGVybmF0aXZlcyB0aGF0IHlvdSBoYXZlIG5vdCBlbGVjdGVkIHRvIHVzZSBhbmQgKGlpaSkgcHJlc2VydmUgdGhlCk1hcnZlbGwgY29weXJpZ2h0IG5vdGljZSBhYm92ZS4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCk1hcnZlbGwgQ29tbWVyY2lhbCBMaWNlbnNlIE9wdGlvbgoKSWYgeW91IHJlY2VpdmVkIHRoaXMgRmlsZSBmcm9tIE1hcnZlbGwgYW5kIHlvdSBoYXZlIGVudGVyZWQgaW50byBhIGNvbW1lcmNpYWwKbGljZW5zZSBhZ3JlZW1lbnQgKGEgIkNvbW1lcmNpYWwgTGljZW5zZSIpIHdpdGggTWFydmVsbCwgdGhlIEZpbGUgaXMgbGljZW5zZWQKdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgYXBwbGljYWJsZSBDb21tZXJjaWFsIExpY2Vuc2UuCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpNYXJ2ZWxsIEdQTCBMaWNlbnNlIE9wdGlvbgoKSWYgeW91IHJlY2VpdmVkIHRoaXMgRmlsZSBmcm9tIE1hcnZlbGwsIHlvdSBtYXkgb3B0IHRvIHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciAKbW9kaWZ5IHRoaXMgRmlsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHZW5lcmFsIApQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MSAodGhlICJHUEwgTGljZW5zZSIpLCBhIGNvcHkgb2Ygd2hpY2ggaXMgCmF2YWlsYWJsZSBhbG9uZyB3aXRoIHRoZSBGaWxlIGluIHRoZSBsaWNlbnNlLnR4dCBmaWxlIG9yIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgClNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgb3IgCm9uIHRoZSB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwudHh0LiAKClRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFIElNUExJRUQgCldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBFWFBSRVNTTFkgCkRJU0NMQUlNRUQuICBUaGUgR1BMIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0IHRoaXMgd2FycmFudHkgCmRpc2NsYWltZXIuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCk1hcnZlbGwgQlNEIExpY2Vuc2UgT3B0aW9uCgpJZiB5b3UgcmVjZWl2ZWQgdGhpcyBGaWxlIGZyb20gTWFydmVsbCwgeW91IG1heSBvcHQgdG8gdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yIAptb2RpZnkgdGhpcyBGaWxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zaW5nIHRlcm1zLiAKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKCiAgICAqICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAoJICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAoKICAgICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKCiAgICAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiBNYXJ2ZWxsIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgCiAgICAgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCAKICAgICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAogICAgClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgCkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIApXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIApESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIApBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgCihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgCkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiAKQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIApTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKI2lmbmRlZiBfX0lOQ212QWhiVG9NYnVzUmVnc2gKI2RlZmluZSBfX0lOQ212QWhiVG9NYnVzUmVnc2gKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qIEFSTSBBZGRyZXNzIE1hcCBSZWdpc3RlcnMgICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojZGVmaW5lIE1BWF9BSEJfVE9fTUJVU19XSU5TCTkKI2RlZmluZSBNVl9BSEJfVE9fTUJVU19JTlRSRUdfV0lOCTgKCgojZGVmaW5lIEFIQl9UT19NQlVTX1dJTl9DVFJMX1JFRyh3aW5OdW0pCQkoMHgyMDAwMCArICh3aW5OdW0pKjB4MTApCiNkZWZpbmUgQUhCX1RPX01CVVNfV0lOX0JBU0VfUkVHKHdpbk51bSkJCSgweDIwMDA0ICsgKHdpbk51bSkqMHgxMCkKI2RlZmluZSBBSEJfVE9fTUJVU19XSU5fUkVNQVBfTE9XX1JFRyh3aW5OdW0pCSgweDIwMDA4ICsgKHdpbk51bSkqMHgxMCkKI2RlZmluZSBBSEJfVE9fTUJVU19XSU5fUkVNQVBfSElHSF9SRUcod2luTnVtKQkoMHgyMDAwQyArICh3aW5OdW0pKjB4MTApCiNkZWZpbmUgQUhCX1RPX01CVVNfV0lOX0lOVEVSRUdfUkVHCQkJCSAweDIwMDgwCgovKiBXaW5kb3cgQ29udHJvbCBSZWdpc3RlciAgICAgICovCi8qIEFIQl9UT19NQlVTX1dJTl9DVFJMX1JFRyAoQVRNV0NSKSovCiNkZWZpbmUgQVRNV0NSX1dJTl9FTkFCTEUJCQkJCUJJVDAJLyogV2luZG93IEVuYWJsZSAqLwoKI2RlZmluZSBBVE1XQ1JfV0lOX1RBUkdFVF9PRkZTCQkJNCAvKiBUaGUgdGFyZ2V0IGludGVyZmFjZSBhc3NvY2lhdGVkIAoJCQkJCQkJCQkJCSB3aXRoIHRoaXMgd2luZG93Ki8KI2RlZmluZSBBVE1XQ1JfV0lOX1RBUkdFVF9NQVNLCQkJKDB4ZiA8PCBBVE1XQ1JfV0lOX1RBUkdFVF9PRkZTKQoKI2RlZmluZSBBVE1XQ1JfV0lOX0FUVFJfT0ZGUwkJCQk4IC8qIFRoZSB0YXJnZXQgaW50ZXJmYWNlIGF0dHJpYnV0ZXMKCQkJCQkJCQkJCQkgQXNzb2NpYXRlZCB3aXRoIHRoaXMgd2luZG93ICovCiNkZWZpbmUgQVRNV0NSX1dJTl9BVFRSX01BU0sJCQkJKDB4ZmYgPDwgQVRNV0NSX1dJTl9BVFRSX09GRlMpCgoJCQkJCQkJCQkJCSAKLyoKVXNlZCB3aXRoIHRoZSBCYXNlIHJlZ2lzdGVyIHRvIHNldCB0aGUgYWRkcmVzcyB3aW5kb3cgc2l6ZSBhbmQgbG9jYXRpb24KTXVzdCBiZSBwcm9ncmFtZWQgZnJvbSBMU0IgdG8gTVNCIGFzIHNlcXVlbmNlIG9mIDGScyBmb2xsb3dlZApieSBzZXF1ZW5jZSBvZiAwknMuIFRoZSBudW1iZXIgb2YgMZJzIHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgd2luZG93CmluIDY0IEtCIGdyYW51bGFyaXR5IChlLmcuIGEgdmFsdWUgb2YgMHgwMEZGIHNwZWNpZmllcyAyNTYgPSAxNiBNQikuCgpOT1RFOiBBIHZhbHVlIG9mIDB4MCBzcGVjaWZpZXMgNjRLQiBzaXplLgoqLwojZGVmaW5lIEFUTVdDUl9XSU5fU0laRV9PRkZTCQkJCTE2IC8qIFdpbmRvdyBTaXplICovCiNkZWZpbmUgQVRNV0NSX1dJTl9TSVpFX01BU0sJCQkJKDB4ZmZmZiA8PCBBVE1XQ1JfV0lOX1NJWkVfT0ZGUykKI2RlZmluZSBBVE1XQ1JfV0lOX1NJWkVfQUxJR05NRU5UCQkJMHgxMDAwMAoKLyogIFdpbmRvdyBCYXNlIFJlZ2lzdGVyICAgICAqLwovKiBBSEJfVE9fTUJVU19XSU5fQkFTRV9SRUcgKEFUTVdCUikgKi8KCi8qClVzZWQgd2l0aCB0aGUgc2l6ZSBmaWVsZCB0byBzZXQgdGhlIGFkZHJlc3Mgd2luZG93IHNpemUgYW5kIGxvY2F0aW9uLgpDb3JyZXNwb25kcyB0byB0cmFuc2FjdGlvbiBhZGRyZXNzWzMxOjE2XQoqLwojZGVmaW5lIEFUTVdCUl9CQVNFX09GRlMJCQkJCTE2IC8qIEJhc2UgQWRkcmVzcyAqLwojZGVmaW5lIEFUTVdCUl9CQVNFX01BU0sJCQkJCSgweGZmZmYgPDwgCUFUTVdCUl9CQVNFX09GRlMpCiNkZWZpbmUgQVRNV0JSX0JBU0VfQUxJR05NRU5UCQkJCTB4MTAwMDAKCi8qICBXaW5kb3cgUmVtYXAgTG93IFJlZ2lzdGVyICAgKi8KLyogQUhCX1RPX01CVVNfV0lOX1JFTUFQX0xPV19SRUcgKEFUTVdSTFIpICovCgovKgpVc2VkIHdpdGggdGhlIHNpemUgZmllbGQgdG8gc3BlY2lmaWVzIGFkZHJlc3MgYml0c1szMTowXSB0byBiZSBkcml2ZW4gdG8KdGhlIHRhcmdldCBpbnRlcmZhY2UuOgp0YXJnZXRfYWRkclszMToxNl0gPSAoYWRkclszMToxNl0gJiBzaXplWzE1OjBdKSB8IChyZW1hcFszMToxNl0gJiB+c2l6ZVsxNTowXSkKKi8KI2RlZmluZSBBVE1XUkxSX1JFTUFQX0xPV19PRkZTCQkJMTYgLyogUmVtYXAgQWRkcmVzcyAqLwojZGVmaW5lIEFUTVdSTFJfUkVNQVBfTE9XX01BU0sJCQkoMHhmZmZmIDw8IEFUTVdSTFJfUkVNQVBfTE9XX09GRlMpCiNkZWZpbmUgQVRNV1JMUl9SRU1BUF9MT1dfQUxJR05NRU5UCQkweDEwMDAwCgovKiBXaW5kb3cgUmVtYXAgSGlnaCBSZWdpc3RlciAgICovCi8qIEFIQl9UT19NQlVTX1dJTl9SRU1BUF9ISUdIX1JFRyAoQVRNV1JIUikgKi8KCi8qClNwZWNpZmllcyBhZGRyZXNzIGJpdHNbNjM6MzJdIHRvIGJlIGRyaXZlbiB0byB0aGUgdGFyZ2V0IGludGVyZmFjZS4KdGFyZ2V0X2FkZHJbNjM6MzJdID0gKFJlbWFwSGlnaFszMTowXQoqLwojZGVmaW5lIEFUTVdSSFJfUkVNQVBfSElHSF9PRkZTCQkJMCAvKiBSZW1hcCBBZGRyZXNzICovCiNkZWZpbmUgQVRNV1JIUl9SRU1BUF9ISUdIX01BU0sJCQkoMHhmZmZmZmZmZiA8PCBBVE1XUkhSX1JFTUFQX0hJR0hfT0ZGUykKCgojZW5kaWYgLyogX19JTkNtdkFoYlRvTWJ1c1JlZ3NoICovCgo=