LyoqIEBmaWxlCiAgSE9CIHJlbGF0ZWQgZGVmaW5pdGlvbnMgaW4gUEkuCgogIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDgsIEludGVsIENvcnBvcmF0aW9uCiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQogIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQKICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwCgogIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLAogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuCgogIEBwYXIgUmV2aXNpb24gUmVmZXJlbmNlOgogIFZlcnNpb24gMS4wLgoKKiovCgojaWZuZGVmIF9fUElfSE9CX0hfXwojZGVmaW5lIF9fUElfSE9CX0hfXwoKI2luY2x1ZGUgPGdweGUvZWZpL1Byb2Nlc3NvckJpbmQuaD4KI2luY2x1ZGUgPGdweGUvZWZpL1BpL1BpQm9vdE1vZGUuaD4KI2luY2x1ZGUgPGdweGUvZWZpL1VlZmkvVWVmaUJhc2VUeXBlLmg+CiNpbmNsdWRlIDxncHhlL2VmaS9VZWZpL1VlZmlNdWx0aVBoYXNlLmg+CgovLwovLyBIb2JUeXBlIG9mIEVGSV9IT0JfR0VORVJJQ19IRUFERVIuCi8vCiNkZWZpbmUgRUZJX0hPQl9UWVBFX0hBTkRPRkYgICAgICAgICAgICAgIDB4MDAwMQojZGVmaW5lIEVGSV9IT0JfVFlQRV9NRU1PUllfQUxMT0NBVElPTiAgICAweDAwMDIKI2RlZmluZSBFRklfSE9CX1RZUEVfUkVTT1VSQ0VfREVTQ1JJUFRPUiAgMHgwMDAzCiNkZWZpbmUgRUZJX0hPQl9UWVBFX0dVSURfRVhURU5TSU9OICAgICAgIDB4MDAwNAojZGVmaW5lIEVGSV9IT0JfVFlQRV9GViAgICAgICAgICAgICAgICAgICAweDAwMDUKI2RlZmluZSBFRklfSE9CX1RZUEVfQ1BVICAgICAgICAgICAgICAgICAgMHgwMDA2CiNkZWZpbmUgRUZJX0hPQl9UWVBFX01FTU9SWV9QT09MICAgICAgICAgIDB4MDAwNwojZGVmaW5lIEVGSV9IT0JfVFlQRV9GVjIgICAgICAgICAgICAgICAgICAweDAwMDkKI2RlZmluZSBFRklfSE9CX1RZUEVfTE9BRF9QRUlNICAgICAgICAgICAgMHgwMDBBCiNkZWZpbmUgRUZJX0hPQl9UWVBFX1VOVVNFRCAgICAgICAgICAgICAgIDB4RkZGRQojZGVmaW5lIEVGSV9IT0JfVFlQRV9FTkRfT0ZfSE9CX0xJU1QgICAgICAweEZGRkYKCi8vLwovLy8gRGVzY3JpYmVzIHRoZSBmb3JtYXQgYW5kIHNpemUgb2YgdGhlIGRhdGEgaW5zaWRlIHRoZSBIT0IuCi8vLyBBbGwgSE9CcyBtdXN0IGNvbnRhaW4gdGhpcyBnZW5lcmljIEhPQiBoZWFkZXIuCi8vLwp0eXBlZGVmIHN0cnVjdCB7CiAgVUlOVDE2ICAgIEhvYlR5cGU7CiAgVUlOVDE2ICAgIEhvYkxlbmd0aDsKICBVSU5UMzIgICAgUmVzZXJ2ZWQ7Cn0gRUZJX0hPQl9HRU5FUklDX0hFQURFUjsKCgovLy8KLy8vIFZhbHVlIG9mIHZlcnNpb24gb2ZpbkVGSV9IT0JfSEFORE9GRl9JTkZPX1RBQkxFLgovLy8KI2RlZmluZSBFRklfSE9CX0hBTkRPRkZfVEFCTEVfVkVSU0lPTiAweDAwMDkKCi8vLwovLy8gQ29udGFpbnMgZ2VuZXJhbCBzdGF0ZSBpbmZvcm1hdGlvbiB1c2VkIGJ5IHRoZSBIT0IgcHJvZHVjZXIgcGhhc2UuCi8vLyBUaGlzIEhPQiBtdXN0IGJlIHRoZSBmaXJzdCBvbmUgaW4gdGhlIEhPQiBsaXN0LgovLy8KdHlwZWRlZiBzdHJ1Y3QgewogIEVGSV9IT0JfR0VORVJJQ19IRUFERVIgIEhlYWRlcjsKICBVSU5UMzIgICAgICAgICAgICAgICAgICBWZXJzaW9uOwogIEVGSV9CT09UX01PREUgICAgICAgICAgIEJvb3RNb2RlOwogIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIEVmaU1lbW9yeVRvcDsKICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBFZmlNZW1vcnlCb3R0b207CiAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgRWZpRnJlZU1lbW9yeVRvcDsKICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBFZmlGcmVlTWVtb3J5Qm90dG9tOwogIEVGSV9QSFlTSUNBTF9BRERSRVNTICAgIEVmaUVuZE9mSG9iTGlzdDsKfSBFRklfSE9CX0hBTkRPRkZfSU5GT19UQUJMRTsKCi8vLwovLy8gRUZJX0hPQl9NRU1PUllfQUxMT0NBVElPTl9IRUFERVIgZGVzY3JpYmVzIHRoZQovLy8gdmFyaW91cyBhdHRyaWJ1dGVzIG9mIHRoZSBsb2dpY2FsIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGUgdHlwZSBmaWVsZCB3aWxsIGJlIHVzZWQgZm9yCi8vLyBzdWJzZXF1ZW50IGluY2x1c2lvbiBpbiB0aGUgVUVGSSBtZW1vcnkgbWFwLgovLy8KdHlwZWRlZiBzdHJ1Y3QgewogIC8vLwogIC8vLyBBIEdVSUQgdGhhdCBkZWZpbmVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiByZWdpb26hr3MgdHlwZSBhbmQgcHVycG9zZSwgYXMgd2VsbCBhcwogIC8vLyBvdGhlciBmaWVsZHMgd2l0aGluIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBIT0IuIFRoaXMgR1VJRCBpcyB1c2VkIHRvIGRlZmluZSB0aGUKICAvLy8gYWRkaXRpb25hbCBkYXRhIHdpdGhpbiB0aGUgSE9CIHRoYXQgbWF5IGJlIHByZXNlbnQgZm9yIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBIT0IuCiAgLy8vIFR5cGUgRUZJX0dVSUQgaXMgZGVmaW5lZCBpbiBJbnN0YWxsUHJvdG9jb2xJbnRlcmZhY2UoKSBpbiB0aGUgVUVGSSAyLjAKICAvLy8gc3BlY2lmaWNhdGlvbi4KICAvLy8KICBFRklfR1VJRCAgICAgICAgICAgICAgTmFtZTsKCiAgLy8vIFRoZSBiYXNlIGFkZHJlc3Mgb2YgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGlzIEhPQi4gVHlwZQogIC8vLyBFRklfUEhZU0lDQUxfQUREUkVTUyBpcyBkZWZpbmVkIGluIEFsbG9jYXRlUGFnZXMoKSBpbiB0aGUgVUVGSSAyLjAKICAvLy8gc3BlY2lmaWNhdGlvbi4KICBFRklfUEhZU0lDQUxfQUREUkVTUyAgTWVtb3J5QmFzZUFkZHJlc3M7CgogIC8vLwogIC8vLyBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhpcyBIT0IuCiAgLy8vCiAgVUlOVDY0ICAgICAgICAgICAgICAgIE1lbW9yeUxlbmd0aDsKCiAgLy8vCiAgLy8vIERlZmluZXMgdGhlIHR5cGUgb2YgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGlzIEhPQi4gVGhlIG1lbW9yeSB0eXBlIGRlZmluaXRpb24KICAvLy8gZm9sbG93cyB0aGUgRUZJX01FTU9SWV9UWVBFIGRlZmluaXRpb24uIFR5cGUgRUZJX01FTU9SWV9UWVBFIGlzIGRlZmluZWQKICAvLy8gaW4gQWxsb2NhdGVQYWdlcygpIGluIHRoZSBVRUZJIDIuMCBzcGVjaWZpY2F0aW9uLgogIC8vLwogIEVGSV9NRU1PUllfVFlQRSAgICAgICBNZW1vcnlUeXBlOwoKICAvLy8KICAvLy8gUGFkZGluZyBmb3IgSXRhbml1bSBwcm9jZXNzb3IgZmFtaWx5CiAgLy8vCiAgVUlOVDggICAgICAgICAgICAgICAgIFJlc2VydmVkWzRdOwp9IEVGSV9IT0JfTUVNT1JZX0FMTE9DQVRJT05fSEVBREVSOwoKLy8vCi8vLyBEZXNjcmliZXMgYWxsIG1lbW9yeSByYW5nZXMgdXNlZCBkdXJpbmcgdGhlIEhPQiBwcm9kdWNlcgovLy8gcGhhc2UgdGhhdCBleGlzdCBvdXRzaWRlIHRoZSBIT0IgbGlzdC4gVGhpcyBIT0IgdHlwZQovLy8gZGVzY3JpYmVzIGhvdyBtZW1vcnkgaXMgdXNlZCwKLy8vIG5vdCB0aGUgcGh5c2ljYWwgYXR0cmlidXRlcyBvZiBtZW1vcnkuCi8vLwp0eXBlZGVmIHN0cnVjdCB7CiAgRUZJX0hPQl9HRU5FUklDX0hFQURFUiAgICAgICAgICAgIEhlYWRlcjsKICBFRklfSE9CX01FTU9SWV9BTExPQ0FUSU9OX0hFQURFUiAgQWxsb2NEZXNjcmlwdG9yOwogIC8vCiAgLy8gQWRkaXRpb25hbCBkYXRhIHBlcnRhaW5pbmcgdG8gdGhlICJOYW1lIiBHdWlkIG1lbW9yeQogIC8vIG1heSBnbyBoZXJlLgogIC8vCn0gRUZJX0hPQl9NRU1PUllfQUxMT0NBVElPTjsKCgovLy8KLy8vIERlc2NyaWJlcyB0aGUgbWVtb3J5IHN0YWNrIHRoYXQgaXMgcHJvZHVjZWQgYnkgdGhlIEhPQiBwcm9kdWNlcgovLy8gcGhhc2UgYW5kIHVwb24gd2hpY2ggYWxsIHBvc3RtZW1vcnktaW5zdGFsbGVkIGV4ZWN1dGFibGUKLy8vIGNvbnRlbnQgaW4gdGhlIEhPQiBwcm9kdWNlciBwaGFzZSBpcyBleGVjdXRpbmcuCi8vLwp0eXBlZGVmIHN0cnVjdCB7CiAgRUZJX0hPQl9HRU5FUklDX0hFQURFUiAgICAgICAgICAgIEhlYWRlcjsKICBFRklfSE9CX01FTU9SWV9BTExPQ0FUSU9OX0hFQURFUiAgQWxsb2NEZXNjcmlwdG9yOwp9IEVGSV9IT0JfTUVNT1JZX0FMTE9DQVRJT05fU1RBQ0s7CgovLy8KLy8vIERlZmluZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBib290LXN0cmFwCi8vLyBwcm9jZXNzb3IgKEJTUCkgQlNQU3RvcmUgKCJCYWNraW5nIFN0b3JlIFBvaW50ZXIgU3RvcmUiKS4KLy8vIFRoaXMgSE9CIGlzIHZhbGlkIGZvciB0aGUgSXRhbml1bSBwcm9jZXNzb3IgZmFtaWx5IG9ubHkKLy8vIHJlZ2lzdGVyIG92ZXJmbG93IHN0b3JlLgovLy8KdHlwZWRlZiBzdHJ1Y3QgewogIEVGSV9IT0JfR0VORVJJQ19IRUFERVIgICAgICAgICAgICBIZWFkZXI7CiAgRUZJX0hPQl9NRU1PUllfQUxMT0NBVElPTl9IRUFERVIgIEFsbG9jRGVzY3JpcHRvcjsKfSBFRklfSE9CX01FTU9SWV9BTExPQ0FUSU9OX0JTUF9TVE9SRTsKCi8vLwovLy8gRGVmaW5lcyB0aGUgbG9jYXRpb24gYW5kIGVudHJ5IHBvaW50IG9mIHRoZSBIT0IgY29uc3VtZXIgcGhhc2UuCi8vLwp0eXBlZGVmIHN0cnVjdCB7CiAgRUZJX0hPQl9HRU5FUklDX0hFQURFUiAgICAgICAgICAgIEhlYWRlcjsKICBFRklfSE9CX01FTU9SWV9BTExPQ0FUSU9OX0hFQURFUiAgTWVtb3J5QWxsb2NhdGlvbkhlYWRlcjsKICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kdWxlTmFtZTsKICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICAgICAgICAgICAgRW50cnlQb2ludDsKfSBFRklfSE9CX01FTU9SWV9BTExPQ0FUSU9OX01PRFVMRTsKCi8vLwovLy8gdHlwZSBvZiBSZWNvdW50IHR5cGUKLy8vCnR5cGVkZWYgVUlOVDMyIEVGSV9SRVNPVVJDRV9UWVBFOwoKLy8KLy8gVmFsdWUgb2YgUmVzb3VyY2VUeXBlIGluIEVGSV9IT0JfUkVTT1VSQ0VfREVTQ1JJUFRPUi4KLy8KI2RlZmluZSBFRklfUkVTT1VSQ0VfU1lTVEVNX01FTU9SWSAgICAgICAgICAweDAwMDAwMDAwCiNkZWZpbmUgRUZJX1JFU09VUkNFX01FTU9SWV9NQVBQRURfSU8gICAgICAgMHgwMDAwMDAwMQojZGVmaW5lIEVGSV9SRVNPVVJDRV9JTyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKI2RlZmluZSBFRklfUkVTT1VSQ0VfRklSTVdBUkVfREVWSUNFICAgICAgICAweDAwMDAwMDAzCiNkZWZpbmUgRUZJX1JFU09VUkNFX01FTU9SWV9NQVBQRURfSU9fUE9SVCAgMHgwMDAwMDAwNAojZGVmaW5lIEVGSV9SRVNPVVJDRV9NRU1PUllfUkVTRVJWRUQgICAgICAgIDB4MDAwMDAwMDUKI2RlZmluZSBFRklfUkVTT1VSQ0VfSU9fUkVTRVJWRUQgICAgICAgICAgICAweDAwMDAwMDA2CiNkZWZpbmUgRUZJX1JFU09VUkNFX01BWF9NRU1PUllfVFlQRSAgICAgICAgMHgwMDAwMDAwNwoKLy8vCi8vLyB0eXBlIG9mIHJlY291bnQgYXR0cmlidXRlIHR5cGUKLy8vCnR5cGVkZWYgVUlOVDMyIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfVFlQRTsKCi8vCi8vIFRoZXNlIHR5cGVzIGNhbiBiZSBPUmVkIHRvZ2V0aGVyIGFzIG5lZWRlZC4KLy8KLy8gVGhlIGZpcnN0IHRocmVlIGVudW1lcmF0aW9ucyBkZXNjcmliZSBzZXR0aW5ncwovLwojZGVmaW5lIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfUFJFU0VOVCAgICAgICAgICAgICAgMHgwMDAwMDAwMQojZGVmaW5lIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfSU5JVElBTElaRUQgICAgICAgICAgMHgwMDAwMDAwMgojZGVmaW5lIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfVEVTVEVEICAgICAgICAgICAgICAgMHgwMDAwMDAwNAovLwovLyBUaGUgcmVzdCBvZiB0aGUgc2V0dGluZ3MgZGVzY3JpYmUgY2FwYWJpbGl0aWVzCi8vCiNkZWZpbmUgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9TSU5HTEVfQklUX0VDQyAgICAgICAgICAgMHgwMDAwMDAwOAojZGVmaW5lIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfTVVMVElQTEVfQklUX0VDQyAgICAgICAgIDB4MDAwMDAwMTAKI2RlZmluZSBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX0VDQ19SRVNFUlZFRF8xICAgICAgICAgICAweDAwMDAwMDIwCiNkZWZpbmUgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9FQ0NfUkVTRVJWRURfMiAgICAgICAgICAgMHgwMDAwMDA0MAojZGVmaW5lIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfUkVBRF9QUk9URUNURUQgICAgICAgICAgIDB4MDAwMDAwODAKI2RlZmluZSBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1dSSVRFX1BST1RFQ1RFRCAgICAgICAgICAweDAwMDAwMTAwCiNkZWZpbmUgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9FWEVDVVRJT05fUFJPVEVDVEVEICAgICAgMHgwMDAwMDIwMAojZGVmaW5lIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfVU5DQUNIRUFCTEUgICAgICAgICAgICAgIDB4MDAwMDA0MDAKI2RlZmluZSBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1dSSVRFX0NPTUJJTkVBQkxFICAgICAgICAweDAwMDAwODAwCiNkZWZpbmUgRUZJX1JFU09VUkNFX0FUVFJJQlVURV9XUklURV9USFJPVUdIX0NBQ0hFQUJMRSAgMHgwMDAwMTAwMAojZGVmaW5lIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfV1JJVEVfQkFDS19DQUNIRUFCTEUgICAgIDB4MDAwMDIwMDAKI2RlZmluZSBFRklfUkVTT1VSQ0VfQVRUUklCVVRFXzE2X0JJVF9JTyAgICAgICAgICAgICAgICAweDAwMDA0MDAwCiNkZWZpbmUgRUZJX1JFU09VUkNFX0FUVFJJQlVURV8zMl9CSVRfSU8gICAgICAgICAgICAgICAgMHgwMDAwODAwMAojZGVmaW5lIEVGSV9SRVNPVVJDRV9BVFRSSUJVVEVfNjRfQklUX0lPICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKI2RlZmluZSBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1VOQ0FDSEVEX0VYUE9SVEVEICAgICAgICAweDAwMDIwMDAwCgovLy8KLy8vIERlc2NyaWJlcyB0aGUgcmVzb3VyY2UgcHJvcGVydGllcyBvZiBhbGwgZml4ZWQsCi8vLyBub25yZWxvY2F0YWJsZSByZXNvdXJjZSByYW5nZXMgZm91bmQgb24gdGhlIHByb2Nlc3NvcgovLy8gaG9zdCBidXMgZHVyaW5nIHRoZSBIT0IgcHJvZHVjZXIgcGhhc2UuCi8vLwp0eXBlZGVmIHN0cnVjdCB7CiAgRUZJX0hPQl9HRU5FUklDX0hFQURFUiAgICAgIEhlYWRlcjsKICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgT3duZXI7CiAgRUZJX1JFU09VUkNFX1RZUEUgICAgICAgICAgIFJlc291cmNlVHlwZTsKICBFRklfUkVTT1VSQ0VfQVRUUklCVVRFX1RZUEUgUmVzb3VyY2VBdHRyaWJ1dGU7CiAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgIFBoeXNpY2FsU3RhcnQ7CiAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlTGVuZ3RoOwp9IEVGSV9IT0JfUkVTT1VSQ0VfREVTQ1JJUFRPUjsKCi8vLwovLy8gQWxsb3dzIHdyaXRlcnMgb2YgZXhlY3V0YWJsZSBjb250ZW50IGluIHRoZSBIT0IgcHJvZHVjZXIgcGhhc2UgdG8KLy8vIG1haW50YWluIGFuZCBtYW5hZ2UgSE9CcyB3aXRoIHNwZWNpZmljIEdVSUQuCi8vLwp0eXBlZGVmIHN0cnVjdCB7CiAgRUZJX0hPQl9HRU5FUklDX0hFQURFUiAgICAgIEhlYWRlcjsKICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgTmFtZTsKCiAgLy8vCiAgLy8vIEd1aWQgc3BlY2lmaWMgZGF0YSBnb2VzIGhlcmUKICAvLy8KfSBFRklfSE9CX0dVSURfVFlQRTsKCi8vLwovLy8gRGV0YWlscyB0aGUgbG9jYXRpb24gb2YgZmlybXdhcmUgdm9sdW1lcyB0aGF0IGNvbnRhaW4gZmlybXdhcmUgZmlsZXMuCi8vLwp0eXBlZGVmIHN0cnVjdCB7CiAgRUZJX0hPQl9HRU5FUklDX0hFQURFUiBIZWFkZXI7CiAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICBCYXNlQWRkcmVzczsKICBVSU5UNjQgICAgICAgICAgICAgICAgIExlbmd0aDsKfSBFRklfSE9CX0ZJUk1XQVJFX1ZPTFVNRTsKCi8vLwovLy8gRGV0YWlscyB0aGUgbG9jYXRpb24gb2YgYSBmaXJtd2FyZSB2b2x1bWUgd2hpY2ggd2FzIGV4dHJhY3RlZAovLy8gZnJvbSBhIGZpbGUgd2l0aGluIGFub3RoZXIgZmlybXdhcmUgdm9sdW1lLgovLy8KdHlwZWRlZiBzdHJ1Y3QgewogIEVGSV9IT0JfR0VORVJJQ19IRUFERVIgIEhlYWRlcjsKICBFRklfUEhZU0lDQUxfQUREUkVTUyAgICBCYXNlQWRkcmVzczsKICBVSU5UNjQgICAgICAgICAgICAgICAgICBMZW5ndGg7CiAgRUZJX0dVSUQgICAgICAgICAgICAgICAgRnZOYW1lOwogIEVGSV9HVUlEICAgICAgICAgICAgICAgIEZpbGVOYW1lOwp9IEVGSV9IT0JfRklSTVdBUkVfVk9MVU1FMjsKCgovLy8KLy8vIERlc2NyaWJlcyBwcm9jZXNzb3IgaW5mb3JtYXRpb24sIHN1Y2ggYXMgYWRkcmVzcyBzcGFjZSBhbmQgSS9PIHNwYWNlIGNhcGFiaWxpdGllcy4KLy8vCnR5cGVkZWYgc3RydWN0IHsKICBFRklfSE9CX0dFTkVSSUNfSEVBREVSICBIZWFkZXI7CiAgVUlOVDggICAgICAgICAgICAgICAgICAgU2l6ZU9mTWVtb3J5U3BhY2U7CiAgVUlOVDggICAgICAgICAgICAgICAgICAgU2l6ZU9mSW9TcGFjZTsKICBVSU5UOCAgICAgICAgICAgICAgICAgICBSZXNlcnZlZFs2XTsKfSBFRklfSE9CX0NQVTsKCgovLy8KLy8vIERlc2NyaWJlcyBwb29sIG1lbW9yeSBhbGxvY2F0aW9ucy4KLy8vCnR5cGVkZWYgc3RydWN0IHsKICBFRklfSE9CX0dFTkVSSUNfSEVBREVSICBIZWFkZXI7Cn0gRUZJX0hPQl9NRU1PUllfUE9PTDsKCi8vLwovLy8gVW5pb24gb2YgYWxsIHRoZSBwb3NzaWJsZSBIT0IgVHlwZXMKLy8vCnR5cGVkZWYgdW5pb24gewogIEVGSV9IT0JfR0VORVJJQ19IRUFERVIgICAgICAgICAgICAgICpIZWFkZXI7CiAgRUZJX0hPQl9IQU5ET0ZGX0lORk9fVEFCTEUgICAgICAgICAgKkhhbmRvZmZJbmZvcm1hdGlvblRhYmxlOwogIEVGSV9IT0JfTUVNT1JZX0FMTE9DQVRJT04gICAgICAgICAgICpNZW1vcnlBbGxvY2F0aW9uOwogIEVGSV9IT0JfTUVNT1JZX0FMTE9DQVRJT05fQlNQX1NUT1JFICpNZW1vcnlBbGxvY2F0aW9uQnNwU3RvcmU7CiAgRUZJX0hPQl9NRU1PUllfQUxMT0NBVElPTl9TVEFDSyAgICAgKk1lbW9yeUFsbG9jYXRpb25TdGFjazsKICBFRklfSE9CX01FTU9SWV9BTExPQ0FUSU9OX01PRFVMRSAgICAqTWVtb3J5QWxsb2NhdGlvbk1vZHVsZTsKICBFRklfSE9CX1JFU09VUkNFX0RFU0NSSVBUT1IgICAgICAgICAqUmVzb3VyY2VEZXNjcmlwdG9yOwogIEVGSV9IT0JfR1VJRF9UWVBFICAgICAgICAgICAgICAgICAgICpHdWlkOwogIEVGSV9IT0JfRklSTVdBUkVfVk9MVU1FICAgICAgICAgICAgICpGaXJtd2FyZVZvbHVtZTsKICBFRklfSE9CX0ZJUk1XQVJFX1ZPTFVNRTIgICAgICAgICAgICAqRmlybXdhcmVWb2x1bWUyOwogIEVGSV9IT0JfQ1BVICAgICAgICAgICAgICAgICAgICAgICAgICpDcHU7CiAgRUZJX0hPQl9NRU1PUllfUE9PTCAgICAgICAgICAgICAgICAgKlBvb2w7CiAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJhdzsKfSBFRklfUEVJX0hPQl9QT0lOVEVSUzsKCgojZW5kaWYK