Lyogc3RhdGVtZW50LmggLSBkZWZpbml0aW9ucyBmb3IgdGhlIHN0YXRlbWVudCB0eXBlDQogKg0KICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPg0KICoNCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLg0KICoNCiAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkDQogKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzDQogKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLg0KICoNCiAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLA0KICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdA0KICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOg0KICoNCiAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90DQogKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQ0KICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlDQogKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLg0KICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUNCiAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4NCiAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uDQogKi8NCg0KI2lmbmRlZiBQWVNRTElURV9TVEFURU1FTlRfSA0KI2RlZmluZSBQWVNRTElURV9TVEFURU1FTlRfSA0KI2luY2x1ZGUgIlB5dGhvbi5oIg0KDQojaW5jbHVkZSAiY29ubmVjdGlvbi5oIg0KI2luY2x1ZGUgInNxbGl0ZTMuaCINCg0KI2RlZmluZSBQWVNRTElURV9UT09fTVVDSF9TUUwgKC0xMDApDQojZGVmaW5lIFBZU1FMSVRFX1NRTF9XUk9OR19UWVBFICgtMTAxKQ0KDQp0eXBlZGVmIHN0cnVjdA0Kew0KICAgIFB5T2JqZWN0X0hFQUQNCiAgICBzcWxpdGUzKiBkYjsNCiAgICBzcWxpdGUzX3N0bXQqIHN0Ow0KICAgIFB5T2JqZWN0KiBzcWw7DQogICAgaW50IGluX3VzZTsNCiAgICBQeU9iamVjdCogaW5fd2Vha3JlZmxpc3Q7IC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovDQp9IHB5c3FsaXRlX1N0YXRlbWVudDsNCg0KZXh0ZXJuIFB5VHlwZU9iamVjdCBweXNxbGl0ZV9TdGF0ZW1lbnRUeXBlOw0KDQppbnQgcHlzcWxpdGVfc3RhdGVtZW50X2NyZWF0ZShweXNxbGl0ZV9TdGF0ZW1lbnQqIHNlbGYsIHB5c3FsaXRlX0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIFB5T2JqZWN0KiBzcWwpOw0Kdm9pZCBweXNxbGl0ZV9zdGF0ZW1lbnRfZGVhbGxvYyhweXNxbGl0ZV9TdGF0ZW1lbnQqIHNlbGYpOw0KDQppbnQgcHlzcWxpdGVfc3RhdGVtZW50X2JpbmRfcGFyYW1ldGVyKHB5c3FsaXRlX1N0YXRlbWVudCogc2VsZiwgaW50IHBvcywgUHlPYmplY3QqIHBhcmFtZXRlciwgaW50IGFsbG93XzhiaXRfY2hhcnMpOw0Kdm9pZCBweXNxbGl0ZV9zdGF0ZW1lbnRfYmluZF9wYXJhbWV0ZXJzKHB5c3FsaXRlX1N0YXRlbWVudCogc2VsZiwgUHlPYmplY3QqIHBhcmFtZXRlcnMsIGludCBhbGxvd184Yml0X2NoYXJzKTsNCg0KaW50IHB5c3FsaXRlX3N0YXRlbWVudF9yZWNvbXBpbGUocHlzcWxpdGVfU3RhdGVtZW50KiBzZWxmLCBQeU9iamVjdCogcGFyYW1ldGVycyk7DQppbnQgcHlzcWxpdGVfc3RhdGVtZW50X2ZpbmFsaXplKHB5c3FsaXRlX1N0YXRlbWVudCogc2VsZik7DQppbnQgcHlzcWxpdGVfc3RhdGVtZW50X3Jlc2V0KHB5c3FsaXRlX1N0YXRlbWVudCogc2VsZik7DQp2b2lkIHB5c3FsaXRlX3N0YXRlbWVudF9tYXJrX2RpcnR5KHB5c3FsaXRlX1N0YXRlbWVudCogc2VsZik7DQoNCmludCBweXNxbGl0ZV9zdGF0ZW1lbnRfc2V0dXBfdHlwZXModm9pZCk7DQoNCiNlbmRpZg0K