LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydA0KICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogQ29weXJpZ2h0IChjKSAyMDA4LCBBdG1lbCBDb3Jwb3JhdGlvbg0KICoNCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogKg0KICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCiAqDQogKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCiAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZGlzY2xhaW1lciBiZWxvdy4NCiAqDQogKiBBdG1lbCdzIG5hbWUgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCiAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogKg0KICogRElTQ0xBSU1FUjogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVE1FTCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUg0KICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRg0KICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBBUkUNCiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFUTUVMIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQogKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQogKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwNCiAqIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HDQogKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsDQogKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICovDQoNCi8qKg0KICogXGZpbGUNCiAqDQogKiBcc2VjdGlvbiBQdXJwb3NlDQogKg0KICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIGZvciB1c2luZyB0aGUgVVNCIGRldmljZSBjb250cm9sbGVyIG9uIEFUOTENCiAqIG1pY3JvY29udHJvbGxlcnMuDQogKg0KICogXHNlY3Rpb24gVXNhZ2UNCiAqDQogKiBQbGVhc2UgcmVmZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gbm90ZS4NCiAqIC0gXHJlZiB1c2JkX2ZyYW1ld29yayBBVDkxIFVTQiBkZXZpY2UgZnJhbWV3b3JrDQogKiAtIFxyZWYgdXNiZF9hcGkgVVNCRCBBUEkNCiAqDQogKi8NCg0KI2lmbmRlZiBVU0JEX0gNCiNkZWZpbmUgVVNCRF9IDQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogICAgICAgICBIZWFkZXJzDQogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQoNCiNpbmNsdWRlICJVU0JEZXNjcmlwdG9ycy5oIg0KI2luY2x1ZGUgIlVTQlJlcXVlc3RzLmgiDQoNCiNpbmNsdWRlICJVU0JMaWJfVHlwZXMuaCINCg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKiAgICAgIERlZmluaXRpb25zDQogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8qIERlZmluZSBhdHRyaWJ1dGUgKi8NCiNpZiBkZWZpbmVkICAgKCBfX0NDX0FSTSAgICkgLyogS2VpbCCmzFZpc2lvbiA0ICovDQogICAgI2RlZmluZSBXRUFLIF9fYXR0cmlidXRlX18gKCh3ZWFrKSkNCiNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkgLyogSUFSIEV3YXJtIDUuNDErICovDQogICAgI2RlZmluZSBXRUFLIF9fd2Vhaw0KI2VsaWYgZGVmaW5lZCAoICBfX0dOVUNfXyAgKSAvKiBHQ0MgQ1MzIDIwMDlxMy02OCAqLw0KICAgICNkZWZpbmUgV0VBSyBfX2F0dHJpYnV0ZV9fICgod2VhaykpDQojZW5kaWYNCg0KLyogRGVmaW5lIE5PX0lOSVQgYXR0cmlidXRlICovDQojaWYgZGVmaW5lZCAgICggX19DQ19BUk0gICApDQogICAgI2RlZmluZSBOT19JTklUDQojZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApDQogICAgI2RlZmluZSBOT19JTklUIF9fbm9faW5pdA0KI2VsaWYgZGVmaW5lZCAoICBfX0dOVUNfXyAgKQ0KICAgICNkZWZpbmUgTk9fSU5JVA0KI2VuZGlmDQoNCg0KLyoqIFxhZGR0b2dyb3VwIHVzYmRfaW50ZXJmYWNlDQogKkB7Ki8NCg0KLyoqDQogKiBcYWRkdG9ncm91cCB1c2JkX3JjIFVTQiBkZXZpY2UgQVBJIHJldHVybiBjb2Rlcw0KICogIEB7DQogKiBUaGlzIHNlY3Rpb24gbGlzdHMgdGhlIHJldHVybiBjb2RlcyBmb3IgdGhlIFVTQiBkZXZpY2UgZHJpdmVyIEFQSQ0KICogLSBccmVmIFVTQkRfU1RBVFVTX1NVQ0NFU1MNCiAqIC0gXHJlZiBVU0JEX1NUQVRVU19MT0NLRUQNCiAqIC0gXHJlZiBVU0JEX1NUQVRVU19BQk9SVEVEDQogKiAtIFxyZWYgVVNCRF9TVEFUVVNfUkVTRVQNCiAqLw0KDQovKiogSW5kaWNhdGVzIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuICovDQojZGVmaW5lIFVTQkRfU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgVVNCUkNfU1VDQ0VTUw0KLyoqIEVuZHBvaW50L2RldmljZSBpcyBhbHJlYWR5IGJ1c3kuICovDQojZGVmaW5lIFVTQkRfU1RBVFVTX0xPQ0tFRCAgICAgICAgICAgICAgVVNCUkNfQlVTWQ0KLyoqIE9wZXJhdGlvbiBoYXMgYmVlbiBhYm9ydGVkIChlcnJvciBvciBzdGFsbCkuICovDQojZGVmaW5lIFVTQkRfU1RBVFVTX0FCT1JURUQgICAgICAgICAgICAgVVNCUkNfQUJPUlRFRA0KLyoqIE9wZXJhdGlvbiBoYXMgYmVlbiBjYW5jZWxlZCAoYnkgdXNlcikuICovDQojZGVmaW5lIFVTQkRfU1RBVFVTX0NBTkNFTEVEICAgICAgICAgICAgVVNCUkNfQ0FOQ0VMRUQNCi8qKiBPcGVyYXRpb24gaGFzIGJlZW4gYWJvcnRlZCBiZWNhdXNlIHRoZSBkZXZpY2UgaW5pdC9yZXNldC91bi1jb25maWd1cmUuICovDQojZGVmaW5lIFVTQkRfU1RBVFVTX1JFU0VUICAgICAgICAgICAgICAgVVNCUkNfUkVTRVQNCi8qKiBQYXJ0IG90IG9wZXJhdGlvbiBzdWNjZXNzZnVsbHkgZG9uZS4gKi8NCiNkZWZpbmUgVVNCRF9TVEFUVVNfUEFSVElBTF9ET05FICAgICAgICBVU0JSQ19QQVJUSUFMX0RPTkUNCi8qKiBPcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgcGFyYW1ldGVyIGVycm9yICovDQojZGVmaW5lIFVTQkRfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSICAgVVNCUkNfUEFSQU1fRVJSDQovKiogT3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIGluIHVuZXhwZWN0ZWQgc3RhdGUgKi8NCiNkZWZpbmUgVVNCRF9TVEFUVVNfV1JPTkdfU1RBVEUgICAgICAgICBVU0JSQ19TVEFURV9FUlINCi8qKiBPcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgU1cgbm90IHN1cHBvcnRlZCAqLw0KI2RlZmluZSBVU0JEX1NUQVRVU19TV19OT1RfU1VQUE9SVEVEICAgIFVTQlJDX1NXX05PVF9TVVBQT1JURUQNCi8qKiBPcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgSFcgbm90IHN1cHBvcnRlZCAqLw0KI2RlZmluZSBVU0JEX1NUQVRVU19IV19OT1RfU1VQUE9SVEVEICAgIFVTQlJDX0hXX05PVF9TVVBQT1JURUQNCi8qKiBAfSovDQoNCi8qKiBcYWRkdG9ncm91cCB1c2JkX3N0YXRlcyBVU0IgZGV2aWNlIHN0YXRlcw0KICogIEB7DQogKiBUaGlzIHNlY3Rpb24gbGlzdHMgdGhlIGRldmljZSBzdGF0ZXMgb2YgdGhlIFVTQiBkZXZpY2UgZHJpdmVyLg0KICogLSBccmVmIFVTQkRfU1RBVEVfU1VTUEVOREVEDQogKiAtIFxyZWYgVVNCRF9TVEFURV9BVFRBQ0hFRA0KICogLSBccmVmIFVTQkRfU1RBVEVfUE9XRVJFRA0KICogLSBccmVmIFVTQkRfU1RBVEVfREVGQVVMVA0KICogLSBccmVmIFVTQkRfU1RBVEVfQUREUkVTUw0KICogLSBccmVmIFVTQkRfU1RBVEVfQ09ORklHVVJFRA0KICovDQoNCi8qKiBUaGUgZGV2aWNlIGlzIGN1cnJlbnRseSBzdXNwZW5kZWQuICovDQojZGVmaW5lIFVTQkRfU1RBVEVfU1VTUEVOREVEICAgICAgICAgICAgMA0KLyoqIFVTQiBjYWJsZSBpcyBwbHVnZ2VkIGludG8gdGhlIGRldmljZS4gKi8NCiNkZWZpbmUgVVNCRF9TVEFURV9BVFRBQ0hFRCAgICAgICAgICAgICAxDQovKiogSG9zdCBpcyBwcm92aWRpbmcgKzVWIHRocm91Z2ggdGhlIFVTQiBjYWJsZS4gKi8NCiNkZWZpbmUgVVNCRF9TVEFURV9QT1dFUkVEICAgICAgICAgICAgICAyDQovKiogRGV2aWNlIGhhcyBiZWVuIHJlc2V0LiAqLw0KI2RlZmluZSBVU0JEX1NUQVRFX0RFRkFVTFQgICAgICAgICAgICAgIDMNCi8qKiBUaGUgZGV2aWNlIGhhcyBiZWVuIGdpdmVuIGFuIGFkZHJlc3Mgb24gdGhlIGJ1cy4gKi8NCiNkZWZpbmUgVVNCRF9TVEFURV9BRERSRVNTICAgICAgICAgICAgICA0DQovKiogQSB2YWxpZCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIHNlbGVjdGVkLiAqLw0KI2RlZmluZSBVU0JEX1NUQVRFX0NPTkZJR1VSRUQgICAgICAgICAgIDUNCi8qKiAgQH0qLw0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqICAgICAgICAgVHlwZXMNCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8qKg0KICogXGJyaWVmIEJ1ZmZlciBzdHJ1Y3QgdXNlZCBmb3IgbXVsdGktYnVmZmVyLWxpc3RlZCB0cmFuc2Zlci4NCiAqDQogKiBUaGUgZHJpdmVyIGNhbiBwcm9jZXNzIDI1NSBieXRlcyBvZiBidWZmZXJzIG9yIGJ1ZmZlciBsaXN0IHdpbmRvdy4NCiAqLw0KdHlwZWRlZiBzdHJ1Y3QgX1VTQkRUcmFuc2ZlckJ1ZmZlciB7DQogICAgLyoqIFBvaW50ZXIgdG8gZnJhbWUgYnVmZmVyICovDQogICAgdWludDhfdCAqIHBCdWZmZXI7DQogICAgLyoqIFNpemUgb2YgdGhlIGZyYW1lICh1cCB0byA2NEstMSkgKi8NCiAgICB1aW50MTZfdCBzaXplOw0KICAgIC8qKiBCeXRlcyB0cmFuc2ZlcnJlZCAqLw0KICAgIHVpbnQxNl90IHRyYW5zZmVycmVkOw0KICAgIC8qKiBCeXRlcyBpbiBGSUZPICovDQogICAgdWludDE2X3QgYnVmZmVyZWQ7DQogICAgLyoqIEJ5dGVzIHJlbWFpbmluZyAqLw0KICAgIHVpbnQxNl90IHJlbWFpbmluZzsNCn0gVVNCRFRyYW5zZmVyQnVmZmVyOw0KDQojcHJhZ21hIHBhY2soMSkNCiNpZiBkZWZpbmVkICAgKCBfX0NDX0FSTSAgICkgLyogS2VpbCCmzFZpc2lvbiA0ICovDQojZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApIC8qIElBUiBFd2FybSA1LjQxKyAqLw0KI2RlZmluZSBfX2F0dHJpYnV0ZV9fKC4uLikNCiNlbGlmIGRlZmluZWQgKCAgX19HTlVDX18gICkgLyogR0NDIENTMyAyMDA5cTMtNjggKi8NCiNlbmRpZg0KDQovKioNCiAqIFxicmllZiBTdHJ1Y3QgdXNlZCBmb3IgVVNCRCBETUEgTGluayBMaXN0IFRyYW5zZmVyIERlc2NyaXB0b3IsIG11c3QgYmUgMTYtYnl0ZXMNCiAqIGFsaWduZWQuDQogKg0KICogKEZvciBVU0IsIERNQSB0cmFuc2ZlciBpcyBsaW5rZWQgdG8gRVBzIGFuZCBGSUZPIGFkZHJlc3MgaXMgRVAgZGVmaW5lZCkNCiAqLw0KdHlwZWRlZiBzdHJ1Y3QgX1VTQkREbWFEZXNjcmlwdG9yIHsNCiAgICAvKiogUG9pbnRlciB0byBOZXh0IERlc2NyaXB0b3IgKi8NCiAgICB2b2lkKiBwTnh0RGVzYzsNCiAgICAvKiogUG9pbnRlciB0byBkYXRhIGJ1ZmZlciBhZGRyZXNzICovDQogICAgdm9pZCogcERhdGFBZGRyOw0KICAgIC8qKiBETUEgQ29udHJvbCBzZXR0aW5nIHJlZ2lzdGVyIHZhbHVlICovDQogICAgdWludDMyX3QgICBjdHJsU2V0dGluZ3M6OCwgICAgICAvKiogQ29udHJvbCBzZXR0aW5ncyAqLw0KICAgICAgICAgICAgICAgICAgIHJlc2VydmVkOjgsICAgICAgLyoqIE5vdCB1c2VkICovDQogICAgICAgICAgICAgICAgICAgYnVmZmVyTGVuZ3RoOjE2OyAvKiogTGVuZ3RoIG9mIGJ1ZmZlciAqLw0KICAgIC8qKiBMb2FkZWQgdG8gRE1BIHJlZ2lzdGVyLCBPSyB0byBtb2RpZnkgKi8NCiAgICB1aW50MzJfdCB1c2VkOw0KfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpIFVTQkREbWFEZXNjcmlwdG9yOw0KDQojcHJhZ21hIHBhY2soKQ0KDQovKioNCiAqIENhbGxiYWNrIHVzZWQgYnkgdHJhbnNmZXIgZnVuY3Rpb25zIChVU0JEX1JlYWQgJiBVU0JEX1dyaXRlKSB0byBub3RpZnkNCiAqIHRoYXQgYSB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZS4NCiAqLw0KdHlwZWRlZiB2b2lkICgqVHJhbnNmZXJDYWxsYmFjaykodm9pZCAqcEFyZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc3RhdHVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdHJhbnNmZXJyZWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZW1haW5pbmcpOw0KDQovKioNCiAqIENhbGxiYWNrIHVzZWQgYnkgTUJMIHRyYW5zZmVyIGZ1bmN0aW9ucyAoVVNCRF9SZWFkICYgVVNCRF9Xcml0ZSkgdG8gbm90aWZ5DQogKiB0aGF0IGEgdHJhbnNhY3Rpb24gaXMgY29tcGxldGUuDQogKiBccGFyYW0gcEFyZyAgICAgUG9pbnRlciB0byBjYWxsYmFjayBhcmd1bWVudHMuDQogKiBccGFyYW0gc3RhdHVzICAgVVNCRCBzdGF0dXMuDQogKi8NCnR5cGVkZWYgdm9pZCAoKk1ibFRyYW5zZmVyQ2FsbGJhY2spKHZvaWQgKnBBcmcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHN0YXR1cyk7DQoNCi8qKkB9Ki8NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqICAgICAgICAgRXhwb3J0ZWQgZnVuY3Rpb25zDQogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8vZXh0ZXJuIHZvaWQgVVNCRF9JcnFIYW5kbGVyKHZvaWQpOw0KDQpleHRlcm4gdm9pZCBVU0JEX0luaXQodm9pZCk7DQoNCmV4dGVybiB2b2lkIFVTQkRfQ29uZmlndXJlU3BlZWQodWludDhfdCBmb3JjZUZTKTsNCg0KZXh0ZXJuIHZvaWQgVVNCRF9Db25uZWN0KHZvaWQpOw0KDQpleHRlcm4gdm9pZCBVU0JEX0Rpc2Nvbm5lY3Qodm9pZCk7DQoNCmV4dGVybiB1aW50OF90IFVTQkRfV3JpdGUoDQogICAgdWludDhfdCBiRW5kcG9pbnQsDQogICAgY29uc3Qgdm9pZCAqcERhdGEsDQogICAgdWludDMyX3Qgc2l6ZSwNCiAgICBUcmFuc2ZlckNhbGxiYWNrIGNhbGxiYWNrLA0KICAgIHZvaWQgKnBBcmcpOw0KDQpleHRlcm4gdWludDhfdCBVU0JEX1JlYWQoDQogICAgdWludDhfdCBiRW5kcG9pbnQsDQogICAgdm9pZCAqcERhdGEsDQogICAgdWludDMyX3QgZExlbmd0aCwNCiAgICBUcmFuc2ZlckNhbGxiYWNrIGZDYWxsYmFjaywNCiAgICB2b2lkICpwQXJnKTsNCg0KZXh0ZXJuIHVpbnQ4X3QgVVNCRF9TdGFsbCh1aW50OF90IGJFbmRwb2ludCk7DQoNCmV4dGVybiB2b2lkIFVTQkRfSGFsdCh1aW50OF90IGJFbmRwb2ludCk7DQoNCmV4dGVybiB2b2lkIFVTQkRfVW5oYWx0KHVpbnQ4X3QgYkVuZHBvaW50KTsNCg0KZXh0ZXJuIHZvaWQgVVNCRF9Db25maWd1cmVFbmRwb2ludChjb25zdCBVU0JFbmRwb2ludERlc2NyaXB0b3IgKnBEZXNjcmlwdG9yKTsNCg0KZXh0ZXJuIHVpbnQ4X3QgVVNCRF9Jc0hhbHRlZCh1aW50OF90IGJFbmRwb2ludCk7DQoNCmV4dGVybiB2b2lkIFVTQkRfUmVtb3RlV2FrZVVwKHZvaWQpOw0KDQpleHRlcm4gdm9pZCBVU0JEX1NldEFkZHJlc3ModWludDhfdCBhZGRyZXNzKTsNCg0KZXh0ZXJuIHZvaWQgVVNCRF9TZXRDb25maWd1cmF0aW9uKHVpbnQ4X3QgY2ZnbnVtKTsNCg0KZXh0ZXJuIHVpbnQ4X3QgVVNCRF9HZXRTdGF0ZSh2b2lkKTsNCg0KZXh0ZXJuIHVpbnQ4X3QgVVNCRF9Jc0hpZ2hTcGVlZCh2b2lkKTsNCg0KZXh0ZXJuIHZvaWQgVVNCRF9UZXN0KHVpbnQ4X3QgYkluZGV4KTsNCg0KZXh0ZXJuIHZvaWQgVVNCRF9TdXNwZW5kSGFuZGxlcih2b2lkKTsNCmV4dGVybiB2b2lkIFVTQkRfUmVzdW1lSGFuZGxlcih2b2lkKTsNCmV4dGVybiB2b2lkIFVTQkRfUmVzZXRIYW5kbGVyKHZvaWQpOw0KZXh0ZXJuIHZvaWQgVVNCRF9SZXF1ZXN0SGFuZGxlcih1aW50OF90IGJFbmRwb2ludCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVNCR2VuZXJpY1JlcXVlc3QgKiBwUmVxdWVzdCk7DQoNCg0KZXh0ZXJuIHZvaWQgVVNCRENhbGxiYWNrc19Jbml0aWFsaXplZCh2b2lkKTsNCmV4dGVybiB2b2lkIFVTQkRDYWxsYmFja3NfUmVzZXQodm9pZCk7DQpleHRlcm4gdm9pZCBVU0JEQ2FsbGJhY2tzX1N1c3BlbmRlZCh2b2lkKTsNCmV4dGVybiB2b2lkIFVTQkRDYWxsYmFja3NfUmVzdW1lZCh2b2lkKTsNCmV4dGVybiB2b2lkIFVTQkRDYWxsYmFja3NfUmVxdWVzdFJlY2VpdmVkKGNvbnN0IFVTQkdlbmVyaWNSZXF1ZXN0ICpyZXF1ZXN0KTsNCg0KI2VuZGlmIC8qI2lmbmRlZiBVU0JEX0gqLw0KDQo=