LyoKICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4gCiAqIAogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCiAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAogKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0CiAqIHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCiAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAKICogCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCiAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgogKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQogKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAogKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQogKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gCiAqCiAqLwoKLyoqIEBmaWxlIE9NWF9PdGhlci5oIC0gT3Blbk1heCBJTCB2ZXJzaW9uIDEuMS4yCiAqICBUaGUgc3RydWN0dXJlcyBuZWVkZWQgYnkgT3RoZXIgY29tcG9uZW50cyB0byBleGNoYW5nZQogKiAgcGFyYW1ldGVycyBhbmQgY29uZmlndXJhdGlvbiBkYXRhIHdpdGggdGhlIGNvbXBvbmVudHMuCiAqLwoKI2lmbmRlZiBPTVhfT3RoZXJfaAojZGVmaW5lIE9NWF9PdGhlcl9oCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwoKCi8qIEVhY2ggT01YIGhlYWRlciBtdXN0IGluY2x1ZGUgYWxsIHJlcXVpcmVkIGhlYWRlciBmaWxlcyB0byBhbGxvdyB0aGUKICogIGhlYWRlciB0byBjb21waWxlIHdpdGhvdXQgZXJyb3JzLiAgVGhlIGluY2x1ZGVzIGJlbG93IGFyZSByZXF1aXJlZAogKiAgZm9yIHRoaXMgaGVhZGVyIGZpbGUgdG8gY29tcGlsZSBzdWNjZXNzZnVsbHkgCiAqLwoKI2luY2x1ZGUgPE9NWF9Db3JlLmg+CgoKLyoqIAogKiBFbnVtZXJhdGlvbiBvZiBwb3NzaWJsZSBkYXRhIHR5cGVzIHdoaWNoIG1hdGNoIHRvIG11bHRpcGxlIGRvbWFpbnMgb3Igbm8KICogZG9tYWluIGF0IGFsbC4gIEZvciB0eXBlcyB3aGljaCBhcmUgdmVuZG9yIHNwZWNpZmljLCBhIHZhbHVlIGFib3ZlCiAqIE9NWF9PVEhFUl9WRU5ET1JUU1RBUlQgc2hvdWxkIGJlIHVzZWQuCiAqLwp0eXBlZGVmIGVudW0gT01YX09USEVSX0ZPUk1BVFRZUEUgewogICAgT01YX09USEVSX0Zvcm1hdFRpbWUgPSAwLCAvKio8IFRyYW5zbWlzc2lvbiBvZiB2YXJpb3VzIHRpbWVzdGFtcHMsIGVsYXBzZWQgdGltZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZSBkZWx0YXMsIGV0YyAqLwogICAgT01YX09USEVSX0Zvcm1hdFBvd2VyLCAgICAvKio8IFBlcmhhcHMgdXNlZCBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIHBvd2VyIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQsIHNldHRpbmcgY2xvY2tzPyAqLwogICAgT01YX09USEVSX0Zvcm1hdFN0YXRzLCAgICAvKio8IENvdWxkIGJlIHRoaW5ncyBzdWNoIGFzIGZyYW1lIHJhdGUsIGZyYW1lcyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wcGVkLCBldGMgKi8KICAgIE9NWF9PVEhFUl9Gb3JtYXRCaW5hcnksICAgLyoqPCBBcmJpdHJhcnkgYmluYXJ5IGRhdGEgKi8KICAgIE9NWF9PVEhFUl9Gb3JtYXRWZW5kb3JSZXNlcnZlZCA9IDEwMDAsIC8qKjwgU3RhcnRpbmcgdmFsdWUgZm9yIHZlbmRvciBzcGVjaWZpYyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0cyAqLwoKICAgIE9NWF9PVEhFUl9Gb3JtYXRLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCiAgICBPTVhfT1RIRVJfRm9ybWF0VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgIE9NWF9PVEhFUl9Gb3JtYXRNYXggPSAweDdGRkZGRkZGCn0gT01YX09USEVSX0ZPUk1BVFRZUEU7CgovKiogCiAqIEVudW1lcmF0aW9uIG9mIHNlZWsgbW9kZXMuCiAqLwp0eXBlZGVmIGVudW0gT01YX1RJTUVfU0VFS01PREVUWVBFIHsKICAgIE9NWF9USU1FX1NlZWtNb2RlRmFzdCA9IDAsIC8qKjwgUHJlZmVyIHNlZWtpbmcgdG8gYW4gYXBwcm94aW1hdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb2YgdGhlIHJlcXVlc3RlZCBzZWVrIHBvc2l0aW9uIG92ZXIgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBhY3R1YWwgc2VlayBwb3NpdGlvbiBpZiBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcmVzdWx0cyBpbiBhIGZhc3RlciBzZWVrLiAqLwogICAgT01YX1RJTUVfU2Vla01vZGVBY2N1cmF0ZSwgLyoqPCBQcmVmZXIgc2Vla2luZyB0byB0aGUgYWN0dWFsIHNlZWsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwb3NpdGlvbiBvdmVyIGFuIGFwcHJveGltYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9mIHRoZSByZXF1ZXN0ZWQgc2VlayBwb3NpdGlvbiBldmVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpZiBpdCByZXN1bHRzIGluIGEgc2xvd2VyIHNlZWsuICovCiAgICBPTVhfVElNRV9TZWVrTW9kZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIEtocm9ub3MgU3RhbmRhcmQgRXh0ZW5zaW9ucyAqLyAKICAgIE9NWF9USU1FX1NlZWtNb2RlVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgVmVuZG9yIEV4dGVuc2lvbnMgKi8KICAgIE9NWF9USU1FX1NlZWtNb2RlTWF4ID0gMHg3RkZGRkZGRgp9IE9NWF9USU1FX1NFRUtNT0RFVFlQRTsKCi8qIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIHNlZWttb2RlIG9mIHRoZSBjb21wb25lbnQgKi8KdHlwZWRlZiBzdHJ1Y3QgT01YX1RJTUVfQ09ORklHX1NFRUtNT0RFVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgT01YX1RJTUVfU0VFS01PREVUWVBFIGVUeXBlOyAgICAvKio8IFRoZSBzZWVrIG1vZGUgKi8KfSBPTVhfVElNRV9DT05GSUdfU0VFS01PREVUWVBFOwoKLyoqIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSB0aW1lIHN0YW1wIHVzZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgCiAqIG9uIHRoZSBDbG9jayBDb21wb25lbnQgKENDKToKICogCiAqIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50V2FsbFRpbWU6IHF1ZXJ5IG9mIHRoZSBDQ5JzIGN1cnJlbnQgd2FsbCAgCiAqICAgICB0aW1lCiAqIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50TWVkaWFUaW1lOiBxdWVyeSBvZiB0aGUgQ0OScyBjdXJyZW50IG1lZGlhCiAqICAgICB0aW1lCiAqIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50QXVkaW9SZWZlcmVuY2UgYW5kICAKICogT01YX0luZGV4Q29uZmlnVGltZUN1cnJlbnRWaWRlb1JlZmVyZW5jZTogYXVkaW8vdmlkZW8gcmVmZXJlbmNlIAogKiAgICAgY2xvY2sgc2VuZGluZyBTQyBpdHMgcmVmZXJlbmNlIHRpbWUKICogT01YX0luZGV4Q29uZmlnVGltZUNsaWVudFN0YXJ0VGltZTogYSBDbG9jayBDb21wb25lbnQgY2xpZW50IHNlbmRzIAogKiAgICAgdGhpcyBzdHJ1Y3R1cmUgdG8gdGhlIENsb2NrIENvbXBvbmVudCB2aWEgYSBTZXRDb25maWcgb24gaXRzIAogKiAgICAgY2xpZW50IHBvcnQgd2hlbiBpdCByZWNlaXZlcyBhIGJ1ZmZlciB3aXRoCiAqICAgICBPTVhfQlVGRkVSRkxBR19TVEFSVFRJTUUgc2V0LiBJdCBtdXN0IHVzZSB0aGUgdGltZXN0YW1wCiAqICAgICBzcGVjaWZpZWQgYnkgdGhhdCBidWZmZXIgZm9yIG5TdGFydFRpbWVzdGFtcC4gCiAqCiAqIEl0knMgYWxzbyB1c2VkIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWcgb24gY29tcG9uZW50cyBpbiBnZW5lcmFsOgogKgogKiBPTVhfSW5kZXhDb25maWdUaW1lUG9zaXRpb246IElMIGNsaWVudCBxdWVyeWluZyBjb21wb25lbnQgcG9zaXRpb24gCiAqIChHZXRDb25maWcpIG9yIGNvbW1hbmRpbmcgYSBjb21wb25lbnQgdG8gc2VlayB0byB0aGUgZ2l2ZW4gbG9jYXRpb24KICogKFNldENvbmZpZykKICovCQp0eXBlZGVmIHN0cnVjdCBPTVhfVElNRV9DT05GSUdfVElNRVNUQU1QVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247ICAgIC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGluZm9ybWF0aW9uICovCiAgICBPTVhfVTMyIG5Qb3J0SW5kZXg7ICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCiAgICBPTVhfVElDS1MgblRpbWVzdGFtcDsgIAkgICAgIC8qKjwgdGltZXN0YW1wIC4qLyAKfSBPTVhfVElNRV9DT05GSUdfVElNRVNUQU1QVFlQRTsgIAoKLyoqIEVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIHJlZmVyZW5jZSBjbG9ja3MgdG8gdGhlIG1lZGlhIHRpbWUuICovCnR5cGVkZWYgZW51bSBPTVhfVElNRV9VUERBVEVUWVBFIHsKICAgICAgT01YX1RJTUVfVXBkYXRlUmVxdWVzdEZ1bGZpbGxtZW50LCAgICAvKio8IFVwZGF0ZSBpcyB0aGUgZnVsZmlsbG1lbnQgb2YgYSBtZWRpYSB0aW1lIHJlcXVlc3QuICovCiAgICAgIE9NWF9USU1FX1VwZGF0ZVNjYWxlQ2hhbmdlZCwJICAgICAgICAvKio8IFVwZGF0ZSB3YXMgZ2VuZXJhdGVkIGJlY2F1c2UgdGhlIHNjYWxlIGNoYWduZWQuICovCiAgICAgIE9NWF9USU1FX1VwZGF0ZUNsb2NrU3RhdGVDaGFuZ2VkLCAgICAgLyoqPCBVcGRhdGUgd2FzIGdlbmVyYXRlZCBiZWNhdXNlIHRoZSBjbG9jayBzdGF0ZSBjaGFuZ2VkLiAqLwogICAgICBPTVhfVElNRV9VcGRhdGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCiAgICAgIE9NWF9USU1FX1VwZGF0ZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgIE9NWF9USU1FX1VwZGF0ZU1heCA9IDB4N0ZGRkZGRkYKfSBPTVhfVElNRV9VUERBVEVUWVBFOwoKLyoqIEVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIHJlZmVyZW5jZSBjbG9ja3MgdG8gdGhlIG1lZGlhIHRpbWUuICovCnR5cGVkZWYgZW51bSBPTVhfVElNRV9SRUZDTE9DS1RZUEUgewogICAgICBPTVhfVElNRV9SZWZDbG9ja05vbmUsICAgIC8qKjwgVXNlIG5vIHJlZmVyZW5jZXMuICovCiAgICAgIE9NWF9USU1FX1JlZkNsb2NrQXVkaW8sCS8qKjwgVXNlIHJlZmVyZW5jZXMgc2VudCB0aHJvdWdoIE9NWF9JbmRleENvbmZpZ1RpbWVDdXJyZW50QXVkaW9SZWZlcmVuY2UgKi8KICAgICAgT01YX1RJTUVfUmVmQ2xvY2tWaWRlbywgICAvKio8IFVzZSByZWZlcmVuY2VzIHNlbnQgdGhyb3VnaCBPTVhfSW5kZXhDb25maWdUaW1lQ3VycmVudFZpZGVvUmVmZXJlbmNlICovCiAgICAgIE9NWF9USU1FX1JlZkNsb2NrS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLCAvKio8IFJlc2VydmVkIHJlZ2lvbiBmb3IgaW50cm9kdWNpbmcgS2hyb25vcyBTdGFuZGFyZCBFeHRlbnNpb25zICovIAogICAgICBPTVhfVElNRV9SZWZDbG9ja1ZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwgLyoqPCBSZXNlcnZlZCByZWdpb24gZm9yIGludHJvZHVjaW5nIFZlbmRvciBFeHRlbnNpb25zICovCiAgICAgIE9NWF9USU1FX1JlZkNsb2NrTWF4ID0gMHg3RkZGRkZGRgp9IE9NWF9USU1FX1JFRkNMT0NLVFlQRTsKCi8qKiBFbnVtZXJhdGlvbiBvZiBjbG9jayBzdGF0ZXMuICovCnR5cGVkZWYgZW51bSBPTVhfVElNRV9DTE9DS1NUQVRFIHsKICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZVJ1bm5pbmcsICAgICAgICAgICAgIC8qKjwgQ2xvY2sgcnVubmluZy4gKi8KICAgICAgT01YX1RJTUVfQ2xvY2tTdGF0ZVdhaXRpbmdGb3JTdGFydFRpbWUsIC8qKjwgQ2xvY2sgd2FpdGluZyB1bnRpbCB0aGUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHByZXNjcmliZWQgY2xpZW50cyBlbWl0IHRoZWlyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHN0YXJ0IHRpbWUuICovCiAgICAgIE9NWF9USU1FX0Nsb2NrU3RhdGVTdG9wcGVkLCAgICAgICAgICAgICAvKio8IENsb2NrIHN0b3BwZWQuICovCiAgICAgIE9NWF9USU1FX0Nsb2NrU3RhdGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBLaHJvbm9zIFN0YW5kYXJkIEV4dGVuc2lvbnMgKi8gCiAgICAgIE9NWF9USU1FX0Nsb2NrU3RhdGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsIC8qKjwgUmVzZXJ2ZWQgcmVnaW9uIGZvciBpbnRyb2R1Y2luZyBWZW5kb3IgRXh0ZW5zaW9ucyAqLwogICAgICBPTVhfVElNRV9DbG9ja1N0YXRlTWF4ID0gMHg3RkZGRkZGRgp9IE9NWF9USU1FX0NMT0NLU1RBVEU7CgovKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyBhIG1lZGlhIHRpbWUgcmVxdWVzdCB0byB0aGUgY2xvY2sgY29tcG9uZW50LgogKgogKiAgQSBjbGllbnQgY29tcG9uZW50IHNlbmRzIHRoaXMgc3RydWN0dXJlIHRvIHRoZSBDbG9jayBDb21wb25lbnQgdmlhIGEgU2V0Q29uZmlnCiAqICBvbiBpdHMgY2xpZW50IHBvcnQgdG8gc3BlY2lmeSBhIG1lZGlhIHRpbWVzdGFtcCB0aGUgQ2xvY2sgQ29tcG9uZW50CiAqICBzaG91bGQgZW1pdC4gIFRoZSBDbG9jayBDb21wb25lbnQgc2hvdWxkIGZ1bGZpbGwgdGhlIHJlcXVlc3QgYnkgc2VuZGluZyBhCiAqICBPTVhfVElNRV9NRURJQVRJTUVUWVBFIHdoZW4gaXRzIG1lZGlhIGNsb2NrIG1hdGNoZXMgdGhlIHJlcXVlc3RlZCAKICogIHRpbWVzdGFtcC4KICoKICogIFRoZSBjbGllbnQgbWF5IHJlcXVpcmUgYSBtZWRpYSB0aW1lIHJlcXVlc3QgYmUgZnVsZmlsbGVkIHNsaWdodGx5CiAqICBlYXJsaWVyIHRoYW4gdGhlIG1lZGlhIHRpbWUgc3BlY2lmaWVkLiBJbiB0aGlzIGNhc2UgdGhlIGNsaWVudCBzcGVjaWZpZXMgCiAqICBhbiBvZmZzZXQgd2hpY2ggaXMgZXF1YWwgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3YWxsIHRpbWUgY29ycmVzcG9uZGluZyAKICogIHRvIHRoZSByZXF1ZXN0ZWQgbWVkaWEgdGltZSBhbmQgdGhlIHdhbGwgdGltZSB3aGVuIGl0IHdpbGwgYmUgCiAqICBmdWxmaWxsZWQuIAogKgogKiAgQSBjbGllbnQgY29tcG9uZW50IG1heSB1c2VzIHRoZXNlIHJlcXVlc3RzIGFuZCB0aGUgT01YX1RJTUVfTUVESUFUSU1FVFlQRSB0bwogKiAgdGltZSBldmVudHMgYWNjb3JkaW5nIHRvIHRpbWVzdGFtcHMuIElmIGEgY2xpZW50IG11c3QgcGVyZm9ybSBhbiBvcGVyYXRpb24gTyBhdAogKiAgYSB0aW1lIFQgKGUuZy4gZGVsaXZlciBhIHZpZGVvIGZyYW1lIGF0IGl0cyBjb3JyZXNwb25kaW5nIHRpbWVzdGFtcCksIGl0IG1ha2VzIGEgCiAqICBtZWRpYSB0aW1lIHJlcXVlc3QgYXQgVCAocGVyaGFwcyBzcGVjaWZ5aW5nIGFuIG9mZnNldCB0byBlbnN1cmUgdGhlIHJlcXVlc3QgZnVsZmlsbG1lbnQKICogIGlzIGEgbGl0dGxlIGVhcmx5KS4gV2hlbiB0aGUgY2xvY2sgY29tcG9uZW50IHBhc3NlcyB0aGUgcmVzdWx0aW5nIE9NWF9USU1FX01FRElBVElNRVRZUEUKICogIHN0cnVjdHVyZSBiYWNrIHRvIHRoZSBjbGllbnQgY29tcG9uZW50LCB0aGUgY2xpZW50IG1heSBwZXJmb3JtIG9wZXJhdGlvbiBPIChwZXJoYXBzIGhhdmluZwogKiAgdG8gd2FpdCBhIHNsaWdodCBhbW91bnQgbW9yZSB0aW1lIGl0c2VsZiBhcyBzcGVjaWZpZWQgYnkgdGhlIHJldHVybiB2YWx1ZXMpLgogKi8KCnR5cGVkZWYgc3RydWN0IE9NWF9USU1FX0NPTkZJR19NRURJQVRJTUVSRVFVRVNUVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgIE9NWF9VMzIgblBvcnRJbmRleDsgICAgICAgICAvKio8IHBvcnQgdGhhdCB0aGlzIHN0cnVjdHVyZSBhcHBsaWVzIHRvICovCiAgICBPTVhfUFRSIHBDbGllbnRQcml2YXRlOyAgICAgLyoqPCBDbGllbnQgcHJpdmF0ZSBkYXRhIHRvIGRpc2FiaWd1YXRlIHRoaXMgbWVkaWEgdGltZSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGZyb20gb3RoZXJzIChlLmcuIHRoZSBudW1iZXIgb2YgdGhlIGZyYW1lIHRvIGRlbGl2ZXIpLiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIER1cGxpY2F0ZWQgaW4gdGhlIG1lZGlhIHRpbWUgc3RydWN0dXJlIHRoYXQgZnVsZmlsbHMgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB0aGlzIHJlcXVlc3QuIEEgdmFsdWUgb2YgemVybyBpcyByZXNlcnZlZCBmb3IgdGltZSBzY2FsZSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHVwZGF0ZXMuICovCiAgICBPTVhfVElDS1Mgbk1lZGlhVGltZXN0YW1wOyAgLyoqPCBNZWRpYSB0aW1lc3RhbXAgcmVxdWVzdGVkLiovIAogICAgT01YX1RJQ0tTIG5PZmZzZXQ7ICAgICAgICAgIC8qKjwgQW1vdW50IG9mIHdhbGwgY2xvY2sgdGltZSBieSB3aGljaCB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICByZXF1ZXN0IHNob3VsZCBiZSBmdWxmaWxsZWQgZWFybHkgKi8KfSBPTVhfVElNRV9DT05GSUdfTUVESUFUSU1FUkVRVUVTVFRZUEU7CgovKio8IFN0cnVjdHVyZSBzZW50IGZyb20gdGhlIGNsb2NrIGNvbXBvbmVudCBjbGllbnQgZWl0aGVyIHdoZW4gZnVsZmlsbGluZyAKICogICBhIG1lZGlhIHRpbWUgcmVxdWVzdCBvciB3aGVuIHRoZSB0aW1lIHNjYWxlIGhhcyBjaGFuZ2VkLiAKICoKICogICBJbiB0aGUgZm9ybWVyIGNhc2UgdGhlIENsb2NrIENvbXBvbmVudCBmaWxscyB0aGlzIHN0cnVjdHVyZSBhbmQgdGltZXMgaXRzIGVtaXNzaW9uIAogKiAgIHRvIGEgY2xpZW50IGNvbXBvbmVudCAodmlhIHRoZSBjbGllbnQgcG9ydCkgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIG1lZGlhIAogKiAgIHRpbWUgcmVxdWVzdCBzZW50IGJ5IHRoZSBjbGllbnQuIFRoZSBDbG9jayBDb21wb25lbnQgc2hvdWxkIHRpbWUgdGhlIGVtaXNzaW9uIHRvIG9jY3VyCiAqICAgd2hlbiB0aGUgcmVxdWVzdGVkIHRpbWVzdGFtcCBtYXRjaGVzIHRoZSBDbG9jayBDb21wb25lbnQncyBtZWRpYSB0aW1lIGJ1dCBhbHNvIHRoZSAKICogICBwcmVzY3JpYmVkIG9mZnNldCBlYXJseS4gCiAqCiAqICAgVXBvbiBzY2FsZSBjaGFuZ2VzIHRoZSBjbG9jayBjb21wb25lbnQgY2xlYXJzIHRoZSBuQ2xpZW50UHJpdmF0ZSBkYXRhLCBzZW5kcyB0aGUgY3VycmVudAogKiAgIG1lZGlhIHRpbWUgYW5kIHNldHMgdGhlIG5TY2FsZSB0byB0aGUgbmV3IHNjYWxlIHZpYSB0aGUgY2xpZW50IHBvcnQuIEl0IGVtaXRzIGEgCiAqICAgT01YX1RJTUVfTUVESUFUSU1FVFlQRSB0byBhbGwgY2xpZW50cyBpbmRlcGVuZGVudCBvZiBhbnkgcmVxdWVzdHMuIFRoaXMgYWxsb3dzIGNsaWVudHMgdG8gCiAqICAgYWx0ZXIgcHJvY2Vzc2luZyB0byBhY2NvbW9kYXRlIHNjYWxpbmcuIEZvciBpbnN0YW5jZSBhIHZpZGVvIGNvbXBvbmVudCBtaWdodCBza2lwIGludGVyLWZyYW1lcyAKICogICBpbiB0aGUgY2FzZSBvZiBleHRyZW1lIGZhc3Rmb3J3YXJkLiBMaWtld2lzZSBhbiBhdWRpbyBjb21wb25lbnQgbWlnaHQgYWRkIG9yIHJlbW92ZSBzYW1wbGVzIAogKiAgIGZyb20gYW4gYXVkaW8gZnJhbWUgdG8gc2NhbGUgYXVkaW8gZGF0YS4gCiAqCiAqICAgSXQgaXMgZXhwZWN0ZWQgdGhhdCBzb21lIGNsb2NrIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBhYmxlIHRvIGZ1bGZpbGwgcmVxdWVzdHMKICogICBhdCBleGFjdGx5IHRoZSBwcmVzY3JpYmVkIHRpbWUuIFRoaXMgaXMgYWNjZXB0YWJsZSBzbyBsb25nIGFzIHRoZSByZXF1ZXN0IGlzIAogKiAgIGZ1bGZpbGxlZCBhdCBsZWFzdCBhcyBlYXJseSBhcyBkZXNjcmliZWQgYW5kIG5vdCBsYXRlci4gVGhpcyBzdHJ1Y3R1cmUgcHJvdmlkZXMgCiAqICAgZmllbGRzIHRoZSBjbGllbnQgbWF5IHVzZSB0byB3YWl0IGZvciB0aGUgcmVtYWluaW5nIHRpbWUuCiAqCiAqICAgVGhlIGNsaWVudCBtYXkgdXNlIGVpdGhlciB0aGUgbk9mZnNldCBvciBuV2FsbFRpbWVBdE1lZGlhIGZpZWxkcyB0byBkZXRlcm1pbmUgdGhlIAogKiAgIHdhbGwgdGltZSB1bnRpbCB0aGUgbk1lZGlhVGltZXN0YW1wIGFjdHVhbGx5IG9jY3Vycy4gSW4gdGhlIGxhdHRlciBjYXNlIHRoZQogKiAgIGNsaWVudCBjYW4gZ2V0IGEgbW9yZSBhY2N1cmF0ZSB2YWx1ZSBmb3Igb2Zmc2V0IGJ5IGdldHRpbmcgdGhlIGN1cnJlbnQgd2FsbAogKiAgIGZyb20gdGhlIGNsb2MgY29tcG9uZW50IGFuZCBzdWJ0cmFjdGluZyBpdCBmcm9tIG5XYWxsVGltZUF0TWVkaWEuIAogKi8KCnR5cGVkZWYgc3RydWN0IE9NWF9USU1FX01FRElBVElNRVRZUEUgewogICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgIE9NWF9VMzIgbkNsaWVudFByaXZhdGU7ICAgICAgICAgLyoqPCBDbGllbnQgcHJpdmF0ZSBkYXRhIHRvIGRpc2FiaWd1YXRlIHRoaXMgbWVkaWEgdGltZSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBmcm9tIG90aGVycy4gQ29waWVkIGZyb20gdGhlIG1lZGlhIHRpbWUgcmVxdWVzdC4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgQSB2YWx1ZSBvZiB6ZXJvIGlzIHJlc2VydmVkIGZvciB0aW1lIHNjYWxlIHVwZGF0ZXMuICovCiAgICBPTVhfVElNRV9VUERBVEVUWVBFIGVVcGRhdGVUeXBlOyAvKio8IFJlYXNvbiBmb3IgdGhlIHVwZGF0ZSAqLwogICAgT01YX1RJQ0tTIG5NZWRpYVRpbWVzdGFtcDsgICAgICAvKio8IE1lZGlhIHRpbWUgcmVxdWVzdGVkLiBJZiBubyBtZWRpYSB0aW1lIHdhcyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICByZXF1ZXN0ZWQgdGhlbiB0aGlzIGlzIHRoZSBjdXJyZW50IG1lZGlhIHRpbWUuICovIAogICAgT01YX1RJQ0tTIG5PZmZzZXQ7ICAgICAgICAgICAgICAvKio8IEFtb3VudCBvZiB3YWxsIGNsb2NrIHRpbWUgYnkgd2hpY2ggdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHJlcXVlc3Qgd2FzIGFjdHVhbGx5IGZ1bGZpbGxlZCBlYXJseSAqLwoKICAgIE9NWF9USUNLUyBuV2FsbFRpbWVBdE1lZGlhVGltZTsgLyoqPCBXYWxsIHRpbWUgY29ycmVzcG9uZGluZyB0byBuTWVkaWFUaW1lU3RhbXAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgQSBjbGllbnQgbWF5IGNvbXBhcmUgdGhpcyB2YWx1ZSB0byBjdXJyZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgbWVkaWEgdGltZSBvYnRhaW5lZCBmcm9tIHRoZSBDbG9jayBDb21wb25lbnQgdG8gZGV0ZXJtaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdGhlIHdhbGwgdGltZSB1bnRpbCB0aGUgbWVkaWEgdGltZXN0YW1wIGlzIHJlYWxseQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGN1cnJlbnQuICovCiAgICBPTVhfUzMyIHhTY2FsZTsgICAgICAgICAgICAgICAgIC8qKjwgQ3VycmVudCBtZWRpYSB0aW1lIHNjYWxlIGluIFExNiBmb3JtYXQuICovCiAgICBPTVhfVElNRV9DTE9DS1NUQVRFIGVTdGF0ZTsgICAgIC8qIFNlZWtpbmcgQ2hhbmdlLiBBZGRlZCA3LzEyLiovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3RhdGUgb2YgdGhlIG1lZGlhIHRpbWUuICovCn0gT01YX1RJTUVfTUVESUFUSU1FVFlQRTsgIAoKLyoqIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgbWVkaWEgdGltZSBzY2FsZSBmYWN0b3IuIEFwcGxpY2FibGUgb25seSB0byBjbG9jayAKICogIGNvbXBvbmVudCwgb3RoZXIgY29tcG9uZW50cyBzZWUgc2NhbGUgY2hhbmdlcyB2aWEgT01YX1RJTUVfTUVESUFUSU1FVFlQRSBidWZmZXJzIHNlbnQgdmlhCiAqICB0aGUgY2xvY2sgY29tcG9uZW50IGNsaWVudCBwb3J0cy4gVXBvbiByZWNpZXZpbmcgdGhpcyBjb25maWcgdGhlIGNsb2NrIGNvbXBvbmVudCBjaGFuZ2VzIAogKiAgdGhlIHJhdGUgYnkgd2hpY2ggdGhlIG1lZGlhIHRpbWUgaW5jcmVhc2VzIG9yIGRlY3JlYXNlcyBlZmZlY3RpdmVseSBpbXBsZW1lbnRpbmcgdHJpY2sgbW9kZXMuIAogKi8gCnR5cGVkZWYgc3RydWN0IE9NWF9USU1FX0NPTkZJR19TQ0FMRVRZUEUgewogICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgIE9NWF9TMzIgeFNjYWxlOyAgICAgICAgICAgICAgICAgLyoqPCBUaGlzIGlzIGEgdmFsdWUgaW4gUTE2IGZvcm1hdCB3aGljaCBpcyB1c2VkIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzY2FsaW5nIHRoZSBtZWRpYSB0aW1lICovCn0gT01YX1RJTUVfQ09ORklHX1NDQUxFVFlQRTsKIAovKiogQml0cyB1c2VkIHRvIGlkZW50aWZ5IGEgY2xvY2sgcG9ydC4gVXNlZCBpbiBPTVhfVElNRV9DT05GSUdfQ0xPQ0tTVEFURVRZUEWScyBuV2FpdE1hc2sgZmllbGQgKi8KI2RlZmluZSBPTVhfQ0xPQ0tQT1JUMCAweDAwMDAwMDAxCiNkZWZpbmUgT01YX0NMT0NLUE9SVDEgMHgwMDAwMDAwMgojZGVmaW5lIE9NWF9DTE9DS1BPUlQyIDB4MDAwMDAwMDQKI2RlZmluZSBPTVhfQ0xPQ0tQT1JUMyAweDAwMDAwMDA4CiNkZWZpbmUgT01YX0NMT0NLUE9SVDQgMHgwMDAwMDAxMAojZGVmaW5lIE9NWF9DTE9DS1BPUlQ1IDB4MDAwMDAwMjAKI2RlZmluZSBPTVhfQ0xPQ0tQT1JUNiAweDAwMDAwMDQwCiNkZWZpbmUgT01YX0NMT0NLUE9SVDcgMHgwMDAwMDA4MAoKLyoqIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgbW9kZSBvZiB0aGUgbWVkaWEgY2xvY2suIAogKiAgSUwgQ2xpZW50IHVzZXMgdGhpcyBjb25maWcgdG8gY2hhbmdlIG9yIHF1ZXJ5IHRoZSBtb2RlIG9mIHRoZSAKICogIG1lZGlhIGNsb2NrIG9mIHRoZSBjbG9jayBjb21wb25lbnQuIEFwcGxpY2FibGUgb25seSB0byBjbG9jawogKiAgY29tcG9uZW50LiAKICogIAogKiAgT24gYSBTZXRDb25maWcgaWYgZVN0YXRlIGlzIE9NWF9USU1FX0Nsb2NrU3RhdGVSdW5uaW5nIG1lZGlhIHRpbWUKICogIHN0YXJ0cyBpbW1lZGlhdGVseSBhdCB0aGUgcHJlc2NyaWJlZCBzdGFydCB0aW1lLiBJZgogKiAgT01YX1RJTUVfQ2xvY2tTdGF0ZVdhaXRpbmdGb3JTdGFydFRpbWUgdGhlIENsb2NrIENvbXBvbmVudCBpZ25vcmVzCiAqICB0aGUgZ2l2ZW4gblN0YXJ0VGltZSBhbmQgd2FpdHMgZm9yIGFsbCBjbGllbnRzIHNwZWNpZmllZCBpbiB0aGUgCiAqICBuV2FpdE1hc2sgdG8gc2VuZCBzdGFydHRpbWVzICh2aWEgCiAqICBPTVhfSW5kZXhDb25maWdUaW1lQ2xpZW50U3RhcnRUaW1lKS4gVGhlIENsb2NrIENvbXBvbmVudCB0aGVuIHN0YXJ0cyAKICogIHRoZSBtZWRpYSBjbG9jayB1c2luZyB0aGUgZWFybGllc3Qgc3RhcnQgdGltZSBzdXBwbGllZC4gKi8gICAgCnR5cGVkZWYgc3RydWN0IE9NWF9USU1FX0NPTkZJR19DTE9DS1NUQVRFVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBpbmZvcm1hdGlvbiAqLwogICAgT01YX1RJTUVfQ0xPQ0tTVEFURSBlU3RhdGU7IC8qKjwgU3RhdGUgb2YgdGhlIG1lZGlhIHRpbWUuICovCiAgICBPTVhfVElDS1MgblN0YXJ0VGltZTsgICAgICAgLyoqPCBTdGFydCB0aW1lIG9mIHRoZSBtZWRpYSB0aW1lLiAqLwogICAgT01YX1RJQ0tTIG5PZmZzZXQ7ICAgICAgICAgIC8qKjwgVGltZSB0byBvZmZzZXQgdGhlIG1lZGlhIHRpbWUgYnkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKGUuZy4gcHJlcm9sbCkuIE1lZGlhIHRpbWUgd2lsbCBiZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlcG9ydGVkIHRvIGJlIG5PZmZzZXQgdGlja3MgZWFybGllci4gICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgT01YX1UzMiBuV2FpdE1hc2s7ICAgICAgICAgIC8qKjwgTWFzayBvZiBPTVhfQ0xPQ0tQT1JUIHZhbHVlcy4gKi8KfSBPTVhfVElNRV9DT05GSUdfQ0xPQ0tTVEFURVRZUEU7CgovKiogU3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgcmVmZXJlbmNlIGNsb2NrIGN1cnJlbnRseSBiZWluZyB1c2VkIHRvCiAqICBjb21wdXRlIG1lZGlhIHRpbWUuIElMIGNsaWVudCB1c2VzIHRoaXMgY29uZmlnIHRvIGNoYW5nZSBvciBxdWVyeSB0aGUgCiAqICBjbG9jayBjb21wb25lbnQncyBhY3RpdmUgcmVmZXJlbmNlIGNsb2NrICovCnR5cGVkZWYgc3RydWN0IE9NWF9USU1FX0NPTkZJR19BQ1RJVkVSRUZDTE9DS1RZUEUgewogICAgT01YX1UzMiBuU2l6ZTsgICAgICAgICAgICAgICAgICAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAgICAgICAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgIE9NWF9USU1FX1JFRkNMT0NLVFlQRSBlQ2xvY2s7ICAgLyoqPCBSZWZlcmVuY2UgY2xvY2sgdXNlZCB0byBjb21wdXRlIG1lZGlhIHRpbWUgKi8gICAgICAgICAgICAgICAgICAgICAgICAKfSBPTVhfVElNRV9DT05GSUdfQUNUSVZFUkVGQ0xPQ0tUWVBFOwoKLyoqIERlc2NyaXB0b3IgZm9yIHNldHRpbmcgc3BlY2lmaWNzIG9mIHBvd2VyIHR5cGUuCiAqICBOb3RlOiB0aGlzIHN0cnVjdHVyZSBpcyBsaXN0ZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAqLwp0eXBlZGVmIHN0cnVjdCBPTVhfT1RIRVJfQ09ORklHX1BPV0VSVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOyAgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGluIGJ5dGVzICovCiAgICBPTVhfVkVSU0lPTlRZUEUgblZlcnNpb247IC8qKjwgT01YIHNwZWNpZmljYXRpb24gdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogICAgT01YX0JPT0wgYkVuYWJsZVBNOyAgICAgICAvKio8IEZsYWcgdG8gZW5hYmxlIFBvd2VyIE1hbmFnZW1lbnQgKi8KfSBPTVhfT1RIRVJfQ09ORklHX1BPV0VSVFlQRTsKCgovKiogRGVzY3JpcHRvciBmb3Igc2V0dGluZyBzcGVjaWZpY3Mgb2Ygc3RhdHMgdHlwZS4KICogIE5vdGU6IHRoaXMgc3RydWN0dXJlIGlzIGxpc3RlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICovCnR5cGVkZWYgc3RydWN0IE9NWF9PVEhFUl9DT05GSUdfU1RBVFNUWVBFIHsKICAgIE9NWF9VMzIgblNpemU7ICAgICAgICAgICAgLyoqPCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KICAgIE9NWF9WRVJTSU9OVFlQRSBuVmVyc2lvbjsgLyoqPCBPTVggc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAgICAvKiB3aGF0IGdvZXMgaGVyZSAqLwp9IE9NWF9PVEhFUl9DT05GSUdfU1RBVFNUWVBFOwoKCi8qKgogKiBUaGUgUG9ydERlZmluaXRpb24gc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVmaW5lIGFsbCBvZiB0aGUgcGFyYW1ldGVycyAKICogbmVjZXNzYXJ5IGZvciB0aGUgY29tcGxpYW50IGNvbXBvbmVudCB0byBzZXR1cCBhbiBpbnB1dCBvciBhbiBvdXRwdXQgb3RoZXIgCiAqIHBhdGguCiAqLwp0eXBlZGVmIHN0cnVjdCBPTVhfT1RIRVJfUE9SVERFRklOSVRJT05UWVBFIHsKICAgIE9NWF9PVEhFUl9GT1JNQVRUWVBFIGVGb3JtYXQ7ICAvKio8IFR5cGUgb2YgZGF0YSBleHBlY3RlZCBmb3IgdGhpcyBjaGFubmVsICovCn0gT01YX09USEVSX1BPUlRERUZJTklUSU9OVFlQRTsKCi8qKiAgUG9ydCBmb3JtYXQgcGFyYW1ldGVyLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBlbnVtZXJhdGUKICAqICB0aGUgdmFyaW91cyBkYXRhIGlucHV0L291dHB1dCBmb3JtYXQgc3VwcG9ydGVkIGJ5IHRoZSBwb3J0LgogICovCnR5cGVkZWYgc3RydWN0IE9NWF9PVEhFUl9QQVJBTV9QT1JURk9STUFUVFlQRSB7CiAgICBPTVhfVTMyIG5TaXplOyAvKio8IHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwogICAgT01YX1ZFUlNJT05UWVBFIG5WZXJzaW9uOyAvKio8IE9NWCBzcGVjaWZpY2F0aW9uIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICAgIE9NWF9VMzIgblBvcnRJbmRleDsgLyoqPCBJbmRpY2F0ZXMgd2hpY2ggcG9ydCB0byBzZXQgKi8KICAgIE9NWF9VMzIgbkluZGV4OyAvKio8IEluZGljYXRlcyB0aGUgZW51bWVyYXRpb24gaW5kZXggZm9yIHRoZSBmb3JtYXQgZnJvbSAweDAgdG8gTi0xICovCiAgICBPTVhfT1RIRVJfRk9STUFUVFlQRSBlRm9ybWF0OyAvKio8IFR5cGUgb2YgZGF0YSBleHBlY3RlZCBmb3IgdGhpcyBjaGFubmVsICovCn0gT01YX09USEVSX1BBUkFNX1BPUlRGT1JNQVRUWVBFOyAKCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwoKI2VuZGlmCi8qIEZpbGUgRU9GICovCg==