Li4gRGF0YSBUeXBlcy9Db25jZXB0cy8vSW50ZWdyYWwgQ29uc3RhbnQKCkludGVncmFsIENvbnN0YW50Cj09PT09PT09PT09PT09PT09CgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKQW4gfEludGVncmFsIENvbnN0YW50fCBpcyBhIGhvbGRlciBjbGFzcyBmb3IgYSBjb21waWxlLXRpbWUgdmFsdWUgb2YgYW4KaW50ZWdyYWwgdHlwZS4gRXZlcnkgfEludGVncmFsIENvbnN0YW50fCBpcyBhbHNvIGEgbnVsbGFyeSB8TWV0YWZ1bmN0aW9ufCwgCnJldHVybmluZyBpdHNlbGYuIEFuIGludGVncmFsIGNvbnN0YW50ICpvYmplY3QqIGlzIGltcGxpY2l0bHkgY29udmVydGlibGUgdG8gdGhlIApjb3JyZXNwb25kaW5nIHJ1bi10aW1lIHZhbHVlIG9mIHRoZSB3cmFwcGVkIGludGVncmFsIHR5cGUuCgpFeHByZXNzaW9uIHJlcXVpcmVtZW50cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKfEluIHRoZSBmb2xsb3dpbmcgdGFibGUuLi58IGBgbmBgIGlzIGEgbW9kZWwgb2YgfEludGVncmFsIENvbnN0YW50fC4KCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IEV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wbGV4aXR5ICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBuOjp0YWdgYCAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBpbnRlZ3JhbF9jX3RhZ2BgICAgICAgICAgICAgICAgICAgICB8IENvbnN0YW50IHRpbWUuICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYG46OnZhbHVlX3R5cGVgYCAgICAgICAgICAgICAgICAgfCBBbiBpbnRlZ3JhbCB0eXBlICAgICAgICAgICAgICAgICAgICAgIHwgQ29uc3RhbnQgdGltZS4gICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgbjo6dmFsdWVgYCAgICAgICAgICAgICAgICAgICAgICB8IEFuIGludGVncmFsIGNvbnN0YW50IGV4cHJlc3Npb24gICAgICAgfCBDb25zdGFudCB0aW1lLiAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBuOjp0eXBlYGAgICAgICAgICAgICAgICAgICAgICAgIHwgfEludGVncmFsIENvbnN0YW50fCAgICAgICAgICAgICAgICAgICB8IENvbnN0YW50IHRpbWUuICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYG5leHQ8bj46OnR5cGVgYCAgICAgICAgICAgICAgICAgfCB8SW50ZWdyYWwgQ29uc3RhbnR8ICAgICAgICAgICAgICAgICAgIHwgQ29uc3RhbnQgdGltZS4gICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgcHJpb3I8bj46OnR5cGVgYCAgICAgICAgICAgICAgICB8IHxJbnRlZ3JhbCBDb25zdGFudHwgICAgICAgICAgICAgICAgICAgfCBDb25zdGFudCB0aW1lLiAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBuOjp2YWx1ZV90eXBlIGNvbnN0IGMgPSBuKClgYCAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvbnN0YW50IHRpbWUuICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBFeHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU2VtYW50aWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYG46OnRhZ2BgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBuYGBcICdzIHRhZyB0eXBlOyBgYG46OnRhZzo6dmFsdWVgYCBpcyBgYG5gYFwgJ3MgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKmNvbnZlcnNpb24gcmFuayouICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYG46OnZhbHVlX3R5cGVgYCAgICAgICAgICAgICAgICAgICAgIHwgQSBjdi11bnF1YWxpZmllZCB0eXBlIG9mIGBgbjo6dmFsdWVgYC4gICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYG46OnZhbHVlYGAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhlIHZhbHVlIG9mIHRoZSB3cmFwcGVkIGludGVncmFsIGNvbnN0YW50LiAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYG46OnR5cGVgYCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBpc19zYW1lPG46OnR5cGUsbj46OnZhbHVlID09IHRydWVgYC4gICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYG5leHQ8bj46OnR5cGVgYCAgICAgICAgICAgICAgICAgICAgIHwgQW4gfEludGVncmFsIENvbnN0YW50fCBgYGNgYCBvZiB0eXBlIGBgbjo6dmFsdWVfdHlwZWBgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3VjaCB0aGF0IGBgYzo6dmFsdWUgPT0gbjo6dmFsdWUgKyAxYGAuICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYHByaW9yPG4+Ojp0eXBlYGAgICAgICAgICAgICAgICAgICAgIHwgQW4gfEludGVncmFsIENvbnN0YW50fCBgYGNgYCBvZiB0eXBlIGBgbjo6dmFsdWVfdHlwZWBgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3VjaCB0aGF0IGBgYzo6dmFsdWUgPT0gbjo6dmFsdWUgLSAxYGAuICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYG46OnZhbHVlX3R5cGUgY29uc3QgYyA9IG4oKWBgICAgICAgIHwgYGBjID09IG46OnZhbHVlYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpNb2RlbHMKLS0tLS0tCgoqIHxib29sX3wKKiB8aW50X3wKKiB8bG9uZ198CiogfGNoYXJffAoqIHxpbnRlZ3JhbF9jfAoKClNlZSBhbHNvCi0tLS0tLS0tCgp8RGF0YSBUeXBlc3wsIHxJbnRlZ3JhbCBTZXF1ZW5jZSBXcmFwcGVyfCwgfGludGVncmFsX2N8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=