Li4gTWV0YWZ1bmN0aW9ucy9Bcml0aG1ldGljIE9wZXJhdGlvbnMvL3BsdXMgfDEwCgpwbHVzCj09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgVDEKICAgICAgICAsIHR5cGVuYW1lIFQyCiAgICAgICAgLCB0eXBlbmFtZSBUMyA9IHx1bnNwZWNpZmllZHwKICAgICAgICB8Li4ufAogICAgICAgICwgdHlwZW5hbWUgVFwgKm4qID0gfHVuc3BlY2lmaWVkfAogICAgICAgID4KICAgIHN0cnVjdCBwbHVzCiAgICB7CiAgICAgICAgdHlwZWRlZiB8dW5zcGVjaWZpZWR8IHR5cGU7CiAgICB9OwoKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKUmV0dXJucyB0aGUgc3VtIG9mIGl0cyBhcmd1bWVudHMuCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL3BsdXMuaHBwPgogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9hcml0aG1ldGljLmhwcD4KCgpNb2RlbCBvZgotLS0tLS0tLQoKfE51bWVyaWMgTWV0YWZ1bmN0aW9ufAoKCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgfCBSZXF1aXJlbWVudCAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgfFQxLi4uVG58ICAgICB8IHxJbnRlZ3JhbCBDb25zdGFudHwgICAgICAgfCBPcGVyYXRpb24ncyBhcmd1bWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCnxOb3RlOnwgfG51bWVyaWMgbWV0YWZ1bmN0aW9uIG5vdGV8IHwtLSBlbmQgbm90ZXwKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKRm9yIGFueSB8SW50ZWdyYWwgQ29uc3RhbnR8XCBzIHxjMS4uLmNufDoKCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBwbHVzPGMxLFwgfC4uLnxcIGNcICpuKlw+Ojp0eXBlIHI7IAoKOlJldHVybiB0eXBlOgogICAgfEludGVncmFsIENvbnN0YW50fC4KCjpTZW1hbnRpY3M6CiAgICBFcXVpdmFsZW50IHRvIAogICAgICAgIAogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAgICAgdHlwZWRlZiBpbnRlZ3JhbF9jPAogICAgICAgICAgICAgIHR5cGVvZihjMTo6dmFsdWUgKyBjMjo6dmFsdWUpCiAgICAgICAgICAgICwgKCBjMTo6dmFsdWUgKyBjMjo6dmFsdWUgKQogICAgICAgICAgICA+IGM7CiAgICAgICAgICAgIAogICAgICAgIHR5cGVkZWYgcGx1czxjLGMzLFwgfC4uLnxcY1wgKm4qXD46OnR5cGUgcjsgCgouLiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgcGx1czxjMSxcIHwuLi58XCBjXCAqbipcPiByOwoKOlJldHVybiB0eXBlOgogICAgfEludGVncmFsIENvbnN0YW50fC4KCjpTZW1hbnRpY3M6CiAgICBFcXVpdmFsZW50IHRvCiAgICAKICAgIC4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICAgICAgc3RydWN0IHIgOiBwbHVzPGMxLFwgfC4uLnxcIGNcICpuKlw+Ojp0eXBlIHt9OwoKCgoKQ29tcGxleGl0eQotLS0tLS0tLS0tCgpBbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4KCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdHlwZWRlZiBwbHVzPCBpbnRfPC0xMD4sIGludF88Mz4sIGxvbmdfPDE+ID46OnR5cGUgcjsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIHI6OnZhbHVlLCA9PSwgLTYgKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCByOjp2YWx1ZV90eXBlLCBsb25nID4gKSk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxBcml0aG1ldGljIE9wZXJhdGlvbnN8LCB8TnVtZXJpYyBNZXRhZnVuY3Rpb258LCB8bnVtZXJpY19jYXN0fCwgfG1pbnVzfCwgfG5lZ2F0ZXwsIHx0aW1lc3wKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==