Li4gQWxnb3JpdGhtcy9RdWVyeWluZyBBbGdvcml0aG1zLy9jb3VudCB8NDAKCmNvdW50Cj09PT09CgpTeW5vcHNpcwotLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFNlcXVlbmNlCiAgICAgICAgLCB0eXBlbmFtZSBUCiAgICAgICAgPgogICAgc3RydWN0IGNvdW50CiAgICB7CiAgICAgICAgdHlwZWRlZiB8dW5zcGVjaWZpZWR8IHR5cGU7CiAgICB9OwoKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgYGBTZXF1ZW5jZWBgIHRoYXQgYXJlIGlkZW50aWNhbCB0byBgYFRgYC4KCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvY291bnQuaHBwPgoKClBhcmFtZXRlcnMKLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYFNlcXVlbmNlYGAgIHwgfEZvcndhcmQgU2VxdWVuY2V8ICAgICAgICB8IEEgc2VxdWVuY2UgdG8gYmUgZXhhbWluZWQuICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgVGBgICAgICAgICAgfCBBbnkgdHlwZSAgICAgICAgICAgICAgICAgIHwgQSB0eXBlIHRvIHNlYXJjaCBmb3IuICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgpGb3IgYW55IHxGb3J3YXJkIFNlcXVlbmNlfCBgYHNgYCBhbmQgYXJiaXRyYXJ5IHR5cGUgYGB0YGA6CgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgY291bnQ8cyx0Pjo6dHlwZSBuOwoKOlJldHVybiB0eXBlOgogICAgfEludGVncmFsIENvbnN0YW50fC4KIAo6U2VtYW50aWNzOgogICAgRXF1aXZhbGVudCB0byAKCiAgICAuLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICAgICB0eXBlZGVmIGNvdW50X2lmPCBzLGlzX3NhbWU8XyxUPiA+Ojp0eXBlIG47CgoKQ29tcGxleGl0eQotLS0tLS0tLS0tCgpMaW5lYXIuIEV4YWN0bHkgYGBzaXplPHM+Ojp2YWx1ZWBgIGNvbXBhcmlzb25zIGZvciBpZGVudGl0eS4gCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgdmVjdG9yPGludCxjaGFyLGxvbmcsc2hvcnQsY2hhcixzaG9ydCxkb3VibGUsbG9uZz4gdHlwZXM7CiAgICB0eXBlZGVmIGNvdW50PHR5cGVzLCBzaG9ydD46OnR5cGUgbjsKICAgIAogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggbjo6dmFsdWUsID09LCAyICk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxRdWVyeWluZyBBbGdvcml0aG1zfCwgfGNvdW50X2lmfCwgfGZpbmR8LCB8ZmluZF9pZnwsIHxjb250YWluc3wsIHxsb3dlcl9ib3VuZHwKCgouLiBjb3B5cmlnaHQ6OiBDb3B5cmlnaHQgqSAgMjAwMS0yMDA5IEFsZWtzZXkgR3VydG92b3kgYW5kIERhdmlkIEFicmFoYW1zCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==