LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCANCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqIENvcHlyaWdodCAoYykgMjAxMCwgQXRtZWwgQ29ycG9yYXRpb24NCiAqDQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICoNCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQogKg0KICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQogKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGRpc2NsYWltZXIgYmVsb3cuDQogKg0KICogQXRtZWwncyBuYW1lIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQogKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICoNCiAqIERJU0NMQUlNRVI6IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVRNRUwgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1INCiAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCiAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQogKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBVE1FTCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULA0KICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQogKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GDQogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORw0KICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqLw0KDQovKiogXGZpbGUNCiAqICBcc2VjdGlvbiBQdXJwb3NlDQogKiANCiAqICAgIERlZmluaXRpb25zIGFuZCBtZXRob2RzIGZvciBVU0IgcmVxdWVzdCBzdHJ1Y3R1cmVzIGRlc2NyaWJlZCBieSB0aGUNCiAqICAgIFVTQiBzcGVjaWZpY2F0aW9uLg0KICogDQogKiAgXHNlY3Rpb24gVXNhZ2UNCiAqIA0KICovDQoNCiNpZm5kZWYgX1VTQlJFUVVFU1RTX0hfDQojZGVmaW5lIF9VU0JSRVFVRVNUU19IXw0KLyoqIFxhZGR0b2dyb3VwIHVzYl9nZW5lcmFsDQogKiBAew0KICogXGFkZHRvZ3JvdXAgdXNiX3JlcXVlc3QgVVNCIFJlcXVlc3RzDQogKiAgQHsNCiAqLw0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogICAgICBIZWFkZXJzDQogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8qIFRoZXNlIGhlYWRlcnMgd2VyZSBpbnRyb2R1Y2VkIGluIEM5OSBieSB3b3JraW5nIGdyb3VwDQogKiBJU08vSUVDIEpUQzEvU0MyMi9XRzE0Lg0KICovDQojaW5jbHVkZSA8c3RkaW50Lmg+DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKiAgICAgIERlZmluaXRpb25zDQogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8qLS0tLS0tLS0tLS0gR2VuZXJpYyBSZXF1ZXN0IC0tLS0tLS0tLS0tLSovDQoNCi8qKiBcYWRkdG9ncm91cCB1c2JfcmVxdWVzdF9kZWZpbmUgVVNCIEdlbmVyaWMgUmVxdWVzdCBkZWZpbml0aW9ucw0KICogICAgICBAew0KICogIFRoaXMgc2VjdGlvbiBsaXN0cyB0aGUgY29kZXMgb2YgVVNCIGdlbmVyaWMgcmVxdWVzdC4NCiAqIA0KICogIC0gXHJlZiB1c2JfcmVxdWVzdF9jb2RlIFVTQiBSZXF1ZXN0IGNvZGVzDQogKiAgICAgLSBccmVmIFVTQkdlbmVyaWNSZXF1ZXN0X0dFVFNUQVRVUw0KICogICAgIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9DTEVBUkZFQVRVUkUNCiAqICAgICAtIFxyZWYgVVNCR2VuZXJpY1JlcXVlc3RfU0VURkVBVFVSRQ0KICogICAgIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9TRVRBRERSRVNTDQogKiAgICAgLSBccmVmIFVTQkdlbmVyaWNSZXF1ZXN0X0dFVERFU0NSSVBUT1INCiAqICAgICAtIFxyZWYgVVNCR2VuZXJpY1JlcXVlc3RfU0VUREVTQ1JJUFRPUg0KICogICAgIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9HRVRDT05GSUdVUkFUSU9ODQogKiAgICAgLSBccmVmIFVTQkdlbmVyaWNSZXF1ZXN0X1NFVENPTkZJR1VSQVRJT04NCiAqICAgICAtIFxyZWYgVVNCR2VuZXJpY1JlcXVlc3RfR0VUSU5URVJGQUNFDQogKiAgICAgLSBccmVmIFVTQkdlbmVyaWNSZXF1ZXN0X1NFVElOVEVSRkFDRQ0KICogICAgIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9TWU5DSEZSQU1FDQogKiANCiAqICAtIFxyZWYgdXNiX3JlcXVlc3RfcmVjaXBpZW50IFVTQiBSZXF1ZXN0IFJlY2lwaWVudHMNCiAqICAgICAtIFxyZWYgVVNCR2VuZXJpY1JlcXVlc3RfREVWSUNFDQogKiAgICAgLSBccmVmIFVTQkdlbmVyaWNSZXF1ZXN0X0lOVEVSRkFDRQ0KICogICAgIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9FTkRQT0lOVA0KICogICAgIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9PVEhFUg0KICogDQogKiAgLSBccmVmIHVzYl9yZXF1ZXN0X3R5cGUgVVNCIFJlcXVlc3QgVHlwZXMNCiAqICAgICAtIFxyZWYgVVNCR2VuZXJpY1JlcXVlc3RfU1RBTkRBUkQNCiAqICAgICAtIFxyZWYgVVNCR2VuZXJpY1JlcXVlc3RfQ0xBU1MNCiAqICAgICAtIFxyZWYgVVNCR2VuZXJpY1JlcXVlc3RfVkVORE9SDQogKiANCiAqICAtIFxyZWYgdXNiX3JlcXVlc3RfZGlyIFVTQiBSZXF1ZXN0IERpcmVjdGlvbnMNCiAqICAgICAtIFxyZWYgVVNCR2VuZXJpY1JlcXVlc3RfSU4NCiAqICAgICAtIFxyZWYgVVNCR2VuZXJpY1JlcXVlc3RfT1VUDQogKi8NCg0KLyoqIFxhZGR0b2dyb3VwIHVzYl9yZXF1ZXN0X2NvZGUgVVNCIFJlcXVlc3QgY29kZXMNCiAqICAgICAgICAgIEB7DQogKiAgVGhpcyBzZWN0aW9uIGxpc3RzIHRoZSBVU0IgZ2VuZXJpYyByZXF1ZXN0IGNvZGVzLg0KICogIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9HRVRTVEFUVVMNCiAqICAtIFxyZWYgVVNCR2VuZXJpY1JlcXVlc3RfQ0xFQVJGRUFUVVJFDQogKiAgLSBccmVmIFVTQkdlbmVyaWNSZXF1ZXN0X1NFVEZFQVRVUkUNCiAqICAtIFxyZWYgVVNCR2VuZXJpY1JlcXVlc3RfU0VUQUREUkVTUw0KICogIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9HRVRERVNDUklQVE9SDQogKiAgLSBccmVmIFVTQkdlbmVyaWNSZXF1ZXN0X1NFVERFU0NSSVBUT1INCiAqICAtIFxyZWYgVVNCR2VuZXJpY1JlcXVlc3RfR0VUQ09ORklHVVJBVElPTg0KICogIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9TRVRDT05GSUdVUkFUSU9ODQogKiAgLSBccmVmIFVTQkdlbmVyaWNSZXF1ZXN0X0dFVElOVEVSRkFDRQ0KICogIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9TRVRJTlRFUkZBQ0UNCiAqICAtIFxyZWYgVVNCR2VuZXJpY1JlcXVlc3RfU1lOQ0hGUkFNRQ0KICovDQovKiogIEdFVF9TVEFUVVMgcmVxdWVzdCBjb2RlLiAqLw0KI2RlZmluZSBVU0JHZW5lcmljUmVxdWVzdF9HRVRTVEFUVVMgICAgICAgICAgICAgMA0KLyoqICBDTEVBUl9GRUFUVVJFIHJlcXVlc3QgY29kZS4gKi8NCiNkZWZpbmUgVVNCR2VuZXJpY1JlcXVlc3RfQ0xFQVJGRUFUVVJFICAgICAgICAgIDENCi8qKiAgU0VUX0ZFQVRVUkUgcmVxdWVzdCBjb2RlLiAqLw0KI2RlZmluZSBVU0JHZW5lcmljUmVxdWVzdF9TRVRGRUFUVVJFICAgICAgICAgICAgMw0KLyoqICBTRVRfQUREUkVTUyByZXF1ZXN0IGNvZGUuICovDQojZGVmaW5lIFVTQkdlbmVyaWNSZXF1ZXN0X1NFVEFERFJFU1MgICAgICAgICAgICA1DQovKiogIEdFVF9ERVNDUklQVE9SIHJlcXVlc3QgY29kZS4gKi8NCiNkZWZpbmUgVVNCR2VuZXJpY1JlcXVlc3RfR0VUREVTQ1JJUFRPUiAgICAgICAgIDYNCi8qKiAgU0VUX0RFU0NSSVBUT1IgcmVxdWVzdCBjb2RlLiAqLw0KI2RlZmluZSBVU0JHZW5lcmljUmVxdWVzdF9TRVRERVNDUklQVE9SICAgICAgICAgNw0KLyoqICBHRVRfQ09ORklHVVJBVElPTiByZXF1ZXN0IGNvZGUuICovDQojZGVmaW5lIFVTQkdlbmVyaWNSZXF1ZXN0X0dFVENPTkZJR1VSQVRJT04gICAgICA4DQovKiogIFNFVF9DT05GSUdVUkFUSU9OIHJlcXVlc3QgY29kZS4gKi8NCiNkZWZpbmUgVVNCR2VuZXJpY1JlcXVlc3RfU0VUQ09ORklHVVJBVElPTiAgICAgIDkNCi8qKiAgR0VUX0lOVEVSRkFDRSByZXF1ZXN0IGNvZGUuICovDQojZGVmaW5lIFVTQkdlbmVyaWNSZXF1ZXN0X0dFVElOVEVSRkFDRSAgICAgICAgICAxMA0KLyoqICBTRVRfSU5URVJGQUNFIHJlcXVlc3QgY29kZS4gKi8NCiNkZWZpbmUgVVNCR2VuZXJpY1JlcXVlc3RfU0VUSU5URVJGQUNFICAgICAgICAgIDExDQovKiogIFNZTkNIX0ZSQU1FIHJlcXVlc3QgY29kZS4gKi8NCiNkZWZpbmUgVVNCR2VuZXJpY1JlcXVlc3RfU1lOQ0hGUkFNRSAgICAgICAgICAgIDEyDQovKiogICAgICAgICBAfSovDQoNCi8qKiBcYWRkdG9ncm91cCB1c2JfcmVxdWVzdF9yZWNpcGllbnQgVVNCIFJlcXVlc3QgUmVjaXBpZW50cw0KICogICAgICAgICAgQHsNCiAqICBUaGlzIHNlY3Rpb24gbGlzdHMgY29kZXMgb2YgVVNCIHJlcXVlc3QgcmVjaXBpZW50cy4NCiAqICAtIFxyZWYgVVNCR2VuZXJpY1JlcXVlc3RfREVWSUNFDQogKiAgLSBccmVmIFVTQkdlbmVyaWNSZXF1ZXN0X0lOVEVSRkFDRQ0KICogIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9FTkRQT0lOVA0KICogIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9PVEhFUg0KICovDQovKiogIFJlY2lwaWVudCBpcyB0aGUgd2hvbGUgZGV2aWNlLiAqLw0KI2RlZmluZSBVU0JHZW5lcmljUmVxdWVzdF9ERVZJQ0UgICAgICAgICAgICAgICAgMA0KLyoqICBSZWNpcGllbnQgaXMgYW4gaW50ZXJmYWNlLiAqLw0KI2RlZmluZSBVU0JHZW5lcmljUmVxdWVzdF9JTlRFUkZBQ0UgICAgICAgICAgICAgMQ0KLyoqICBSZWNpcGllbnQgaXMgYW4gZW5kcG9pbnQuICovDQojZGVmaW5lIFVTQkdlbmVyaWNSZXF1ZXN0X0VORFBPSU5UICAgICAgICAgICAgICAyDQovKiogIFJlY2lwaWVudCBpcyBhbm90aGVyIGVudGl0eS4gKi8NCiNkZWZpbmUgVVNCR2VuZXJpY1JlcXVlc3RfT1RIRVIgICAgICAgICAgICAgICAgIDMNCi8qKiAgICAgICAgIEB9Ki8NCg0KLyoqIFxhZGR0b2dyb3VwIHVzYl9yZXF1ZXN0X3R5cGUgVVNCIFJlcXVlc3QgVHlwZXMNCiAqICAgICAgICAgIEB7DQogKiAgVGhpcyBzZWN0aW9uIGxpc3RzIGNvZGVzIG9mIFVTQiByZXF1ZXN0IHR5cGVzLg0KICogIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9TVEFOREFSRA0KICogIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9DTEFTUw0KICogIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9WRU5ET1INCiAqLw0KLyoqICBSZXF1ZXN0IGlzIHN0YW5kYXJkLiAqLw0KI2RlZmluZSBVU0JHZW5lcmljUmVxdWVzdF9TVEFOREFSRCAgICAgICAgICAgICAgMA0KLyoqICBSZXF1ZXN0IGlzIGNsYXNzLXNwZWNpZmljLiAqLw0KI2RlZmluZSBVU0JHZW5lcmljUmVxdWVzdF9DTEFTUyAgICAgICAgICAgICAgICAgMQ0KLyoqICBSZXF1ZXN0IGlzIHZlbmRvci1zcGVjaWZpYy4gKi8NCiNkZWZpbmUgVVNCR2VuZXJpY1JlcXVlc3RfVkVORE9SICAgICAgICAgICAgICAgIDINCi8qKiAgICAgICAgIEB9Ki8NCg0KLyoqIFxhZGR0b2dyb3VwIHVzYl9yZXF1ZXN0X2RpciBVU0IgUmVxdWVzdCBEaXJlY3Rpb25zDQogKiAgICAgICAgICBAew0KICogIFRoaXMgc2VjdGlvbiBsaXN0cyBjb2RlcyBvZiBVU0IgcmVxdWVzdCBkaXJlY3Rpb25zLg0KICogIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9JTg0KICogIC0gXHJlZiBVU0JHZW5lcmljUmVxdWVzdF9PVVQNCiAqLw0KLyoqICBUcmFuc2ZlciBvY2N1cnMgZnJvbSBkZXZpY2UgdG8gdGhlIGhvc3QuICovDQojZGVmaW5lIFVTQkdlbmVyaWNSZXF1ZXN0X09VVCAgICAgICAgICAgICAgICAgICAwDQovKiogIFRyYW5zZmVyIG9jY3VycyBmcm9tIHRoZSBob3N0IHRvIHRoZSBkZXZpY2UuICovDQojZGVmaW5lIFVTQkdlbmVyaWNSZXF1ZXN0X0lOICAgICAgICAgICAgICAgICAgICAxDQovKiogICAgICAgICBAfSovDQovKiogICAgIEB9Ki8NCg0KDQovKi0tLS0tLS0tLS0tIEZlYXR1cmUgUmVxdWVzdCAtLS0tLS0tLS0tLS0qLw0KDQovKiogXGFkZHRvZ3JvdXAgdXNiX2ZlYXR1cmVfZGVmIFVTQiBGZWF0dXJlIFJlcXVlc3QgRGVmaW5pdGlvbnMNCiAqICAgICAgQHsNCiAqIFRoaXMgc2VjdGlvbiBsaXN0cyBjb2RlcyBvZiBVU0IgRmVhdHVyZSBSZXF1ZXN0DQogKg0KICogLSBccmVmIHVzYl9mZWF0dXJlX3NlbCBVU0IgRmVhdHVyZSBzZWxlY3RvcnMNCiAqICAgIC0gXHJlZiBVU0JGZWF0dXJlUmVxdWVzdF9FTkRQT0lOVEhBTFQNCiAqICAgIC0gXHJlZiBVU0JGZWF0dXJlUmVxdWVzdF9ERVZJQ0VSRU1PVEVXQUtFVVANCiAqICAgIC0gXHJlZiBVU0JGZWF0dXJlUmVxdWVzdF9URVNUTU9ERQ0KICoNCiAqIC0gXHJlZiB1c2JfdGVzdF9zZWwgVVNCIFRlc3QgbW9kZSBzZWxlY3RvcnMNCiAqICAgIC0gXHJlZiBVU0JGZWF0dXJlUmVxdWVzdF9URVNUSg0KICogICAgLSBccmVmIFVTQkZlYXR1cmVSZXF1ZXN0X1RFU1RLDQogKiAgICAtIFxyZWYgVVNCRmVhdHVyZVJlcXVlc3RfVEVTVFNFME5BSw0KICogICAgLSBccmVmIFVTQkZlYXR1cmVSZXF1ZXN0X1RFU1RQQUNLRVQNCiAqICAgIC0gXHJlZiBVU0JGZWF0dXJlUmVxdWVzdF9URVNURk9SQ0VFTkFCTEUNCiAqICAgIC0gXHJlZiBVU0JGZWF0dXJlUmVxdWVzdF9URVNUU0VORFpMUA0KICovDQoNCi8qKiBcYWRkdG9ncm91cCB1c2JfZmVhdHVyZV9zZWwgVVNCIEZlYXR1cmUgc2VsZWN0b3JzDQogKiAgICAgICAgICBAew0KICogVGhpcyBzZWN0aW9uIGxpc3RzIGNvZGVzIG9mIFVTQiBmZWF0dXJlIHNlbGVjdG9ycy4NCiAqIC0gXHJlZiBVU0JGZWF0dXJlUmVxdWVzdF9FTkRQT0lOVEhBTFQNCiAqIC0gXHJlZiBVU0JGZWF0dXJlUmVxdWVzdF9ERVZJQ0VSRU1PVEVXQUtFVVANCiAqIC0gXHJlZiBVU0JGZWF0dXJlUmVxdWVzdF9URVNUTU9ERQ0KICovDQovKiogSGFsdCBmZWF0dXJlIG9mIGFuIGVuZHBvaW50LiAqLw0KI2RlZmluZSBVU0JGZWF0dXJlUmVxdWVzdF9FTkRQT0lOVEhBTFQgICAgICAgICAgMA0KLyoqIFJlbW90ZSB3YWtlLXVwIGZlYXR1cmUgb2YgdGhlIGRldmljZS4gKi8NCiNkZWZpbmUgVVNCRmVhdHVyZVJlcXVlc3RfREVWSUNFUkVNT1RFV0FLRVVQICAgIDENCi8qKiBUZXN0IG1vZGUgb2YgdGhlIGRldmljZS4gKi8NCiNkZWZpbmUgVVNCRmVhdHVyZVJlcXVlc3RfVEVTVE1PREUgICAgICAgICAgICAgIDINCi8qKiBPVEcgc2V0IGZlYXR1cmUgKi8NCiNkZWZpbmUgVVNCRmVhdHVyZVJlcXVlc3RfT1RHICAgICAgICAgICAgICAgIDB4MEINCi8qKiBPVEcgYl9obnBfZW5hYmxlICovDQojZGVmaW5lIFVTQkZlYXR1cmVSZXF1ZXN0X09UR19CX0hOUF9FTkFCTEUgICAgICAzDQovKiogT1RHIGFfaG5wX3N1cHBvcnQgKi8NCiNkZWZpbmUgVVNCRmVhdHVyZVJlcXVlc3RfT1RHX0FfSE5QX1NVUFBPUlQgICAgIDQNCi8qKiBPVEcgYV9hbHRfaG5wX3N1cHBvcnQgKi8NCiNkZWZpbmUgVVNCRmVhdHVyZVJlcXVlc3RfT1RHX0FfQUxUX0hOUF9TVVBQT1JUIDUNCi8qKiAgICAgICAgIEB9Ki8NCg0KLyoqIFxhZGR0b2dyb3VwIHVzYl90ZXN0X3NlbCBVU0IgVGVzdCBtb2RlIHNlbGVjdG9ycw0KICogICAgICAgICAgQHsNCiAqICBUaGlzIHNlY3Rpb24gbGlzdHMgY29kZXMgb2YgVVNCIGhpZ2ggc3BlZWQgdGVzdCBtb2RlIHNlbGVjdG9ycy4NCiAqICAtIFxyZWYgVVNCRmVhdHVyZVJlcXVlc3RfVEVTVEoNCiAqICAtIFxyZWYgVVNCRmVhdHVyZVJlcXVlc3RfVEVTVEsNCiAqICAtIFxyZWYgVVNCRmVhdHVyZVJlcXVlc3RfVEVTVFNFME5BSw0KICogIC0gXHJlZiBVU0JGZWF0dXJlUmVxdWVzdF9URVNUUEFDS0VUDQogKiAgLSBccmVmIFVTQkZlYXR1cmVSZXF1ZXN0X1RFU1RGT1JDRUVOQUJMRQ0KICogIC0gXHJlZiBVU0JGZWF0dXJlUmVxdWVzdF9URVNUU0VORFpMUA0KICovDQoNCi8qKiAgVGVzdHMgdGhlIGhpZ2gtb3V0cHV0IGRyaXZlIGxldmVsIG9uIHRoZSBEKyBsaW5lLiAqLw0KI2RlZmluZSBVU0JGZWF0dXJlUmVxdWVzdF9URVNUSiAgICAgICAgICAgICAgICAgMQ0KLyoqICBUZXN0cyB0aGUgaGlnaC1vdXRwdXQgZHJpdmUgbGV2ZWwgb24gdGhlIEQtIGxpbmUuICovDQojZGVmaW5lIFVTQkZlYXR1cmVSZXF1ZXN0X1RFU1RLICAgICAgICAgICAgICAgICAyDQovKiogIFRlc3RzIHRoZSBvdXRwdXQgaW1wZWRhbmNlLCBsb3ctbGV2ZWwgb3V0cHV0IHZvbHRhZ2UgYW5kIGxvYWRpbmcNCiAgICAgY2hhcmFjdGVyaXN0aWNzLiAqLw0KI2RlZmluZSBVU0JGZWF0dXJlUmVxdWVzdF9URVNUU0UwTkFLICAgICAgICAgICAgMw0KLyoqICBUZXN0cyByaXNlIGFuZCBmYWxsIHRpbWVzLCBleWUgcGF0dGVybnMgYW5kIGppdHRlci4gKi8NCiNkZWZpbmUgVVNCRmVhdHVyZVJlcXVlc3RfVEVTVFBBQ0tFVCAgICAgICAgICAgIDQNCi8qKiAgVGVzdHMgdGhlIGh1YiBkaXNjb25uZWN0IGRldGVjdGlvbi4gKi8NCiNkZWZpbmUgVVNCRmVhdHVyZVJlcXVlc3RfVEVTVEZPUkNFRU5BQkxFICAgICAgIDUNCi8qKiAgU2VuZCBhIFpMUCBpbiBUZXN0IE1vZGUuICovDQojZGVmaW5lIFVTQkZlYXR1cmVSZXF1ZXN0X1RFU1RTRU5EWkxQICAgICAgICAgICA2DQovKiogICAgICAgICBAfSovDQovKiogICAgIEB9Ki8NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqICAgICAgVHlwZXMNCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCg0KLyogDQogKiAgICAgICAgICBGdW5jdGlvbiB0eXBlcw0KICovDQoNCi8qIA0KICogICAgICAgICAgRGVzY3JpcHRvciBzdHJ1Y3RzIHR5cGVzDQogKi8NCiNwcmFnbWEgcGFjaygxKQ0KI2lmIGRlZmluZWQgICAoIF9fQ0NfQVJNICAgKSAvKiBLZWlsIKbMVmlzaW9uIDQgKi8NCiNlbGlmIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkgLyogSUFSIEV3YXJtIDUuNDErICovDQojZGVmaW5lIF9fYXR0cmlidXRlX18oLi4uKQ0KI2VsaWYgZGVmaW5lZCAoICBfX0dOVUNfXyAgKSAvKiBHQ0MgQ1MzIDIwMDlxMy02OCAqLw0KI2VuZGlmDQoNCi8qKg0KICogIEdlbmVyaWMgVVNCIFNFVFVQIHJlcXVlc3Qgc2VudCBvdmVyIENvbnRyb2wgZW5kcG9pbnRzLg0KICovDQp0eXBlZGVmIHN0cnVjdCB7DQoNCiAgICAvKiogIFR5cGUgb2YgcmVxdWVzdA0KICAgICAqICBcc2EgdXNiX3JlcXVlc3RfcmVjaXBpZW50ICJVU0IgUmVxdWVzdCBSZWNpcGllbnRzIg0KICAgICAqICBcc2EgdXNiX3JlcXVlc3RfdHlwZSAiVVNCIFJlcXVlc3QgVHlwZXMiDQogICAgICogIFxzYSB1c2JfcmVxdWVzdF9kaXIgIlVTQiBSZXF1ZXN0IERpcmVjdGlvbnMiICovDQogICAgdWludDhfdCBibVJlcXVlc3RUeXBlOjg7DQogICAgLyoqICBSZXF1ZXN0IGNvZGUNCiAgICAgKiAgXHNhIHVzYl9yZXF1ZXN0X2NvZGUgIlVTQiBSZXF1ZXN0IENvZGVzIiAqLw0KICAgIHVpbnQ4X3QgYlJlcXVlc3Q6ODsNCiAgICAvKiogIFJlcXVlc3Qtc3BlY2lmaWMgdmFsdWUgcGFyYW1ldGVyLiAqLw0KICAgIHVpbnQxNl90IHdWYWx1ZToxNjsNCiAgICAvKiogIFJlcXVlc3Qtc3BlY2lmaWMgaW5kZXggcGFyYW1ldGVyLiAqLw0KICAgIHVpbnQxNl90IHdJbmRleDoxNjsNCiAgICAvKiogIEV4cGVjdGVkIGxlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoZSBkYXRhIHBoYXNlLiAqLw0KICAgIHVpbnQxNl90IHdMZW5ndGg6MTY7DQoNCn0gVVNCR2VuZXJpY1JlcXVlc3Q7DQoNCiNwcmFnbWEgcGFjaygpDQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKiAgICAgIEV4cG9ydGVkIEZ1bmN0aW9ucw0KICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQpleHRlcm4gdWludDhfdCBVU0JHZW5lcmljUmVxdWVzdF9HZXRUeXBlKA0KICAgIGNvbnN0IFVTQkdlbmVyaWNSZXF1ZXN0ICpyZXF1ZXN0KTsNCg0KZXh0ZXJuIHVpbnQ4X3QgVVNCR2VuZXJpY1JlcXVlc3RfR2V0UmVxdWVzdCgNCiAgICBjb25zdCBVU0JHZW5lcmljUmVxdWVzdCAqcmVxdWVzdCk7DQoNCmV4dGVybiB1aW50MTZfdCBVU0JHZW5lcmljUmVxdWVzdF9HZXRWYWx1ZSgNCiAgICBjb25zdCBVU0JHZW5lcmljUmVxdWVzdCAqcmVxdWVzdCk7DQoNCmV4dGVybiB1aW50MTZfdCBVU0JHZW5lcmljUmVxdWVzdF9HZXRJbmRleCgNCiAgICBjb25zdCBVU0JHZW5lcmljUmVxdWVzdCAqcmVxdWVzdCk7DQoNCmV4dGVybiB1aW50MTZfdCBVU0JHZW5lcmljUmVxdWVzdF9HZXRMZW5ndGgoDQogICAgY29uc3QgVVNCR2VuZXJpY1JlcXVlc3QgKnJlcXVlc3QpOw0KDQpleHRlcm4gdWludDhfdCBVU0JHZW5lcmljUmVxdWVzdF9HZXRFbmRwb2ludE51bWJlcigNCiAgICBjb25zdCBVU0JHZW5lcmljUmVxdWVzdCAqcmVxdWVzdCk7DQoNCmV4dGVybiB1aW50OF90IFVTQkdlbmVyaWNSZXF1ZXN0X0dldFJlY2lwaWVudCgNCiAgICBjb25zdCBVU0JHZW5lcmljUmVxdWVzdCAqcmVxdWVzdCk7DQoNCmV4dGVybiB1aW50OF90IFVTQkdlbmVyaWNSZXF1ZXN0X0dldERpcmVjdGlvbigNCiAgICBjb25zdCBVU0JHZW5lcmljUmVxdWVzdCAqcmVxdWVzdCk7DQoNCg0KZXh0ZXJuIHVpbnQ4X3QgVVNCR2V0RGVzY3JpcHRvclJlcXVlc3RfR2V0RGVzY3JpcHRvclR5cGUoDQogICAgY29uc3QgVVNCR2VuZXJpY1JlcXVlc3QgKnJlcXVlc3QpOw0KDQpleHRlcm4gdWludDhfdCBVU0JHZXREZXNjcmlwdG9yUmVxdWVzdF9HZXREZXNjcmlwdG9ySW5kZXgoDQogICAgY29uc3QgVVNCR2VuZXJpY1JlcXVlc3QgKnJlcXVlc3QpOw0KDQoNCmV4dGVybiB1aW50OF90IFVTQlNldEFkZHJlc3NSZXF1ZXN0X0dldEFkZHJlc3MoDQogICAgY29uc3QgVVNCR2VuZXJpY1JlcXVlc3QgKnJlcXVlc3QpOw0KDQoNCmV4dGVybiB1aW50OF90IFVTQlNldENvbmZpZ3VyYXRpb25SZXF1ZXN0X0dldENvbmZpZ3VyYXRpb24oDQogICAgY29uc3QgVVNCR2VuZXJpY1JlcXVlc3QgKnJlcXVlc3QpOw0KDQoNCmV4dGVybiB1aW50OF90IFVTQkludGVyZmFjZVJlcXVlc3RfR2V0SW50ZXJmYWNlKA0KICAgIGNvbnN0IFVTQkdlbmVyaWNSZXF1ZXN0ICpyZXF1ZXN0KTsNCg0KZXh0ZXJuIHVpbnQ4X3QgVVNCSW50ZXJmYWNlUmVxdWVzdF9HZXRBbHRlcm5hdGVTZXR0aW5nKA0KICAgIGNvbnN0IFVTQkdlbmVyaWNSZXF1ZXN0ICpyZXF1ZXN0KTsNCg0KDQpleHRlcm4gdWludDhfdCBVU0JGZWF0dXJlUmVxdWVzdF9HZXRGZWF0dXJlU2VsZWN0b3IoDQogICAgY29uc3QgVVNCR2VuZXJpY1JlcXVlc3QgKnJlcXVlc3QpOw0KDQpleHRlcm4gdWludDhfdCBVU0JGZWF0dXJlUmVxdWVzdF9HZXRUZXN0U2VsZWN0b3IoDQogICAgY29uc3QgVVNCR2VuZXJpY1JlcXVlc3QgKnJlcXVlc3QpOw0KDQovKiogQH0qLw0KLyoqQH0qLw0KI2VuZGlmIC8qICNpZm5kZWYgX1VTQlJFUVVFU1RTX0hfICovDQoNCg==