LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgKGMpIFNZU1RFQyBlbGVjdHJvbmljIEdtYkgsIEQtMDc5NzMgR3JlaXosIEF1Z3VzdC1CZWJlbC1TdHIuIDI5CiAgICAgIHd3dy5zeXN0ZWMtZWxlY3Ryb25pYy5jb20KCiAgUHJvamVjdDogICAgICBvcGVuUE9XRVJMSU5LCgogIERlc2NyaXB0aW9uOiAgRGVmaW5pdGlvbnMgZm9yIEFic3RyYWN0IE1lbW9yeSBJbnRlcmZhY2UKCiAgTGljZW5zZToKCiAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICAgYXJlIG1ldDoKCiAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgoKICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgoKICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgU1lTVEVDIGVsZWN0cm9uaWMgR21iSCBub3IgdGhlIG5hbWVzIG9mIGl0cwogICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCiAgICAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBpbmZvQHN5c3RlYy1lbGVjdHJvbmljLmNvbS4KCiAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKICAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAgICBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKICAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCiAgICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CiAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCiAgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKICAgIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCiAgICBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKICAgIFNldmVyYWJpbGl0eSBDbGF1c2U6CgogICAgICAgIElmIGEgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBvciBiZWNvbWVzIGlsbGVnYWwsIGludmFsaWQgb3IKICAgICAgICB1bmVuZm9yY2VhYmxlIGluIGFueSBqdXJpc2RpY3Rpb24sIHRoYXQgc2hhbGwgbm90IGFmZmVjdDoKICAgICAgICAxLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gdGhhdCBqdXJpc2RpY3Rpb24gb2YgYW55IG90aGVyCiAgICAgICAgICAgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZTsgb3IKICAgICAgICAyLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gb3RoZXIganVyaXNkaWN0aW9ucyBvZiB0aGF0IG9yCiAgICAgICAgICAgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UuCgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICAgICAkUkNTZmlsZTogRXBsQW1pLmgsdiAkCgogICAgICAgICAgICAgICAgJEF1dGhvcjogRC5LcnVlZ2VyICQKCiAgICAgICAgICAgICAgICAkUmV2aXNpb246IDEuMiAkICAkRGF0ZTogMjAwOC8wNC8xNyAyMTozNjozMiAkCgogICAgICAgICAgICAgICAgJFN0YXRlOiBFeHAgJAoKICAgICAgICAgICAgICAgIEJ1aWxkIEVudmlyb25tZW50OgogICAgICAgICAgICAgICAgR0NDCgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgUmV2aXNpb24gSGlzdG9yeToKCiAgIDA2LjAzLjIwMDAgIC1ycwogICAgICAgICAgICAgICBJbXBsZW1lbnRhdGlvbgoKICAgMTYuMDkuMjAwMiAgLWFzCiAgICAgICAgICAgICAgIFRvIHNhdmUgY29kZSBzcGFjZSB0aGUgZnVuY3Rpb25zIEFtaVNldEJ5dGUgYW5kIEFtaUdldEJ5dGUKICAgICAgICAgICAgICAgYXJlIHJlcGxhY2VkIGJ5IG1hY3Jvcy4gRm9yIHRhcmdldHMgd2hpY2ggYXNzaWduIHU4IGJ5CiAgICAgICAgICAgICAgIGFuIDE2Qml0IHR5cGUsIHRoZSBkZWZpbml0aW9uIG9mIG1hY3JvcyBtdXN0IGNoYW5nZWQgdG8KICAgICAgICAgICAgICAgZnVuY3Rpb25zLgoKICAgMjMuMDIuMjAwNSAgci5kLjoKICAgICAgICAgICAgICAgRnVuY3Rpb25zIGluY2x1ZGVkIGZvciBleHRlbmRlZCBkYXRhIHR5cGVzIHN1Y2ggYXMgVU5TSUdORUQyNCwKICAgICAgICAgICAgICAgVU5TSUdORUQ0MCwgLi4uCgogICAxMy4wNi4yMDA2ICBkLmsuOgogICAgICAgICAgICAgICBFeHRlbmRlZCB0aGUgaW50ZXJmYWNlIGZvciBFUEwgd2l0aCB0aGUgZGlmZmVyZW50IGZ1bmN0aW9ucwogICAgICAgICAgICAgICBmb3IgbGl0dGxlIGVuZGlhbiBhbmQgYmlnIGVuZGlhbgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZm5kZWYgX0VQTEFNSV9IXwojZGVmaW5lIF9FUExBTUlfSF8KCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgdHlwZXMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICBQcm90b3R5cGVuCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gd3JpdGUgZnVuY3Rpb25zCi8vCi8vIFRvIHNhdmUgY29kZSBzcGFjZSB0aGUgZnVuY3Rpb24gQW1pU2V0Qnl0ZSBpcyByZXBsYWNlZCBieQovLyBhbiBtYWNyby4KLy8gdm9pZCAgQW1pU2V0Qnl0ZSAgKHZvaWQgKiBwQWRkcl9wLCB1OCBiQnl0ZVZhbF9wKTsKCiNkZWZpbmUgQW1pU2V0Qnl0ZVRvQmUocEFkZHJfcCwgYkJ5dGVWYWxfcCkgIHsqKHU4ICopKHBBZGRyX3ApID0gKGJCeXRlVmFsX3ApO30KI2RlZmluZSBBbWlTZXRCeXRlVG9MZShwQWRkcl9wLCBiQnl0ZVZhbF9wKSAgeyoodTggKikocEFkZHJfcCkgPSAoYkJ5dGVWYWxfcCk7fQoKdm9pZCBBbWlTZXRXb3JkVG9CZSh2b2lkICpwQWRkcl9wLCB1MTYgd1dvcmRWYWxfcCk7CnZvaWQgQW1pU2V0RHdvcmRUb0JlKHZvaWQgKnBBZGRyX3AsIHUzMiBkd0R3b3JkVmFsX3ApOwp2b2lkIEFtaVNldFdvcmRUb0xlKHZvaWQgKnBBZGRyX3AsIHUxNiB3V29yZFZhbF9wKTsKdm9pZCBBbWlTZXREd29yZFRvTGUodm9pZCAqcEFkZHJfcCwgdTMyIGR3RHdvcmRWYWxfcCk7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLwovLyByZWFkIGZ1bmN0aW9ucwovLwovLyBUbyBzYXZlIGNvZGUgc3BhY2UgdGhlIGZ1bmN0aW9uIEFtaUdldEJ5dGUgaXMgcmVwbGFjZWQgYnkKLy8gYW4gbWFjcm8uCi8vIHU4ICAgQW1pR2V0Qnl0ZSAgKHZvaWQgKiBwQWRkcl9wKTsKCiNkZWZpbmUgQW1pR2V0Qnl0ZUZyb21CZShwQWRkcl9wKSAgKCoodTggKikocEFkZHJfcCkpCiNkZWZpbmUgQW1pR2V0Qnl0ZUZyb21MZShwQWRkcl9wKSAgKCoodTggKikocEFkZHJfcCkpCgp1MTYgQW1pR2V0V29yZEZyb21CZSh2b2lkICpwQWRkcl9wKTsKdTMyIEFtaUdldER3b3JkRnJvbUJlKHZvaWQgKnBBZGRyX3ApOwp1MTYgQW1pR2V0V29yZEZyb21MZSh2b2lkICpwQWRkcl9wKTsKdTMyIEFtaUdldER3b3JkRnJvbUxlKHZvaWQgKnBBZGRyX3ApOwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gRnVuY3Rpb246ICAgIEFtaVNldER3b3JkMjQoKQovLwovLyBEZXNjcmlwdGlvbjogc2V0cyBhIDI0IGJpdCB2YWx1ZSB0byBhIGJ1ZmZlcgovLwovLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBkZXN0aW5hdGlvbiBidWZmZXIKLy8gICAgICAgICAgICAgIGR3RHdvcmRWYWxfcCAgICA9IHZhbHVlIHRvIHNldAovLwovLyBSZXR1cm46ICAgICAgdm9pZAovLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKdm9pZCBBbWlTZXREd29yZDI0VG9CZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKTsKdm9pZCBBbWlTZXREd29yZDI0VG9MZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vIEZ1bmN0aW9uOiAgICBBbWlHZXREd29yZDI0KCkKLy8KLy8gRGVzY3JpcHRpb246IHJlYWRzIGEgMjQgYml0IHZhbHVlIGZyb20gYSBidWZmZXIKLy8KLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgovLwovLyBSZXR1cm46ICAgICAgdTMyICAgICAgICAgICA9IHJlYWQgdmFsdWUKLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnUzMiBBbWlHZXREd29yZDI0RnJvbUJlKHZvaWQgKnBBZGRyX3ApOwp1MzIgQW1pR2V0RHdvcmQyNEZyb21MZSh2b2lkICpwQWRkcl9wKTsKCi8vI2lmZGVmIFVTRV9WQVI2NAoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gRnVuY3Rpb246ICAgIEFtaVNldFF3b3JkNDAoKQovLwovLyBEZXNjcmlwdGlvbjogc2V0cyBhIDQwIGJpdCB2YWx1ZSB0byBhIGJ1ZmZlcgovLwovLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBkZXN0aW5hdGlvbiBidWZmZXIKLy8gICAgICAgICAgICAgIHF3UXdvcmRWYWxfcCAgICA9IHF1YWRydXBsZSB3b3JkIHZhbHVlCi8vCi8vIFJldHVybjogICAgICB2b2lkCi8vCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp2b2lkIEFtaVNldFF3b3JkNDBUb0JlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApOwp2b2lkIEFtaVNldFF3b3JkNDBUb0xlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApOwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gRnVuY3Rpb246ICAgIEFtaUdldFF3b3JkNDAoKQovLwovLyBEZXNjcmlwdGlvbjogcmVhZHMgYSA0MCBiaXQgdmFsdWUgZnJvbSBhIGJ1ZmZlcgovLwovLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCi8vCi8vIFJldHVybjogICAgICB1NjQKLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnU2NCBBbWlHZXRRd29yZDQwRnJvbUJlKHZvaWQgKnBBZGRyX3ApOwp1NjQgQW1pR2V0UXdvcmQ0MEZyb21MZSh2b2lkICpwQWRkcl9wKTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vIEZ1bmN0aW9uOiAgICBBbWlTZXRRd29yZDQ4KCkKLy8KLy8gRGVzY3JpcHRpb246IHNldHMgYSA0OCBiaXQgdmFsdWUgdG8gYSBidWZmZXIKLy8KLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gZGVzdGluYXRpb24gYnVmZmVyCi8vICAgICAgICAgICAgICBxd1F3b3JkVmFsX3AgICAgPSBxdWFkcnVwbGUgd29yZCB2YWx1ZQovLwovLyBSZXR1cm46ICAgICAgdm9pZAovLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKdm9pZCBBbWlTZXRRd29yZDQ4VG9CZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKTsKdm9pZCBBbWlTZXRRd29yZDQ4VG9MZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKTsKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vIEZ1bmN0aW9uOiAgICBBbWlHZXRRd29yZDQ4KCkKLy8KLy8gRGVzY3JpcHRpb246IHJlYWRzIGEgNDggYml0IHZhbHVlIGZyb20gYSBidWZmZXIKLy8KLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgovLwovLyBSZXR1cm46ICAgICAgdTY0Ci8vCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp1NjQgQW1pR2V0UXdvcmQ0OEZyb21CZSh2b2lkICpwQWRkcl9wKTsKdTY0IEFtaUdldFF3b3JkNDhGcm9tTGUodm9pZCAqcEFkZHJfcCk7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLwovLyBGdW5jdGlvbjogICAgQW1pU2V0UXdvcmQ1NigpCi8vCi8vIERlc2NyaXB0aW9uOiBzZXRzIGEgNTYgYml0IHZhbHVlIHRvIGEgYnVmZmVyCi8vCi8vIFBhcmFtZXRlcnM6ICBwQWRkcl9wICAgICAgICAgPSBwb2ludGVyIHRvIGRlc3RpbmF0aW9uIGJ1ZmZlcgovLyAgICAgICAgICAgICAgcXdRd29yZFZhbF9wICAgID0gcXVhZHJ1cGxlIHdvcmQgdmFsdWUKLy8KLy8gUmV0dXJuOiAgICAgIHZvaWQKLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnZvaWQgQW1pU2V0UXdvcmQ1NlRvQmUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCk7CnZvaWQgQW1pU2V0UXdvcmQ1NlRvTGUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCk7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLwovLyBGdW5jdGlvbjogICAgQW1pR2V0UXdvcmQ1NigpCi8vCi8vIERlc2NyaXB0aW9uOiByZWFkcyBhIDU2IGJpdCB2YWx1ZSBmcm9tIGEgYnVmZmVyCi8vCi8vIFBhcmFtZXRlcnM6ICBwQWRkcl9wICAgICAgICAgPSBwb2ludGVyIHRvIHNvdXJjZSBidWZmZXIKLy8KLy8gUmV0dXJuOiAgICAgIHU2NAovLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKdTY0IEFtaUdldFF3b3JkNTZGcm9tQmUodm9pZCAqcEFkZHJfcCk7CnU2NCBBbWlHZXRRd29yZDU2RnJvbUxlKHZvaWQgKnBBZGRyX3ApOwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gRnVuY3Rpb246ICAgIEFtaVNldFF3b3JkNjQoKQovLwovLyBEZXNjcmlwdGlvbjogc2V0cyBhIDY0IGJpdCB2YWx1ZSB0byBhIGJ1ZmZlcgovLwovLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBkZXN0aW5hdGlvbiBidWZmZXIKLy8gICAgICAgICAgICAgIHF3UXdvcmRWYWxfcCAgICA9IHF1YWRydXBsZSB3b3JkIHZhbHVlCi8vCi8vIFJldHVybjogICAgICB2b2lkCi8vCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp2b2lkIEFtaVNldFF3b3JkNjRUb0JlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApOwp2b2lkIEFtaVNldFF3b3JkNjRUb0xlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApOwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gRnVuY3Rpb246ICAgIEFtaUdldFF3b3JkNjQoKQovLwovLyBEZXNjcmlwdGlvbjogcmVhZHMgYSA2NCBiaXQgdmFsdWUgZnJvbSBhIGJ1ZmZlcgovLwovLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCi8vCi8vIFJldHVybjogICAgICB2b2lkCi8vCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp1NjQgQW1pR2V0UXdvcmQ2NEZyb21CZSh2b2lkICpwQWRkcl9wKTsKdTY0IEFtaUdldFF3b3JkNjRGcm9tTGUodm9pZCAqcEFkZHJfcCk7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLwovLyBGdW5jdGlvbjogICAgQW1pU2V0VGltZU9mRGF5KCkKLy8KLy8gRGVzY3JpcHRpb246IHNldHMgYSBUSU1FX09GX0RBWSAoQ0FOb3BlbikgdmFsdWUgdG8gYSBidWZmZXIKLy8KLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gZGVzdGluYXRpb24gYnVmZmVyCi8vICAgICAgICAgICAgICBwVGltZU9mRGF5X3AgICAgPSBwb2ludGVyIHRvIHN0cnVjdCBUSU1FX09GX0RBWQovLwovLyBSZXR1cm46ICAgICAgdm9pZAovLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp2b2lkIEFtaVNldFRpbWVPZkRheSh2b2lkICpwQWRkcl9wLCB0VGltZU9mRGF5ICpwVGltZU9mRGF5X3ApOwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gRnVuY3Rpb246ICAgIEFtaUdldFRpbWVPZkRheSgpCi8vCi8vIERlc2NyaXB0aW9uOiByZWFkcyBhIFRJTUVfT0ZfREFZIChDQU5vcGVuKSB2YWx1ZSBmcm9tIGEgYnVmZmVyCi8vCi8vIFBhcmFtZXRlcnM6ICBwQWRkcl9wICAgICAgICAgPSBwb2ludGVyIHRvIHNvdXJjZSBidWZmZXIKLy8gICAgICAgICAgICAgIHBUaW1lT2ZEYXlfcCAgICA9IHBvaW50ZXIgdG8gc3RydWN0IFRJTUVfT0ZfREFZCi8vCi8vIFJldHVybjogICAgICB2b2lkCi8vCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnZvaWQgQW1pR2V0VGltZU9mRGF5KHZvaWQgKnBBZGRyX3AsIHRUaW1lT2ZEYXkgKnBUaW1lT2ZEYXlfcCk7CgojaWZkZWYgX19jcGx1c3BsdXMKfQojZW5kaWYKI2VuZGlmCQkJCS8vIGlmbmRlZiBfRVBMQU1JX0hfCi8vIERpZSBsZXR6dGUgWmVpbGUgbXXfIHVuYmVkaW5ndCBlaW5lIGxlZXJlIFplaWxlIHNlaW4sIHdlaWwgbWFuY2hlIENvbXBpbGVyLy8gZGFtaXQgZWluIFByb2JsZW0gaGFiZW4sIHdlbm4gZGFzIG5pY2h0IHNvIGlzdCAoei5CLiBHTlUgb2RlciBCb3JsYW5kIEMrKyBCdWlsZGVyKS4K