Li4gTWV0YWZ1bmN0aW9ucy9TdHJpbmcgT3BlcmF0aW9ucy8vY19zdHIgfDEwCgoKY19zdHIKPT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2UKICAgICAgICA+CiAgICBzdHJ1Y3QgY19zdHIKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgICAgICBzdGF0aWMgY2hhciBjb25zdCB2YWx1ZVtdOwogICAgfTsKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKYGBjX3N0cmBgIGNvbnZlcnRzIHRoZSB8Rm9yd2FyZCBTZXF1ZW5jZXwgb2YgfEludGVncmFsIENvbnN0YW50fFwgcyBgYFNlcXVlbmNlYGAKaW50byBhIG51bGwtdGVybWluYXRlZCBieXRlIHN0cmluZyBjb250YWluaW5nIGFuIGVxdWl2YWxlbnQgc2VxdWVuY2UuCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL3N0cmluZy5ocHA+CgoKTW9kZWwgb2YKLS0tLS0tLS0KCnxNZXRhZnVuY3Rpb258CgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBQYXJhbWV0ZXIgICAgIHwgUmVxdWlyZW1lbnQgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgU2VxdWVuY2VgYCAgfCB8Rm9yd2FyZCBTZXF1ZW5jZXwgb2YgICAgIHwgQSBzZXF1ZW5jZSB0byBiZSBjb252ZXJ0ZWQgaW50byBhICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgIHwgfEludGVncmFsIENvbnN0YW50fFwgcyAgICB8IG51bGwtdGVybWluYXRlZCBieXRlIHN0cmluZy4gICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgouLiBjb21wb3VuZDo6CiAgICA6Y2xhc3M6IGV4cHJlc3Npb24tc2VtYW50aWNzCgogICAgRm9yIGFueSB8Rm9yd2FyZCBTZXF1ZW5jZXwgb2YgfEludGVncmFsIENvbnN0YW50fFwgcyBgYHNgYCwKCiAgICAuLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgICAgIGNfc3RyPHM+Ojp2YWx1ZTsgCgogICAgOlJldHVybiB0eXBlOgogICAgICAgIEEgbnVsbC10ZXJtaW5hdGVkIGJ5dGUgc3RyaW5nLgoKICAgIDpQcmVjb25kaXRpb246CiAgICAgICAgYGBzaXplPHM+Ojp2YWx1ZSA8PSBCT09TVF9NUExfU1RSSU5HX01BWF9MRU5HVEhgYC4KCiAgICA6U2VtYW50aWNzOgogICAgICAgIEVxdWl2YWxlbnQgdG8gCiAgICAgICAgCiAgICAgICAgLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgICAgICAgIAogICAgICAgICAgIGNoYXIgY29uc3QgdmFsdWVbXSA9IHsKICAgICAgICAgICAgICAgYXQ8cywgMD46OnR5cGU6OnZhbHVlCiAgICAgICAgICAgICAsIC4uLgogICAgICAgICAgICAgLCBhdDxzLCBzaXplPHM+Ojp2YWx1ZS0xPjo6dHlwZTo6dmFsdWUKICAgICAgICAgICAgICwgJ1xcMCcKICAgICAgICAgICB9OwoKQ29tcGxleGl0eQotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBTZXF1ZW5jZSBhcmNoZXR5cGUgICAgICAgICAgICB8IENvbXBsZXhpdHkgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IHxGb3J3YXJkIFNlcXVlbmNlfCAgICAgICAgICAgIHwgTGluZWFyLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdHlwZWRlZiB2ZWN0b3JfYzxjaGFyLCdoJywnZScsJ2wnLCdsJywnbyc+IGhlbGxvOwogICAgYXNzZXJ0KCAwID09IHN0ZDo6c3RyY21wKCBjX3N0cjxoZWxsbz46OnZhbHVlLCAiaGVsbG8iICkgKTsKClNlZSBhbHNvCi0tLS0tLS0tCgp8Rm9yd2FyZCBTZXF1ZW5jZXwsIHxJbnRlZ3JhbCBDb25zdGFudHwsIHxzdHJpbmd8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDkgRXJpYyBOaWVibGVyCiAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCg==