Li4gTWV0YWZ1bmN0aW9ucy9Db21wb3NpdGlvbiBhbmQgQXJndW1lbnQgQmluZGluZy8vcHJvdGVjdCB8NjAKCnByb3RlY3QKPT09PT09PQoKU3lub3BzaXMKLS0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdGVtcGxhdGU8IAogICAgICAgICAgdHlwZW5hbWUgRgogICAgICAgID4KICAgIHN0cnVjdCBwcm90ZWN0CiAgICB7CiAgICAgICAgLy8gfHVuc3BlY2lmaWVkfAogICAgICAgIC8vIHwuLi58CiAgICB9OwoKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKYGBwcm90ZWN0YGAgaXMgYW4gaWRlbnRpdHkgd3JhcHBlciBmb3IgYSB8TWV0YWZ1bmN0aW9uIENsYXNzfCB0aGF0IHByZXZlbnRzCml0cyBhcmd1bWVudCBmcm9tIGJlaW5nIHJlY29nbml6ZWQgYXMgYSB8YmluZCBleHByZXNzaW9ufC4KCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvcHJvdGVjdC5ocHA+CgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgRmBgICAgICAgICAgfCB8TWV0YWZ1bmN0aW9uIENsYXNzfCAgICAgIHwgQSBtZXRhZnVuY3Rpb24gY2xhc3MgdG8gd3JhcC4gICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKRm9yIGFueSB8TWV0YWZ1bmN0aW9uIENsYXNzfCBgYGZgYDoKCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBwcm90ZWN0PGY+IGc7Cgo6UmV0dXJuIHR5cGU6CiAgICB8TWV0YWZ1bmN0aW9uIENsYXNzfC4KCjpTZW1hbnRpY3M6CiAgICBJZiBgYGZgYCBpcyBhIHxiaW5kIGV4cHJlc3Npb258LCBlcXVpdmFsZW50IHRvCiAgICAKICAgIC4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICAgICAgc3RydWN0IGcKICAgICAgICB7CiAgICAgICAgICAgIHRlbXBsYXRlPCAKICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgVTEgPSB8dW5zcGVjaWZpZWR8XCxcIHwuLi58IHR5cGVuYW1lIFVcICpuKiA9IHx1bnNwZWNpZmllZHwKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgc3RydWN0IGFwcGx5CiAgICAgICAgICAgICAgICA6IGFwcGx5X3dyYXBcICpuKlw8ZixVMSxcIHwuLi58XCBVXCAqbipcID4KICAgICAgICAgICAgewogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICAKICAgIG90aGVyd2lzZSBlcXVpdmFsZW50IHRvIGBgdHlwZWRlZiBmIGc7YGAuCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHN0cnVjdCBmCiAgICB7CiAgICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiA+IHN0cnVjdCBhcHBseQogICAgICAgIHsKICAgICAgICAgICAgdHlwZWRlZiBUMiB0eXBlOwogICAgICAgIH07CiAgICB9OwogICAgIAogICAgdHlwZWRlZiBiaW5kPCBxdW90ZVwgYGAzYGBcPGlmXF8+LF8xLF8yLGJpbmQ8ZixfMSxfMj4gPiBiMTsKICAgIHR5cGVkZWYgYmluZDwgcXVvdGVcIGBgM2BgXDxpZlxfPixfMSxfMixwcm90ZWN0PCBiaW5kPGYsXzEsXzI+ID4gPiBiMjsKICAgICAKICAgIHR5cGVkZWYgYXBwbHlfd3JhcFwgYGAyYGBcPCBiMSxmYWxzZVxfLGNoYXIgPjo6dHlwZSByMTsKICAgIHR5cGVkZWYgYXBwbHlfd3JhcFwgYGAyYGBcPCBiMixmYWxzZVxfLGNoYXIgPjo6dHlwZSByMjsKICAgICAKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPHIxLGNoYXI+ICkpOwogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGlzX3NhbWU8cjIscHJvdGVjdDwgYmluZDxmLF8xLF8yPiA+ID4gKSk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxDb21wb3NpdGlvbiBhbmQgQXJndW1lbnQgQmluZGluZ3wsIHxJbnZvY2F0aW9ufCwgfGJpbmR8LCB8cXVvdGV8LCB8YXBwbHlfd3JhcHwKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==