LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIE1hcnZlbGwgR1BMIExpY2Vuc2UgT3B0aW9uCiAqCiAqIElmIHlvdSByZWNlaXZlZCB0aGlzIEZpbGUgZnJvbSBNYXJ2ZWxsLCB5b3UgbWF5IG9wdCB0byB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IKICogbW9kaWZ5IHRoaXMgRmlsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHZW5lcmFsCiAqIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxICh0aGUgIkdQTCBMaWNlbnNlIiksIGEgY29weSBvZiB3aGljaCBpcwogKiBhdmFpbGFibGUgYWxvbmcgd2l0aCB0aGUgRmlsZSBpbiB0aGUgbGljZW5zZS50eHQgZmlsZSBvciBieSB3cml0aW5nIHRvIHRoZSBGcmVlCiAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgb3IKICogb24gdGhlIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQuCiAqCiAqIFRIRSBGSUxFIElTIERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgVEhFIElNUExJRUQKICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIEVYUFJFU1NMWQogKiBESVNDTEFJTUVELiAgVGhlIEdQTCBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dCB0aGlzIHdhcnJhbnR5CiAqIGRpc2NsYWltZXIuCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaW5jbHVkZSAiYXBiX3RpbWVyLmgiCiNpbmNsdWRlIDxhcGJfcGVyZl9iYXNlLmg+CiNpbmNsdWRlIDxjb21tb24uaD4KCi8vI2luY2x1ZGUgImdhbG9pc19pby5oIgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIFByb2dyYW0gR3VpZGU6CiogMS4gSW5pdGlhbGl6ZSBEV19hcGJfdGltZXJzIChXcml0ZSCTMJQgaW4gYml0IDAgb2YgVGltZXJOQ29udHJvbFJlZzsKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBhcHByb3ByaWF0ZSB2YWx1ZXMgZm9yIHRpbWVyIG1vZGUKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpbnRlcnJ1cHQgbWFzaykKKiAyLiBMb2FkIENvdW50ZXIgVmFsdWUgKFdyaXRlIHRvIFRpbWVyTkxvYWRDb3VudCByZWdpc3RlcgoqIDMuIEVuYWJsZSBUaW1lciAgKFdyaXRlIJMxlCBpbiBiaXQgMCBvZiBUaW1lck5Db250cm9sUmVnKQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBGdW5jdGlvbjogICAgVElNRVJ4X1NldExvYWRDb3VudAoqCiogRGVzY3JpcHRpb246IFNldCBUaW1lcl9OIExvYWRDb3VudC4KKgoqIElucHV0czogICAgICB0aW1lcl9OLS0gdGltZXIgTiAoTj0wIHRvIDcpCiogICAgICAgICAgICAgIGNvdW50X3ZhbC0tIGNvdW50ZXIgdmFsdWUKKiBPdXRwdXRzOiAgICAgbm9uZQoqCiogUmV0dXJuOiAgICAgIG5vbmUKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBUSU1FUnhfU2V0TG9hZENvdW50KFVOU0czMiB0aW1lcl9OLCBVTlNHMzIgY291bnRfdmFsKQp7CglVTlNHMzIgYmFzZTsKCVVOU0czMiBvZmZzZXQ7CgoJYmFzZSA9IEFQQl9USU1FUl9JTlNUX0JBU0U7CglvZmZzZXQgPSBBUERfVElNRVJfMV9MT0FEQ09VTlQgKyB0aW1lcl9OKkFQRF9USU1FUl9SRUdfUkFOR0U7CgoJR0FfUkVHX1dPUkQzMl9XUklURShiYXNlK29mZnNldCwgY291bnRfdmFsKTsKfQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEZ1bmN0aW9uOiAgICBUSU1FUnhfU2V0Q29udHJvbFJlZwoqCiogRGVzY3JpcHRpb246IFNldCBUaW1lcl9OIENvbnRyb2wgUmVnaXN0ZXIuCioKKiBJbnB1dHM6ICAgICAgdGltZXJfTi0tIHRpbWVyIE4oTj0wIHRvIDcpCiogICAgICAgICAgICAgIG1hc2stLSBzZXQgbWFzayBiaXQuIDEtIG1hc2tlZCwgMC0gbm90IG1hc2tlZAoqICAgICAgICAgICAgICBlbmFibGUtLSB0aW1lciBlYW5ibGUgYml0LiAxLSBlbmFibGUsIDAtIGRpc2FibGUKKiAgICAgICAgICAgICAgbW9kZSAtLSB0aW1lciBtb2RlLiAxLXVzZXItZGVmaW5lZCBjb3VudCBtb2RlLCAwLSBmcmVlIHJ1biBtb2RlCiogT3V0cHV0czogICAgIG5vbmUKKgoqIFJldHVybjogICAgICBub25lCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgVElNRVJ4X1NldENvbnRyb2xSZWcoVU5TRzMyIHRpbWVyX04sIFVOU0czMiBtYXNrLCBVTlNHMzIgZW5hYmxlLCBVTlNHMzIgbW9kZSkKewoJVU5TRzMyIGJhc2U7CglVTlNHMzIgb2Zmc2V0OwoJVU5TRzMyIHZhbDsKCgliYXNlID0gQVBCX1RJTUVSX0lOU1RfQkFTRTsKCW9mZnNldCA9IEFQQl9USU1FUl8xX0NPTlRST0xSRUcgKyB0aW1lcl9OKkFQRF9USU1FUl9SRUdfUkFOR0U7Cgl2YWwgPSAobWFzayA8PCBMU2JUaW1lcl9JbnRlcnJ1cHRfTWFzaykgIHwgKGVuYWJsZSA8PCBMU2JUaW1lcl9FbmFibGUpIHwgKG1vZGUgPDwgTFNiVGltZXJfTW9kZSk7CglHQV9SRUdfV09SRDMyX1dSSVRFKGJhc2Urb2Zmc2V0LCB2YWwpOwp9Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRnVuY3Rpb246ICAgIFRJTUVSeF9TZXRNb2RlQW5kTWFzawoqCiogRGVzY3JpcHRpb246IFNldCBUaW1lcl9OIENvbnRyb2wgUmVnaXN0ZXIuCioKKiBJbnB1dHM6ICAgICAgdGltZXJfTi0tIHRpbWVyIE4oTj0wIHRvIDcpCiogICAgICAgICAgICAgIG1hc2stLSBzZXQgbWFzayBiaXQuIDEtIG1hc2tlZCwgMC0gbm90IG1hc2tlZAoqICAgICAgICAgICAgICBtb2RlIC0tIHRpbWVyIG1vZGUuIDEtdXNlci1kZWZpbmVkIGNvdW50IG1vZGUsIDAtIGZyZWUgcnVuIG1vZGUKKiBPdXRwdXRzOiAgICAgbm9uZQoqCiogUmV0dXJuOiAgICAgIG5vbmUKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBUSU1FUnhfU2V0TW9kZUFuZE1hc2soVU5TRzMyIHRpbWVyX04sIFVOU0czMiBtYXNrLCBVTlNHMzIgbW9kZSkKewoJVU5TRzMyIGJhc2U7CglVTlNHMzIgb2Zmc2V0OwoJVU5TRzMyIHZhbDsKCgliYXNlID0gQVBCX1RJTUVSX0lOU1RfQkFTRTsKCW9mZnNldCA9IEFQQl9USU1FUl8xX0NPTlRST0xSRUcgKyB0aW1lcl9OKkFQRF9USU1FUl9SRUdfUkFOR0U7CglHQV9SRUdfV09SRDMyX1JFQUQoYmFzZStvZmZzZXQsICZ2YWwpOwoJdmFsICY9IH4oICgxIDw8IExTYlRpbWVyX0ludGVycnVwdF9NYXNrKSB8ICgxIDw8IExTYlRpbWVyX01vZGUpKTsKCXZhbCB8PSAobWFzayA8PCBMU2JUaW1lcl9JbnRlcnJ1cHRfTWFzaykgIHwgKG1vZGUgPDwgTFNiVGltZXJfTW9kZSk7CglHQV9SRUdfV09SRDMyX1dSSVRFKGJhc2Urb2Zmc2V0LCB2YWwpOwp9Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRnVuY3Rpb246ICAgIFRJTUVSeF9TZXRNYXNrCioKKiBEZXNjcmlwdGlvbjogU2V0IFRpbWVyX04gQ29udHJvbCBSZWdpc3Rlci4KKgoqIElucHV0czogICAgICB0aW1lcl9OLS0gdGltZXIgTihOPTAgdG8gNykKKiAgICAgICAgICAgICAgbWFzay0tIHNldCBtYXNrIGJpdC4gMS0gbWFza2VkLCAwLSBub3QgbWFza2VkCiogT3V0cHV0czogICAgIG5vbmUKKgoqIFJldHVybjogICAgICBub25lCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgVElNRVJ4X1NldE1hc2soVU5TRzMyIHRpbWVyX04sIFVOU0czMiBtYXNrKQp7CglVTlNHMzIgYmFzZTsKCVVOU0czMiBvZmZzZXQ7CglVTlNHMzIgdmFsOwoKCWJhc2UgPSBBUEJfVElNRVJfSU5TVF9CQVNFOwoJb2Zmc2V0ID0gQVBCX1RJTUVSXzFfQ09OVFJPTFJFRyArIHRpbWVyX04qQVBEX1RJTUVSX1JFR19SQU5HRTsKCUdBX1JFR19XT1JEMzJfUkVBRChiYXNlK29mZnNldCwgJnZhbCk7Cgl2YWwgJj0gfiAoMSA8PCBMU2JUaW1lcl9JbnRlcnJ1cHRfTWFzayk7Cgl2YWwgfD0gKG1hc2sgPDwgTFNiVGltZXJfSW50ZXJydXB0X01hc2spOwoJR0FfUkVHX1dPUkQzMl9XUklURShiYXNlK29mZnNldCwgdmFsKTsKfQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEZ1bmN0aW9uOiAgICBUSU1FUnhfU2V0SW50RW4KKgoqIERlc2NyaXB0aW9uOiBlbmFibGUgb3IgZGlzYWJsZSBUaW1lcl9OIENvbnRyb2wgUmVnaXN0ZXIuCioKKiBJbnB1dHM6ICAgICAgdGltZXJfTi0tIHRpbWVyIE4oTj0wIHRvIDcpCiogICAgICAgICAgICAgIGVuYWJsZS0tIHRpbWVyIGVhbmJsZSBiaXQuIDEtIGVuYWJsZSwgMC0gZGlzYWJsZQoqIE91dHB1dHM6ICAgICBub25lCioKKiBSZXR1cm46ICAgICAgbm9uZQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIFRJTUVSeF9TZXRJbnRFbihVTlNHMzIgdGltZXJfTiwgVU5TRzMyIGVuYWJsZSkKewoJVU5TRzMyIGJhc2U7CglVTlNHMzIgb2Zmc2V0OwoJVU5TRzMyIHZhbDsKCgliYXNlID0gQVBCX1RJTUVSX0lOU1RfQkFTRTsKCW9mZnNldCA9IEFQQl9USU1FUl8xX0NPTlRST0xSRUcgKyB0aW1lcl9OKkFQRF9USU1FUl9SRUdfUkFOR0U7CglHQV9SRUdfV09SRDMyX1JFQUQoYmFzZStvZmZzZXQsICZ2YWwpOwoJdmFsICY9IH4oMSA8PCBMU2JUaW1lcl9FbmFibGUpOwoJdmFsIHw9IChlbmFibGUgPDwgTFNiVGltZXJfRW5hYmxlKTsKCUdBX1JFR19XT1JEMzJfV1JJVEUoYmFzZStvZmZzZXQsIHZhbCk7Cn0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBGdW5jdGlvbjogICAgVElNRVJ4X0dldEN1cnJlbnRWYWx1ZQoqCiogRGVzY3JpcHRpb246IEdldCBUaW1lcl9OIGN1cnJlbnQgVmFsdWUKKgoqIElucHV0czogICAgICB0aW1lcl9OLS0gdGltZXIgTihOPTAgdG8gNykKKgoqIE91dHB1dHM6ICAgICBub25lCioKKiBSZXR1cm46ICAgICAgdGltZXJfTiBjdXJyZW50IHZhbHVlLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpVTlNHMzIgVElNRVJ4X0dldEN1cnJlbnRWYWx1ZShVTlNHMzIgdGltZXJfTikKewoJVU5TRzMyIGJhc2U7CglVTlNHMzIgb2Zmc2V0OwoJVU5TRzMyIHZhbDsKCgliYXNlID0gQVBCX1RJTUVSX0lOU1RfQkFTRTsKCW9mZnNldCA9IEFQQl9USU1FUl8xX0NVUlJFTlRWQUxVRSArIHRpbWVyX04qQVBEX1RJTUVSX1JFR19SQU5HRTsKCUdBX1JFR19XT1JEMzJfUkVBRChiYXNlK29mZnNldCwgJnZhbCk7CglyZXR1cm4gdmFsOwp9Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRnVuY3Rpb246ICAgIFRJTUVSeF9DbGVhckludAoqCiogRGVzY3JpcHRpb246IGNsZWFyIHRpbWVyIE4gaW50ZXJydXB0LgoqCiogSW5wdXRzOiAgICAgIHRpbWVyX04tLSB0aW1lciBOKE49MCB0byA3KQoqCiogT3V0cHV0czogICAgIG5vbmUKKgoqIFJldHVybjogICAgICBub25lCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgVElNRVJ4X0NsZWFySW50KFVOU0czMiB0aW1lcl9OKQp7CglVTlNHMzIgYmFzZTsKCVVOU0czMiBvZmZzZXQ7CglVTlNHMzIgdmFsOwoKCWJhc2UgPSBBUEJfVElNRVJfSU5TVF9CQVNFOwoJb2Zmc2V0ID0gQVBCX1RJTUVSXzFfRU9JICsgdGltZXJfTipBUERfVElNRVJfUkVHX1JBTkdFOwoJR0FfUkVHX1dPUkQzMl9SRUFEKGJhc2Urb2Zmc2V0LCAmdmFsKTsKfQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEZ1bmN0aW9uOiAgICBUSU1FUnhfR2V0SW50U3RhdHVzCioKKiBEZXNjcmlwdGlvbjogR2V0IHRpbWVyIE4gaW50ZXJydXB0IHN0YXR1cy4KKgoqIElucHV0czogICAgICB0aW1lcl9OLS0gdGltZXIgTihOPTAgdG8gNykKKgoqIE91dHB1dHM6ICAgICBub25lCioKKiBSZXR1cm46ICAgICAgdGltZXIgTiBpbnRlcnJ1cHQgc3RhdHVzCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovClVOU0czMiBUSU1FUnhfR2V0SW50U3RhdHVzIChVTlNHMzIgdGltZXJfTikKewoJVU5TRzMyIGJhc2U7CglVTlNHMzIgb2Zmc2V0OwoJVU5TRzMyIHZhbDsKCgliYXNlID0gQVBCX1RJTUVSX0lOU1RfQkFTRTsKCW9mZnNldCA9IEFQQl9USU1FUl8xX0lOVFNUQVRVUyArIHRpbWVyX04qQVBEX1RJTUVSX1JFR19SQU5HRTsKCUdBX1JFR19XT1JEMzJfUkVBRChiYXNlK29mZnNldCwgJnZhbCk7CglyZXR1cm4gdmFsOwp9Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRnVuY3Rpb246ICAgIFRJTUVSU19DbGVhckFsbEludAoqCiogRGVzY3JpcHRpb246IENsZWFyIEFsbCB0aW1lcnMgaW50ZXJydXB0LgoqCiogSW5wdXRzOiAgICAgIG5vbmUKKgoqIE91dHB1dHM6ICAgICBub25lCioKKiBSZXR1cm46ICAgICAgbm9uZQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIFRJTUVSU19DbGVhckFsbEludCh2b2lkKQp7CglVTlNHMzIgYmFzZTsKCVVOU0czMiBvZmZzZXQ7CglVTlNHMzIgdmFsOwoKCWJhc2UgPSBBUEJfVElNRVJfSU5TVF9CQVNFOwoJb2Zmc2V0ID0gQVBCX1RJTUVSU19FT0k7CglHQV9SRUdfV09SRDMyX1JFQUQoYmFzZStvZmZzZXQsICZ2YWwpOwp9Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogRnVuY3Rpb246ICAgIFRJTUVSU19DbGVhckFsbEludAoqCiogRGVzY3JpcHRpb246IEdldCBBbGwgdGltZXJzIGludGVycnVwdC4KKgoqIElucHV0czogICAgICBub25lCioKKiBPdXRwdXRzOiAgICAgbm9uZQoqCiogUmV0dXJuOiAgICAgIEFsbCB0aW1lcnMgaW50ZXJydXB0IHN0c3R1cy4KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KVU5TRzMyIFRJTUVSU19HZXRBbGxJbnRTdGF0dXMgKHZvaWQpCnsKCVVOU0czMiBiYXNlOwoJVU5TRzMyIG9mZnNldDsKCVVOU0czMiB2YWw7CgoJYmFzZSA9IEFQQl9USU1FUl9JTlNUX0JBU0U7CglvZmZzZXQgPSBBUEJfVElNRVJTX0lOVFNUQVRVUzsKCUdBX1JFR19XT1JEMzJfUkVBRChiYXNlK29mZnNldCwgJnZhbCk7CglyZXR1cm4gdmFsOwp9Cg==