Li4gU2VxdWVuY2VzL0ludHJpbnNpYyBNZXRhZnVuY3Rpb25zLy9iYWNrCgpiYWNrCj09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2UKICAgICAgICA+CiAgICBzdHJ1Y3QgYmFjawogICAgewogICAgICAgIHR5cGVkZWYgfHVuc3BlY2lmaWVkfCB0eXBlOwogICAgfTsKCgoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KClJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgc2VxdWVuY2UuCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL2JhY2suaHBwPgoKCk1vZGVsIG9mCi0tLS0tLS0tCgp8VGFnIERpc3BhdGNoZWQgTWV0YWZ1bmN0aW9ufAoKClBhcmFtZXRlcnMKLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYFNlcXVlbmNlYGAgIHwgfEJpZGlyZWN0aW9uYWwgU2VxdWVuY2V8ICB8IEEgc2VxdWVuY2UgdG8gYmUgZXhhbWluZWQuICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGb3IgYW55IHxCaWRpcmVjdGlvbmFsIFNlcXVlbmNlfCBgYHNgYDoKCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIGJhY2s8cz46OnR5cGUgdDsgCgo6UmV0dXJuIHR5cGU6CiAgICBBIHR5cGUuCgo6UHJlY29uZGl0aW9uOgogICAgYGBlbXB0eTxzPjo6dmFsdWUgPT0gZmFsc2VgYC4KCjpTZW1hbnRpY3M6CiAgICBFcXVpdmFsZW50IHRvCgogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAgICB0eXBlZGVmIGRlcmVmPCBwcmlvcjwgZW5kPHM+Ojp0eXBlID46OnR5cGUgPjo6dHlwZSB0OwoKCgpDb21wbGV4aXR5Ci0tLS0tLS0tLS0KCkFtb3J0aXplZCBjb25zdGFudCB0aW1lLgoKCkV4YW1wbGUKLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0eXBlZGVmIHJhbmdlX2M8aW50LDAsMT4gcmFuZ2UxOwogICAgdHlwZWRlZiByYW5nZV9jPGludCwwLDEwPiByYW5nZTI7CiAgICB0eXBlZGVmIHJhbmdlX2M8aW50LC0xMCwwPiByYW5nZTM7CiAgICAgICAgCiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCBiYWNrPHJhbmdlMT46OnZhbHVlLCA9PSwgMCApOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggYmFjazxyYW5nZTI+Ojp2YWx1ZSwgPT0sIDkgKTsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIGJhY2s8cmFuZ2UzPjo6dmFsdWUsID09LCAtMSApOwoKClNlZSBhbHNvCi0tLS0tLS0tCgp8QmlkaXJlY3Rpb25hbCBTZXF1ZW5jZXwsIHxmcm9udHwsIHxwdXNoX2JhY2t8LCB8ZW5kfCwgfGRlcmVmfCwgfGF0fAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK