IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojICAgICAgICAgICAgICAgICAgICAgICBDQURFTkNFIENPUFlSSUdIVCBOT1RJQ0UKIyAgICAgICAgIKkgMjAwOC0yMDEzIENhZGVuY2UgRGVzaWduIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBGb3VuZGF0aW9uIEZsb3cgaXMgcHJvdmlkZWQgYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcGVyZm9ybSBzcGVjaWFsaXplZAojIHRhc2tzLgojCiMgVGhpcyB3b3JrIG1heSBub3QgYmUgY29waWVkLCByZS1wdWJsaXNoZWQsIHVwbG9hZGVkLCBvciBkaXN0cmlidXRlZCBpbiBhbnkgd2F5LAojIGluIGFueSBtZWRpdW0sIHdoZXRoZXIgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KIyBmcm9tIENhZGVuY2UuIE5vdHdpdGhzdGFuZGluZyBhbnkgcmVzdHJpY3Rpb25zIGhlcmVpbiwgc3ViamVjdCB0byBjb21wbGlhbmNlCiMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIENhZGVuY2Ugc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgdW5kZXIKIyB3aGljaCB0aGlzIG1hdGVyaWFsIHdhcyBwcm92aWRlZCwgdGhpcyBtYXRlcmlhbCBtYXkgYmUgY29waWVkIGFuZCBpbnRlcm5hbGx5CiMgZGlzdHJpYnV0ZWQgc29sZWx5IGZvciBpbnRlcm5hbCBwdXJwb3NlcyBmb3IgdXNlIHdpdGggQ2FkZW5jZSB0b29scy4KIwojIFRoaXMgd29yayBpcyBDYWRlbmNlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBhbmQgbWF5IHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYmUKIyBnaXZlbiB0byB0aGlyZCBwYXJ0aWVzLCBuZWl0aGVyIGluIG9yaWdpbmFsIG5vciBpbiBtb2RpZmllZCB2ZXJzaW9ucywgd2l0aG91dAojIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIENhZGVuY2UuIFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzCiMgdGhlIHByb3ByaWV0YXJ5IGFuZCBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gb2YgQ2FkZW5jZSBvciBpdHMgbGljZW5zb3JzLCBhbmQKIyBpcyBzdXBwbGllZCBzdWJqZWN0IHRvLCBhbmQgbWF5IGJlIHVzZWQgb25seSBieSBDYWRlbmNlJ3MgY3VycmVudCBjdXN0b21lcnMKIyBpbiBhY2NvcmRhbmNlIHdpdGgsIGEgcHJldmlvdXNseSBleGVjdXRlZCBsaWNlbnNlIGFncmVlbWVudCBiZXR3ZWVuIENhZGVuY2UKIyBhbmQgaXRzIGN1c3RvbWVyLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUSElTIE1BVEVSSUFMIElTIFBST1ZJREVEIEJZIENBREVOQ0UgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAojIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiMgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KIyBJTiBOTyBFVkVOVCBTSEFMTCBDQURFTkNFIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwKIyBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAojIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgojIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgIE1BVEVSSUFMLCBFVkVOIElGCiMgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgTWFwIG9wdGlvbiBuYW1lcyAuLi4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKc2V0IG1hcChzd2l0Y2hfaW5zdGFuY2UpICAgIHN3aXRjaE1vZHVsZUluc3RhbmNlCnNldCBtYXAoaW5wdXRfZW5hYmxlX3BpbikgICBlbmFibGVQaW5JbgpzZXQgbWFwKG91dHB1dF9lbmFibGVfcGluKSAgZW5hYmxlUGluT3V0CnNldCBtYXAoaW5wdXRfZW5hYmxlX25ldCkgICBlbmFibGVOZXRJbgpzZXQgbWFwKG91dHB1dF9lbmFibGVfbmV0KSAgZW5hYmxlTmV0T3V0CnNldCBtYXAoc3dpdGNoX2NlbGwpICAgICAgICBnbG9iYWxTd2l0Y2hDZWxsTmFtZQpzZXQgbWFwKHRvcF9vZmZzZXQpICAgICAgICAgdG9wT2Zmc2V0CnNldCBtYXAoYm90dG9tX29mZnNldCkgICAgICBib3R0b21PZmZzZXQKc2V0IG1hcChyaWdodF9vZmZzZXQpICAgICAgIHJpZ2h0T2Zmc2V0CnNldCBtYXAobGVmdF9vZmZzZXQpICAgICAgICBsZWZ0T2Zmc2V0CnNldCBtYXAoaG9yaXpvbmFsX3BpdGNoKSAgICBob3Jpem9udGFsUGl0Y2gKc2V0IG1hcChjb2x1bW5faGVpZ2h0KSAgICAgIGhlaWdodApzZXQgbWFwKHNraXBfcm93cykgICAgICAgICAgc2tpcFJvd3MKc2V0IG1hcCh0b3BfcmluZykgICAgICAgICAgIHRvcFNpZGUKc2V0IG1hcChib3R0b21fcmluZykgICAgICAgIGJvdHRvbVNpZGUKc2V0IG1hcChyaWdodF9yaW5nKSAgICAgICAgIHJpZ2h0U2lkZQpzZXQgbWFwKGxlZnRfcmluZykgICAgICAgICAgbGVmdFNpZGUKc2V0IG1hcChjb3JuZXJfY2VsbF9saXN0KSAgIGNvcm5lckNlbGxMaXN0CnNldCBtYXAodG9wX2ZpbGxlcl9jZWxsKSAgICBmaWxsZXJDZWxsTmFtZVRvcApzZXQgbWFwKGJvdHRvbV9maWxsZXJfY2VsbCkgZmlsbGVyQ2VsbE5hbWVCb3R0b20Kc2V0IG1hcChsZWZ0X2ZpbGxlcl9jZWxsKSAgIGZpbGxlckNlbGxOYW1lTGVmdApzZXQgbWFwKHJpZ2h0X2ZpbGxlcl9jZWxsKSAgZmlsbGVyQ2VsbE5hbWVSaWdodApzZXQgbWFwKHRvcF9zd2l0Y2hfY2VsbCkgICAgc3dpdGNoQ2VsbE5hbWVUb3AKc2V0IG1hcChib3R0b21fc3dpdGNoX2NlbGwpIHN3aXRjaENlbGxOYW1lQm90dG9tCnNldCBtYXAobGVmdF9zd2l0Y2hfY2VsbCkgICBzd2l0Y2hDZWxsTmFtZUxlZnQKc2V0IG1hcChyaWdodF9zd2l0Y2hfY2VsbCkgIHN3aXRjaENlbGxOYW1lUmlnaHQKc2V0IG1hcCh0b3Bfc3dpdGNoZXMpICAgICAgIHRvcE51bVN3aXRjaApzZXQgbWFwKGJvdHRvbV9zd2l0Y2hlcykgICAgYm90dG9tTnVtU3dpdGNoCnNldCBtYXAobGVmdF9zd2l0Y2hlcykgICAgICBsZWZ0TnVtU3dpdGNoCnNldCBtYXAocmlnaHRfc3dpdGNoZXMpICAgICByaWdodE51bVN3aXRjaAoK