LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgKGMpIFNZU1RFQyBlbGVjdHJvbmljIEdtYkgsIEQtMDc5NzMgR3JlaXosIEF1Z3VzdC1CZWJlbC1TdHIuIDI5CiAgICAgIHd3dy5zeXN0ZWMtZWxlY3Ryb25pYy5jb20KCiAgUHJvamVjdDogICAgICBvcGVuUE9XRVJMSU5LCgogIERlc2NyaXB0aW9uOiAgaW5jbHVkZSBmaWxlIGZvciB0YXJnZXQgYXBpIGZ1bmN0aW9uCgogIExpY2Vuc2U6CgogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAgIGFyZSBtZXQ6CgogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KCiAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNZU1RFQyBlbGVjdHJvbmljIEdtYkggbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgogICAgICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgaW5mb0BzeXN0ZWMtZWxlY3Ryb25pYy5jb20uCgogICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCiAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogICAgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCiAgICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAogICAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwogICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgogICAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCiAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgogICAgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCiAgICBTZXZlcmFiaWxpdHkgQ2xhdXNlOgoKICAgICAgICBJZiBhIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgb3IgYmVjb21lcyBpbGxlZ2FsLCBpbnZhbGlkIG9yCiAgICAgICAgdW5lbmZvcmNlYWJsZSBpbiBhbnkganVyaXNkaWN0aW9uLCB0aGF0IHNoYWxsIG5vdCBhZmZlY3Q6CiAgICAgICAgMS4gdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IGluIHRoYXQganVyaXNkaWN0aW9uIG9mIGFueSBvdGhlcgogICAgICAgICAgIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2U7IG9yCiAgICAgICAgMi4gdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IGluIG90aGVyIGp1cmlzZGljdGlvbnMgb2YgdGhhdCBvcgogICAgICAgICAgIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLgoKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICAgICAgICAgJFJDU2ZpbGU6IEVwbFRhcmdldC5oLHYgJAoKICAgICAgICAgICAgICAgICRBdXRob3I6IEQuS3J1ZWdlciAkCgogICAgICAgICAgICAgICAgJFJldmlzaW9uOiAxLjUgJCAgJERhdGU6IDIwMDgvMDQvMTcgMjE6MzY6MzIgJAoKICAgICAgICAgICAgICAgICRTdGF0ZTogRXhwICQKCiAgICAgICAgICAgICAgICBCdWlsZCBFbnZpcm9ubWVudDoKICAgICAgICAgICAgICAgICAgICBHQ0MgVjMuNAoKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogIFJldmlzaW9uIEhpc3Rvcnk6CgogIDIwMDUvMTIvMDUgLWFzOiAgIHN0YXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiwgdmVyc2lvbiAxLjAwCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmbmRlZiBfRVBMVEFSR0VUX0hfCiNkZWZpbmUgX0VQTFRBUkdFVF9IXwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gY29uc3QgZGVmaW5lcwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIG1hY3JvcyBmb3IgbWVtb3J5IGFjY2VzcyAoZGVwZW5kcyBvbiB0YXJnZXQgc3lzdGVtKQovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovLyBOT1RFOgovLyBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgdXNlZCB0byBjb21iaW5lIHN0YW5kYXJkIGxpYnJhcnkgZGVmaW5pdGlvbnMuIFNvbWUKLy8gYXBwbGljYXRpb25zIG5lZWRzIHRvIHVzZSBvbmUgY29tbW9uIGxpYnJhcnkgZnVuY3Rpb24gKGUuZy4gbWVtY3B5KCkpLiBTbwovLyB5b3UgY2FuIHNldCAob3IgY2hhbmdlKSBpdCBoZXJlLgoKI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCgojZGVmaW5lIF9XSU4zMl9XSU5ET1dTIDB4MDQwMQojZGVmaW5lIF9XSU4zMl9XSU5OVCAgIDB4MDQwMAoKI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCiAgICAvLzI5LjExLjIwMDQgZi5qLiBzb25zdCBpc3QgbWVtY3B5IHVuZCBtZW1zZXQgdW5iZWthbm50CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgRVBMX01FTUNQWShkc3Qsc3JjLHNpeikgICAgIG1lbWNweSgodm9pZCopKGRzdCksKGNvbnN0IHZvaWQqKShzcmMpLChzaXplX3QpKHNpeikpOwojZGVmaW5lIEVQTF9NRU1TRVQoZHN0LHZhbCxzaXopICAgICBtZW1zZXQoKHZvaWQqKShkc3QpLChpbnQpKHZhbCksKHNpemVfdCkoc2l6KSk7CgogICAgLy8gZi5qLjogZGllIEZ1bmt0aW9uZW4gZvxyIDxNZW1BbGxvYz4gdW5kIDxNZW1GcmVlPiBzaW5kIGluIFdpbk1lbS5jIGRlZmluaWVydAogICAgLy9kZWZpbml0aW9uIGRlciBQcm90b3R5cGVuCnZvaWQgRkFSICpNZW1BbGxvYyhEV09SRCBkd01lbVNpemVfcCk7CnZvaWQgTWVtRnJlZSh2b2lkIEZBUiAqIHBNZW1fcCk7CgojZGVmaW5lIEVQTF9NQUxMT0Moc2l6KSAgICAgICAgICAgICBtYWxsb2MoKHNpemVfdCkoc2l6KSkKI2RlZmluZSBFUExfRlJFRShwdHIpICAgICAgICAgICAgICAgZnJlZSgodm9pZCAqKXB0cikKCiNpZm5kZWYgUFJJTlRGMAp2b2lkIHRyYWNlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKI2RlZmluZSBQUklOVEYgICAgICAgICAgICAgICAgICAgICAgVFJBQ0UKI2RlZmluZSBQUklOVEYwKGFyZykgICAgICAgICAgICAgICAgVFJBQ0UwKGFyZykKI2RlZmluZSBQUklOVEYxKGFyZyxwMSkgICAgICAgICAgICAgVFJBQ0UxKGFyZyxwMSkKI2RlZmluZSBQUklOVEYyKGFyZyxwMSxwMikgICAgICAgICAgVFJBQ0UyKGFyZyxwMSxwMikKI2RlZmluZSBQUklOVEYzKGFyZyxwMSxwMixwMykgICAgICAgVFJBQ0UzKGFyZyxwMSxwMixwMykKI2RlZmluZSBQUklOVEY0KGFyZyxwMSxwMixwMyxwNCkgICAgVFJBQ0U0KGFyZyxwMSxwMixwMyxwNCkKCS8vI2RlZmluZSBQUklOVEYgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmCgkvLyNkZWZpbmUgUFJJTlRGMChhcmcpICAgICAgICAgICAgICAgIFBSSU5URihhcmcpCgkvLyNkZWZpbmUgUFJJTlRGMShhcmcscDEpICAgICAgICAgICAgIFBSSU5URihhcmcscDEpCgkvLyNkZWZpbmUgUFJJTlRGMihhcmcscDEscDIpICAgICAgICAgIFBSSU5URihhcmcscDEscDIpCgkvLyNkZWZpbmUgUFJJTlRGMyhhcmcscDEscDIscDMpICAgICAgIFBSSU5URihhcmcscDEscDIscDMpCgkvLyNkZWZpbmUgUFJJTlRGNChhcmcscDEscDIscDMscDQpICAgIFBSSU5URihhcmcscDEscDIscDMscDQpCiNlbmRpZgoKI2lmZGVmIEFTU0VSVE1TRwojdW5kZWYgQVNTRVJUTVNHCiNlbmRpZgoKI2RlZmluZSBBU1NFUlRNU0coZXhwcixzdHJpbmcpICBpZiAoIShleHByKSkgeyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlQm94IChOVUxMLCBzdHJpbmcsICJBc3NlcnRpb24gZmFpbGVkIiwgTUJfT0sgfCBNQl9JQ09ORVJST1IpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0ICgtMSk7fQoKI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX05PX09TXykKCiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CgogICAgLy8yOS4xMS4yMDA0IGYuai4gc29uc3QgaXN0IG1lbWNweSB1bmQgbWVtc2V0IHVuYmVrYW5udAovLyAgICAjaW5jbHVkZSA8c3RyaW5nLmg+CgojZGVmaW5lIEVQTF9NRU1DUFkoZHN0LHNyYyxzaXopICAgICBtZW1jcHkoKHZvaWQqKShkc3QpLChjb25zdCB2b2lkKikoc3JjKSwoc2l6ZV90KShzaXopKTsKI2RlZmluZSBFUExfTUVNU0VUKGRzdCx2YWwsc2l6KSAgICAgbWVtc2V0KCh2b2lkKikoZHN0KSwoaW50KSh2YWwpLChzaXplX3QpKHNpeikpOwoKI2RlZmluZSBFUExfTUFMTE9DKHNpeikgICAgICAgICAgICAgbWFsbG9jKChzaXplX3QpKHNpeikpCiNkZWZpbmUgRVBMX0ZSRUUocHRyKSAgICAgICAgICAgICAgIGZyZWUoKHZvaWQgKilwdHIpCgojaWZuZGVmIFBSSU5URjAKI2RlZmluZSBQUklOVEYgICAgICAgICAgICAgICAgICAgICAgVFJBQ0UKI2RlZmluZSBQUklOVEYwKGFyZykgICAgICAgICAgICAgICAgVFJBQ0UwKGFyZykKI2RlZmluZSBQUklOVEYxKGFyZyxwMSkgICAgICAgICAgICAgVFJBQ0UxKGFyZyxwMSkKI2RlZmluZSBQUklOVEYyKGFyZyxwMSxwMikgICAgICAgICAgVFJBQ0UyKGFyZyxwMSxwMikKI2RlZmluZSBQUklOVEYzKGFyZyxwMSxwMixwMykgICAgICAgVFJBQ0UzKGFyZyxwMSxwMixwMykKI2RlZmluZSBQUklOVEY0KGFyZyxwMSxwMixwMyxwNCkgICAgVFJBQ0U0KGFyZyxwMSxwMixwMyxwNCkKCS8vI2RlZmluZSBQUklOVEYgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmCgkvLyNkZWZpbmUgUFJJTlRGMChhcmcpICAgICAgICAgICAgICAgIFBSSU5URihhcmcpCgkvLyNkZWZpbmUgUFJJTlRGMShhcmcscDEpICAgICAgICAgICAgIFBSSU5URihhcmcscDEpCgkvLyNkZWZpbmUgUFJJTlRGMihhcmcscDEscDIpICAgICAgICAgIFBSSU5URihhcmcscDEscDIpCgkvLyNkZWZpbmUgUFJJTlRGMyhhcmcscDEscDIscDMpICAgICAgIFBSSU5URihhcmcscDEscDIscDMpCgkvLyNkZWZpbmUgUFJJTlRGNChhcmcscDEscDIscDMscDQpICAgIFBSSU5URihhcmcscDEscDIscDMscDQpCiNlbmRpZgoKI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykKCiNpZm5kZWYgX19LRVJORUxfXwojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojZWxzZQovLyAgICAgICAgI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgojaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgojaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgojZW5kaWYKCiAgICAvLzI5LjExLjIwMDQgZi5qLiBzb25zdCBpc3QgbWVtY3B5IHVuZCBtZW1zZXQgdW5iZWthbm50Ci8vICAgICNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgRVBMX01FTUNQWShkc3Qsc3JjLHNpeikgICAgIG1lbWNweSgodm9pZCopKGRzdCksKGNvbnN0IHZvaWQqKShzcmMpLChzaXplX3QpKHNpeikpOwojZGVmaW5lIEVQTF9NRU1TRVQoZHN0LHZhbCxzaXopICAgICBtZW1zZXQoKHZvaWQqKShkc3QpLChpbnQpKHZhbCksKHNpemVfdCkoc2l6KSk7CgojaWZuZGVmIF9fS0VSTkVMX18KI2RlZmluZSBFUExfTUFMTE9DKHNpeikgICAgICAgICAgICAgbWFsbG9jKChzaXplX3QpKHNpeikpCiNkZWZpbmUgRVBMX0ZSRUUocHRyKSAgICAgICAgICAgICAgIGZyZWUoKHZvaWQgKilwdHIpCiNlbHNlCiNkZWZpbmUgRVBMX01BTExPQyhzaXopICAgICAgICAgICAgIGttYWxsb2MoKHNpemVfdCkoc2l6KSwgR0ZQX0tFUk5FTCkKI2RlZmluZSBFUExfRlJFRShwdHIpICAgICAgICAgICAgICAga2ZyZWUoKHZvaWQgKilwdHIpCiNlbmRpZgoKI2lmbmRlZiBQUklOVEYwCiNkZWZpbmUgUFJJTlRGICAgICAgICAgICAgICAgICAgICAgIFRSQUNFCiNkZWZpbmUgUFJJTlRGMChhcmcpICAgICAgICAgICAgICAgIFRSQUNFMChhcmcpCiNkZWZpbmUgUFJJTlRGMShhcmcscDEpICAgICAgICAgICAgIFRSQUNFMShhcmcscDEpCiNkZWZpbmUgUFJJTlRGMihhcmcscDEscDIpICAgICAgICAgIFRSQUNFMihhcmcscDEscDIpCiNkZWZpbmUgUFJJTlRGMyhhcmcscDEscDIscDMpICAgICAgIFRSQUNFMyhhcmcscDEscDIscDMpCiNkZWZpbmUgUFJJTlRGNChhcmcscDEscDIscDMscDQpICAgIFRSQUNFNChhcmcscDEscDIscDMscDQpCgkvLyNkZWZpbmUgUFJJTlRGICAgICAgICAgICAgICAgICAgICAgIHByaW50ZgoJLy8jZGVmaW5lIFBSSU5URjAoYXJnKSAgICAgICAgICAgICAgICBQUklOVEYoYXJnKQoJLy8jZGVmaW5lIFBSSU5URjEoYXJnLHAxKSAgICAgICAgICAgICBQUklOVEYoYXJnLHAxKQoJLy8jZGVmaW5lIFBSSU5URjIoYXJnLHAxLHAyKSAgICAgICAgICBQUklOVEYoYXJnLHAxLHAyKQoJLy8jZGVmaW5lIFBSSU5URjMoYXJnLHAxLHAyLHAzKSAgICAgICBQUklOVEYoYXJnLHAxLHAyLHAzKQoJLy8jZGVmaW5lIFBSSU5URjQoYXJnLHAxLHAyLHAzLHA0KSAgICBQUklOVEYoYXJnLHAxLHAyLHAzLHA0KQojZW5kaWYKCiNlbmRpZgoKI2RlZmluZSBFUExfVEdUX0lOVE1BU0tfRVRIICAgICAweDAwMDEJLy8gZXRoZXJuZXQgaW50ZXJydXB0CiNkZWZpbmUgRVBMX1RHVF9JTlRNQVNLX0RNQSAgICAgMHgwMDAyCS8vIERNQSBpbnRlcnJ1cHQKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIHR5cGVkZWYKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIGN1cnJlbnRseSBubyBUaW1lciBmdW5jdGlvbnMgYXJlIG5lZWRlZCBieSBFUEwgc3RhY2sKLy8gc28gdGhleSBhcmUgbm90IGltcGxlbWVudGVkIHlldAovL3ZvaWQgIFBVQkxJQyBUZ3RUaW1lckluaXQodm9pZCk7Ci8vRFdPUkQgUFVCTElDIFRndEdldFRpY2tDb3VudCh2b2lkKTsKLy92b2lkIFBVQkxJQyBUZ3RHZXROZXRUaW1lKHRFcGxOZXRUaW1lICogcE5ldFRpbWVfcCk7CgovLyBmdW5jdGlvbnMgZm9yIGV0aGVybmV0IGRyaXZlcgp0RXBsS2VybmVsIFBVQkxJQyBUZ3RJbml0RXRoSXNyKHZvaWQpOwp2b2lkIFBVQkxJQyBUZ3RGcmVlRXRoSXNyKHZvaWQpOwp2b2lkIFBVQkxJQyBUZ3RFbmFibGVHbG9iYWxJbnRlcnJ1cHQoQllURSBmRW5hYmxlX3ApOwp2b2lkIFBVQkxJQyBUZ3RFbmFibGVFdGhJbnRlcnJ1cHQwKEJZVEUgZkVuYWJsZV9wLAoJCQkJICAgdW5zaWduZWQgaW50IHVpSW50ZXJydXB0TWFza19wKTsKdm9pZCBQVUJMSUMgVGd0RW5hYmxlRXRoSW50ZXJydXB0MShCWVRFIGZFbmFibGVfcCwKCQkJCSAgIHVuc2lnbmVkIGludCB1aUludGVycnVwdE1hc2tfcCk7CgojZW5kaWYgLy8gI2lmbmRlZiBfRVBMVEFSR0VUX0hfCg==