ZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC81Zy9kZG1fdmdtbV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC81Zy9kZG1fdmdtbV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTQ1NTk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsLzVnL2RkbV92Z21tX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTgKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIERETV9WR01NX1NUUlVDVF9ICisjZGVmaW5lIERETV9WR01NX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgImF0Y21kX3N0cnVjdC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgTUFDUk9TICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgVFlQRSBERUZJTklUSU9OUyAmIEVOVU1TICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIGVudW0KK3sKKyAgICBERE1fVkdNTV9DUkxBRE5fUkVTVUxUX1NVQ0NFU1MsCisgICAgRERNX1ZHTU1fQ1JMQUROX1JFU1VMVF9GQUlMX0NBVVNFX0NBTk5PVF9QUk9DRVNTLAorICAgIERETV9WR01NX0NSTEFETl9SRVNVTFRfRkFJTF9DQVVTRV9OV19GT1JNQVRfRkFJTFVSRSwKKyAgICBERE1fVkdNTV9DUkxBRE5fUkVTVUxUX0ZBSUxfQ0FVU0VfR0VNSU5JX0ZBSUxVUkUsCisgICAgRERNX1ZHTU1fQ1JMQUROX1JFU1VMVF9GQUlMX0NBVVNFX09USEVSUywKKyAgICBERE1fVkdNTV9NQVhfTlVNX09GX0NSTEFETl9SRVNVTFQKK30gZGRtX3ZnbW1fY3JsYWRuX3Jlc3VsdF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBERE1fVkdNTV9UXzMzNDYsCisgICAgRERNX1ZHTU1fVF9USFJPVFRMSU5HCit9ZGRtX3ZnbW1fYmFja29mZl90aW1lcl9pZF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBERE1fVkdNTV9ERUFDVF9QRFVTX0lORk9fTk9ORSA9IDAsCisgICAgRERNX1ZHTU1fREVBQ1RfUERVU19JTkZPX0lSQVRfNEc1X01SVV9TVUNDRVNTCit9IGRkbV92Z21tX2RlYWN0X3BkdXNfaW5mb19lbnVtOworCit0eXBlZGVmIGxhZG5faW5mb19zdHJ1Y3QgZGRtX3ZnbW1fbGFkbl9pbmZvX3N0cnVjdDsKKworLyogTVNHX0lEX0RETV9WR01NX0NSTEFETl9DTkYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGRkbV92Z21tX2NybGFkbl9yZXN1bHRfZW51bSByZXN1bHQ7CisgICAga2FsX3VpbnQ4IG51bV9vZl9sYWRuX2luZm87CisgICAgZGRtX3ZnbW1fbGFkbl9pbmZvX3N0cnVjdCBsYWRuX2luZm9bTUFYX0xBRE5fSU5GT107CisgICAga2FsX2Jvb2wgICBpc19sYWRuX3Jhd19kYXRhX3ZhbGlkOworICAgIGthbF91aW50MTYgbGFkbl9yYXdfZGF0YV9sZW47CisgICAga2FsX3VpbnQ4ICBsYWRuX3Jhd19kYXRhW01BWF9MQUROX0lORk9fTEVOXTsKK30gZGRtX3ZnbW1fY3JsYWRuX2NuZl9zdHJ1Y3Q7CisKKy8qIE1TR19JRF9ERE1fVkdNTV9DUkxBRE5fUkVRICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGxhZG5fZG5uX251bTsKKyAgICBhcG5fc3RydWN0IGRubltNQVhfTEFETl9JTkZPXTsKK30gZGRtX3ZnbW1fY3JsYWRuX3JlcV9zdHJ1Y3Q7CisKKy8qIE1TR19JRF9ERE1fVkdNTV9DQUJUU1JJX0lORCAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgYXRfY2FidHNyaV9pbmRfc3RydWN0IGNhYnRzcmlfaW5kOworICAgIGRkbV92Z21tX2JhY2tvZmZfdGltZXJfaWRfZW51bSBiYWNrb2ZmX3RpbWVyX2lkOworfSBkZG1fdmdtbV9jYWJ0c3JpX2luZF9zdHJ1Y3QgOworCisvKiBNU0dfSURfRERNX1ZHTU1fREVBQ1RfUERVU19JTkZPX1VQREFURV9JTkQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGRkbV92Z21tX2RlYWN0X3BkdXNfaW5mb19lbnVtIGRlYWN0X3BkdXNfaW5mbzsKK30gZGRtX3ZnbW1fZGVhY3RfcGR1c19pbmZvX3VwZGF0ZV9pbmRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIFZBUklBQkxFUyAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBGVU5DVElPTiBERUNMQVJBVElPTlMgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZW5kaWYgLyogRERNX1ZHTU1fU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC81Zy9lcm1fbnJyY19zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC81Zy9lcm1fbnJyY19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWI5M2M4Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsLzVnL2VybV9ucnJjX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTkKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIEVSTV9OUlJDX1NUUlVDVF9ICisjZGVmaW5lIEVSTV9OUlJDX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCisjaW5jbHVkZSAibmwxX2NvbW1faW50ZXJfY29yZV9wdWJsaWMuaCIKKyNpbmNsdWRlICJwZXJmX2FwaS5oIgorI2luY2x1ZGUgIm5ycmNfbnZyYW1fZWRpdG9yLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICBNQUNST1MgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgIFRZUEUgREVGSU5JVElPTlMgJiBFTlVNUyAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBFbnVtZXJhdGlvbiBpZGVudGlmaWVzIHBlbmFsdHkgdHlwZXMuCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIE5SUkNfRVJST1JfUkVDT1ZFUllfUEVOQUxUWV9UWVBFX0xPV0VSX1BSSU9SSVRZID0gMCwKKyAgICBOUlJDX0VSUk9SX1JFQ09WRVJZX1BFTkFMVFlfVFlQRV9DRUxMX0JBUlJFRCAgICA9IDEsCisgICAgTlJSQ19FUlJPUl9SRUNPVkVSWV9QRU5BTFRZX1RZUEVfQ0VMTF9TT1VSQ0VfTk9UX1BSSU9SICAgID0gMgorfSBucnJjX2Vycm9yX3JlY292ZXJ5X3BlbmFsdHlfdHlwZV9lbnVtOworCisvKioKKyAqIFN0cnVjdHVyZSByZXByZXNlbnRzIHBhcmFtZXRlcnMgd2hpY2gKKyAqIGlkZW50aWZ5IGEgY2VsbCBmb3IgZXJyb3IgcmVjb3ZlcnkgcHVycG9zZXMuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRsX2ZyZXF1ZW5jeV9iYW5kOworICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2JfYXJmY247CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaTsKKyAgICBOUl9TQ1NfVFlQRV9FICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViY2Fycmllcl9zcGFjaW5nX3NzYjsKK30gbnJyY19lcnJvcl9yZWNvdmVyeV9jZWxsX2luZm9fc3RydWN0OworCisvKiBNU0dfSURfRVJNX05SUkNfQ0VMTF9JTkZPX0lORCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfY2VsbF92YWxpZDsKKyAgICBucnJjX2Vycm9yX3JlY292ZXJ5X2NlbGxfaW5mb19zdHJ1Y3QgICAgY3VycmVudF9jZWxsOworfSBlcm1fbnJyY19jZWxsX2luZm9faW5kX3N0cnVjdDsKKworLyogTVNHX0lEX0VSTV9OUlJDX0VSUk9SX1JFQ09WRVJZX0lORCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAgcHJvdG9jb2xfZXhjZXB0aW9uX3JlY292ZXJ5X3R5cGVfZW51bSAgIHJlY292ZXJ5X2V2ZW50OworfSBlcm1fbnJyY19lcnJvcl9yZWNvdmVyeV9pbmRfc3RydWN0OworCisvKiBNU0dfSURfRVJNX05SUkNfRVJST1JfUkVDT1ZFUllfUkVRICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICBlcnJvcl9yZWNvdmVyeV9tZXRob2RfZW51bSAgICAgICAgICAgICAgcmVjb3ZlcnlfbWV0aG9kOworfSBlcm1fbnJyY19lcnJvcl9yZWNvdmVyeV9yZXFfc3RydWN0OworCisvKiBNU0dfSURfRVJNX05SUkNfRVJST1JfUkVDT1ZFUllfQ05GICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCit9IGVybV9ucnJjX2Vycm9yX3JlY292ZXJ5X2NuZl9zdHJ1Y3Q7CisKKy8qIE1TR19JRF9FUk1fTlJSQ19QRU5BTFRZX1JFUSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAgbnJyY19lcnJvcl9yZWNvdmVyeV9wZW5hbHR5X3R5cGVfZW51bSAgIHBlbmFsdHlfdHlwZTsKKyAgICBucnJjX2Vycm9yX3JlY292ZXJ5X2NlbGxfaW5mb19zdHJ1Y3QgICAgY2VsbDsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuYWx0eV90aW1lOworfSBlcm1fbnJyY19wZW5hbHR5X3JlcV9zdHJ1Y3Q7CisKKy8qIE1TR19JRF9FUk1fTlJSQ19QRU5BTFRZX0NORiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorfSBlcm1fbnJyY19wZW5hbHR5X2NuZl9zdHJ1Y3Q7CisKKy8qIE1TR19JRF9FUk1fTlJSQ19CQVJSSU5HX0lORk9fVVBEQVRFX1JFUSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX2N1c3RvbWl6ZWRfdmFsdWVfdXNlZDsKKyAgICBudnJhbV9ucnJjX2Fibm9ybWFsX2NvbnRyb2xfcGFyYW1zX3N0cnVjdCBlcnJvcl9yZWNvdmVyeV9wYXJhbTsKK30gZXJtX25ycmNfYmFycmluZ19pbmZvX3VwZGF0ZV9yZXFfc3RydWN0OworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICBWQVJJQUJMRVMgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBGVU5DVElPTiBERUNMQVJBVElPTlMgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNlbmRpZiAvKiBFUk1fTlJSQ19TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsLzVnL2w0Y192Z3NtX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsLzVnL2w0Y192Z3NtX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYWMwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvNWcvbDRjX3Znc21fc3RydWN0LmgKQEAgLTAsMCArMSw2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDIxCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGw0Y192Z3NtX3N0cnVjdC5oCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgbWVzc2FnZSBhbmQgY29tbW9uIHN0cnVjdHVyZSBkZWZpbml0aW9uIGJldHdlZW4gTDRDIGFuZCBWR1NNIG1vZHVsZQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogJExvZyQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmICBMNENfVkdTTV9TVFJVQ1RfSU5DCisjZGVmaW5lICBMNENfVkdTTV9TVFJVQ1RfSU5DCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHZkbV92b2ljZV9zdGF0dXNfZW51bSAgIHZkbV92b2ljZV9zdGF0dXM7CisgICAgaW1zX2FjY2Vzc19yYXRfZW51bSAgICAgcmF0OworfSBsNGNfdmdzbV92ZG1faW1zX3ZvaWNlX3N0YXR1c19udGZfc3RydWN0OworCisjZW5kaWYgICAvKiAtLS0tLSAjaWZuZGVmIEw0Q19WR1NNX1NUUlVDVF9JTkMgLS0tLS0gKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC81Zy92Z21tX21zZ191bnBhY2suaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC81Zy92Z21tX21zZ191bnBhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTRmY2VkCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsLzVnL3ZnbW1fbXNnX3VucGFjay5oCkBAIC0wLDAgKzEsMTgwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEwCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRmlsZW5hbWU6CisqIC0tLS0tLS0tLQorKiAgdmdtbV9tc2dfdW5wYWNrLmgKKyoKKyogRGVzY3JpcHRpb246CisqIC0tLS0tLS0tLS0tLQorKiBUaGlzIGlzIHRoZSBBUEkgZm9yIExURSBNQ0RETEwgdG8gZGVjb2RlIHRoZSBhaXIgbWVzc2FnZXMgd2hpY2ggYXJlIGRlZmluZWQgaW4gVFMgMjQuNTAxIChWR01NKS4KKyogCisqCisqIEF1dGhvcjoKKyogLS0tLS0tLQorICogLS0tLS0tLQorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgVkdNTV9NU0dfVU5QQUNLX0gKKyNkZWZpbmUgVkdNTV9NU0dfVU5QQUNLX0gKKworI2lmIGRlZmluZWQoX19GSVZFR19OQVNfXykKKyNpbmNsdWRlICJtY2QuaCIKKyNpbmNsdWRlICJtY2RfdmdtbV9nZW5fcGVlci5oIgorI2luY2x1ZGUgInZnbmFzX21zZ191bnBhY2suaCIKKworLy8gVGhlIGRlZmluaXRpb25zIGJlbG93IGFyZSB1c2VkIGJ5IHRoZSBJRXMgaW4gYWlyIG1lc3NhZ2VzCisjZGVmaW5lIERfTk9fVkdTX01PQklMRV9JRCA2NAorI2RlZmluZSBEX05PX0NSSVRFUklBX1RZUEUgOAorI2RlZmluZSBEX05PX1JFUExBWUVEX1MxX1VFX1NFQ19DQVAgNQorI2RlZmluZSBEX05PX1ZHU19UTVNJIDQKKyNkZWZpbmUgRF9OT19JTUVJX0RJR0lUX0JZVEUgNworI2RlZmluZSBEX05PX0lNRUlTVl9ESUdJVF9CWVRFIDgKKyNkZWZpbmUgRF9OT19QU0kgMTYKKyNkZWZpbmUgRF9OT19FQkkgMTYKKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBQbGFpbl81R1NfTkFTX21lc3NhZ2Vfbm90X3NlY3VyaXR5X3Byb3RlY3RlZCA9IDAsCisgICAgSW50ZWdyaXR5X3Byb3RlY3RlZCwKKyAgICBJbnRlZ3JpdHlfcHJvdGVjdGVkX2FuZF9jaXBoZXJlZCwKKyAgICBJbnRlZ3JpdHlfcHJvdGVjdGVkX3dpdGhfbmV3XzVHX05BU19zZWN1cml0eV9jb250ZXh0LAorICAgIEludGVncml0eV9wcm90ZWN0ZWRfYW5kX2NpcGhlcmVkX3dpdGhfbmV3XzVHX05BU19zZWN1cml0eV9jb250ZXh0Cit9IG1jZGRsbF92Z21tX3NlY19oZHJfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSZWdpc3RyYXRpb25fcmVxdWVzdD0gNjUsCisgICAgUmVnaXN0cmF0aW9uX2FjY2VwdD0gNjYsCisgICAgUmVnaXN0cmF0aW9uX2NvbXBsZXRlPSA2NywKKyAgICBSZWdpc3RyYXRpb25fcmVqZWN0PSA2OCwKKyAgICBEZXJlZ2lzdHJhdGlvbl9yZXF1ZXN0X1VFX29yaWdpbmF0aW5nPSA2OSwKKyAgICBEZXJlZ2lzdHJhdGlvbl9hY2NlcHRfVUVfb3JpZ2luYXRpbmc9IDcwLAorICAgIERlcmVnaXN0cmF0aW9uX3JlcXVlc3RfVUVfdGVybWluYXRlZD0gNzEsCisgICAgRGVyZWdpc3RyYXRpb25fYWNjZXB0X1VFX3Rlcm1pbmF0ZWQ9IDcyLAorICAgIFNlcnZpY2VfcmVxdWVzdD0gNzYsCisgICAgU2VydmljZV9yZWplY3Q9IDc3LAorICAgIFNlcnZpY2VfYWNjZXB0PSA3OCwKKyAgICBDb25maWd1cmF0aW9uX3VwZGF0ZV9jb21tYW5kPSA4NCwKKyAgICBDb25maWd1cmF0aW9uX3VwZGF0ZV9jb21wbGV0ZT0gODUsCisgICAgQXV0aGVudGljYXRpb25fcmVxdWVzdD0gODYsCisgICAgQXV0aGVudGljYXRpb25fcmVzcG9uc2U9IDg3LAorICAgIGM9IDg4LAorICAgIEF1dGhlbnRpY2F0aW9uX2ZhaWx1cmU9IDg5LAorICAgIEF1dGhlbnRpY2F0aW9uX3Jlc3VsdD0gOTAsCisgICAgSWRlbnRpdHlfcmVxdWVzdD0gOTEsCisgICAgSWRlbnRpdHlfcmVzcG9uc2U9IDkyLAorICAgIFNlY3VyaXR5X21vZGVfY29tbWFuZD0gOTMsCisgICAgU2VjdXJpdHlfbW9kZV9jb21wbGV0ZT0gOTQsCisgICAgU2VjdXJpdHlfbW9kZV9yZWplY3Q9IDk1LAorICAgIFZHTU1fc3RhdHVzPSAxMDAsCisgICAgTm90aWZpY2F0aW9uPSAxMDEsCisgICAgTm90aWZpY2F0aW9uX3Jlc3BvbnNlPSAxMDIsCisgICAgVUxfTkFTX3RyYW5zcG9ydD0gMTAzLAorICAgIERMX05BU190cmFuc3BvcnQ9IDEwNAorfSBtY2RkbGxfdmdtbV9tc2dfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBpbml0aWFsX3JlZ2lzdHJhdGlvbj0gMSwKKyAgICBtb2JpbGl0eV9yZWdpc3RyYXRpb25fdXBkYXRpbmc9IDIsCisgICAgcGVyaW9kaWNfcmVnaXN0cmF0aW9uX3VwZGF0aW5nPSAzLAorICAgIGVtZXJnZW5jeV9yZWdpc3RyYXRpb249IDQsCisgICAgcmVnX3R5cGVfdmFsX3Jlc2VydmVkPSA3Cit9IG1jZGRsbF92Z21tX3JlZ190eXBlX3ZhbF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTTVNfb3Zlcl9OQVNfbm90X3N1cHBvcnRlZD0wLAorICAgIFNNU19vdmVyX05BU19zdXBwb3J0ZWQKK31tY2RkbGxfdmdtbV9TTVNfb3Zlcl9OQVNfdHJhbnNwb3J0X3JlcXVlc3RlZF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBOb19mb2xsb3dfb25fcmVxdWVzdF9wZW5kaW5nPTAsCisgICAgRm9sbG93X29uX3JlcXVlc3RfcGVuZGluZworfW1jZGRsbF92Z21tX0ZvbGxvd19vbl9yZXF1ZXN0X2VudW07CisKKy8vTmV3Cit0eXBlZGVmIGVudW0KK3sKKyAgICBOR19SQU5fcmFkaW9fY2FwYWJpbGl0eV91cGRhdGVfbm90X25lZWRlZCA9IDAsCisgICAgTkdfUkFOX3JhZGlvX2NhcGFiaWxpdHlfdXBkYXRlX25lZWRlZCA9IDEKK31tY2RkbGxfdmdtbV9uZ19yYW5fcmN1X2VudW07CisvL0VuZCBvZiBOZXcKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX3JlZ190eXBlX3N0cnVjdAoreworICAgIGthbF91aW50OCBsZW5ndGg7CisgICAga2FsX3VpbnQ4IF9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9Gb2xsb3dfb25fcmVxdWVzdF9lbnVtIGZvbGxvd19vbl9yZXE7CisgICAgbWNkZGxsX3ZnbW1fcmVnX3R5cGVfdmFsX2VudW0gdmdzX3JlZ190eXBlX3ZhbDsKK30gdmdtbV9tY2RkbGxfcmVnX3R5cGVfc3RydWN0OworCit0eXBlZGVmIGVudW0KK3sKKyAgICBOT19JREVOVElUWSA9IDAsCisgICAgU1VDSSA9IDEsCisgICAgVkdfR1VUSSA9IDIsCisgICAgSU1FSSA9IDMsCisgICAgVkdfU1RNU0kgPSA0LAorICAgIElNRUlfU1YgPSA1Cit9IG1jZGRsbF92Z21tX3R5cGVfb2ZfaWRfZW51bTsKKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBuYXRpdmVfc2VjdXJpdHlfY29udGV4dCwKKyAgICBtYXBwZWRfc2VjdXJpdHlfY29udGV4dAorfW1jZGRsbF92Z21tX1RTQ19lbnVtOworCisKK3R5cGVkZWYgZW51bQoreworICAgIGlkX3JzcF9TVUNJID0gMSwKKyAgICBpZF9yc3BfdmdfR1VUSSA9IDIsCisgICAgaWRfcnNwX0lNRUkgPSAzLAorICAgIGlkX3JzcF92Z19TX1RNU0kgPSA0LAorICAgIGlkX3JzcF9JTUVJU1ZJID0gNQorfW1jZGRsbF92Z21tX2lkX3JzcF90eXBlX29mX2lkZW50aXR5X2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIHRocmVlR1BQX2FjY2Vzc19yZWdfcmVzdWx0ID0gMSwKKyAgICBub25fdGhyZWVHUFBfYWNjZXNzX3JlZ19yZXN1bHQgPSAyLAorICAgIHRocmVlR1BQX2FuZF9ub25fdGhyZWVHUFBfYWNjZXNzX3JlZ19yZXN1bHQsCisgICAgcmVnX3Jlc3VsdF9yZXNlcnZlZF9yZWdfcmVzdWx0ID0gNworfW1jZGRsbF92Z21tX3Znc19yZWdfcmVzdWx0X3ZhbF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTTVNfb3Zlcl9OQVNfbm90X2FsbG93ZWQsCisgICAgU01TX292ZXJfTkFTX2FsbG93ZWQKK31tY2RkbGxfdmdtbV9zbXNfYWxsb3dlZF9lbnVtOwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX3JlZ19yZXN1bHRfc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IGxlbmd0aDsKKyAgICBrYWxfdWludDggX3NwYXJlOworICAgIG1jZGRsbF92Z21tX3Ntc19hbGxvd2VkX2VudW0gc21zX2FsbG93ZWQ7CisgICAgbWNkZGxsX3ZnbW1fdmdzX3JlZ19yZXN1bHRfdmFsX2VudW0gdmdzX3JlZ19yZXN1bHRfdmFsOworfXZnbW1fbWNkZGxsX3JlZ19yZXN1bHRfc3RydWN0OworCit0eXBlZGVmIGVudW0KK3sKKyAgICBOb3JtYWxfZGVyZWcgPSAwLAorICAgIFN3aXRjaF9vZmYKK31tY2RkbGxfdmdtbV9zd2l0Y2hfb2ZmX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIHJlX2VnaXN0cmF0aW9uX25vdF9yZXF1aXJlZCA9IDAsCisgICAgcmVfcmVnaXN0cmF0aW9uX3JlcXVpcmVkCit9bWNkZGxsX3ZnbW1fZGVyZWdfcmVxX2VudW07CisKKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBJbGxlZ2FsX1VFID0gMywKKyAgICBQRUlfbm90X2FjY2VwdGVkPSA1LAorICAgIElsbGVnYWxfTUU9IDYsCisgICAgdmdzX3NlcnZpY2VzX25vdF9hbGxvd2VkID0gNywKKyAgICBVRV9pZGVudGl0eV9jYW5ub3RfZGVyaXZlZF9ieV90aGVfTlcgPSA5LAorICAgIEltcGxpY2l0bHlfZGVyZWdpc3RlcmVkPSAxMCwKKyAgICBQTE1OX25vdF9hbGxvd2VkID0gMTEsCisgICAgVHJhY2tpbmdfYXJlYV9ub3RfYWxsb3dlZCA9IDEyLAorICAgIFJvYW1pbmdfbm90X2FsbG93ZWRfaW5fdGhpc190cmFja2luZ19hcmVhID0gMTMsCisgICAgTm9fc3VpdGFibGVfY2VsbHNfaW5fdHJhY2tpbmdfYXJlYSA9IDE1LAorICAgIE1BQ19mYWlsdXJlID0gMjAsCisgICAgU3luY2hfZmFpbHVyZSA9IDIxLAorICAgIENvbmdlc3Rpb24gPSAyMiwKKyAgICBVRV9zZWN1cml0eV9jYXBhYmlsaXRpZXNfbWlzbWF0Y2ggPSAyMywKKyAgICBTZWN1cml0eV9tb2RlX3JlamVjdGVkX3Vuc3BlY2lmaWVkID0gMjQsCisgICAgTm9uXzVHX2F1dGhlbnRpY2F0aW9uX3VuYWNjZXB0YWJsZSA9IDI2LAorICAgIE4xX21vZGVfbm90X2FsbG93ZWQgPSAyNywKKyAgICBSZXN0cmljdGVkX3NlcnZpY2VfYXJlYSA9IDI4LAorICAgIExBRE5fbm90X2F2YWlsYWJsZSA9IDQzLAorICAgIE1heGltdW1fbnVtYmVyX29mX1BEVV9zZXNzaW9uc19yZWFjaGVkID0gNjUsCisgICAgSW5zdWZmaWNpZW50X3Jlc291cmNlc19mb3Jfc3BlY2lmaWNfc2xpY2VfYW5kX0ROTiA9IDY3LAorICAgIEluc3VmZmljaWVudF9yZXNvdXJjZXNfZm9yX3NwZWNpZmljX3NsaWNlID0gNjksCisgICAgbmdLU0lfYWxyZWFkeV9pbl91c2UgPSA3MSwKKyAgICBQYXlsb2FkX3dhc19ub3RfZm9yd2FyZGVkID0gODIsCisgICAgRE5OX25vdF9zdXBwb3J0ZWRfb3Jfbm90X3N1YnNjcmliZWRfaW5fdGhlX3NsaWNlID0gODMsCisgICAgSW5zdWZmaWNpZW50X3VzZXJfcGxhY2VfcmVzb3VyY2VzX2Zvcl90aGVfUERVX3Nlc3Npb24gPSA4NCwKKyAgICBTZW1hbnRpY2FsbHlfaW5jb3JyZWN0X21lc3NhZ2UgPSA5NSwKKyAgICBJbnZhbGlkX21hbmRhdG9yeV9pbmZvcm1hdGlvbiwKKyAgICBNZXNzYWdlX3R5cGVfbm9uX2V4aXN0ZW50X29yX25vdF9pbXBsZW1lbnRlZCwKKyAgICBNZXNzYWdlX3R5cGVfbm90X2NvbXBhdGlibGVfd2l0aF90aGVfcHJvdG9jb2xfc3RhdGUsCisgICAgSW5mb3JtYXRpb25fZWxlbWVudF9ub25fZXhpc3RlbnRfb3Jfbm90X2ltcGxlbWVudGVkLAorICAgIENvbmRpdGlvbmFsX0lFX2Vycm9yLAorICAgIE1lc3NhZ2Vfbm90X2NvbXBhdGlibGVfd2l0aF90aGVfcHJvdG9jb2xfc3RhdGUsCisgICAgUHJvdG9jb2xfZXJyb3JfdW5zcGVjaWZpZWQgPSAxMTEKK31tY2RkbGxfdmdtbV9jYXVzZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBmcm9tX04xX3RvX1MxX25vdF9zdXBwb3J0ZWQgPSAwLAorICAgIGZyb21fTjFfdG9fUzFfc3VwcG9ydGVkICwKK31tY2RkbGxfdmdtbV9ob19hdHRhY2hfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUzFfbm90X3N1cHBvcnRlZCA9IDAsCisgICAgUzFfc3VwcG9ydGVkCit9bWNkZGxsX3ZnbW1fczFfbW9kZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgIExQUF9JTl9OMV9NT0RFX05PVF9TVVBQT1JURUQgPSAwLAorICAgTFBQX0lOX04xX01PREVfU1VQUE9SVEVECit9bWNkZGxsX3ZnbW1fbHBwX2NhcF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSRVRSQU5TX0lOSVRfTkFTX01TR19OT1RfUkVRVUVTVEVEID0gMCwKKyAgICBSRVRSQU5TX0lOSVRfTkFTX01TR19SRVFVRVNURUQKK31tY2RkbGxfdmdtbV9yaW5tcl9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSRVFVRVNURURfTlNTQUlfTk9UX0NSRUFURURfRlJPTV9ERUZBVUxUX0NPTkZJR1VSRURfTlNTQUkgPSAwLAorICAgIFJFUVVFU1RFRF9OU1NBSV9DUkVBVEVEX0ZST01fREVGQVVMVF9DT05GSUdVUkVEX05TU0FJCit9bWNkZGxsX3ZnbW1fZGNuaV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgIEFDQ19JRF8xX05PVF9WQUxJRF9JTl9SUExNTl9PUl9FUExNTiA9IDAsCisgICBBQ0NfSURfMV9WQUxJRF9JTl9SUExNTl9PUl9FUExNTgorfW1jZGRsbF92Z21tX21wc2lfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICBJV0tfV0lUSE9VVF9OMjZfTk9UX1NVUFBPUlRFRCA9IDAsCisgICBJV0tfV0lUSE9VVF9OMjZfU1VQUE9SVEVECit9bWNkZGxsX3ZnbW1faXdrbjI2X2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgRU1FUkdFTkNZX1NFUlZJQ0VfRkFMTEJBQ0tfTk9UX1NVUFBPUlRFRCA9IDAsCisgICBFTUVSR0VOQ1lfU0VSVklDRV9GQUxMQkFDS19TVVBQT1JURURfSU5fTlJfQ09OTl9UT181R0NOX09OTFksCisgICBFTUVSR0VOQ1lfU0VSVklDRV9GQUxMQkFDS19TVVBQT1JURURfSU5fRVVUUkFfQ09OTl9UT181R0NOX09OTFksCisgICBFTUVSR0VOQ1lfU0VSVklDRV9GQUxMQkFDS19TVVBQT1JURURfSU5fTlJfQ09OTl9UT181R0NOX0FORF9FVVRSQV9DT05OX1RPXzVHQ04KK31tY2RkbGxfdmdtbV9lbWZfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICBFTUVSR0VOQ1lfU0VSVklDRV9OT1RfU1VQUE9SVEVEID0gMCwKKyAgIEVNRVJHRU5DWV9TRVJWSUNFX1NVUFBPUlRFRF9JTl9OUl9DT05OX1RPXzVHQ05fT05MWSwKKyAgIEVNRVJHRU5DWV9TRVJWSUNFX1NVUFBPUlRFRF9JTl9FVVRSQV9DT05OX1RPXzVHQ05fT05MWSwKKyAgIEVNRVJHRU5DWV9TRVJWSUNFX1NVUFBPUlRFRF9JTl9OUl9DT05OX1RPXzVHQ05fQU5EX0VVVFJBX0NPTk5fVE9fNUdDTgorfW1jZGRsbF92Z21tX2VtY19lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgIElNU19WT0lDRV9PVkVSX1BTX1NFU1NJT05fTk9UX1NVUFBPUlRFRF9PVkVSX04zR1BQX0FDQyA9IDAsCisgICBJTVNfVk9JQ0VfT1ZFUl9QU19TRVNTSU9OX1NVUFBPUlRFRF9PVkVSX04zR1BQX0FDQworfW1jZGRsbF92Z21tX2ltc192b3BzX24zZ3BwX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgSU1TX1ZPSUNFX09WRVJfUFNfU0VTU0lPTl9OT1RfU1VQUE9SVEVEX09WRVJfM0dQUF9BQ0MgPSAwLAorICAgSU1TX1ZPSUNFX09WRVJfUFNfU0VTU0lPTl9TVVBQT1JURURfT1ZFUl8zR1BQX0FDQworfW1jZGRsbF92Z21tX2ltc192b3BzXzNncHBfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQUNDX0lEXzJfTk9UX1ZBTElEX0lOX1JQTE1OX09SX0VQTE1OID0gMCwKKyAgICBBQ0NfSURfMl9WQUxJRF9JTl9SUExNTl9PUl9FUExNTgorfW1jZGRsbF92Z21tX21jc2lfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgRU1FUkdFTkNZX1NFUlZJQ0VfTk9UX1NVUFBPUlRFRF9PVkVSX04zR1BQX0FDQyA9IDAsCisgICAgRU1FUkdFTkNZX1NFUlZJQ0VfU1VQUE9SVEVEX09WRVJfTjNHUFBfQUNDCit9bWNkZGxsX3ZnbW1fZW1jbjNfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgc2lnbmFsbGluZz0wLAorICAgIGRhdGEsCisgICAgbW9iaWxlX3Rlcm1pbmF0ZWRfc2VydmljZXMsCisgICAgZW1lcmdlbmN5X3NlcnZpY2VzLAorICAgIGVtZXJnZW5jeV9zZXJ2aWNlc19mYWxsYmFjaywKKyAgICBoaWdoX3ByaW9yaXR5X2FjY2VzcywKKyAgICBlbGV2YXRlZF9zaWduYWxsaW5nLAorICAgIHVudXNlZF9zaWduYWxsaW5nXzAsCisgICAgdW51c2VkX3NpZ25hbGxpbmdfMSwKKyAgICB1bnVzZWRfZGF0YV8wLAorICAgIHVudXNlZF9kYXRhXzEsCisgICAgdW51c2VkX2RhdGFfMgorfW1jZGRsbF92Z21tX3NlcnZpY2VfdHlwZV9lbnVtOworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfc2VydmljZV90eXBlX3N0cnVjdAoreworICAgIGthbF91aW50OCBzZXJ2aWNlX3R5cGVfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1fc2VydmljZV90eXBlX2VudW0gc2VydmljZV90eXBlX3ZhbDsKK30gdmdtbV9tY2RkbGxfc2VydmljZV90eXBlX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX3VlX3NlY19jYXBfc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IGxlbmd0aDsKKyAgICBrYWxfdWludDggRUEwOworICAgIGthbF91aW50OCBFQTE7CisgICAga2FsX3VpbnQ4IEVBMjsKKyAgICBrYWxfdWludDggRUEzOworICAgIGthbF91aW50OCBFQTQ7CisgICAga2FsX3VpbnQ4IEVBNTsKKyAgICBrYWxfdWludDggRUE2OworICAgIGthbF91aW50OCBFQTc7CisgICAga2FsX3VpbnQ4IElBMDsKKyAgICBrYWxfdWludDggSUExOworICAgIGthbF91aW50OCBJQTI7CisgICAga2FsX3VpbnQ4IElBMzsKKyAgICBrYWxfdWludDggSUE0OworICAgIGthbF91aW50OCBJQTU7CisgICAga2FsX3VpbnQ4IElBNjsKKyAgICBrYWxfdWludDggSUE3OworICAgIGthbF91aW50OCBFRUEwOworICAgIGthbF91aW50OCBFRUExOworICAgIGthbF91aW50OCBFRUEyOworICAgIGthbF91aW50OCBFRUEzOworICAgIGthbF91aW50OCBFRUE0OworICAgIGthbF91aW50OCBFRUE1OworICAgIGthbF91aW50OCBFRUE2OworICAgIGthbF91aW50OCBFRUE3OworICAgIGthbF91aW50OCBFSUEwOworICAgIGthbF91aW50OCBFSUExOworICAgIGthbF91aW50OCBFSUEyOworICAgIGthbF91aW50OCBFSUEzOworICAgIGthbF91aW50OCBFSUE0OworICAgIGthbF91aW50OCBFSUE1OworICAgIGthbF91aW50OCBFSUE2OworICAgIGthbF91aW50OCBFSUE3OworfXZnbW1fbWNkZGxsX3VlX3NlY19jYXBfc3RydWN0OworCit0eXBlZGVmIGVudW0KK3sKKyAgICB2b2ljZV9jZW50cmljID0gMCwKKyAgICBkYXRhX2NlbnRyaWMgPSAxCit9bWNkZGxsX3ZnbW1fdWVfdXNhZ2Vfc2V0dGluZ19lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBOMV9TTV9pbmZvcm1hdGlvbiA9IDEsCisgICAgU01TLAorICAgIExURV9Qb3NpdGlvbmluZ19Qcm90b2NvbF9tZXNzYWdlX2NvbnRhaW5lciwKKyAgICBTT1JfdHJhbnNwYXJlbnRfY29udGFpbmVyLAorICAgIFVFX3BvbGljeV9jb250YWluZXIsCisgICAgVUVfcGFyYV91cGRhdGVfdHJhbnNwYXJlbnRfY29udGFpbmVyLAorICAgIE11bHRpcGxlX3BheWxvYWRzID0gMTUKK31tY2RkbGxfdmdtbV9wYXlsb2FkX2NvbnRfdHlwZV92YWxfZW51bTsKKwordHlwZWRlZiBlbnVteworICAgIGluaXRpYWxfcmVxdWVzdD0xLAorICAgIGV4aXN0aW5nX1BEVV9zZXNzaW9uLAorICAgIGluaXRpYWxfZW1lcmdlbmN5X3JlcXVlc3QsCisgICAgZXhpc3RpbmdfZW1lcmdlbmN5X1BEVV9zZXNzaW9uLAorICAgIHJlc2VydmVkID0gNworfW1jZGRsbF92Z21tX3JlcV90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bXsKKyAgICByZWdfbm90X3JlcXVlc3RlZCA9IDAsCisgICAgcmVnX3JlcXVlc3RlZAorfW1jZGRsbF92Z21tX1JFRF9lbnVtOworCit0eXBlZGVmIGVudW17CisgICAgYWNrX25vdF9yZXF1ZXN0ZWQgPSAwLAorICAgIGFja19yZXF1ZXN0ZWQKK31tY2RkbGxfdmdtbV9BQ0tfZW51bTsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX2NvbmZpZ191cGRhdGVfaW5kX3N0cnVjdHsKKyAgICBrYWxfdWludDggX3NwYXJlOworICAgIG1jZGRsbF92Z21tX1JFRF9lbnVtIFJFRDsKKyAgICBtY2RkbGxfdmdtbV9BQ0tfZW51bSBBQ0s7Cit9IHZnbW1fbWNkZGxsX2NvbmZpZ191cGRhdGVfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX2lkZW50aXR5X3R5cGVfc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IGlkZW50aXR5X3R5cGVfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1faWRfcnNwX3R5cGVfb2ZfaWRlbnRpdHlfZW51bSBpZGVudGl0eV90eXBlOworfSB2Z21tX21jZGRsbF9pZGVudGl0eV90eXBlX3N0cnVjdDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgaW50X3ZnX0lBMF9udWxsX2ludGVncml0eV9wcm90ZWN0aW9uX2FsZ29yaXRobSA9IDAsCisgICAgaW50XzEyOF92Z19JQTEsCisgICAgaW50XzEyOF92Z19JQTIsCisgICAgaW50XzEyOF92Z19JQTMsCisgICAgaW50X3ZnX0lBNCwKKyAgICBpbnRfdmdfSUE1LAorICAgIGludF92Z19JQTYsCisgICAgaW50X3ZnX0lBNworfSBtY2RkbGxfdmdtbV9pbnRlZ3JpdHlfcHJvdGVjdGlvbl9hbGdvcml0aG1fZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgZW5jcnlfdmdfSUEwX251bGxfY2lwZXJpbmdfYWxnb3JpdGhtID0gMCwKKyAgICBlbmNyeV8xMjhfdmdfSUExLAorICAgIGVuY3J5XzEyOF92Z19JQTIsCisgICAgZW5jcnlfMTI4X3ZnX0lBMywKKyAgICBlbmNyeV92Z19JQTQsCisgICAgZW5jcnlfdmdfSUE1LAorICAgIGVuY3J5X3ZnX0lBNiwKKyAgICBlbmNyeV92Z19JQTcKK31tY2RkbGxfdmdtbV9jaXBoZXJpbmdfYWxnb3JpdGhtX2VudW07CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9uYXNfc2VjX2FsZ19zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfdmdtbV9pbnRlZ3JpdHlfcHJvdGVjdGlvbl9hbGdvcml0aG1fZW51bSBpbnRfcHJvX2FsZzsKKyAgICBtY2RkbGxfdmdtbV9jaXBoZXJpbmdfYWxnb3JpdGhtX2VudW0gY2lwaGVyX2FsZzsKK312Z21tX21jZGRsbF9uYXNfc2VjX2FsZ19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9lcHNfbmFzX3NlY19hbGdfc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IGNpcGhlcl9hbGdfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1fY2lwaGVyaW5nX2FsZ29yaXRobV9lbnVtIGNpcGhlcl9hbGc7CisgICAga2FsX3VpbnQ4IGludF9wcm9fYWxnX3NwYXJlOworICAgIG1jZGRsbF92Z21tX2ludGVncml0eV9wcm90ZWN0aW9uX2FsZ29yaXRobV9lbnVtIGludF9wcm9fYWxnOworfSB2Z21tX21jZGRsbF9lcHNfbmFzX3NlY19hbGdfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfbmFzX2tleV9zZXRfaWRfc3RydWN0Cit7CisgICAgbWNkZGxsX3ZnbW1fVFNDX2VudW0gdHNjOworICAgIGthbF91aW50OCBrc2lfdmFsOworfXZnbW1fbWNkZGxsX25hc19rZXlfc2V0X2lkX3N0cnVjdDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgdGhyZWVHUFBfYWNjZXNzID0gMSwKKyAgICBub25fdGhyZWVHUFBfYWNjZXNzLAorICAgIHRocmVlR1BQX2FuZF9ub25fdGhyZWVHUFBfYWNjZXNzCit9bWNkZGxsX3ZnbW1fYWNjZXNzX3R5cGVfZW51bTsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX2FjY2Vzc190eXBlX3N0cnVjdAoreworICAgIGthbF91aW50OCBfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1fYWNjZXNzX3R5cGVfZW51bSBhY2Nlc3NfdHlwZV92YWw7Cit9dmdtbV9tY2RkbGxfYWNjZXNzX3R5cGVfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfdmdtbV9jYXBfc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IGNhcF9sZW5ndGg7CisgICAga2FsX3VpbnQ4IF9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9ob19hdHRhY2hfZW51bSBob19hdHRhY2g7CisgICAgbWNkZGxsX3ZnbW1fczFfbW9kZV9lbnVtIHMxX21vZGU7CisgICAgbWNkZGxsX3ZnbW1fbHBwX2NhcF9lbnVtIGxwcDsKK312Z21tX21jZGRsbF92Z21tX2NhcF9zdHJ1Y3Q7CisKK3R5cGVkZWYgZW51bQoreworICAgIGFsbF9QTE1OX3JlZ2lzdHJhdGlvbl9hcmVhX25vdF9hbGxvY2F0ZWQsCisgICAgYWxsX1BMTU5fcmVnaXN0cmF0aW9uX2FyZWFfYWxsb2NhdGVkCit9bWNkZGxsX3ZnbW1fcmFhaV9lbnVtOworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfbWljb19pbmRfc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IHJhYWlfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1fcmFhaV9lbnVtIHJhYWk7Cit9dmdtbV9tY2RkbGxfbWljb19pbmRfc3RydWN0OworCisvL05ldworCit0eXBlZGVmIGVudW0KK3sKKyAgICBOZXR3b3JrX3NsaWNpbmdfc3Vic2NyaXB0aW9uX25vdF9jaGFuZ2VkID0gMCwKKyAgICBOZXR3b3JrX3NsaWNpbmdfc3Vic2NyaXB0aW9uX2NoYW5nZWQgPSAxCit9bWNkZGxsX3ZnbW1fbnNzY2lfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgbGlzdF90eXBlX2lzX2Ffc2VjdXJlX3BhY2tldCA9IDAsCisgICAgbGlzdF90eXBlX2lzX2FfUExNTl9JRF9hbmRfYWNjZXNzX3RlY2hub2xvZ3lfbGlzdCA9IDEKK31tY2RkbGxfdmdtbV9saXN0X3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgbGlzdF9vZl9wcmVmZXJyZWRfUExNTl9vcl9hY2Nlc3NfdGVjaG5vbG9neV9jb21iaW5hdGlvbnNfaXNfbm90X3Byb3ZpZGVkID0gMCwKKyAgICBsaXN0X29mX3ByZWZlcnJlZF9QTE1OX29yX2FjY2Vzc190ZWNobm9sb2d5X2NvbWJpbmF0aW9uc19pc19wcm92aWRlZCA9IDEKK31tY2RkbGxfdmdtbV9saXN0X2luZF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBUaGVfU09SX3RyYW5zcGFyZW50X2NvbnRhaW5lcl9jYXJyaWVzX3N0ZWVyaW5nX29mX3JvYW1pbmdfaW5mb3JtYXRpb24gPSAwLAorICAgIFRoZV9TT1JfdHJhbnNwYXJlbnRfY29udGFpbmVyX2NhcnJpZXNfYWNrbm93bGVkZ2VtZW50X29mX3N1Y2Nlc3NmdWxfcmVjZXB0aW9uX29mX3RoZV9zdGVlcmluZ19vZl9yb2FtaW5nX2luZm9ybWF0aW9uID0gMQorfW1jZGRsbF92Z21tX3Nvcl9kYXRhX3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgS19BTUZfZGVyaXZhdGlvbl9pc19ub3RfcmVxdWlyZWQgPSAwLAorICAgIEtfQU1GX2Rlcml2YXRpb25faXNfcmVxdWlyZWQgPSAxCit9bWNkZGxsX3ZnbW1faGRwX2VudW07CisKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX253X3NsaWNlX2luZF9zdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggX3NwYXJlOworICAgIG1jZGRsbF92Z21tX2RjbmlfZW51bSBkY25pOworICAgIG1jZGRsbF92Z21tX25zc2NpX2VudW0gbnNzY2k7Cit9dmdtbV9tY2RkbGxfbndfc2xpY2VfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX3Nvcl9oZHJfc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IF9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9BQ0tfZW51bSBBQ0s7CisgICAgbWNkZGxsX3ZnbW1fbGlzdF90eXBlX2VudW0gbGlzdF90eXBlOworICAgIG1jZGRsbF92Z21tX2xpc3RfaW5kX2VudW0gbGlzdF9pbmQ7CisgICAgbWNkZGxsX3ZnbW1fc29yX2RhdGFfdHlwZV9lbnVtIHNvcl9kYXRhX3R5cGU7Cit9dmdtbV9tY2RkbGxfc29yX2hkcl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9hZGRpdGlvbmFsXzVnX3NlY19pbmZvX3N0cnVjdAoreworICAgIGthbF91aW50OCBsZW5ndGg7CisgICAga2FsX3VpbnQ4IF9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9yaW5tcl9lbnVtIHJpbm1yOworICAgIG1jZGRsbF92Z21tX2hkcF9lbnVtIGhkcDsKK312Z21tX21jZGRsbF9hZGRpdGlvbmFsXzVnX3NlY19pbmZvX3N0cnVjdDsKKworLy9FbmQgb2YgTmV3CisKK3R5cGVkZWYgZW51bQoreworICAgIFVFX2lzX25vdF9pbl81R01NX1JFR0lTVEVSRURfc3RhdGUsCisgICAgVUVfaXNfaW5fNUdNTV9SRUdJU1RFUkVEX3N0YXRlCit9IG1jZGRsbF92Z21tX3MxX21vZGVfcmVnX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFVFX2lzX25vdF9pbl9FTU1fUkVHSVNURVJFRF9zdGF0ZSwKKyAgICBVRV9pc19pbl9FTU1fUkVHSVNURVJFRF9zdGF0ZQorfSBtY2RkbGxfdmdtbV9uMV9tb2RlX3JlZ19lbnVtOworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfdWVfc3RhdHVzX3N0cnVjdAoreworICAgIG1jZGRsbF92Z21tX3MxX21vZGVfcmVnX2VudW0gczFfbW9kZV9yZWc7CisgICAgbWNkZGxsX3ZnbW1fbjFfbW9kZV9yZWdfZW51bSBuMV9tb2RlX3JlZzsKK312Z21tX21jZGRsbF91ZV9zdGF0dXNfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfbWNkZGxsX3ZnbW1fZGVyZWdfdHlwZV9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfdmdtbV9zd2l0Y2hfb2ZmX2VudW0gc3dpdGNoX29mZjsKKyAgICBtY2RkbGxfdmdtbV9kZXJlZ19yZXFfZW51bSByZV9yZWdfcmVxOworICAgIG1jZGRsbF92Z21tX2FjY2Vzc190eXBlX2VudW0gYWNjZXNzX3R5cGU7Cit9IG1jZGRsbF92Z21tX2RlcmVnX3R5cGVfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfbWNkZGxsX3ZnbW1fdWVfdXNhZ2Vfc2V0dGluZ19zdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggbGVuZ3RoOworICAgIGthbF91aW50OCBfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1fdWVfdXNhZ2Vfc2V0dGluZ19lbnVtIHVlX3VzYWdlX3NldHRpbmc7Cit9bWNkZGxsX3ZnbW1fdWVfdXNhZ2Vfc2V0dGluZ19zdHJ1Y3Q7CisKK3R5cGVkZWYgZW51bQoreworICAgIC8vVG8gZml4IGNvbmZsaWN0aW9uIHdpdGggVkdTTSdzIGVudW0sIGFkZCBfTUNERExMCisgICAgUERVX1NFU1NJT05fSU5BQ1RJVkVfTUNERExMID0gMCwKKyAgICBQRFVfU0VTU0lPTl9BQ1RJVkVfTUNERExMCit9IG1jZGRsbF92Z21tX3BkdV9zZXNzaW9uX3N0YXR1c19lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBOT19QRU5ESU5HX1VMX0RBVEFfRVhJU1QgPSAwLAorICAgIFBFTkRJTkdfVUxfREFUQV9FWElTVAorfW1jZGRsbF91bF9kYXRhX3N0YXR1c19lbnVtOworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfcGR1X3Nlc3Npb25fc3RhdHVzX3N0cnVjdAoreworICAgIGthbF91aW50OCBsZW5ndGg7CisgICAgbWNkZGxsX3ZnbW1fcGR1X3Nlc3Npb25fc3RhdHVzX2VudW0gUFNJW0RfTk9fUFNJXTsKK30gdmdtbV9tY2RkbGxfcGR1X3Nlc3Npb25fc3RhdHVzX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX3BkdV9zZXNzaW9uX3JlYWN0X3Jlc3VsdF9zdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggbGVuZ3RoOworICAgIGthbF91aW50OCBQU0lbRF9OT19QU0ldOworfSB2Z21tX21jZGRsbF9wZHVfc2Vzc2lvbl9yZWFjdF9yZXN1bHRfc3RydWN0OworCit0eXBlZGVmIGVudW0KK3sKKyAgICBpbmNyZW1lbnRlZF9pbl9tdWx0aXBsZXNfb2ZfMl9zZWNvbmRzID0gMCwKKyAgICBpbmNyZW1lbnRlZF9pbl9tdWx0aXBsZXNfb2ZfMV9taW51dGUgPSAxLAorICAgIGluY3JlbWVudGVkX2luX211bHRpcGxlc19vZl9kZWNpaG91cnMgPSAyLAorICAgIHRoZV90aW1lcl9pc19kZWFjdGl2YXRlZCA9IDcKK30gbWNkZGxsX3RpbWVyX3VuaXRfZW51bTsKKwordHlwZWRlZiBzdHJ1Y3QgX21jZGRsbF90aW1lcl9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfdGltZXJfdW5pdF9lbnVtIHRpbWVyX3VuaXQ7CisgICAga2FsX3VpbnQ4IHRpbWVyX3ZhbDsKK30gbWNkZGxsX3RpbWVyX3N0cnVjdDsKK3R5cGVkZWYgZW51bQoreworICAgIHZhbHVlX2lzX2luY3JlbWVudGVkX2luX211bHRpcGxlc19vZl8xMF9taW51dGVzID0gMCwKKyAgICB2YWx1ZV9pc19pbmNyZW1lbnRlZF9pbl9tdWx0aXBsZXNfb2ZfMV9ob3VyID0gMSwKKyAgICB2YWx1ZV9pc19pbmNyZW1lbnRlZF9pbl9tdWx0aXBsZXNfb2ZfMTBfaG91cnMgPSAyLAorICAgIHZhbHVlX2lzX2luY3JlbWVudGVkX2luX211bHRpcGxlc19vZl8yX3NlY29uZHMgPSAzLAorICAgIHZhbHVlX2lzX2luY3JlbWVudGVkX2luX211bHRpcGxlc19vZl8zMF9zZWNvbmRzID0gNCwKKyAgICB2YWx1ZV9pc19pbmNyZW1lbnRlZF9pbl9tdWx0aXBsZXNfb2ZfMV9taW51dGUgPSA1LAorICAgIHZhbHVlX2lzX2luY3JlbWVudGVkX2luX211bHRpcGxlc19vZl8zMjBfaG91cnMgPSA2LAorICAgIHZhbHVlX2luZGljYXRlc190aGF0X3RoZV90aW1lcl9pc19kZWFjdGl2YXRlZCA9IDcKK30gbWNkZGxsX3RpbWVyM192YWx1ZV91bml0X2VudW07CisKK3R5cGVkZWYgc3RydWN0IF9tY2RkbGxfdGltZXJfM19zdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggdGltZXJfM19sZW47CisgICAgbWNkZGxsX3RpbWVyM192YWx1ZV91bml0X2VudW0gdGltZXJfdW5pdDsKKyAgICBrYWxfdWludDggdGltZXJfdmFsOworCit9IG1jZGRsbF90aW1lcl8zX3N0cnVjdDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgc2hvdWxkX25vdF9hZGRfdGhlX2xldHRlcnNfZm9yX3RoZV9Db3VudHJ5X0luaXRpYWxzX3RvX3RoZV90ZXh0X3N0cmluZyA9IDAsCisgICAgc2hvdWxkX2FkZF90aGVfbGV0dGVyc19mb3JfdGhlX0NvdW50cnlfSW5pdGlhbHNfYW5kX2Ffc2VwYXJhdG9yID0gMQorfSBtY2RkbGxfdmdtbV9hZGRfQ0lfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgdGhpc19maWVsZF9jYXJyaWVzX25vX2luZm9ybWF0aW9uX2Fib3V0X3RoZV9udW1iZXJfb2Zfc3BhcmVfYml0c19pbl9vY3RldF9uID0gMCwKKyAgICBiaXRfOF9pc19zcGFyZV9hbmRfc2V0X3RvXzBfaW5fb2N0ZXRfbiA9IDEsCisgICAgYml0c183X2FuZF84X2FyZV9zcGFyZV9hbmRfc2V0X3RvXzBfaW5fb2N0ZXRfbiA9IDIsCisgICAgYml0c182X3RvXzhfYXJlX3NwYXJlX2FuZF9zZXRfdG9fMF9pbl9vY3RldF9uID0gMywKKyAgICBiaXRzXzVfdG9fOF9hcmVfc3BhcmVfYW5kX3NldF90b18wX2luX29jdGV0X24gPSA0LAorICAgIGJpdHNfNF90b184X2FyZV9zcGFyZV9hbmRfc2V0X3RvXzBfaW5fb2N0ZXRfbiA9IDUsCisgICAgYml0c18zX3RvXzhfYXJlX3NwYXJlX2FuZF9zZXRfdG9fMF9pbl9vY3RldF9uID0gNiwKKyAgICBiaXRzXzJfdG9fOF9hcmVfc3BhcmVfYW5kX3NldF90b18wX2luX29jdGV0X24gPSA3Cit9IG1jZGRsbF92Z21tX3NwYXJlX2JpdHNfaW5fbGFzdF9vY3RldF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBOb19hZGp1c3RtZW50X2Zvcl9EYXlsaWdodF9TYXZpbmdfVGltZSA9IDAsCisgICAgYWRkXzFfaG91cl9hZGp1c3RtZW50X2Zvcl9EYXlsaWdodF9TYXZpbmdfVGltZSA9IDEsCisgICAgYWRkXzJfaG91cnNfYWRqdXN0bWVudF9mb3JfRGF5bGlnaHRfU2F2aW5nX1RpbWUgPSAyLAorICAgIFJlc2VydmVkX3ZhbCA9IDMKK30gbWNkZGxsX3ZnbW1fZGF5bGlnaHRfc2F2aW5nX3RpbWVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgSU1FSVNWX25vdF9yZXF1ZXN0ZWQgPSAwLAorICAgIElNRUlTVl9yZXF1ZXN0ZWQgPSAxLAorfSBtY2RkbGxfdmdtbV9pbWVpc3ZfcmVxX3ZhbF9lbnVtOworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfaW1laXN2X3JlcV9zdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggaW1laXN2X3JlcV9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9pbWVpc3ZfcmVxX3ZhbF9lbnVtIGltZWlzdl9yZXFfdmFsOworfSB2Z21tX21jZGRsbF9pbWVpc3ZfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsXzVnX3VwZGF0ZV90eXBlX3N0cnVjdAoreworICAgIGthbF91aW50OCBsZW5ndGg7CisgICAga2FsX3VpbnQ4IF9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9uZ19yYW5fcmN1X2VudW0gbmdfcmFuX3JjdTsKKyAgICBtY2RkbGxfdmdtbV9TTVNfb3Zlcl9OQVNfdHJhbnNwb3J0X3JlcXVlc3RlZF9lbnVtICBzbXNfcmVxOworfXZnbW1fbWNkZGxsXzVnX3VwZGF0ZV90eXBlX3N0cnVjdDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgTlNTQUlfSU5DTFVTSU9OX01PREVfQSA9IDAsCisgICAgTlNTQUlfSU5DTFVTSU9OX01PREVfQiwKKyAgICBOU1NBSV9JTkNMVVNJT05fTU9ERV9DLAorICAgIE5TU0FJX0lOQ0xVU0lPTl9NT0RFX0QKK312Z21tX21jZGRsbF9uc3NhaV9pbmNsdXNpb25fbW9kZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTVF9BQ0NfQ0FUX0ZJRUxEX05PVF9JTkNMVURFRCA9IDAsCisgICAgU1RfQUNDX0NBVF9GSUVMRF9JTkNMVURFRAorfW1jZGRsbF92Z21tX3BzYWNfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQUNDX0NBVF9OVU1fMzIgPSAwLAorICAgIEFDQ19DQVRfTlVNXzMzLAorICAgIEFDQ19DQVRfTlVNXzM0LCAKKyAgICBBQ0NfQ0FUX05VTV8zNSwKKyAgICBBQ0NfQ0FUX05VTV8zNiwKKyAgICBBQ0NfQ0FUX05VTV8zNywKKyAgICBBQ0NfQ0FUX05VTV8zOCwKKyAgICBBQ0NfQ0FUX05VTV8zOSwKKyAgICBBQ0NfQ0FUX05VTV80MCwKKyAgICBBQ0NfQ0FUX05VTV80MSwKKyAgICBBQ0NfQ0FUX05VTV80MiwKKyAgICBBQ0NfQ0FUX05VTV80MywKKyAgICBBQ0NfQ0FUX05VTV80NCwKKyAgICBBQ0NfQ0FUX05VTV80NSwKKyAgICBBQ0NfQ0FUX05VTV80NiwKKyAgICBBQ0NfQ0FUX05VTV80NywKKyAgICBBQ0NfQ0FUX05VTV80OCwKKyAgICBBQ0NfQ0FUX05VTV80OSwKKyAgICBBQ0NfQ0FUX05VTV81MCwgCisgICAgQUNDX0NBVF9OVU1fNTEsCisgICAgQUNDX0NBVF9OVU1fNTIsCisgICAgQUNDX0NBVF9OVU1fNTMsCisgICAgQUNDX0NBVF9OVU1fNTQsCisgICAgQUNDX0NBVF9OVU1fNTUsCisgICAgQUNDX0NBVF9OVU1fNTYsCisgICAgQUNDX0NBVF9OVU1fNTcsCisgICAgQUNDX0NBVF9OVU1fNTgsCisgICAgQUNDX0NBVF9OVU1fNTksCisgICAgQUNDX0NBVF9OVU1fNjAsCisgICAgQUNDX0NBVF9OVU1fNjEsCisgICAgQUNDX0NBVF9OVU1fNjIsCisgICAgQUNDX0NBVF9OVU1fNjMKK31tY2RkbGxfdmdtbV9vcF9kZWZfYWNjZXNzX2NhdF9udW1fZW51bTsKKwordHlwZWRlZiBlbnVtIAoreworICAgIEROTl9UWVBFID0gMCwKKyAgICBPU19JRF9PU19BUFBfSURfVFlQRSwKKyAgICBTTlNTQUlfVFlQRSwKKyAgICBNQVhfVFlQRSA9IDYzCit9bWNkZGxsX3ZnbW1fY3JpdGVyaWFfdHlwZTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQUNDX0NBVF9OVU1fMCA9IDAsCisgICAgQUNDX0NBVF9OVU1fMSwKKyAgICBBQ0NfQ0FUX05VTV8yLAorICAgIEFDQ19DQVRfTlVNXzMsCisgICAgQUNDX0NBVF9OVU1fNCwKKyAgICBBQ0NfQ0FUX05VTV81LAorICAgIEFDQ19DQVRfTlVNXzYsCisgICAgQUNDX0NBVF9OVU1fNywKKyAgICBBQ0NfQ0FUX05VTV9NQVggPSAzMQorfXZnbW1fbWNkZGxsX3N0X2FjY19jYXRfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgRFJYX1ZBTFVFX05PVF9TUEVDSUZJRUQgPSAwLAorICAgIERSWF9DWUNMRV9QQVJBX1RfMzIsCisgICAgRFJYX0NZQ0xFX1BBUkFfVF82NCwKKyAgICBEUlhfQ1lDTEVfUEFSQV9UXzEyOCwKKyAgICBEUlhfQ1lDTEVfUEFSQV9UXzI1NiwKKyAgICBEUlhfVkFMVUVfRU5VTV9NQVggPSAxNQorfXZnbW1fbWNkZGxsX2RyeF92YWx1ZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTTVNfT1ZFUl9OQVNfTk9UX0FWQUlMQUJMRSA9IDAsCisgICAgU01TX09WRVJfTkFTX0FWQUlMQUJMRQorfXZnbW1fbWNkZGxsX3NhaV9lbnVtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCBfc3BhcmU7CisgICAgdmdtbV9tY2RkbGxfc2FpX2VudW0gc2FpOworfXZnbW1fbWNkZGxsX3Ntc19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBrYWxfdWludDggbGVuZ3RoOworICAgIGthbF91aW50OCBFRUEwOworICAgIGthbF91aW50OCBFRUExOworICAgIGthbF91aW50OCBFRUEyOworICAgIGthbF91aW50OCBFRUEzOworICAgIGthbF91aW50OCBFRUE0OworICAgIGthbF91aW50OCBFRUE1OworICAgIGthbF91aW50OCBFRUE2OworICAgIGthbF91aW50OCBFRUE3OworICAgIGthbF91aW50OCBFSUEwOworICAgIGthbF91aW50OCBFSUExOworICAgIGthbF91aW50OCBFSUEyOworICAgIGthbF91aW50OCBFSUEzOworICAgIGthbF91aW50OCBFSUE0OworICAgIGthbF91aW50OCBFSUE1OworICAgIGthbF91aW50OCBFSUE2OworICAgIGthbF91aW50OCBFSUE3OworICAgIGthbF91aW50OCBVRUEwOworICAgIGthbF91aW50OCBVRUExOworICAgIGthbF91aW50OCBVRUEyOworICAgIGthbF91aW50OCBVRUEzOworICAgIGthbF91aW50OCBVRUE0OworICAgIGthbF91aW50OCBVRUE1OworICAgIGthbF91aW50OCBVRUE2OworICAgIGthbF91aW50OCBVRUE3OworICAgIGthbF91aW50OCBVSUEwOworICAgIGthbF91aW50OCBVSUExOworICAgIGthbF91aW50OCBVSUEyOworICAgIGthbF91aW50OCBVSUEzOworICAgIGthbF91aW50OCBVSUE0OworICAgIGthbF91aW50OCBVSUE1OworICAgIGthbF91aW50OCBVSUE2OworICAgIGthbF91aW50OCBVSUE3OworICAgIGthbF91aW50OCBHRUEwOworICAgIGthbF91aW50OCBHRUExOworICAgIGthbF91aW50OCBHRUEyOworICAgIGthbF91aW50OCBHRUEzOworICAgIGthbF91aW50OCBHRUE0OworICAgIGthbF91aW50OCBHRUE1OworICAgIGthbF91aW50OCBHRUE2OworICAgIGthbF91aW50OCBHRUE3OyAKK312Z21tX21jZGRsbF9zMV91ZV9zZWNfY2FwX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggbGVuZ3RoOworICAgIG1jZGRsbF92Z21tX21wc2lfZW51bSBNUFNJOworICAgIG1jZGRsbF92Z21tX2l3a24yNl9lbnVtIElXS19OMjY7CisgICAgbWNkZGxsX3ZnbW1fZW1mX2VudW0gRU1GOworICAgIG1jZGRsbF92Z21tX2VtY19lbnVtIEVNQzsKKyAgICBtY2RkbGxfdmdtbV9pbXNfdm9wc19uM2dwcF9lbnVtIElNU19Wb1BTX04zR1BQOworICAgIG1jZGRsbF92Z21tX2ltc192b3BzXzNncHBfZW51bSBJTVNfVm9QU18zR1BQOworICAgIGthbF91aW50OCBfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1fbWNzaV9lbnVtIE1DU0k7CisgICAgbWNkZGxsX3ZnbW1fZW1jbjNfZW51bSBFTUNOMzsKK31tY2RkbGxfdmdzX253X2ZlYXR1cmVfc3VwcG9ydF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IF9zcGFyZTsKKyAgICB2Z21tX21jZGRsbF9uc3NhaV9pbmNsdXNpb25fbW9kZV9lbnVtIG5zc2FpX2luY2x1c2lvbl9tb2RlX3ZhbDsKK31tY2RkbGxfbnNzYWlfaW5jbHVzaW9uX21vZGVfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCBsZW5ndGg7CisgICAgbWNkZGxsX3VsX2RhdGFfc3RhdHVzX2VudW0gUFNJW0RfTk9fUFNJXTsKK31tY2RkbGxfdXBsaW5rX2RhdGFfc3RhdHVzX3N0cnVjdDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgTk9USUZJQ0FUSU9OX1BST0NFRFVSRV9OT1RfU1VQUE9SVEVELAorICAgIE5PVElGSUNBVElPTl9QUk9DRURVUkVfU1VQUE9SVEVECit9bWNkZGxsX25mX2NhcF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBPTkV4U1JWQ0NfTk9UX1NVUFBPUlRFRCwKKyAgICBPTkV4U1JWQ0NfU1VQUE9SVEVECit9bWNkZGxsXzF4c3J2Y2NfY2FwX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIExDU19OT1RfU1VQUE9SVEVELAorICAgIExDU19TVVBQT1JURUQKK31tY2RkbGxfbGNzX2NhcF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBMUFBfTk9UX1NVUFBPUlRFRCwKKyAgICBMUFBfU1VQUE9SVEVECit9bWNkZGxsX2xwcF9jYXBfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQUNDX0NTRkJfTk9UX1NVUFBPUlRFRCwKKyAgICBBQ0NfQ1NGQl9TVVBQT1JURUQKK31tY2RkbGxfYWNjX2NzZmJfY2FwX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIEgyNDVfQVNIX05PVF9TVVBQT1JURUQsCisgICAgSDI0NV9BU0hfU1VQUE9SVEVECit9bWNkZGxsX2gyNDVfYXNoX2NhcF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBQcm9TZV9OT1RfU1VQUE9SVEVEID0gMCwKKyAgICBQcm9TZV9TVVBQT1JURUQKK31tY2RkbGxfcHJvc2VfY2FwX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFByb1NlX0RJUkVDVF9ESVNDT1ZFUllfTk9UX1NVUFBPUlRFRCA9IDAsCisgICAgUHJvU2VfRElSRUNUX0RJU0NPVkVSWV9TVVBQT1JURUQKK31tY2RkbGxfcHJvc2VkZF9jYXBfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUHJvU2VfRElSRUNUX0NPTU1VTklDQVRJT05fTk9UX1NVUFBPUlRFRCA9IDAsCisgICAgUHJvU2VfRElSRUNUX0NPTU1VTklDQVRJT05fU1VQUE9SVEVECit9bWNkZGxsX3Byb3NlZGNfY2FwX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIEFDVF9BU19Qcm9TZV9SRUxBWV9OT1RfU1VQUE9SVEVEID0gMCwKKyAgICBBQ1RfQVNfUHJvU2VfUkVMQVlfU1VQUE9SVEVECit9bWNkZGxsX3Byb3NlX3JlbGF5X2NhcF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBDUF9DSW9UX0VQU19PUFRfTk9UX1NVUFBPUlRFRCA9IDAsCisgICAgQ1BfQ0lvVF9FUFNfT1BUX1NVUFBPUlRFRAorfW1jZGRsbF9jcF9jaW90X2Vwc19vcF9jYXBfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVVBfQ0lvVF9FUFNfT1BUX05PVF9TVVBQT1JURUQgPSAwLAorICAgIFVQX0NJb1RfRVBTX09QVF9TVVBQT1JURUQKK31tY2RkbGxfdXBfY2lvdF9lcHNfb3BfY2FwX2VudW07CisKKwordHlwZWRlZiBlbnVtCit7CisgICAgUzFVX0RBVEFfVFJBTlNGRVJfTk9UX1NVUFBPUlRFRCA9IDAsCisgICAgUzFVX0RBVEFfVFJBTlNGRVJfU1VQUE9SVEVECit9bWNkZGxsX3MxdV9kYXRhX3RyYW5zZmVyX2NhcF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBFUl9XSVRIT1VUX1BETl9DT05OX05PVF9TVVBQT1JURUQgPSAwLAorICAgIEVSX1dJVEhPVVRfUEROX0NPTk5fU1VQUE9SVEVECit9bWNkZGxsX2Vyd2l0aG91dHBkbl9jYXBfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgSENfQ1BfQ0lvVF9OT1RfU1VQUE9SVEVEID0gMCwKKyAgICBIQ19DUF9DSW9UX1NVUFBPUlRFRAorfW1jZGRsbF9oY19jcF9jaW90X2NhcF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBlUENPX05PVF9TVVBQT1JURUQgPSAwLAorICAgIGVQQ09fU1VQUE9SVEVECit9bWNkZGxsX2VwY29fY2FwX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIE1VTFRJX0RSQl9OT1RfU1VQUE9SVEVEID0gMCwKKyAgICBNVUxUSV9EUkJfU1VQUE9SVEVECit9bWNkZGxsX211bF9kcmJfY2FwX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFYyWF9DT01fT1ZFUl9QQzVfTk9UX1NVUFBPUlRFRCA9IDAsCisgICAgVjJYX0NPTV9PVkVSX1BDNV9TVVBQT1JURUQgCit9bWNkZGxsX3YyeF9jb21fb3Zlcl9wYzVfY2FwX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFJFU1RSSUNUX09OX1VTRV9PRl9FQ19OT1RfU1VQUE9SVEVEID0gMCwKKyAgICBSRVNUUklDVF9PTl9VU0VfT0ZfRUNfU1VQUE9SVEVEIAorfW1jZGRsbF9yZXN0cmljdF9lY19jYXBfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQ1BfQkFDS09GRl9USU1FUl9OT1RfU1VQUE9SVEVEID0gMCwKKyAgICBDUF9CQUNLT0ZGX1RJTUVSX1NVUFBPUlRFRAorfW1jZGRsbF9jcF9iYWNrb2ZmX2NhcF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBEQ05SX05PVF9TVVBQT1JURUQgPSAwLAorICAgIERDTlJfU1VQUE9SVEVECit9bWNkZGxsX2RjbnJfY2FwX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIE4xX01PREVfTk9UX1NVUFBPUlRFRCA9IDAsCisgICAgTjFfTU9ERV9TVVBQT1JURUQKK31tY2RkbGxfbjFfbW9kZV9jYXBfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgU0dDX05PVF9TVVBQT1JURUQgPSAwLAorICAgIFNHQ19TVVBQT1JURUQKK31tY2RkbGxfc2djX2NhcF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTSUdOQUxfRk9SX01BWF8xNV9FUFNfQkVBUkVSX05PVF9TVVBQT1JURUQgPSAwLAorICAgIFNJR05BTF9GT1JfTUFYXzE1X0VQU19CRUFSRVJfU1VQUE9SVEVECit9bWNkZGxsX3NpZ25hbF9mb3JfbWF4XzE1ZXBzX2JlYXJlcl9jYXBfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVUNTMl9OT1RfU1VQUE9SVEVEID0gMCwKKyAgICBVQ1MyX1NVUFBPUlRFRAorfW1jZGRsbF91Y3MyX2NhcF9lbnVtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCBsZW5ndGg7CisgICAga2FsX3VpbnQ4IEVFQTA7CisgICAga2FsX3VpbnQ4IEVFQTE7CisgICAga2FsX3VpbnQ4IEVFQTI7CisgICAga2FsX3VpbnQ4IEVFQTM7CisgICAga2FsX3VpbnQ4IEVFQTQ7CisgICAga2FsX3VpbnQ4IEVFQTU7CisgICAga2FsX3VpbnQ4IEVFQTY7CisgICAga2FsX3VpbnQ4IEVFQTc7CisgICAga2FsX3VpbnQ4IEVJQTA7CisgICAga2FsX3VpbnQ4IEVJQTE7CisgICAga2FsX3VpbnQ4IEVJQTI7CisgICAga2FsX3VpbnQ4IEVJQTM7CisgICAga2FsX3VpbnQ4IEVJQTQ7CisgICAga2FsX3VpbnQ4IEVJQTU7CisgICAga2FsX3VpbnQ4IEVJQTY7CisgICAga2FsX3VpbnQ4IEVJQTc7CisgICAga2FsX3VpbnQ4IFVFQTA7CisgICAga2FsX3VpbnQ4IFVFQTE7CisgICAga2FsX3VpbnQ4IFVFQTI7CisgICAga2FsX3VpbnQ4IFVFQTM7CisgICAga2FsX3VpbnQ4IFVFQTQ7CisgICAga2FsX3VpbnQ4IFVFQTU7CisgICAga2FsX3VpbnQ4IFVFQTY7CisgICAga2FsX3VpbnQ4IFVFQTc7CisgICAgbWNkZGxsX3VjczJfY2FwX2VudW0gVUNTMjsKKyAgICBrYWxfdWludDggVUlBMDsKKyAgICBrYWxfdWludDggVUlBMTsKKyAgICBrYWxfdWludDggVUlBMjsKKyAgICBrYWxfdWludDggVUlBMzsKKyAgICBrYWxfdWludDggVUlBNDsKKyAgICBrYWxfdWludDggVUlBNTsKKyAgICBrYWxfdWludDggVUlBNjsKKyAgICBtY2RkbGxfcHJvc2VkZF9jYXBfZW51bSBQcm9zZWRkOworICAgIG1jZGRsbF9wcm9zZV9jYXBfZW51bSBQcm9zZTsKKyAgICBtY2RkbGxfaDI0NV9hc2hfY2FwX2VudW0gSDI0NV9BU0g7CisgICAgbWNkZGxsX2FjY19jc2ZiX2NhcF9lbnVtIEFDQ19DU0ZCOworICAgIG1jZGRsbF9scHBfY2FwX2VudW0gTFBQOworICAgIG1jZGRsbF9sY3NfY2FwX2VudW0gTENTOworICAgIG1jZGRsbF8xeHNydmNjX2NhcF9lbnVtIE9uZXhTUlZDQzsKKyAgICBtY2RkbGxfbmZfY2FwX2VudW0gTkY7CisgICAgbWNkZGxsX2VwY29fY2FwX2VudW0gZVBDTzsKKyAgICBtY2RkbGxfaGNfY3BfY2lvdF9jYXBfZW51bSBIQ19DUF9DSW9UOworICAgIG1jZGRsbF9lcndpdGhvdXRwZG5fY2FwX2VudW0gRVJ3aXRob3V0UEROOworICAgIG1jZGRsbF9zMXVfZGF0YV90cmFuc2Zlcl9jYXBfZW51bSBTMVVfREFUQTsKKyAgICBtY2RkbGxfdXBfY2lvdF9lcHNfb3BfY2FwX2VudW0gVVBfQ0lvVDsKKyAgICBtY2RkbGxfY3BfY2lvdF9lcHNfb3BfY2FwX2VudW0gQ1BfQ0lvVDsKKyAgICBtY2RkbGxfcHJvc2VfcmVsYXlfY2FwX2VudW0gUHJvc2VfcmVsYXk7IAorICAgIG1jZGRsbF9wcm9zZWRjX2NhcF9lbnVtIFByb3NlX2RjOworICAgIG1jZGRsbF9zaWduYWxfZm9yX21heF8xNWVwc19iZWFyZXJfY2FwX2VudW0gZmlmdGVlbmJlYXJlcnM7CisgICAgbWNkZGxsX3NnY19jYXBfZW51bSBTR0M7CisgICAgbWNkZGxsX24xX21vZGVfY2FwX2VudW0gTjFtb2RlOworICAgIG1jZGRsbF9kY25yX2NhcF9lbnVtIGRjbnI7CisgICAgbWNkZGxsX2NwX2JhY2tvZmZfY2FwX2VudW0gQ1BfYmFja29mZjsKKyAgICBtY2RkbGxfcmVzdHJpY3RfZWNfY2FwX2VudW0gUmVzdHJpY3RFQzsKKyAgICBtY2RkbGxfdjJ4X2NvbV9vdmVyX3BjNV9jYXBfZW51bSBWMlhQQzU7CisgICAgbWNkZGxsX211bF9kcmJfY2FwX2VudW0gbXVsdGlwbGVEUkI7Cit9bWNkZGxsX3MxX3VlX253X2NhcF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIGthbF91aW50OCBsZW5ndGg7CisgICAga2FsX3VpbnQ4IEVCSVtEX05PX0VCSV07Cit9bWNkZGxsX2Vwc2JfY29udGV4dF9zdGF0dXNfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgbGVuZ3RoOworICAgIGthbF91aW50OCBkaWdpdDA7CisgICAga2FsX3VpbnQ4IF9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV90eXBlX29mX2lkX2VudW0gaWRlbnRpdHlfdHlwZTsKKyAgICB2Z3NfcGxtbl9pZF9zdHJ1Y3QgcGxtbl9pZDsKKyAgICBrYWxfdWludDggYW1mX3JlZ2lvbl9pZDsKKyAgICBrYWxfdWludDggYW1mX3NldF9pZDsKKyAgICBrYWxfdWludDggYW1mX3NldF9pZF9jb250OworICAgIGthbF91aW50OCBhbWZfcG9pbnRlcjsKKyAgICBrYWxfdWludDggdmdzX3Rtc2lbRF9OT19WR1NfVE1TSV07Cit9bWNkZGxsX3Znc19ndXRpX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2IGxlbmd0aDsKKyAgICBrYWxfdWludDggZGlnaXQwOworICAgIGthbF91aW50OCBfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1fdHlwZV9vZl9pZF9lbnVtIGlkZW50aXR5X3R5cGU7CisgICAga2FsX3VpbnQ4IGFtZl9zZXRfaWQ7CisgICAga2FsX3VpbnQ4IGFtZl9zZXRfaWRfY29udDsKKyAgICBrYWxfdWludDggYW1mX3BvaW50ZXI7CisgICAga2FsX3VpbnQ4IHZnc190bXNpW0RfTk9fVkdTX1RNU0ldOworfW1jZGRsbF92Z3Nfc190bXNpX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2IGxlbmd0aDsKKyAgICBrYWxfdWludDggZGlnaXQwOworICAgIGthbF91aW50OCBvZGRfb3JfZXZlbjsKKyAgICBtY2RkbGxfdmdtbV90eXBlX29mX2lkX2VudW0gaWRlbnRpdHlfdHlwZTsKKyAgICBrYWxfdWludDggZGlnaXRfYnl0ZVtEX05PX0lNRUlfRElHSVRfQllURV07Cit9bWNkZGxsX3Znc19pbWVpX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2IGxlbmd0aDsKKyAgICBrYWxfdWludDggZGlnaXQwOworICAgIGthbF91aW50OCBvZGRfb3JfZXZlbjsKKyAgICBtY2RkbGxfdmdtbV90eXBlX29mX2lkX2VudW0gaWRlbnRpdHlfdHlwZTsKKyAgICBrYWxfdWludDggZGlnaXRfYnl0ZVtEX05PX0lNRUlTVl9ESUdJVF9CWVRFXTsKK31tY2RkbGxfdmdzX2ltZWlzdl9zdHJ1Y3Q7CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgICB2Z3Nfbm9faWRfc3RydWN0IG5vX2lkOworICAgIGthbF91aW50OCBzdWNpW0RfTk9fVkdTX01PQklMRV9JRF07CisgICAgbWNkZGxsX3Znc19ndXRpX3N0cnVjdCB2Z19ndXRpOworICAgIG1jZGRsbF92Z3NfaW1laV9zdHJ1Y3QgaW1laTsKKyAgICBtY2RkbGxfdmdzX3NfdG1zaV9zdHJ1Y3Qgdmdfc3Rtc2k7CisgICAgbWNkZGxsX3Znc19pbWVpc3Zfc3RydWN0IGltZWlzdjsgICAgCit9dmdtbV9tY2RkbGxfdmdzX21vYmlsZV9pZF91bmlvbjsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX29wX2RlZl9hY2Nlc3NfY2F0X2RlZl9zdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggbGVuX29wX2RlZl9hY2Nlc3NfY2F0X2RlZjsKKyAgICBrYWxfdWludDggcHJlY2VfdmFsdWU7CisgICAgbWNkZGxsX3ZnbW1fcHNhY19lbnVtIHBzYWM7CisgICAga2FsX3VpbnQ4IHNwYXJlOworICAgIG1jZGRsbF92Z21tX29wX2RlZl9hY2Nlc3NfY2F0X251bV9lbnVtIG9wX2RlZl9hY2NfY2F0X251bTsKKyAgICBrYWxfdWludDggbGVuX2NyaXRlcmlhOworICAgIG1jZGRsbF92Z21tX2NyaXRlcmlhX3R5cGUgY3JpdGVyaWFbRF9OT19DUklURVJJQV9UWVBFXTsKKyAgICBrYWxfdWludDggc3RfYWNjX2NhdF9zcGFyZTsKKyAgICB2Z21tX21jZGRsbF9zdF9hY2NfY2F0X2VudW0gc3RfYWNjX2NhdF9lbnVtOworfXZnbW1fbWNkZGxsX29wX2RlZl9hY2Nlc3NfY2F0X2RlZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgZW51bSAKK3sKKyAgICBVU0VfT0ZfTk9OXzNHUFBfRU1FUkdFTkNZX05VTUJFUlNfTk9UX1BFUk1JVFRFRCA9IDAsCisgICAgVVNFX09GX05PTl8zR1BQX0VNRVJHRU5DWV9OVU1CRVJTX1BFUk1JVFRFRAorfW1jZGRsbF9uM2VuX2luZF9lbnVtOworCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBrYWxfdWludDggc3BhcmU7CisgICAgbWNkZGxsX24zZW5faW5kX2VudW0gbjNlbl9pbmRpY2F0b3I7Cit9bWNkZGxsX25vbjNncHBfbndfcG9saWNpZXNfc3RydWN0OworCisvLyBUaGUgZGVmaW5pdGlvbnMgYmVsb3cgYXJlIHVzZWQgYnkgYWlyIG1lc3NhZ2VzCisjZGVmaW5lIERfUkFXX0RBVEFfTElNSVQgNjQKKyNkZWZpbmUgRF9OT19VRV9TRUNfQ0FQIDQKKyNkZWZpbmUgRF9OT19BRERfR1VUSSAxMworI2RlZmluZSBEX05PX1JFUV9OU1NBSSA2NAorI2RlZmluZSBEX05PX1NJX1VFX05XX0NBUCAxNQorI2RlZmluZSBEX05PX1BEVV9TRVNTSU9OX1NUQVRVUyAzNAorI2RlZmluZSBEX05PX0FMTE9XRURfUERVX1NFU1NJT05fU1RBVFVTIDM0CisjZGVmaW5lIERfTk9fRVBTX05BU01TR19DT05UIDY0CisjZGVmaW5lIERfTk9fRVBTX05BU01TR19DT05UIDY0CisjZGVmaW5lIERfTk9fUEFZTE9BRF9DT05UIDY0CisKKyNkZWZpbmUgRF9OT19FQVBfTVNHIDY0CisjZGVmaW5lIERfTk9fRU1FUkdFTkNZX05VTV9MSVNUIDUwCisjZGVmaW5lIERfTk9fTEFETl9JTkZPIDY0CisjZGVmaW5lIERfTk9fTEFETl9JTkQgNjQKKyNkZWZpbmUgRF9OT19QRFVfU0VTU0lPTl9SRUFDVF9FUlJPUiA2NAorI2RlZmluZSBEX05PX1BEVV9TRVNTSU9OX1JFQUNUX1JFU1VMVCAzMgorI2RlZmluZSBEX05PX1ZHU19OV19GRUFUVVJFX1NVUFBPUlQgNQorI2RlZmluZSBEX05PX0NPTkZJR19OU1NBSSA2NAorI2RlZmluZSBEX05PX1JFSkVDVEVEX05TU0FJIDQyCisjZGVmaW5lIERfTk9fQUxMT1dFRF9OU1NBSSA2NAorI2RlZmluZSBEX05PX1RBSV9MSVNUIDY0CisjZGVmaW5lIERfTk9fRVFVQUxfUExNTlMgNDcKKyNkZWZpbmUgRF9OT19WR19HVVRJIDEzCisjZGVmaW5lIERfTk9fU0VSVklDRV9BUkVBX0xJU1QgNjQKKyNkZWZpbmUgRF9OT19WR19TX1RNU0kgMTMKKworI2RlZmluZSBEX05PX1NfTlNTQUkgMTAKKyNkZWZpbmUgRF9OT19ETk4gNjQKKyNkZWZpbmUgRF9OT19BRERfSU5GTyA2NAorI2RlZmluZSBEX05PX0ZVTExfTkFNRV9GT1JfTlcgNjQKKyNkZWZpbmUgRF9OT19TSE9SVF9OQU1FX0ZPUl9OVyA2NAorI2RlZmluZSBEX05PX05XX0RBWUxJR0hUX1NBVklOR19USU1FIDMKKyNkZWZpbmUgRF9OT19SRVBMQVlFRF9VRV9TRUNfQ0FQIDUKKyNkZWZpbmUgRF9OT19WR19JTUVJU1YgMTEKKyNkZWZpbmUgRF9OT19WR01NX05BU01TR19DT05UIDY0CisjZGVmaW5lIERfTk9fQVVUTiAxOAorI2RlZmluZSBEX05PX0FVVEhfUkVTX1BBUkEgMTgKKyNkZWZpbmUgRF9OT19SRVFfVFlQRSAxMAorI2RlZmluZSBEX05PX0FVVE9fRkFJTF9QQVJBIDE2CisjZGVmaW5lIERfTk9fU0VDX1BLVCA1MAorI2RlZmluZSBEX1BMTU5fSURfQU5EX0FDQ0VTU19URUNIX0xJU1QgNTAKKyNkZWZpbmUgRF9OT19BQkJBIDMyCisjZGVmaW5lIERfTk9fRVhUX0VNRVJHRU5DWV9OVU1fTElTVCA1MAorI2RlZmluZSBEX05PX1NPUl9UUkFOU1BBUkVOVF9DT05UIDUwCisjZGVmaW5lIERfTk9fT1BfREVGX0FDQ0VTU19DQVRfREVGIDY0CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9yZWdfcmVxX3N0cnVjdAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzYzsKKyAgICBrYWxfdWludDggc2VjX2hkcl90eXBlX3NwYXJlOworICAgIG1jZGRsbF92Z21tX3NlY19oZHJfdHlwZV9lbnVtIHNlY19oZHJfdHlwZTsKKyAgICAvL2thbF91aW50OCBtc2dfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIHZnbW1fbWNkZGxsX3JlZ190eXBlX3N0cnVjdCB2Z3NfcmVnX3R5cGU7CisgICAga2FsX3VpbnQ4IHNwYXJlX2hhbGZfb2N0ZXQ7CisgICAgdmdtbV9tY2RkbGxfbmFzX2tleV9zZXRfaWRfc3RydWN0IG5na3NpOworICAgIG1jZGRsbF92Z21tX3R5cGVfb2ZfaWRfZW51bSB0eXBlX29mX2lkOworICAgIHZnbW1fbWNkZGxsX3Znc19tb2JpbGVfaWRfdW5pb24gdmdzX21vYmlsZV9pZDsKKyAgICBrYWxfdWludDggbm9uX2N1cl9uYXRpdmVfbmFzX2tzaVA7CisgICAgdmdtbV9uYXNfa2V5X3NldF9pZF9zdHJ1Y3Qgbm9uX2N1cl9uYXRpdmVfbmFzX2tzaTsKKyAgICBrYWxfdWludDggdmdtbV9jYXBQOworICAgIHZnbW1fbWNkZGxsX3ZnbW1fY2FwX3N0cnVjdCB2Z21tX2NhcDsKKyAgICBrYWxfdWludDggdWVfc2VjX2NhcFA7CisgICAgdmdtbV9tY2RkbGxfdWVfc2VjX2NhcF9zdHJ1Y3QgdWVfc2VjX2NhcDsKKyAgICBrYWxfdWludDggcmVxX25zc2FpUDsKKyAgICBrYWxfdWludDggbm9fcmVxX25zc2FpOworICAgIGthbF91aW50OCByZXFfbnNzYWlbRF9OT19SRVFfTlNTQUldOworICAgIGthbF91aW50OCBsYXN0X3Zpc19yZWdfdGFpUDsKKyAgICB2Z3NfdGFpX3N0cnVjdCBsYXN0X3Zpc19yZWdfdGFpOworICAgIGthbF91aW50OCBzMV91ZV9ud19jYXBQOworICAgIG1jZGRsbF9zMV91ZV9ud19jYXBfc3RydWN0IHMxX3VlX253X2NhcDsKKyAgICBrYWxfdWludDggdWxfZGF0YV9zdGF0dXNQOworICAgIG1jZGRsbF91cGxpbmtfZGF0YV9zdGF0dXNfc3RydWN0IHVsX2RhdGFfc3RhdHVzOworICAgIGthbF91aW50OCBwZHVfc2Vzc2lvbl9zdGF0dXNQOworICAgIHZnbW1fbWNkZGxsX3BkdV9zZXNzaW9uX3N0YXR1c19zdHJ1Y3QgcGR1X3Nlc3Npb25fc3RhdHVzOworICAgIGthbF91aW50OCBtaWNvX2luZFA7CisgICAgdmdtbV9tY2RkbGxfbWljb19pbmRfc3RydWN0IG1pY29faW5kOworICAgIGthbF91aW50OCB1ZV9zdGF0dXNQOworICAgIHZnbW1fbWNkZGxsX3VlX3N0YXR1c19zdHJ1Y3QgdWVfc3RhdHVzOworICAgIGthbF91aW50OCBhZGRfZ3V0aVA7CisgICAgdmdzX2d1dGlfc3RydWN0IGFkZF9ndXRpOworICAgIG1jZGRsbF92Z21tX3R5cGVfb2ZfaWRfZW51bSBhZGRfZ3V0aV90eXBlX29mX2lkZW50aXR5OworICAgIGthbF91aW50OCBhbGxvd2VkX3BkdV9zZXNzaW9uX3N0YXR1c1A7CisgICAgYWxsb3dlZF9wZHVfc2Vzc2lvbl9zdGF0dXNfc3RydWN0IGFsbG93ZWRfcGR1X3Nlc3Npb25fc3RhdHVzOworICAgIGthbF91aW50OCB1ZV91c2FnZV9zZXR0aW5nUDsKKyAgICBtY2RkbGxfdmdtbV91ZV91c2FnZV9zZXR0aW5nX3N0cnVjdCB1ZV91c2FnZV9zZXR0aW5nOworICAgIGthbF91aW50OCByZXFfZHJ4X3BhcmFQOworICAgIHZnc19kcnhfcGFyYV9zdHJ1Y3QgcmVxX2RyeF9wYXJhOworICAgIGthbF91aW50OCBlcHNfbmFzbXNnX2NvbnRQOworICAgIGthbF91aW50OCBub19lcHNfbmFzbXNnX2NvbnQ7CisgICAga2FsX3VpbnQ4IGVwc19uYXNtc2dfY29udFtEX05PX0VQU19OQVNNU0dfQ09OVF07CisgICAga2FsX3VpbnQ4IGxhZG5faW5kUDsKKyAgICBrYWxfdWludDE2IG5vX2xhZG5faW5kOworICAgIGthbF91aW50OCBsYWRuX2luZFtEX05PX0xBRE5fSU5EXTsKKyAgICBrYWxfdWludDggcGF5bG9hZF9jb250X3R5cGVQOworICAgIG1jZGRsbF92Z21tX3BheWxvYWRfY29udF90eXBlX3ZhbF9lbnVtIHBheWxvYWRfY29udF90eXBlOworICAgIGthbF91aW50OCBwYXlsb2FkX2NvbnRQOworICAgIGthbF91aW50MTYgbm9fcGF5bG9hZF9jb250OworICAgIGthbF91aW50OCBwYXlsb2FkX2NvbnRbRF9OT19QQVlMT0FEX0NPTlRdOworICAgIGthbF91aW50OCBud19zbGljZV9pbmRQOworICAgIHZnbW1fbWNkZGxsX253X3NsaWNlX2luZF9zdHJ1Y3Qgbndfc2xpY2VfaW5kOworICAgIGthbF91aW50OCB2Z3NfdXBkYXRlX3R5cGVQOworICAgIHZnbW1fbWNkZGxsXzVnX3VwZGF0ZV90eXBlX3N0cnVjdCB2Z3NfdXBkYXRlX3R5cGU7CisgICAga2FsX3VpbnQ4IHZnbW1fbmFzbXNnX2NvbnRQOworICAgIGthbF91aW50MTYgbm9fdmdtbV9uYXNtc2dfY29udDsKKyAgICBrYWxfdWludDggdmdtbV9uYXNtc2dfY29udFtEX05PX1ZHTU1fTkFTTVNHX0NPTlRdOworICAgIGthbF91aW50OCBlcHNiX2NvbnRleHRfc3RhdHVzUDsKKyAgICBtY2RkbGxfZXBzYl9jb250ZXh0X3N0YXR1c19zdHJ1Y3QgZXBzYl9jb250ZXh0X3N0YXR1czsKK30gdmdtbV9tY2RkbGxfcmVnX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9yZWdfYWNjX3N0cnVjdAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzYzsKKyAgICBrYWxfdWludDggc2VjX2hkcl90eXBlX3NwYXJlOworICAgIG1jZGRsbF92Z21tX3NlY19oZHJfdHlwZV9lbnVtIHNlY19oZHJfdHlwZTsKKyAgICAvL2thbF91aW50OCBtc2dfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIC8vdmdzX3JlZ19yZXN1bHRfc3RydWN0IHZnc19yZWdfcmVzdWx0OworICAgIHZnbW1fbWNkZGxsX3JlZ19yZXN1bHRfc3RydWN0IHZnc19yZWdfcmVzdWx0OworICAgIGthbF91aW50OCB2Z19ndXRpUDsKKyAgICBtY2RkbGxfdmdtbV90eXBlX29mX2lkX2VudW0gdmdfZ3V0aV90eXBlX29mX2lkZW50aXR5OworICAgIHZnc19ndXRpX3N0cnVjdCB2Z19ndXRpOworICAgIGthbF91aW50OCBlcXVhbF9wbG1uc1A7CisgICAga2FsX3VpbnQ4IG5vX2VxdWFsX3BsbW5zOworICAgIGthbF91aW50OCBlcXVhbF9wbG1uc1tEX05PX0VRVUFMX1BMTU5TXTsKKyAgICBrYWxfdWludDggdGFpX2xpc3RQOworICAgIGthbF91aW50OCBub190YWlfbGlzdDsKKyAgICBrYWxfdWludDggdGFpX2xpc3RbRF9OT19UQUlfTElTVF07CisgICAga2FsX3VpbnQ4IGFsbG93ZWRfbnNzYWlQOworICAgIGthbF91aW50OCBub19hbGxvd2VkX25zc2FpOworICAgIGthbF91aW50OCBhbGxvd2VkX25zc2FpW0RfTk9fQUxMT1dFRF9OU1NBSV07CisgICAga2FsX3VpbnQ4IHJlamVjdGVkX25zc2FpUDsKKyAgICBrYWxfdWludDggbm9fcmVqZWN0ZWRfbnNzYWk7CisgICAga2FsX3VpbnQ4IHJlamVjdGVkX25zc2FpW0RfTk9fUkVKRUNURURfTlNTQUldOworICAgIGthbF91aW50OCBjb25maWd1cmVkX25zc2FpUDsKKyAgICBrYWxfdWludDggbm9fY29uZmlndXJlZF9uc3NhaTsKKyAgICBrYWxfdWludDggY29uZmlndXJlZF9uc3NhaVtEX05PX0NPTkZJR19OU1NBSV07CisgICAga2FsX3VpbnQ4IHZnc19ud19mZWF0dXJlX3N1cHBvcnRQOworICAgIG1jZGRsbF92Z3NfbndfZmVhdHVyZV9zdXBwb3J0X3N0cnVjdCB2Z3NfbndfZmVhdHVyZV9zdXBwb3J0OworICAgIGthbF91aW50OCBwZHVfc2Vzc2lvbl9zdGF0dXNQOworICAgIHZnbW1fbWNkZGxsX3BkdV9zZXNzaW9uX3N0YXR1c19zdHJ1Y3QgcGR1X3Nlc3Npb25fc3RhdHVzOworICAgIGthbF91aW50OCBwZHVfc2Vzc2lvbl9yZWFjdF9yZXN1bHRQOworICAgIHZnbW1fbWNkZGxsX3BkdV9zZXNzaW9uX3JlYWN0X3Jlc3VsdF9zdHJ1Y3QgcGR1X3Nlc3Npb25fcmVhY3RfcmVzdWx0OworICAgIGthbF91aW50OCBwZHVfc2Vzc2lvbl9yZWFjdF9lcnJvclA7CisgICAga2FsX3VpbnQxNiBub19wZHVfc2Vzc2lvbl9yZWFjdF9lcnJvcjsKKyAgICBrYWxfdWludDggcGR1X3Nlc3Npb25fcmVhY3RfZXJyb3JbRF9OT19QRFVfU0VTU0lPTl9SRUFDVF9FUlJPUl07CisgICAga2FsX3VpbnQ4IGxhZG5faW5mb1A7CisgICAga2FsX3VpbnQxNiBub19sYWRuX2luZm87CisgICAga2FsX3VpbnQ4IGxhZG5faW5mb1tEX05PX0xBRE5fSU5GT107CisgICAga2FsX3VpbnQ4IG1pY29faW5kUDsKKyAgICB2Z21tX21jZGRsbF9taWNvX2luZF9zdHJ1Y3QgbWljb19pbmQ7CisgICAgLy9OZXcKKyAgICBrYWxfdWludDggbndfc2xpY2VfaW5kUDsKKyAgICB2Z21tX21jZGRsbF9ud19zbGljZV9pbmRfc3RydWN0IG53X3NsaWNlX2luZDsKKyAgICAvL0VuZCBvZiBOZXcKKyAgICBrYWxfdWludDggc2VydmljZV9hcmVhX2xpc3RQOworICAgIGthbF91aW50OCBub19zZXJ2aWNlX2FyZWFfbGlzdDsKKyAgICAvL2thbF91aW50OCAqc2VydmljZV9hcmVhX2xpc3Q7CisgICAga2FsX3VpbnQ4IHNlcnZpY2VfYXJlYV9saXN0W0RfTk9fU0VSVklDRV9BUkVBX0xJU1RdOworICAgIGthbF91aW50OCB0MzUxMl92YWxQOworICAgIG1jZGRsbF90aW1lcl8zX3N0cnVjdCB0MzUxMl92YWw7CisgICAga2FsX3VpbnQ4IHRfbm9uM2dwcF9kZXJlZ192YWxQOworICAgIHRpbWVyXzJfc3RydWN0IHRfbm9uM2dwcF9kZXJlZ192YWw7CisgICAga2FsX3VpbnQ4IHQzNTAyX3ZhbFA7CisgICAgdGltZXJfMl9zdHJ1Y3QgdDM1MDJfdmFsOworICAgIGthbF91aW50OCBlbWVyZ2VuY3lfbnVtX2xpc3RQOworICAgIGthbF91aW50OCBub19lbWVyZ2VuY3lfbnVtX2xpc3Q7CisgICAgLy8yNDAwOCAxMC41LjMuMTMgICBFbWVyZ2VuY3kgTnVtYmVyIExpc3QKKyAgICBrYWxfdWludDggZW1lcmdlbmN5X251bV9saXN0W0RfTk9fRU1FUkdFTkNZX05VTV9MSVNUXTsKKyAgICAvL05ldworICAgIGthbF91aW50OCBleHRfZW1lcmdlbmN5X251bV9saXN0UDsKKyAgICBrYWxfdWludDE2IG5vX2V4dF9lbWVyZ2VuY3lfbnVtX2xpc3Q7CisgICAgLy9UQkQKKyAgICBrYWxfdWludDggZXh0X2VtZXJnZW5jeV9udW1fbGlzdFtEX05PX0VYVF9FTUVSR0VOQ1lfTlVNX0xJU1RdOworICAgIGthbF91aW50OCBzb3JfdHJhbnNwYXJlbnRfY29udFA7CisgICAga2FsX3VpbnQxNiBub19zb3JfdHJhbnNwYXJlbnRfY29udDsKKyAgICBrYWxfdWludDggc29yX3RyYW5zcGFyZW50X2NvbnRbRF9OT19TT1JfVFJBTlNQQVJFTlRfQ09OVF07CisgICAgLy9rYWxfdWludDggc29yX21hY19JX0FTVUZbMTZdOworICAgIC8va2FsX3VpbnQ4IGNvdW50ZXJfc29yOworICAgIC8va2FsX3VpbnQ4IHNlY19wa3RbRF9OT19TRUNfUEtUXTsKKyAgICAvL0VuZCBvZiBOZXcKKyAgICBrYWxfdWludDggZWFwX21zZ1A7CisgICAga2FsX3VpbnQxNiBub19lYXBfbXNnOworICAgIGthbF91aW50OCBlYXBfbXNnW0RfTk9fRUFQX01TR107CisgICAga2FsX3VpbnQ4IG5zc2FpX2luY2x1c2lvbl9tb2RlUDsKKyAgICBtY2RkbGxfbnNzYWlfaW5jbHVzaW9uX21vZGVfc3RydWN0IG5zc2FpX2luY2x1c2lvbl9tb2RlOworICAgIGthbF91aW50OCBvcF9kZWZfYWNjZXNzX2NhdF9kZWZQOworICAgIGthbF91aW50OCBub19vcF9kZWZfYWNjZXNzX2NhdF9kZWY7CisgICAga2FsX3VpbnQ4IG9wX2RlZl9hY2Nlc3NfY2F0X2RlZltEX05PX09QX0RFRl9BQ0NFU1NfQ0FUX0RFRl07CisgICAga2FsX3VpbnQ4IG5lZ29fZHJ4X3BhcmFQOworICAgIHZnc19kcnhfcGFyYV9zdHJ1Y3QgbmVnb19kcnhfcGFyYTsKKyAgICBrYWxfdWludDggbm9uM2dwcF9ud19wb2xpY2llc1A7CisgICAgbWNkZGxsX25vbjNncHBfbndfcG9saWNpZXNfc3RydWN0IG5vbjNncHBfbndfcG9saWNpZXM7CisgICAga2FsX3VpbnQ4IGVwc2JfY29udGV4dF9zdGF0dXNQOworICAgIG1jZGRsbF9lcHNiX2NvbnRleHRfc3RhdHVzX3N0cnVjdCBlcHNiX2NvbnRleHRfc3RhdHVzOworfXZnbW1fbWNkZGxsX3JlZ19hY2Nfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfcmVnX2NvbV9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2M7CisgICAga2FsX3VpbnQ4IHNlY19oZHJfdHlwZV9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9zZWNfaGRyX3R5cGVfZW51bSBzZWNfaGRyX3R5cGU7CisgICAgbWNkZGxsX3ZnbW1fbXNnX3R5cGVfZW51bSBtc2dfdHlwZTsKKyAgICAvL05ldworICAgIGthbF91aW50OCBzb3JfdHJhbnNwYXJlbnRfY29udFA7CisgICAga2FsX3VpbnQxNiBub19zb3JfdHJhbnNwYXJlbnRfY29udDsKKyAgICBrYWxfdWludDggc29yX3RyYW5zcGFyZW50X2NvbnRbRF9OT19TT1JfVFJBTlNQQVJFTlRfQ09OVF07CisgICAgLy9FbmQgb2YgTmV3Cit9IHZnbW1fbWNkZGxsX3JlZ19jb21fc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfbW9fZGVyZWdfcmVxX3N0cnVjdAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzYzsKKyAgICBrYWxfdWludDggc2VjX2hkcl90eXBlX3NwYXJlOworICAgIG1jZGRsbF92Z21tX3NlY19oZHJfdHlwZV9lbnVtIHNlY19oZHJfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIHZnbW1fbWNkZGxsX25hc19rZXlfc2V0X2lkX3N0cnVjdCBuZ2tzaTsKKyAgICBtY2RkbGxfdmdtbV9kZXJlZ190eXBlX3N0cnVjdCBkZXRhY2hfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV90eXBlX29mX2lkX2VudW0gdHlwZV9vZl9pZDsKKyAgICB2Z21tX21jZGRsbF92Z3NfbW9iaWxlX2lkX3VuaW9uIHZnc19tb2JpbGVfaWQ7Cit9IHZnbW1fbWNkZGxsX21vX2RlcmVnX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9tb19kZXJlZ19hY2Nfc3RydWN0Cit7CisgICAgbWNkZGxsX0VQRF92YWx1ZV9lbnVtIGV4dF9wcm90b19kaXNjOworICAgIGthbF91aW50OCBzZWNfaGRyX3R5cGVfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1fc2VjX2hkcl90eXBlX2VudW0gc2VjX2hkcl90eXBlOworICAgIG1jZGRsbF92Z21tX21zZ190eXBlX2VudW0gbXNnX3R5cGU7Cit9IHZnbW1fbWNkZGxsX21vX2RlcmVnX2FjY19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9tdF9kZXJlZ19yZXFfc3RydWN0Cit7CisgICAgbWNkZGxsX0VQRF92YWx1ZV9lbnVtIGV4dF9wcm90b19kaXNjOworICAgIGthbF91aW50OCBzZWNfaGRyX3R5cGVfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1fc2VjX2hkcl90eXBlX2VudW0gc2VjX2hkcl90eXBlOworICAgIG1jZGRsbF92Z21tX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAgbWNkZGxsX3ZnbW1fZGVyZWdfdHlwZV9zdHJ1Y3QgZGV0YWNoX3R5cGU7CisgICAga2FsX3VpbnQ4IHNwYXJlX2hhbGZfb2N0ZXQ7CisgICAga2FsX3VpbnQ4IHZnbW1fY2F1c2VQOworICAgIG1jZGRsbF92Z21tX2NhdXNlX2VudW0gdmdtbV9jYXVzZTsKKyAgICBrYWxfdWludDggdDMzNDZfdmFsUDsKKyAgICB0aW1lcl8yX3N0cnVjdCB0MzM0Nl92YWw7Cit9IHZnbW1fbWNkZGxsX210X2RlcmVnX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9tdF9kZXJlZ19hY2Nfc3RydWN0Cit7CisgICAgbWNkZGxsX0VQRF92YWx1ZV9lbnVtIGV4dF9wcm90b19kaXNjOworICAgIGthbF91aW50OCBzZWNfaGRyX3R5cGVfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1fc2VjX2hkcl90eXBlX2VudW0gc2VjX2hkcl90eXBlOworICAgIG1jZGRsbF92Z21tX21zZ190eXBlX2VudW0gbXNnX3R5cGU7Cit9IHZnbW1fbWNkZGxsX210X2RlcmVnX2FjY19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9zZXJ2aWNlX3JlcV9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2M7CisgICAga2FsX3VpbnQ4IHNlY19oZHJfdHlwZV9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9zZWNfaGRyX3R5cGVfZW51bSBzZWNfaGRyX3R5cGU7CisgICAgbWNkZGxsX3ZnbW1fbXNnX3R5cGVfZW51bSBtc2dfdHlwZTsKKyAgICAvL3ZnbW1fbmFzX2tleV9zZXRfaWRfc3RydWN0IG5na3NpOworICAgIHZnbW1fbWNkZGxsX3NlcnZpY2VfdHlwZV9zdHJ1Y3Qgc2VydmljZV90eXBlOworICAgIHZnbW1fbWNkZGxsX25hc19rZXlfc2V0X2lkX3N0cnVjdCBuZ2tzaTsKKyAgICAvL2thbF91aW50OCBub192Z19zX3Rtc2k7CisgICAgLy9rYWxfdWludDggdmdfc190bXNpW0RfTk9fVkdfU19UTVNJXTsKKyAgICBtY2RkbGxfdmdtbV90eXBlX29mX2lkX2VudW0gdHlwZV9vZl9pZDsKKyAgICB2Z3Nfc190bXNpX3N0cnVjdCB2Z19zX3Rtc2k7CisgICAga2FsX3VpbnQ4IHVsX2RhdGFfc3RhdHVzUDsKKyAgICBtY2RkbGxfdXBsaW5rX2RhdGFfc3RhdHVzX3N0cnVjdCB1bF9kYXRhX3N0YXR1czsKKyAgICBrYWxfdWludDggcGR1X3Nlc3Npb25fc3RhdHVzUDsKKyAgICB2Z21tX21jZGRsbF9wZHVfc2Vzc2lvbl9zdGF0dXNfc3RydWN0IHBkdV9zZXNzaW9uX3N0YXR1czsKKyAgICBrYWxfdWludDggYWxsb3dlZF9wZHVfc2Vzc2lvbl9zdGF0dXNQOworICAgIC8va2FsX3VpbnQ4IG5vX2FsbG93ZWRfcGR1X3Nlc3Npb25fc3RhdHVzOworICAgIC8va2FsX3VpbnQ4IGFsbG93ZWRfcGR1X3Nlc3Npb25fc3RhdHVzW0RfTk9fQUxMT1dFRF9QRFVfU0VTU0lPTl9TVEFUVVNdOworICAgIGFsbG93ZWRfcGR1X3Nlc3Npb25fc3RhdHVzX3N0cnVjdCBhbGxvd2VkX3BkdV9zZXNzaW9uX3N0YXR1czsKKyAgICB2Z21tX21jZGRsbF9wZHVfc2Vzc2lvbl9zdGF0dXNfc3RydWN0IGFsbG93ZWRfcGR1X3Nlc3Npb25fc3RhdHVzXzE7CisgICAga2FsX3VpbnQ4IHZnbW1fbmFzbXNnX2NvbnRQOworICAgIGthbF91aW50MTYgbm9fdmdtbV9uYXNtc2dfY29udDsKKyAgICBrYWxfdWludDggdmdtbV9uYXNtc2dfY29udFtEX05PX1ZHTU1fTkFTTVNHX0NPTlRdOworfSB2Z21tX21jZGRsbF9zZXJ2aWNlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9zZXJ2aWNlX2FjY19zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2M7CisgICAga2FsX3VpbnQ4IHNlY19oZHJfdHlwZV9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9zZWNfaGRyX3R5cGVfZW51bSBzZWNfaGRyX3R5cGU7CisgICAgbWNkZGxsX3ZnbW1fbXNnX3R5cGVfZW51bSBtc2dfdHlwZTsKKyAgICBrYWxfdWludDggcGR1X3Nlc3Npb25fc3RhdHVzUDsKKyAgICBrYWxfdWludDggbm9fcGR1X3Nlc3Npb25fc3RhdHVzOworICAgIHZnbW1fbWNkZGxsX3BkdV9zZXNzaW9uX3N0YXR1c19zdHJ1Y3QgcGR1X3Nlc3Npb25fc3RhdHVzOworICAgIGthbF91aW50OCBwZHVfc2Vzc2lvbl9yZWFjdF9yZXN1bHRQOworICAgIHZnbW1fbWNkZGxsX3BkdV9zZXNzaW9uX3JlYWN0X3Jlc3VsdF9zdHJ1Y3QgcGR1X3Nlc3Npb25fcmVhY3RfcmVzdWx0OworICAgIGthbF91aW50OCBwZHVfc2Vzc2lvbl9yZWFjdF9lcnJvclA7CisgICAga2FsX3VpbnQxNiBub19wZHVfc2Vzc2lvbl9yZWFjdF9lcnJvcjsKKyAgICBrYWxfdWludDggcGR1X3Nlc3Npb25fcmVhY3RfZXJyb3JbRF9OT19QRFVfU0VTU0lPTl9SRUFDVF9FUlJPUl07CisgICAga2FsX3VpbnQ4IGVhcF9tc2dQOworICAgIGthbF91aW50MTYgbm9fZWFwX21zZzsKKyAgICBrYWxfdWludDggZWFwX21zZ1tEX05PX0VBUF9NU0ddOworfSB2Z21tX21jZGRsbF9zZXJ2aWNlX2FjY19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9zdGF0dXNfc3RydWN0Cit7CisgICAgbWNkZGxsX0VQRF92YWx1ZV9lbnVtIGV4dF9wcm90b19kaXNjOworICAgIGthbF91aW50OCBzZWNfaGRyX3R5cGVfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1fc2VjX2hkcl90eXBlX2VudW0gc2VjX2hkcl90eXBlOworICAgIG1jZGRsbF92Z21tX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAgbWNkZGxsX3ZnbW1fY2F1c2VfZW51bSB2Z21tX2NhdXNlOworfSB2Z21tX21jZGRsbF9zdGF0dXNfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfcmVnX3Jlal9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2M7CisgICAga2FsX3VpbnQ4IHNlY19oZHJfdHlwZV9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9zZWNfaGRyX3R5cGVfZW51bSBzZWNfaGRyX3R5cGU7CisgICAgbWNkZGxsX3ZnbW1fbXNnX3R5cGVfZW51bSBtc2dfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV9jYXVzZV9lbnVtIHZnbW1fY2F1c2U7CisgICAga2FsX3VpbnQ4IHQzMzQ2X3ZhbFA7CisgICAgdGltZXJfMl9zdHJ1Y3QgdDMzNDZfdmFsOworICAgIGthbF91aW50OCB0MzUwMl92YWxQOworICAgIHRpbWVyXzJfc3RydWN0IHQzNTAyX3ZhbDsKKyAgICBrYWxfdWludDggZWFwX21zZ1A7CisgICAga2FsX3VpbnQxNiBub19lYXBfbXNnOworICAgIGthbF91aW50OCBlYXBfbXNnW0RfTk9fRUFQX01TR107Cit9IHZnbW1fbWNkZGxsX3JlZ19yZWpfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfdWxfbmFzX3RyYW5zcG9ydAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzYzsKKyAgICBrYWxfdWludDggc2VjX2hkcl90eXBlX3NwYXJlOworICAgIG1jZGRsbF92Z21tX3NlY19oZHJfdHlwZV9lbnVtIHNlY19oZHJfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIGthbF91aW50OCBzcGFyZV9oYWxmX29jdGV0OworICAgIC8vdmdtbV9wYXlsb2FkX2NvbnRfdHlwZV9zdHJ1Y3QgcGF5bG9hZF9jb250X3R5cGU7CisgICAgbWNkZGxsX3ZnbW1fcGF5bG9hZF9jb250X3R5cGVfdmFsX2VudW0gcGF5bG9hZF9jb250X3R5cGU7CisgICAga2FsX3VpbnQxNiBub19wYXlsb2FkX2NvbnRhaW5lcjsKKyAgICBrYWxfdWludDggcGF5bG9hZF9jb250YWluZXJbRF9OT19QQVlMT0FEX0NPTlRdOworICAgIGthbF91aW50OCBwZHVfc2Vzc2lvbl9pZFA7CisgICAgbWNkZGxsX1BEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlX2VudW0gcGR1X3Nlc3Npb25faWQ7CisgICAga2FsX3VpbnQ4IG9sZF9wZHVfc2Vzc2lvbl9pZFA7CisgICAgbWNkZGxsX1BEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlX2VudW0gb2xkX3BkdV9zZXNzaW9uX2lkOworICAgIGthbF91aW50OCByZXFfdHlwZVA7CisgICAgcmVxX3R5cGVfc3RydWN0IHJlcV90eXBlOworICAgIG1jZGRsbF92Z21tX3JlcV90eXBlX2VudW0gcmVxX3R5cGVfdmFsOworICAgIGthbF91aW50OCBzX25zc2FpUDsKKyAgICBrYWxfdWludDggbm9fc19uc3NhaTsKKyAgICBrYWxfdWludDggc19uc3NhaVtEX05PX1NfTlNTQUldOworICAgIGthbF91aW50OCBkbm5QOworICAgIGthbF91aW50OCBub19kbm47CisgICAga2FsX3VpbnQ4IGRubltEX05PX0ROTl07CisgICAga2FsX3VpbnQ4IGFkZF9pbmZvUDsKKyAgICBrYWxfdWludDggbm9fYWRkX2luZm87CisgICAga2FsX3VpbnQ4IGFkZF9pbmZvW0RfTk9fQUREX0lORk9dOworfSB2Z21tX21jZGRsbF91bF9uYXNfdHJhbnNwb3J0OworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfZGxfbmFzX3RyYW5zcG9ydAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzYzsKKyAgICBrYWxfdWludDggc2VjX2hkcl90eXBlX3NwYXJlOworICAgIG1jZGRsbF92Z21tX3NlY19oZHJfdHlwZV9lbnVtIHNlY19oZHJfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIGthbF91aW50OCBzcGFyZV9oYWxmX29jdGV0OworICAgIC8vdmdtbV9wYXlsb2FkX2NvbnRfdHlwZV9zdHJ1Y3QgcGF5bG9hZF9jb250X3R5cGU7CisgICAgbWNkZGxsX3ZnbW1fcGF5bG9hZF9jb250X3R5cGVfdmFsX2VudW0gcGF5bG9hZF9jb250X3R5cGU7CisgICAga2FsX3VpbnQxNiBub19wYXlsb2FkX2NvbnRhaW5lcjsKKyAgICBrYWxfdWludDggcGF5bG9hZF9jb250YWluZXJbRF9OT19QQVlMT0FEX0NPTlRdOworICAgIGthbF91aW50OCBwZHVfc2Vzc2lvbl9pZFA7CisgICAgbWNkZGxsX1BEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlX2VudW0gcGR1X3Nlc3Npb25faWQ7CisgICAga2FsX3VpbnQ4IGFkZF9pbmZvUDsKKyAgICBrYWxfdWludDggbm9fYWRkX2luZm87CisgICAga2FsX3VpbnQ4IGFkZF9pbmZvW0RfTk9fQUREX0lORk9dOworICAgIGthbF91aW50OCB2Z21tX2NhdXNlUDsKKyAgICBtY2RkbGxfdmdtbV9jYXVzZV9lbnVtIHZnbW1fY2F1c2U7CisgICAga2FsX3VpbnQ4IGJhY2tfb2ZmX3RpbWVyX3ZhbFA7CisgICAgbWNkZGxsX3RpbWVyXzNfc3RydWN0IGJhY2tfb2ZmX3RpbWVyX3ZhbDsKK30gdmdtbV9tY2RkbGxfZGxfbmFzX3RyYW5zcG9ydDsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX3NlcnZpY2VfcmVqX3N0cnVjdAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzYzsKKyAgICBrYWxfdWludDggc2VjX2hkcl90eXBlX3NwYXJlOworICAgIG1jZGRsbF92Z21tX3NlY19oZHJfdHlwZV9lbnVtIHNlY19oZHJfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIG1jZGRsbF92Z21tX2NhdXNlX2VudW0gdmdtbV9jYXVzZTsKKyAgICBrYWxfdWludDggcGR1X3Nlc3Npb25fc3RhdHVzUDsKKyAgICBrYWxfdWludDggbm9fcGR1X3Nlc3Npb25fc3RhdHVzOworICAgIHZnbW1fbWNkZGxsX3BkdV9zZXNzaW9uX3N0YXR1c19zdHJ1Y3QgcGR1X3Nlc3Npb25fc3RhdHVzOworICAgIGthbF91aW50OCB0MzM0Nl92YWxQOworICAgIHRpbWVyXzJfc3RydWN0IHQzMzQ2X3ZhbDsKKyAgICBrYWxfdWludDggZWFwX21zZ1A7CisgICAga2FsX3VpbnQxNiBub19lYXBfbXNnOworICAgIGthbF91aW50OCBlYXBfbXNnW0RfTk9fRUFQX01TR107Cit9IHZnbW1fbWNkZGxsX3NlcnZpY2VfcmVqX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfY29uZmlnX3VwZGF0ZV9jbWRfc3RydWN0Cit7CisgICAgbWNkZGxsX0VQRF92YWx1ZV9lbnVtIGV4dF9wcm90b19kaXNjOworICAgIGthbF91aW50OCBzZWNfaGRyX3R5cGVfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1fc2VjX2hkcl90eXBlX2VudW0gc2VjX2hkcl90eXBlOworICAgIG1jZGRsbF92Z21tX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAgLy9rYWxfdWludDggc3BhcmVfaGFsZl9vY3RldDsKKyAgICBrYWxfdWludDggY29uZmlnX3VwZGF0ZV9pbmRQOworICAgIC8vY29uZmlnX3VwZGF0ZV9pbmRfc3RydWN0IGNvbmZpZ191cGRhdGVfaW5kOworICAgIHZnbW1fbWNkZGxsX2NvbmZpZ191cGRhdGVfaW5kX3N0cnVjdCBjb25maWdfdXBkYXRlX2luZDsKKyAgICBrYWxfdWludDggdmdfZ3V0aVA7CisgICAgLy9rYWxfdWludDggbm9fdmdfZ3V0aTsKKyAgICAvL2thbF91aW50OCB2Z19ndXRpW0RfTk9fVkdfR1VUSV07CisgICAgdmdzX2d1dGlfc3RydWN0IHZnX2d1dGk7CisgICAgbWNkZGxsX3ZnbW1fdHlwZV9vZl9pZF9lbnVtIHZnX2d1dGlfdHlwZV9vZl9pZGVudGl0eTsKKyAgICBrYWxfdWludDggdGFpX2xpc3RQOworICAgIGthbF91aW50OCBub190YWlfbGlzdDsKKyAgICBrYWxfdWludDggdGFpX2xpc3RbRF9OT19UQUlfTElTVF07CisgICAga2FsX3VpbnQ4IGFsbG93ZWRfbnNzYWlQOworICAgIGthbF91aW50OCBub19hbGxvd2VkX25zc2FpOworICAgIGthbF91aW50OCBhbGxvd2VkX25zc2FpW0RfTk9fQUxMT1dFRF9OU1NBSV07CisgICAga2FsX3VpbnQ4IHNlcnZpY2VfYXJlYV9saXN0UDsKKyAgICBrYWxfdWludDggbm9fc2VydmljZV9hcmVhX2xpc3Q7CisgICAga2FsX3VpbnQ4IHNlcnZpY2VfYXJlYV9saXN0W0RfTk9fU0VSVklDRV9BUkVBX0xJU1RdOworICAgIGthbF91aW50OCBmdWxsX25hbWVfZm9yX253UDsKKyAgICBrYWxfdWludDggbm9fZnVsbF9uYW1lX2Zvcl9udzsKKyAgICBrYWxfdWludDggZnVsbF9uYW1lX2Zvcl9ud1tEX05PX0ZVTExfTkFNRV9GT1JfTlddOworICAgIG1jZGRsbF92Z21tX3NwYXJlX2JpdHNfaW5fbGFzdF9vY3RldF9lbnVtIGZ1bGxfbmFtZV9zcGFyZV9iaXQ7CisgICAgbWNkZGxsX3ZnbW1fYWRkX0NJX2VudW0gZnVsbF9uYW1lX2FkZF9DSTsKKyAgICBrYWxfdWludDggZnVsbF9uYW1lX2NvZGluZ19zY2hlbWU7CisgICAga2FsX3VpbnQ4IHNob3J0X25hbWVfZm9yX253UDsKKyAgICBrYWxfdWludDggbm9fc2hvcnRfbmFtZV9mb3Jfbnc7CisgICAga2FsX3VpbnQ4IHNob3J0X25hbWVfZm9yX253W0RfTk9fU0hPUlRfTkFNRV9GT1JfTlddOworICAgIG1jZGRsbF92Z21tX3NwYXJlX2JpdHNfaW5fbGFzdF9vY3RldF9lbnVtIHNob3J0X25hbWVfc3BhcmVfYml0OworICAgIG1jZGRsbF92Z21tX2FkZF9DSV9lbnVtIHNob3J0X25hbWVfYWRkX0NJOworICAgIGthbF91aW50OCBzaG9ydF9uYW1lX2NvZGluZ19zY2hlbWU7CisgICAga2FsX3VpbnQ4IGxvY2FsX3RpbWVfem9uZVA7CisgICAga2FsX3VpbnQ4IGxvY2FsX3RpbWVfem9uZTsKKyAgICBrYWxfdWludDggdW5pX3RpbWVfYW5kX2xvY2FsX3RpbWVfem9uZVA7CisgICAgbndfdGltZV96b25lX3RpbWVfc3RydWN0IHVuaV90aW1lX2FuZF9sb2NhbF90aW1lX3pvbmU7CisgICAga2FsX3VpbnQ4IG53X2RheWxpZ2h0X3NhdmluZ190aW1lUDsKKyAgICBrYWxfdWludDggbm9fbndfZGF5bGlnaHRfc2F2aW5nX3RpbWU7CisgICAgbWNkZGxsX3ZnbW1fZGF5bGlnaHRfc2F2aW5nX3RpbWVfZW51bSBud19kYXlsaWdodF9zYXZpbmdfdGltZVtEX05PX05XX0RBWUxJR0hUX1NBVklOR19USU1FXTsKKyAgICBrYWxfdWludDggbGFkbl9pbmZvUDsKKyAgICBrYWxfdWludDE2IG5vX2xhZG5faW5mbzsKKyAgICBrYWxfdWludDggbGFkbl9pbmZvW0RfTk9fTEFETl9JTkZPXTsKKyAgICBrYWxfdWludDggbWljb19pbmRQOworICAgIHZnbW1fbWNkZGxsX21pY29faW5kX3N0cnVjdCBtaWNvX2luZDsKKyAgICAvL05ldworICAgIGthbF91aW50OCBud19zbGljZV9pbmRQOworICAgIHZnbW1fbWNkZGxsX253X3NsaWNlX2luZF9zdHJ1Y3Qgbndfc2xpY2VfaW5kOworICAgIC8vRW5kIG9mIE5ldworICAgIGthbF91aW50OCBjb25maWd1cmVkX25zc2FpUDsKKyAgICBrYWxfdWludDggbm9fY29uZmlndXJlZF9uc3NhaTsKKyAgICBrYWxfdWludDggY29uZmlndXJlZF9uc3NhaVtEX05PX0NPTkZJR19OU1NBSV07CisgICAga2FsX3VpbnQ4IHJlamVjdGVkX25zc2FpUDsKKyAgICBrYWxfdWludDggbm9fcmVqZWN0ZWRfbnNzYWk7CisgICAga2FsX3VpbnQ4IHJlamVjdGVkX25zc2FpW0RfTk9fUkVKRUNURURfTlNTQUldOworICAgIGthbF91aW50OCBvcF9kZWZfYWNjZXNzX2NhdF9kZWZQOworICAgIGthbF91aW50MTYgbm9fb3BfZGVmX2FjY2Vzc19jYXRfZGVmOworICAgIGthbF91aW50OCBvcF9kZWZfYWNjZXNzX2NhdF9kZWZbRF9OT19PUF9ERUZfQUNDRVNTX0NBVF9ERUZdOworICAgIGthbF91aW50OCBzbXNfaW5kUDsKKyAgICB2Z21tX21jZGRsbF9zbXNfaW5kX3N0cnVjdCBzbXNfaW5kOworfSB2Z21tX21jZGRsbF9jb25maWdfdXBkYXRlX2NtZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9jb25maWdfdXBkYXRlX2NvbV9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2M7CisgICAga2FsX3VpbnQ4IHNlY19oZHJfdHlwZV9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9zZWNfaGRyX3R5cGVfZW51bSBzZWNfaGRyX3R5cGU7CisgICAgbWNkZGxsX3ZnbW1fbXNnX3R5cGVfZW51bSBtc2dfdHlwZTsKK30gdmdtbV9tY2RkbGxfY29uZmlnX3VwZGF0ZV9jb21fc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfaWRlbnRpdHlfcmVxX3N0cnVjdAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzYzsKKyAgICBrYWxfdWludDggc2VjX2hkcl90eXBlX3NwYXJlOworICAgIG1jZGRsbF92Z21tX3NlY19oZHJfdHlwZV9lbnVtIHNlY19oZHJfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIGthbF91aW50OCBzcGFyZV9oYWxmX29jdGV0OworICAgIC8vaWRlbnRpdHlfdHlwZV9zdHJ1Y3QgaWRlbnRpdHlfdHlwZTsKKyAgICB2Z21tX21jZGRsbF9pZGVudGl0eV90eXBlX3N0cnVjdCBpZGVudGl0eV90eXBlOworfSB2Z21tX21jZGRsbF9pZGVudGl0eV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfaWRlbnRpdHlfcnNwX3N0cnVjdAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzYzsKKyAgICBrYWxfdWludDggc2VjX2hkcl90eXBlX3NwYXJlOworICAgIG1jZGRsbF92Z21tX3NlY19oZHJfdHlwZV9lbnVtIHNlY19oZHJfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIG1jZGRsbF92Z21tX3R5cGVfb2ZfaWRfZW51bSB0eXBlX29mX2lkOworICAgIHZnbW1fbWNkZGxsX3Znc19tb2JpbGVfaWRfdW5pb24gdmdzX21vYmlsZV9pZDsKK30gdmdtbV9tY2RkbGxfaWRlbnRpdHlfcnNwX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX3NlY19tb2RlX2NtZF9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2M7CisgICAga2FsX3VpbnQ4IHNlY19oZHJfdHlwZV9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9zZWNfaGRyX3R5cGVfZW51bSBzZWNfaGRyX3R5cGU7CisgICAgbWNkZGxsX3ZnbW1fbXNnX3R5cGVfZW51bSBtc2dfdHlwZTsKKyAgICAvL3ZnbW1fbmFzX3NlY19hbGdfc3RydWN0IHNlbF9uYXNfc2VjX2FsZzsKKyAgICB2Z21tX21jZGRsbF9uYXNfc2VjX2FsZ19zdHJ1Y3Qgc2VsX25hc19zZWNfYWxnOworICAgIGthbF91aW50OCBzcGFyZV9oYWxmX29jdGV0OworICAgIHZnbW1fbWNkZGxsX25hc19rZXlfc2V0X2lkX3N0cnVjdCBuYXNfa2V5X3NldF9pZDsKKyAgICB2Z21tX21jZGRsbF91ZV9zZWNfY2FwX3N0cnVjdCByZXBsYXllZF91ZV9zZWNfY2FwOworICAgIGthbF91aW50OCBpbWVpc3ZfcmVxUDsKKyAgICB2Z21tX21jZGRsbF9pbWVpc3ZfcmVxX3N0cnVjdCBpbWVpc3ZfcmVxOworICAgIGthbF91aW50OCBzZWxfZXBzX25hc19zZWNfYWxnUDsKKyAgICB2Z21tX21jZGRsbF9lcHNfbmFzX3NlY19hbGdfc3RydWN0IHNlbF9lcHNfbmFzX3NlY19hbGc7CisgICAgLy9OZXcKKyAgICBrYWxfdWludDggYWRkaXRpb25hbF81Z19zZWNfaW5mb1A7CisgICAgdmdtbV9tY2RkbGxfYWRkaXRpb25hbF81Z19zZWNfaW5mb19zdHJ1Y3QgYWRkaXRpb25hbF81Z19zZWNfaW5mbzsKKyAgICAvL0VuZCBvZiBOZXcKKyAgICBrYWxfdWludDggZWFwX21zZ1A7CisgICAga2FsX3VpbnQxNiBub19lYXBfbXNnOworICAgIGthbF91aW50OCBlYXBfbXNnW0RfTk9fRUFQX01TR107CisgICAga2FsX3VpbnQ4IGFiYmFQOworICAgIGthbF91aW50OCBub19hYmJhOworICAgIGthbF91aW50OCBhYmJhW0RfTk9fQUJCQV07CisgICAga2FsX3VpbnQ4IHJlcGxheWVkX3MxX3VlX3NlY19jYXBQOworICAgIHZnbW1fbWNkZGxsX3MxX3VlX3NlY19jYXBfc3RydWN0IHJlcGxheWVkX3MxX3VlX3NlY19jYXA7Cit9IHZnbW1fbWNkZGxsX3NlY19tb2RlX2NtZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9zZWNfbW9kZV9jb21fc3RydWN0Cit7CisgICAgbWNkZGxsX0VQRF92YWx1ZV9lbnVtIGV4dF9wcm90b19kaXNjOworICAgIGthbF91aW50OCBzZWNfaGRyX3R5cGVfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1fc2VjX2hkcl90eXBlX2VudW0gc2VjX2hkcl90eXBlOworICAgIG1jZGRsbF92Z21tX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAga2FsX3VpbnQ4IHZnX2ltZWlzdlA7CisgICAgLy9rYWxfdWludDggbm9fdmdfaW1laXN2OworICAgIC8va2FsX3VpbnQ4IHZnX2ltZWlzdltEX05PX1ZHX0lNRUlTVl07CisgICAgdmdzX2ltZWlzdl9zdHJ1Y3QgdmdfaW1laXN2OworICAgIG1jZGRsbF92Z21tX3R5cGVfb2ZfaWRfZW51bSB0eXBlX29mX2lkOworICAgIGthbF91aW50OCB2Z21tX25hc21zZ19jb250UDsKKyAgICBrYWxfdWludDE2IG5vX3ZnbW1fbmFzbXNnX2NvbnQ7CisgICAga2FsX3VpbnQ4IHZnbW1fbmFzbXNnX2NvbnRbRF9OT19WR01NX05BU01TR19DT05UXTsKK30gdmdtbV9tY2RkbGxfc2VjX21vZGVfY29tX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX3NlY19tb2RlX3Jlal9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2M7CisgICAga2FsX3VpbnQ4IHNlY19oZHJfdHlwZV9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9zZWNfaGRyX3R5cGVfZW51bSBzZWNfaGRyX3R5cGU7CisgICAgbWNkZGxsX3ZnbW1fbXNnX3R5cGVfZW51bSBtc2dfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV9jYXVzZV9lbnVtIHZnbW1fY2F1c2U7Cit9IHZnbW1fbWNkZGxsX3NlY19tb2RlX3Jlal9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9ub3RpZl9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2M7CisgICAga2FsX3VpbnQ4IHNlY19oZHJfdHlwZV9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9zZWNfaGRyX3R5cGVfZW51bSBzZWNfaGRyX3R5cGU7CisgICAgbWNkZGxsX3ZnbW1fbXNnX3R5cGVfZW51bSBtc2dfdHlwZTsKKyAgICBrYWxfdWludDggc3BhcmVfaGFsZl9vY3RldDsKKyAgICB2Z21tX21jZGRsbF9hY2Nlc3NfdHlwZV9zdHJ1Y3QgYWNjZXNzX3R5cGU7Cit9IHZnbW1fbWNkZGxsX25vdGlmX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfbm90aWZfcnNwX3N0cnVjdAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzYzsKKyAgICBrYWxfdWludDggc2VjX2hkcl90eXBlX3NwYXJlOworICAgIG1jZGRsbF92Z21tX3NlY19oZHJfdHlwZV9lbnVtIHNlY19oZHJfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIGthbF91aW50OCBwZHVfc2Vzc2lvbl9zdGF0dXNQOworICAgIHZnbW1fbWNkZGxsX3BkdV9zZXNzaW9uX3N0YXR1c19zdHJ1Y3QgcGR1X3Nlc3Npb25fc3RhdHVzOworfSB2Z21tX21jZGRsbF9ub3RpZl9yc3Bfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfYXV0aF9mYWlsX3N0cnVjdAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzYzsKKyAgICBrYWxfdWludDggc2VjX2hkcl90eXBlX3NwYXJlOworICAgIG1jZGRsbF92Z21tX3NlY19oZHJfdHlwZV9lbnVtIHNlY19oZHJfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIG1jZGRsbF92Z21tX2NhdXNlX2VudW0gdmdtbV9jYXVzZTsKKyAgICBrYWxfdWludDggYXV0aF9mYWlsX3BhcmFQOworICAgIGthbF91aW50OCBub19hdXRoX2ZhaWxfcGFyYTsKKyAgICBrYWxfdWludDggYXV0aF9mYWlsX3BhcmFbRF9OT19BVVRPX0ZBSUxfUEFSQV07Cit9IHZnbW1fbWNkZGxsX2F1dGhfZmFpbF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF92Z21tX21jZGRsbF9hdXRoX3Jlal9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2M7CisgICAga2FsX3VpbnQ4IHNlY19oZHJfdHlwZV9zcGFyZTsKKyAgICBtY2RkbGxfdmdtbV9zZWNfaGRyX3R5cGVfZW51bSBzZWNfaGRyX3R5cGU7CisgICAgbWNkZGxsX3ZnbW1fbXNnX3R5cGVfZW51bSBtc2dfdHlwZTsKKyAgICBrYWxfdWludDggZWFwX21zZ1A7CisgICAga2FsX3VpbnQxNiBub19lYXBfbXNnOworICAgIGthbF91aW50OCBlYXBfbXNnW0RfTk9fRUFQX01TR107Cit9IHZnbW1fbWNkZGxsX2F1dGhfcmVqX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX2F1dGhfcmVxX3N0cnVjdAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzYzsKKyAgICBrYWxfdWludDggc2VjX2hkcl90eXBlX3NwYXJlOworICAgIG1jZGRsbF92Z21tX3NlY19oZHJfdHlwZV9lbnVtIHNlY19oZHJfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIGthbF91aW50OCBzcGFyZV9oYWxmX29jdGV0OworICAgIHZnbW1fbWNkZGxsX25hc19rZXlfc2V0X2lkX3N0cnVjdCBuZ2tzaTsKKyAgICBrYWxfdWludDggcmFuZFA7CisgICAga2FsX3VpbnQ4IHJhbmRbMTZdOworICAgIGthbF91aW50OCBhdXRuUDsKKyAgICBrYWxfdWludDggbm9fYXV0bjsKKyAgICBrYWxfdWludDggYXV0bltEX05PX0FVVE5dOworICAgIC8vTmV3CisgICAga2FsX3VpbnQ4IG5vX2FiYmE7CisgICAga2FsX3VpbnQ4IGFiYmFbRF9OT19BQkJBXTsKKyAgICAvL0VuZCBvZiBOZXcKKyAgICBrYWxfdWludDggZWFwX21zZ1A7CisgICAga2FsX3VpbnQxNiBub19lYXBfbXNnOworICAgIGthbF91aW50OCBlYXBfbXNnW0RfTk9fRUFQX01TR107Cit9IHZnbW1fbWNkZGxsX2F1dGhfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgX3ZnbW1fbWNkZGxsX2F1dGhfcmVzdWx0X3N0cnVjdAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzYzsKKyAgICBrYWxfdWludDggc2VjX2hkcl90eXBlX3NwYXJlOworICAgIG1jZGRsbF92Z21tX3NlY19oZHJfdHlwZV9lbnVtIHNlY19oZHJfdHlwZTsKKyAgICBtY2RkbGxfdmdtbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIGthbF91aW50OCBzcGFyZV9oYWxmX29jdGV0OworICAgIHZnbW1fbWNkZGxsX25hc19rZXlfc2V0X2lkX3N0cnVjdCBuZ2tzaTsKKyAgICAvL2thbF91aW50OCBlYXBfbXNnUDsKKyAgICBrYWxfdWludDE2IG5vX2VhcF9tc2c7CisgICAga2FsX3VpbnQ4IGVhcF9tc2dbRF9OT19FQVBfTVNHXTsKKyAgICBrYWxfdWludDggYWJiYVA7CisgICAga2FsX3VpbnQ4IG5vX2FiYmE7CisgICAga2FsX3VpbnQ4IGFiYmFbRF9OT19BQkJBXTsKK30gdmdtbV9tY2RkbGxfYXV0aF9yZXN1bHRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfdmdtbV9tY2RkbGxfYXV0aF9yc3Bfc3RydWN0Cit7CisgICAgbWNkZGxsX0VQRF92YWx1ZV9lbnVtIGV4dF9wcm90b19kaXNjOworICAgIGthbF91aW50OCBzZWNfaGRyX3R5cGVfc3BhcmU7CisgICAgbWNkZGxsX3ZnbW1fc2VjX2hkcl90eXBlX2VudW0gc2VjX2hkcl90eXBlOworICAgIG1jZGRsbF92Z21tX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAga2FsX3VpbnQ4IGF1dGhfcmVzX3BhcmFQOworICAgIGthbF91aW50OCBub19hdXRoX3Jlc19wYXJhOworICAgIGthbF91aW50OCBhdXRoX3Jlc19wYXJhW0RfTk9fQVVUSF9SRVNfUEFSQV07CisgICAga2FsX3VpbnQ4IGVhcF9tc2dQOworICAgIGthbF91aW50MTYgbm9fZWFwX21zZzsKKyAgICBrYWxfdWludDggZWFwX21zZ1tEX05PX0VBUF9NU0ddOworfSB2Z21tX21jZGRsbF9hdXRoX3JzcF9zdHJ1Y3Q7CisKKy8qKgorICogIm1zZ19wZWVyX3VucGFja192Z21tKCkiIHNob3VsZCBiZSBjYWxsZWQgZm9yIExURSBNQ0RETEwgdG8gZGVjb2RlIFZHTU0gYWlyIG1lc3NhZ2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgd2hldGhlciB0aGUgbWVzc2FnZSBpZCBpcyB2YWxpZCB0byBjYXJyeSBhaXIgbWVzc2FnZS4gQW5kIHVzZSAibXNnX3R5cGUiCisgKiBjYXJyaWVkIGluIHJhdyBkYXRhIHRvIGZpbmQgb3V0IHRoZSBjb3JyZXNwb25kaW5nIFNUUlVDVF9JRCBhbmQgY2FsbCBNQ0QgdG8gZGVjb2RlIG1lc3NhZ2UuCisgKgorICogQHNyYworICogICB0aGUgcmF3IGRhdGEgd2hpY2ggVkdNTSBNQ0RETEwgd2FudHMgdG8gZGVjb2RlCisgKgorICogQHNyY19zaXplCisgKiAgIHRoZSBsZW5ndGggb2YgdGhlIHJhdyBkYXRhCisgKgorICogQGRlc3Rfc3RydWN0X2lkCisgKiAgIHRoZSBzdHJ1Y3R1cmUgaWQgb2YgdGhlIGFpciBtZXNzYWdlCisgKgorICogQGRlc3QKKyAqICAgdGhlIGRlY29kZSByZXN1bHQgd2hpY2ggc2F2ZSBpbiB0aGlzIGFkZHJlc3MKKyAqCisgKiBAcmV0dXJuCisgKiAgIHRydWUgZm9yIHN1Y2Nlc3MgYW5kIGZhbHNlIGZvciBmYWlsdXJlCisgKgorICovCitrYWxfYm9vbCBtc2dfcGVlcl91bnBhY2tfdmdtbShjb25zdCBrYWxfdWludDggKiBzcmMsIGthbF91aW50MTYgc3JjX3NpemUsIGthbF91aW50MTYgKiBkZXN0X3N0cnVjdF9pZCwgdm9pZCAqKiBkZXN0KTsKKworI2VuZGlmIC8qIF9fRklWRUdfTkFTX18gKi8KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvNWcvdmdtbV9wdWJsaWNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvNWcvdmdtbV9wdWJsaWNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA0ZWI3MAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC81Zy92Z21tX3B1YmxpY19zdHJ1Y3QuaApAQCAtMCwwICsxLDEzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBWR01NX1BVQkxJQ19TVFJVQ1RfSAorI2RlZmluZSBWR01NX1BVQkxJQ19TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJwc19wdWJsaWNfc3RydWN0LmgiCisjaW5jbHVkZSAibWNkX3ZnbW1fZ2VuX3BlZXIuaCIKKyNpbmNsdWRlICJpcmF0X2NvbW1vbl9lbnVtcy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgTUFDUk9TICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICBUWVBFIERFRklOSVRJT05TICYgRU5VTVMgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgZW51bQoreworCUVQU0ZCX0lORF9OT05FLAorCUVQU0ZCX0lORF9NTywKKwlFUFNGQl9JTkRfTVQKK30gZXBzZmJfaW5kaWNhdG9yX2VudW07IC8qIHBhZ2luZyBmb3IgRU1DIEVQU0ZCICovCisKKyNkZWZpbmUgVkdNTV9TSU1fSURFTlRJVFlfTUFYX0xFTiAyNTYKKyNkZWZpbmUgTkFTX1NFQ1VSSVRZX1BBUkFNX0xFTiAoNikKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyoqIGtleSBzZXQgaWQgYW5kIHNlbGVjdGVkIHNlY3VyaXR5IGFsZ29yaXRobXMgKi8KKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgbmdrc2lfcHJlc2VudDsKKyAgICB2Z21tX25hc19rZXlfc2V0X2lkX3N0cnVjdCAgbmdrc2k7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkX2FsZzsKKworICAgIC8qIHNlbGVjdGVkIEVQUyBOQVMgc2VjdXJpdHkgYWxnb3JpdGhtcyBJRSAqLworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICBlcHNfc2VsZWN0ZWRfYWxnX3ByZXNlbnQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIGVwc19zZWxlY3RlZF9hbGc7CisKKyAgICAvKiogbWFrZSBtYXBwZWQgR1VUSSAqLworICAJa2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIHZnX2d1dGlfcHJlc2VudDsKKyAgICB2Z3NfZ3V0aV9zdHJ1Y3QgICAgICAgICAgICAgdmdfZ3V0aTsKKworICAgIC8qCisgICAgICogVFMgMzMuNTAxIEEuMTQuMSBJZGxlIG1vZGUgbW9iaWxpdHkKKyAgICAgKiBUaGlzIGlucHV0IHN0cmluZyBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgYSBuZWVkIHRvIGRlcml2ZSBLJ0FTTUUgZnJvbSBLQU1GIGR1cmluZyBtYXBwaW5nIG9mIHNlY3VyaXR5IGNvbnRleHRzIGZyb20gNUcKKyAgICAgKiB0byBFUFMgYXQgaWRsZSBtb2RlIG1vYmlsaXR5LiBUaGUgZm9sbG93aW5nIGlucHV0IHBhcmFtZXRlcnMgc2hhbGwgYmUgdXNlZC4KKyAgICAgKiAtIEZDID0gMHg3MworICAgICAqIC0gUDAgPSBOQVMgVXBsaW5rIENPVU5UIHZhbHVlCisgICAgICogLSBMMCA9IGxlbmd0aCBvZiBOQVMgVXBsaW5rIENPVU5UIHZhbHVlIChpLmUuIDB4MDAgMHgwNCkKKyAgICAgKiBUaGUgaW5wdXQga2V5IEtFWSBzaGFsbCBiZSBLQU1GLgorICAgICovCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIHVsX25hc19jb3VudF9wcmVzZW50OworICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICB1bF9uYXNfY291bnQ7CisKKworICAgIC8qCisgICAgICogVFMgMzMuNTAxIEEuMTQgS0FNRiB0byBLQVNNRScgZGVyaXZhdGlvbiBmb3IgaW50ZXJ3b3JraW5nCisgICAgICogQS4xNC4yIEhhbmRvdmVyCisgICAgICogVGhpcyBpbnB1dCBzdHJpbmcgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIGEgbmVlZCB0byBkZXJpdmUgSydBU01FIGZyb20gS0FNRiBkdXJpbmcgbWFwcGluZyBvZiBzZWN1cml0eSBjb250ZXh0cyBmcm9tIDVHCisgICAgICogdG8gRVBTIGF0IGhhbmRvdmVycy4gVGhlIGZvbGxvd2luZyBpbnB1dCBwYXJhbWV0ZXJzIHNoYWxsIGJlIHVzZWQuCisgICAgICogLSBGQyA9IDB4NzQKKyAgICAgKiAtIFAwID0gTkFTIERvd25saW5rIENPVU5UIHZhbHVlCisgICAgICogLSBMMCA9IGxlbmd0aCBvZiBOQVMgRG93bmxpbmsgQ09VTlQgdmFsdWUgKGkuZS4gMHgwMCAweDA0KQorICAgICAqIFRoZSBpbnB1dCBrZXkgS0VZIHNoYWxsIGJlIEtBTUYuCisgICAgICovCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIGRsX25hc19jb3VudF9wcmVzZW50OworICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICBkbF9uYXNfY291bnQ7CisKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAga2V5X2FtZlszMl07CisKKyAgICAvL0VQU0ZCCisgICAgLy9lcHNmYl9pbmRpY2F0b3JfZW51bSAgICAgICAgZXBzZmJfaW5kaWNhdG9yOworCisgICAgLy92Z19vcHRpb25fZW51bSAgICAgICAgICAgICAgdmdfb3B0aW9uX3NldHRpbmc7ICAgLy8gNUcgYXJjaGl0ZWN0dXJlIG9wdGlvbiwgcmVmZXIgdG8gMzguODAxCisgICAgLy91ZV91c2FnZV9zZXR0aW5nX2VudW0gICAgICAgdWVfdXNhZ2Vfc2V0dGluZzsgICAgLy8gdm9pY2Ugb3IgZGF0YSwgcmVmZXIgdG8gMjQuNTAxCisKKyAgICAvKgorICAgICAqIEZvciBkZXJpdmluZyB0aGUgc3RhdHVzIG9mIGhpZ2ggcHJpb3JpdHkgYWNjZXNzCisgICAgICogLSBFRiBVQUNfQUlDCisgICAgICogLSBFRl9BQ0MKKyAgICAgKiAtIE1QUyBpbmRpY2F0b3IgcmVjZWl2ZWQgZnJvbSB0aGUgbmV0d29yaworICAgICAqIC0gTUNTIGluZGljYXRvciByZWNlaXZlZCBmcm9tIHRoZSBuZXR3b3JrCisgICAgICovCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIGVmX3VhY19haWNbTEVOX09GX1VBQ19BSUNdOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBlZl9hY2NbMl07CisgICAgbXBzX2luZF9lbnVtICAgICAgICAgICAgICAgIG53X2ZlYXR1cmVfc3VwcG9ydF9pbmZvX21wc19pbmQ7CisgICAgbWNzX2luZF9lbnVtICAgICAgICAgICAgICAgIG53X2ZlYXR1cmVfc3VwcG9ydF9pbmZvX21jc19pbmQ7CisKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfcmVnZWQ7CisgICAgcmF0X2VudW0gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzX3JlZ2lzdGVyZWRfcmF0OworCit9IHZnbW1fcHVibGljX2NvbnRleHRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIFZBUklBQkxFUyAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBGVU5DVElPTiBERUNMQVJBVElPTlMgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZW5kaWYgLyogVkdNTV9QVUJMSUNfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC81Zy92Z21tX3B1YmxpY191dGlsaXR5LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvNWcvdmdtbV9wdWJsaWNfdXRpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzI5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvNWcvdmdtbV9wdWJsaWNfdXRpbGl0eS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgVkdNTV9QVUJMSUNfVVRJTElUWV9ICisjZGVmaW5lIFZHTU1fUFVCTElDX1VUSUxJVFlfSAorCisjaW5jbHVkZSAidmdtbV9wdWJsaWNfc3RydWN0LmgiCisjaW5jbHVkZSAic2ltX2V4cG9ydGVkX2VudW0uaCIKKyNpbmNsdWRlICJpcmF0X2NvbW1vbl9zdHJ1Y3QuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgTUFDUk9TICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICBUWVBFIERFRklOSVRJT05TICYgRU5VTVMgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICBWQVJJQUJMRVMgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRlVOQ1RJT04gREVDTEFSQVRJT05TICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBrYWxfYm9vbCB2Z21tX2dldF9wdWJsaWNfY29udGV4dF9hbmRfaGFuZGxlX3VsX2NvdW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Z21tX3B1YmxpY19jb250ZXh0X3N0cnVjdCAqY3R4dF9wLCBrYWxfYm9vbCBpc19pbmNyZW1lbnRfdWxfY291bnQpOworZXh0ZXJuIGthbF9ib29sIHZnbW1fZ2V0X3B1YmxpY19jb250ZXh0KHZnbW1fcHVibGljX2NvbnRleHRfc3RydWN0ICpjdHh0X3ApOworZXh0ZXJuIHZvaWQgdmdtbV9zZXRfcHVibGljX3NlY3VyaXR5X3BhcmFtKHByb3RvY29sX2lkX2VudW0gcHNfaWQsIGlyYXRfY29udGFpbmVyX25ycmNfdG9fdmdtbV9zdHJ1Y3QgKmlucHV0X3B0cik7CitleHRlcm4ga2FsX2Jvb2wgdmdtbV9nZXRfcHVibGljXzRnNV9ob19pbmZvKHByb3RvY29sX2lkX2VudW0gcHNfaWQsIGlyYXRfY29udGFpbmVyX3ZnbW1fdG9fbnJyY19zdHJ1Y3QgKm91dHB1dF9wdHIpOworCitleHRlcm4ga2FsX2Jvb2wgdmdtbV9nZXRfcHVibGljX2lzX3Byb3RvY29sX2Vycm9yX2V4aXN0ZWQocHJvdG9jb2xfaWRfZW51bSBwc19pZCk7CisKK2V4dGVybiBrYWxfdWludDE2IHZnbW1fZGVyaXZlX2FjY2Vzc19pZGVudGl0aWVzX2J5X3BsbW4oa2FsX3VpbnQ4IHByb3RvY29sX2lkLCBwbG1uX2lkX3N0cnVjdCogdGFyZ2V0X3BsbW4pOworCisjZW5kaWYgLyogVkdNTV9QVUJMSUNfVVRJTElUWV9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvNWcvdmduYXNfbXNnX3VucGFjay5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsLzVnL3ZnbmFzX21zZ191bnBhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWQyODEyCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsLzVnL3ZnbmFzX21zZ191bnBhY2suaApAQCAtMCwwICsxLDEyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEwCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRmlsZW5hbWU6CisqIC0tLS0tLS0tLQorKiAgdmduYXNfbXNnX3VucGFjay5oCisqCisqIERlc2NyaXB0aW9uOgorKiAtLS0tLS0tLS0tLS0KKyogVGhpcyBpcyB0aGUgQVBJIGZvciBMVEUgTUNERExMIHRvIGRlY29kZSB0aGUgYWlyIG1lc3NhZ2VzIHdoaWNoIGFyZSBkZWZpbmVkIGluIFRTIDI0LjUwMSAoTkFTKS4KKyoKKyoKKyogQXV0aG9yOgorKiAtLS0tLS0tCisgKiAtLS0tLS0tCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFZHTkFTX01TR19VTlBBQ0tfSAorI2RlZmluZSBWR05BU19NU0dfVU5QQUNLX0gKKyNpZiBkZWZpbmVkKF9fRklWRUdfTkFTX18pCisKKyNpbmNsdWRlICJtY2QuaCIKKworI2RlZmluZSBVTlBBQ0tfQlVGRkVSX1NJWkUgNjU1MzUKKwordHlwZWRlZiBlbnVtIF92Z25hc19zdHJ1Y3RfaWRfZW51bQoreworICAgIC8vIE1NIChNb2JpbGl0eSBNYW5hZ2VtZW50KQorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9NU0dfU1RBUlQgPSBWR05BU19TVFJVQ1RfU1RBUlQsCisgICAgU1RSVUNUX0lEX1ZHTU1fTUNERExMX1JFR19SRVFfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9SRUdfQUNDX1NUUlVDVCwKKyAgICBTVFJVQ1RfSURfVkdNTV9NQ0RETExfUkVHX0NPTV9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHTU1fTUNERExMX1JFR19SRUpfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9NT19ERVJFR19SRVFfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9NT19ERVJFR19BQ0NfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9NVF9ERVJFR19SRVFfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9NVF9ERVJFR19BQ0NfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9TRVJWSUNFX1JFUV9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHTU1fTUNERExMX1NFUlZJQ0VfQUNDX1NUUlVDVCwKKyAgICBTVFJVQ1RfSURfVkdNTV9NQ0RETExfU0VSVklDRV9SRUpfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9BVVRIX0ZBSUxfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9BVVRIX1JFSl9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHTU1fTUNERExMX0FVVEhfUkVRX1NUUlVDVCwKKyAgICBTVFJVQ1RfSURfVkdNTV9NQ0RETExfQVVUSF9SRVNVTFRfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9BVVRIX1JTUF9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHTU1fTUNERExMX0NPTkZJR19VUERBVEVfQ01EX1NUUlVDVCwKKyAgICBTVFJVQ1RfSURfVkdNTV9NQ0RETExfQ09ORklHX1VQREFURV9DT01fU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9VTF9OQVNfVFJBTlNQT1JULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9ETF9OQVNfVFJBTlNQT1JULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9JREVOVElUWV9SRVFfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9JREVOVElUWV9SU1BfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9OT1RJRl9SU1BfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9OT1RJRl9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHTU1fTUNERExMX1NFQ19NT0RFX0NNRF9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHTU1fTUNERExMX1NFQ19NT0RFX0NPTV9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHTU1fTUNERExMX1NFQ19NT0RFX1JFSl9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHTU1fTUNERExMX1NUQVRVU19TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHTU1fTUNERExMX1JFR19UWVBFX1NUUlVDVCwKKyAgICBTVFJVQ1RfSURfVkdNTV9NQ0RETExfQUREX0dVVElfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9SRUdfUkVTVUxUX1NUUlVDVCwKKyAgICBTVFJVQ1RfSURfVkdNTV9NQ0RETExfREVSRUdfVFlQRV9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHTU1fTUNERExMX1NFUlZJQ0VfVFlQRV9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHTU1fTUNERExMX1VFX1NFQ19DQVBfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR01NX01DRERMTF9NU0dfRU5ELAorCisgICAgLy8gU00gKFNlc3Npb24gTWFuYWdlbWVudCkKKyAgICBTVFJVQ1RfSURfVkdTTV9NQ0RETExfTVNHX1NUQVJUID0gU1RSVUNUX0lEX1ZHTU1fTUNERExMX01TR19FTkQsCisgICAgU1RSVUNUX0lEX1ZHU01fTUNERExMX1BEVV9TRVNTSU9OX0VTVEFCTElTSE1FTlRfUkVRVUVTVF9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHU01fTUNERExMX1BEVV9TRVNTSU9OX0VTVEFCTElTSE1FTlRfQUNDRVBUX1NUUlVDVCwKKyAgICBTVFJVQ1RfSURfVkdTTV9NQ0RETExfUERVX1NFU1NJT05fRVNUQUJMSVNITUVOVF9SRUpFQ1RfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR1NNX01DRERMTF9QRFVfU0VTU0lPTl9BVVRIRU5USUNBVElPTl9DT01NQU5EX1NUUlVDVCwKKyAgICBTVFJVQ1RfSURfVkdTTV9NQ0RETExfUERVX1NFU1NJT05fQVVUSEVOVElDQVRJT05fQ09NUExFVEVfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR1NNX01DRERMTF9QRFVfU0VTU0lPTl9BVVRIRU5USUNBVElPTl9SRVNVTFRfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR1NNX01DRERMTF9QRFVfU0VTU0lPTl9NT0RJRklDQVRJT05fUkVRVUVTVF9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHU01fTUNERExMX1BEVV9TRVNTSU9OX01PRElGSUNBVElPTl9SRUpFQ1RfU1RSVUNULAorICAgIFNUUlVDVF9JRF9WR1NNX01DRERMTF9QRFVfU0VTU0lPTl9NT0RJRklDQVRJT05fQ09NTUFORF9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHU01fTUNERExMX1BEVV9TRVNTSU9OX01PRElGSUNBVElPTl9DT01QTEVURV9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHU01fTUNERExMX1BEVV9TRVNTSU9OX01PRElGSUNBVElPTl9DT01NQU5EX1JFSkVDVF9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHU01fTUNERExMX1BEVV9TRVNTSU9OX1JFTEVBU0VfUkVRVUVTVF9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHU01fTUNERExMX1BEVV9TRVNTSU9OX1JFTEVBU0VfUkVKRUNUX1NUUlVDVCwKKyAgICBTVFJVQ1RfSURfVkdTTV9NQ0RETExfUERVX1NFU1NJT05fUkVMRUFTRV9DT01NQU5EX1NUUlVDVCwKKyAgICBTVFJVQ1RfSURfVkdTTV9NQ0RETExfUERVX1NFU1NJT05fUkVMRUFTRV9DT01QTEVURV9TVFJVQ1QsCisgICAgU1RSVUNUX0lEX1ZHU01fTUNERExMXzVHU01fU1RBVFVTX1NUUlVDVCwKKyAgICBTVFJVQ1RfSURfVkdTTV9NQ0RETExfTVNHX0VORCwKKworfSB2Z25hc19zdHJ1Y3RfaWRfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgTm9fUERVX3Nlc3Npb25faWRlbnRpdHlfYXNzaWduZWQgPSAwLAorICAgIFBEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlXzEgPSAxLAorICAgIFBEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlXzIgPSAyLAorICAgIFBEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlXzMgPSAzLAorICAgIFBEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlXzQgPSA0LAorICAgIFBEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlXzUgPSA1LAorICAgIFBEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlXzYgPSA2LAorICAgIFBEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlXzcgPSA3LAorICAgIFBEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlXzggPSA4LAorICAgIFBEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlXzkgPSA5LAorICAgIFBEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlXzEwID0gMTAsCisgICAgUERVX3Nlc3Npb25faWRlbnRpdHlfdmFsdWVfMTEgPSAxMSwKKyAgICBQRFVfc2Vzc2lvbl9pZGVudGl0eV92YWx1ZV8xMiA9IDEyLAorICAgIFBEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlXzEzID0gMTMsCisgICAgUERVX3Nlc3Npb25faWRlbnRpdHlfdmFsdWVfMTQgPSAxNCwKKyAgICBQRFVfc2Vzc2lvbl9pZGVudGl0eV92YWx1ZV8xNSA9IDE1Cit9IG1jZGRsbF9QRFVfc2Vzc2lvbl9pZGVudGl0eV92YWx1ZV9lbnVtOworCisKK3R5cGVkZWYgZW51bQoreworICAgIHZnc19zZXNzaW9uX21hbmFnZW1lbnRfbWVzc2FnZXMgPSA0NiwKKyAgICB2Z3NfbW9iaWxpdHlfbWFuYWdlbWVudF9tZXNzYWdlcyA9IDEyNgorfSBtY2RkbGxfRVBEX3ZhbHVlX2VudW07CisKKyNlbmRpZiAvKiBfX0ZJVkVHX05BU19fICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC81Zy92Z3NtX2NvbW1vbl9kZWZfcHVibGljLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvNWcvdmdzbV9jb21tb25fZGVmX3B1YmxpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NGVkN2EKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvNWcvdmdzbV9jb21tb25fZGVmX3B1YmxpYy5oCkBAIC0wLDAgKzEsMzgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFZHU01fQ09NTU9OX0RFRl9QVUJMSUNfSAorI2RlZmluZSBWR1NNX0NPTU1PTl9ERUZfUFVCTElDX0gKKworI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAicHNfcHVibGljX3N0cnVjdC5oIgorI2luY2x1ZGUgInRmdGxpYl9jb21tb25fZW51bS5oIgorI2luY2x1ZGUgInRmdGxpYl9jb21tb25fc3RydWN0LmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgIE1BQ1JPUyAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vI2RlZmluZSBWR1NNX01BWF9RRklfTlVNICAgICAgICA2NCAgLT4gbW92ZSB0byBwc19wdWJsaWNfZW51bS5oCisjZGVmaW5lIFZHU01fTUFYX05VTV9PRl9RRkkgVkdTTV9NQVhfUUZJX05VTQkvKiBTcGVjIGRlZmluZWQgbWF4aW11bSBudW0gb2YgUUZJID0gNjQqLyAKKworI2RlZmluZSBWR1NNX01JTl9TX05TU0FJX0xFTiAgICAzICAgICAgIC8vIDI0NTAxIDkuMTAuMy40NworI2RlZmluZSBWR1NNX01BWF9TX05TU0FJX0xFTiAgICAxMCAgICAgIC8vIDI0NTAxIDkuMTAuMy40NworI2RlZmluZSBWR1NNX01JTl9FQVBfTEVOICAgICAgICA3ICAgICAgIC8vIDI0NTAxIDkuMTAuMi4yCisjZGVmaW5lIFZHU01fTUFYX0VBUF9MRU4gICAgICAgIDE1MDMgICAgLy8gMjQ1MDEgOS4xMC4yLjIKKyNkZWZpbmUgVkdTTV9NSU5fRVBDT19MRU4gICAgICAgIDQgICAgICAvLyAyNDAwOCAxMC41LjYuM0EKKyNkZWZpbmUgVkdTTV9NQVhfRVBDT19MRU4gICAgICAgIDY1NTM4ICAvLyAyNDAwOCAxMC41LjYuM0EKKyNkZWZpbmUgVkdTTV9NSU5fUU9TX1JVTEVfTEVOIDcgICAgICAgICAvLzI0NTAxLjEyMSA5LjEwLjQuOQorI2RlZmluZSBWR1NNX01BWF9RT1NfUlVMRV9MRU4gNjU1MzggICAgIC8vMjQ1MDEuMTIxIDkuMTAuNC45CisjZGVmaW5lIFZHU01fTUlOX1FPU19GTE9XX0xFTiA2ICAgICAgICAgLy8yNDUwMQorI2RlZmluZSBWR1NNX01BWF9RT1NfUlVMRV9MRU4gNjU1MzggICAgIC8vMjQ1MDEKKyNkZWZpbmUgVkdTTV9NSU5fTUFQUEVEX0VQU0JfTEVOIDcgICAgICAgICAvLzI0NTAxIDkuMTAuNC41CisjZGVmaW5lIFZHU01fTUFYX01BUFBFRF9FUFNCX0xFTiA2NTUzOCAgICAgLy8yNDUwMSA5LjEwLjQuNQorI2RlZmluZSBWR1NNX01BWF9TRVNTSU9OX0FNQlJfTEVOIDggICAgIC8vMjQ1MDEgOS4xMC40LjEwCisjZGVmaW5lIFZHU01fUERVX0FERFJfTEVOX0lQVjQgNCAgICAgICAgLy8yNDUwMSA5LjEwLjQuNworI2RlZmluZSBWR1NNX1BEVV9BRERSX0xFTl9JUFY2IDggICAgICAgIC8vMjQ1MDEgOS4xMC40LjcKKyNkZWZpbmUgVkdTTV9QRFVfQUREUl9MRU5fSVBWNFY2IDEyICAgICAvLzI0NTAxIDkuMTAuNC43CisjZGVmaW5lIFZHU01fTUlOX1BEVV9BRERSRVNTX0lORk9fTEVOICAgIDcgICAgICAgLy8gMjQ1MDEgOS4xMC40LjcKKyNkZWZpbmUgVkdTTV9NQVhfUERVX0FERFJFU1NfSU5GT19MRU4gICAgMTUgICAgICAvLyAyNDUwMSA5LjEwLjQuNworI2RlZmluZSBWR1NNX1JRX1RJTUVSX0RFQUNUSVZBVEVEIDB4RkZGRgorI2RlZmluZSBWR1NNX01BWF9QRl9OVU1fUEVSX1BEVSAyNTYKKyNkZWZpbmUgVkdTTV9TUEVDX0FWR19XSU5ET1dfSU5fTUlMTElfU0VDIDIwMDAKKyNkZWZpbmUgVkdTTV9NSU5fUFNJIDEKKyNkZWZpbmUgVkdTTV9NQVhfUFNJIDE1CisjZGVmaW5lIFZHU01fVE9UQUxfUERVX1NFU1NJT04gKFZHU01fTUFYX1BTSS1WR1NNX01JTl9QU0krMSkKKyNkZWZpbmUgU19OU1NBSV9TRF9MRU4gMworI2RlZmluZSBWR1NNX0lOVEVHUklUWV9QUk9URUNUX01BWF9EQVRBX1JBVEVfRlVMTF9EQVRBX1JBVEUgMHhGRgorCisvKiBVRSBJbXBsZW1lbnRhaW9uICovCisjZGVmaW5lIFZHU01fTUFYX1VFX0lNUExFTUVOVF9FUENPX0xFTiAgIDUxMgorCisjZGVmaW5lIFZHU01fUkVNT1ZFX0hFQURFUl9MRU4oX2hlYWRlcl9sZW4pICgoX2hlYWRlcl9sZW4pLTIpCisjZGVmaW5lIFZHU01fUkVNT1ZFX0hFQURFUl9MRU5fRVhURU5ERUQoX2hlYWRlcl9sZW4pICgoX2hlYWRlcl9sZW4pLTMpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgIFRZUEUgREVGSU5JVElPTlMgJiBFTlVNUyAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBlbnVtIHsKKyAgICBWR1NNX1BEVV9TRVNTSU9OX1RZUEVfVU5ERUZJTkUgPSAwLAorICAgIFZHU01fUERVX1NFU1NJT05fVFlQRV9JUFY0ID0gMSwKKyAgICBWR1NNX1BEVV9TRVNTSU9OX1RZUEVfSVBWNiA9IDIsCisgICAgVkdTTV9QRFVfU0VTU0lPTl9UWVBFX0lQVjRWNiA9IDMsCisgICAgVkdTTV9QRFVfU0VTU0lPTl9UWVBFX1VOU1RSVUNUVVJFRCA9IDQsCisgICAgVkdTTV9QRFVfU0VTU0lPTl9UWVBFX0VUSEVSTkVUID0gNSwKKyAgICBWR1NNX01BWF9OVU1fT0ZfUERVX1NFU1NJT05fVFlQRSwKKyAgICBWR1NNX1BEVV9TRVNTSU9OX1RZUEVfUkVTRVJWRUQgPSA3LAorfSB2Z3NtX3BkdV9zZXNzaW9uX3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBWR1NNX1NTQ19NT0RFX1VOREVGSU5FID0gMCwKKyAgICBWR1NNX1NTQ19NT0RFXzEgPSAxLAorICAgIFZHU01fU1NDX01PREVfMiA9IDIsCisgICAgVkdTTV9TU0NfTU9ERV8zID0gMywKKyAgICBWR1NNX1NTQ19NT0RFXzRfQVNfU1NDXzEgPSA0LAorICAgIFZHU01fU1NDX01PREVfNV9BU19TU0NfMiA9IDUsCisgICAgVkdTTV9TU0NfTU9ERV82X0FTX1NTQ18zID0gNiwKKyAgICBWR1NNX01BWF9OVU1fT0ZfU1NDX01PREUKK30gdmdzbV9zc2NfbW9kZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBWR1NNX0RFQ09ERV9RT1NfUlVMRVNfUFJPQ0VEVVJFX0VTVEFCTElTSE1FTlQsCisgICAgVkdTTV9ERUNPREVfUU9TX1JVTEVTX1BST0NFRFVSRV9NT0RJRklDQVRJT04sCit9IHZnc21fZGVjb2RlX3Fvc19ydWxlc19wcm9jZWR1cmVfZW51bTsKKwordHlwZWRlZiBzdHJ1Y3QgX3Znc21fcW9zX3J1bGVzX3RmdF9ub2RleworICAgIGthbF91aW50OCBxZmk7CisgICAga2FsX3VpbnQ4IHFyaTsKKyAgICB0ZnRfcHJvY19kaXJfZW51bSBwcm9jZWR1cmVfZGlyZWN0aW9uOworICAgIHRmdF9iZWFyZXJfYWN0X2VudW0gYmVhcmVyX2FjdDsKKworICAgIHRmdF9pbmZvX3N0cnVjdCB0ZnQ7CisgICAgc3RydWN0IF92Z3NtX3Fvc19ydWxlc190ZnRfbm9kZSAqbmV4dDsKK30gdmdzbV9xb3NfcnVsZXNfdGZ0X25vZGU7CisKK3R5cGVkZWYgZW51bSB7CisgICAgVkdTTV9DT05URVhUX0RJUkVDVElPTl9NTywgLy8gcHRpICE9IDAKKyAgICBWR1NNX0NPTlRFWFRfRElSRUNUSU9OX01ULCAvLyBwdGkgPT0gMAorICAgIFZHU01fTUFYX05VTV9PRl9DT05URVhUX0RJUkVDVElPTl9FTlVNLAorfSB2Z3NtX2NvbnRleHRfZGlyZWN0aW9uX2VudW07CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHZnc21fY29udGV4dF9kaXJlY3Rpb25fZW51bSBjb250ZXh0X2RpcmVjdGlvbjsKKyAgICB2Z3NtX3Fvc19ydWxlc190ZnRfbm9kZSAqaGVhZDsKKyAgICB2Z3NtX3Fvc19ydWxlc190ZnRfbm9kZSAqdGFpbDsKK30gdmdzbV9xb3NfcnVsZXNfdGZ0X3F1ZXVlOworCit0eXBlZGVmIGVudW0gCit7CisgICAgVkdTTV9NU0dfQ0hFQ0tfUkVTVUxUX09LLAorICAgIFZHU01fTVNHX0NIRUNLX1JFU1VMVF9GQUlMLAorICAgIFZHU01fTVNHX0NIRUNLX1JFU1VMVF9ORUVEX1RPX1JFTEVBU0VfUERVUywKKyAgICBWR1NNX01TR19DSEVDS19SRVNVTFRfTUFYLAorfSB2Z3NtX21zZ19jaGVja19yZXN1bHRfZW51bTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBWR1NNX0ZMT1dfREVTQ1JJUFRJT05fT1BfQ09ERV9DUkVBVEUgPSAxLAorICAgIFZHU01fRkxPV19ERVNDUklQVElPTl9PUF9DT0RFX0RFTEVURSA9IDIsCisgICAgVkdTTV9GTE9XX0RFU0NSSVBUSU9OX09QX0NPREVfTU9ESUZZID0gMywKKyAgICBWR1NNX01BWF9OVU1fT0ZfVkdTTV9GTE9XX0RFU0NSSVBUSU9OX09QX0NPREUsCit9IHZnc21fZmxvd19kZXNjcmlwdGlvbl9vcF9jb2RlX2VudW07CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCBxZmk7CisgICAga2FsX2Jvb2wgZV9iaXQ7CisgICAgcW9zX3BhcmFtc19zdHJ1Y3QgcGFyYW1zOworICAgIHZnc21fZmxvd19kZXNjcmlwdGlvbl9vcF9jb2RlX2VudW0gb3BfY29kZTsKKyAgICAgICAgCit9IHZnc21fZmxvd19kZXNjcmlwdGlvbl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggbnVtX29mX2Zsb3dfZGVzY3JpcHRpb247CisgICAgdmdzbV9mbG93X2Rlc2NyaXB0aW9uX3N0cnVjdCBmbG93X2Rlc2NyaXB0aW9uW1ZHU01fTUFYX05VTV9PRl9RRkldOworICAgIAorfSB2Z3NtX2Zsb3dfZGVzY3JpcHRpb25fdGFibGVfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IHFmaTsKKyAgICBrYWxfYm9vbCBpc19jb250YWluX2RlZmF1bHRfcnVsZTsKKyAgICBxb3NfcGFyYW1zX3N0cnVjdCBwYXJhbXM7CisgICAgdmdzbV9mbG93X2FjdGlvbl9lbnVtIHFmaV9hY3Rpb247CisgICAgICAgIAorfSB2Z3NtX3FmaV9hY3Rpb25fc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IG51bV9vZl9mbG93X2FjdGlvbjsKKyAgICB2Z3NtX3FmaV9hY3Rpb25fc3RydWN0IGZsb3dfYWN0aW9uW1ZHU01fTUFYX05VTV9PRl9RRkldOworICAgIAorfSB2Z3NtX2Zsb3dfYWN0aW9uX3RhYmxlX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50NjQgYml0bWFwOworICAgIHBzX2NhdXNlX2VudW0gY2F1c2U7Cit9IHZnc21fdG9fZGVsZXRlX3FmaV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDE2ICBsZW5ndGg7CisgICAga2FsX3VpbnQ4KiAgZGF0YTsKK30gdmdzbV9lcGNvX3Jhd19zdHJ1Y3Q7CisKKyNpZiAwIC8vIC0+IG1vdmUgdG8gcHNfcHVibGljX2VudW0uaCAvIHBzX3B1YmxpY19zdHJ1Y3QuaAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDMyIHRtcDsgCisgICAgCit9IHBkdXNfbWFwcGVkX2Vwc2JfY29udGV4dF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDE2ICBsZW47CisgICAga2FsX3VpbnQ4ICAgbXNnW1ZHU01fTUFYX0VBUF9MRU5dOworfSBwZHVzX2VhcF9tZXNzYWdlX3N0cnVjdDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBWR1NNX1ZHTU1fQUNDRVNTX1RZUEVfM0dQUCwKKyAgICBWR1NNX1ZHTU1fQUNDRVNTX1RZUEVfTjNHUFAsCisgICAgVkdTTV9WR01NX01BWF9OVU1fT0ZfQUNDRVNTX1RZUEUsCit9IHZnc21fdmdtbV9hY2Nlc3NfdHlwZV9lbnVtOworCisvLyAzR1BQIFRTIDI0LjUwMSBUYWJsZSA5LjExLjQuMkEuMSwgQUJPOiBBbGwgUExNTnMgQmFjay1vZmYgdGltZXIKK3R5cGVkZWYgZW51bSB7CisgICAgVkdTTV9DT05HRVNUSU9OX0FCT19BUFBMSUVEX0lOX1JQTE1OLAorICAgIFZHU01fQ09OR0VTVElPTl9BQk9fQVBQTElFRF9JTl9BTExfUExNTiwKKyAgICBWR1NNX0NPTkdFU1RJT05fQUJPX01BWF9OVU0sCit9IHZnc21fY29uZ2VzdGlvbl9hYm9fZW51bTsgCisKKy8vIDNHUFAgVFMgMjQuNTAxIFRhYmxlIDkuMTEuNC4xNy4xLCBSQVRDOgordHlwZWRlZiBlbnVtIHsKKyAgICBWR1NNX1JFQVRURU1QVF9SQVRDX0FMTE9XRURfSU5fUzFfTU9ERSwKKyAgICBWR1NNX1JFQVRURU1QVF9SQVRDX05PVF9BTExPV0VEX0lOX1MxX01PREUsCisgICAgVkdTTV9SRUFUVEVNUFRfUkFUQ19NQVhfTlVNLAorfSB2Z3NtX3JlYXR0ZW1wdF9yYXRjX2VudW07IAorCisvLyAzR1BQIFRTIDI0LjUwMSBUYWJsZSA5LjExLjQuMTcuMSwgRVBMTU5DOgordHlwZWRlZiBlbnVtIHsKKyAgICBWR1NNX1JFQVRURU1QVF9FUExNTkNfQUxMT1dFRCwKKyAgICBWR1NNX1JFQVRURU1QVF9FUExNTkNfTk9UX0FMTE9XRUQsCisgICAgVkdTTV9SRUFUVEVNUFRfRVBMTU5DX01BWF9OVU0sCit9IHZnc21fcmVhdHRlbXB0X2VwbG1uY19lbnVtOyAKKworLypSZWY6IDNHUFAgVFMgMjQuNTAxIFRhYmxlIDkuNy4yICovCit0eXBlZGVmIGVudW0gCit7CisgICAgVkdTTV9NU0dfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAgMFgwMCwKKyAgICAgICAgCisgICAgVkdTTV9QRFVfU0VTU0lPTl9FU1RBQkxJU0hNRU5UX1JFUVVFU1QgICAgICAgICAgPSAgMFhDMSwKKyAgICBWR1NNX1BEVV9TRVNTSU9OX0VTVEFCTElTSE1FTlRfQUNDRVBUICAgICAgICAgICA9ICAwWEMyLAorICAgIFZHU01fUERVX1NFU1NJT05fRVNUQUJMSVNITUVOVF9SRUpFQ1QgICAgICAgICAgID0gIDBYQzMsCisgICAgCisgICAgVkdTTV9QRFVfU0VTU0lPTl9BVVRIRU5USUNBVElPTl9DT01NQU5EICAgICAgICAgPSAgMFhDNSwKKyAgICBWR1NNX1BEVV9TRVNTSU9OX0FVVEhFTlRJQ0FUSU9OX0NPTVBMRVRFICAgICAgICA9ICAwWEM2LAorICAgIFZHU01fUERVX1NFU1NJT05fQVVUSEVOVElDQVRJT05fUkVTVUxUICAgICAgICAJPSAgMFhDNywKKyAgICAKKyAgICBWR1NNX1BEVV9TRVNTSU9OX01PRElGSUNBVElPTl9SRVFVRVNUICAgICAgICAgICA9ICAwWEM5LAorICAgIFZHU01fUERVX1NFU1NJT05fTU9ESUZJQ0FUSU9OX1JFSkVDVCAgICAgICAgICAgID0gIDBYQ0EsCisgICAgVkdTTV9QRFVfU0VTU0lPTl9NT0RJRklDQVRJT05fQ09NTUFORCAgICAgICAgICAgPSAgMFhDQiwKKyAgICBWR1NNX1BEVV9TRVNTSU9OX01PRElGSUNBVElPTl9DT01QTEVURSAgICAgICAgICA9ICAwWENDLAorICAgIFZHU01fUERVX1NFU1NJT05fTU9ESUZJQ0FUSU9OX0NPTU1BTkRfUkVKRUNUICAgID0gIDBYQ0QsCisgICAgCisgICAgVkdTTV9QRFVfU0VTU0lPTl9SRUxFQVNFX1JFUVVFU1QgICAgICAgICAgICAgICAgPSAgMFhEMSwKKyAgICBWR1NNX1BEVV9TRVNTSU9OX1JFTEVBU0VfUkVKRUNUICAgICAgICAgICAgICAgICA9ICAwWEQyLAorICAgIFZHU01fUERVX1NFU1NJT05fUkVMRUFTRV9DT01NQU5EICAgICAgICAgICAgICAgID0gIDBYRDMsCisgICAgVkdTTV9QRFVfU0VTU0lPTl9SRUxFQVNFX0NPTVBMRVRFICAgICAgICAgICAgICAgPSAgMFhENCwKKyAgICAKKyAgICBWR1NNXzVHU01fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICAwWEQ2LAorCit9IHZnc21fbXNnX3R5cGVfZW51bTsKKworCit0eXBlZGVmIGVudW0geworICAgIFZHU01fQ0hFQ0tfSUZfQVBQUk9WRV9TRU5EX1BEVVNfRVNUQUJMSVNITUVOVCwKKyAgICBWR1NNX0NIRUNLX0lGX0FQUFJPVkVfU0VORF9QRFVTX01PRElGSUNBVElPTiwKKyAgICBWR1NNX0NIRUNLX0lGX0FQUFJPVkVfU0VORF9QRFVTX1JFTEVBU0UsCisgICAgVkdTTV9DSEVDS19JRl9BUFBST1ZFX01BWF9OVU0sCit9IHZnc21fY2hlY2tfaWZfYXBwcm92ZV9wcm9jZWR1cmVfZW51bTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBWR1NNX3hTTV9JTlRFUldPUktJTkdfTE9DQUxfUkVBTEVTRV9QRE5fVFlQRV80RzVfTk9ORSA9IDB4MDAsCisgICAgVkdTTV94U01fSU5URVJXT1JLSU5HX0xPQ0FMX1JFQUxFU0VfUEROX1RZUEVfNEc1X0lNUyA9IDB4MDEsCisgICAgVkdTTV94U01fSU5URVJXT1JLSU5HX0xPQ0FMX1JFQUxFU0VfUEROX1RZUEVfNEc1X0lOVEVSTkVUID0gMHgwMiwKKyAgICBWR1NNX3hTTV9JTlRFUldPUktJTkdfTE9DQUxfUkVBTEVTRV9QRE5fVFlQRV80RzVfSU1TX0FORF9JTlRFUk5FVCA9IDB4MDMsCisgICAgVkdTTV94U01fSU5URVJXT1JLSU5HX0xPQ0FMX1JFQUxFU0VfUEROX1RZUEVfNEc1X09USEVSUyA9IDB4MDQsCisKKyAgICAvLyBmb3Igd2l0aG91dCBuMjYgaXJhdCBwZW5kaW5nIHNjZW5hcmlvCisgICAgVkdTTV94U01fSU5URVJXT1JLSU5HX0xPQ0FMX1JFQUxFU0VfUEROX1RZUEVfNEc1X0FMTF9XSVRIT1VUX04yNl9IQU5ET1ZFUiA9IDB4MTAsICAvLyB3aXRob3V0IE4yNiA0RyBQRE4gd2lsbCBhbGwgcmVsIGFuZCBiZSByZS1lc3QgYnkgdXBwZXIgbGF5ZXIKKyAgICBWR1NNX3hTTV9JTlRFUldPUktJTkdfTE9DQUxfUkVBTEVTRV9QRE5fVFlQRV80RzVfSU5WQUxJRF9XSVRIT1VUX04yNiA9IDB4MTEsICAgICAgIC8vIHVuZXhwZWN0ZWQsIHdpdGhvdXQgTjI2IGluZm9ybWF0aW9uIG1pc21hdGNoIGZyb20gVkdNTQorfSB2Z3NtX3hzbV9pbnRlcndvcmtpbmdfbG9jYWxfcmVsZWFzZV9wZG5fdHlwZV9lbnVtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIHZnc21fY29uZ2VzdGlvbl9hYm9fZW51bSBhYm87Cit9IHZnc21fY29uZ2VzdGlvbl9yZWF0dGVtcHRfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB2Z3NtX3JlYXR0ZW1wdF9yYXRjX2VudW0gICAgcmF0YzsKKyAgICB2Z3NtX3JlYXR0ZW1wdF9lcGxtbmNfZW51bSAgZXBsbW5jOworfSB2Z3NtX3JlYXR0ZW1wdF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHBzaTsKKyAgICBwZHBfYWRkcl90eXBlX2VudW0gICAgICAgICAgICAgIHNlbGVjdGVkX3BkdV9zZXNzaW9uX3R5cGU7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZF9zc2NfbW9kZTsKKworICAgIHBkdXNfc2Vzc2lvbl9hbWJyX3N0cnVjdCAgICAgICAgc2Vzc2lvbl9hbWJyOworCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBpc19wZHVfYWRkcmVzc19wcmVzZW50OworICAgIGlwX2FkZHJfc3RydWN0ICAgICAgICAgICAgICAgICAgcGR1X2FkZHJlc3M7CisKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIHJxX3RpbWVyX3ZhbHVlX2luX3NlYzsgCisgICAgCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBpc19zX25zc2FpX3ByZXNlbnQ7CisgICAgcGR1c19zX25zc2FpX3N0cnVjdCAgICAgICAgICAgICBzX25zc2FpOworCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBpc19hbHdheXNfb25fcGR1X3Nlc3Npb25faW5kX3ByZXNlbnQ7CisgICAgYWx3YXlzX29uX3BkdV9zZXNzaW9uX2luZF9lbnVtICBhbHdheXNfb25fcGR1X3Nlc3Npb25faW5kOworCisgICAgcGt0X2ZpbHRlcnNfYWN0X2xpc3Rfbm9kZV9zdHJ1Y3QgKnBmX2FjdGlvbl9saXN0X25vZGU7CisKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHFmaV93aXRoX2RlZmF1bHRfcnVsZTsKKworICAgIHFvc19wYXJhbXNfc3RydWN0ICAgICAgICAgICAgICAgKnFvc19wcm9maWxlc1tWR1NNX01BWF9RRklfTlVNXTsgLyogYWxsIHFvcyBwcm9maWxlcyB1bmRlciBQRFUgc2Vzc2lvbiAqLworCisgICAgcGR1c19hY2Nlc3NfdHlwZV9lbnVtICAgICAgICAgICBhY2Nlc3NfdHlwZTsKK30gY29udGV4dF90cmFuc2Zlcl9wZHVzX2luZm9fc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IGZyb21fZWJpOworICAgIGthbF91aW50OCB0b19wc2k7CisgICAgcW9zX2Zsb3dfYWN0aW9uX3RhYmxlX3N0cnVjdCAgICBxZl9hY3Rpb25fdGFibGU7Cit9IGViaV9tYXBfdG9fcHNpX2luZm9fc3RydWN0OworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICBWQVJJQUJMRVMgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRlVOQ1RJT04gREVDTEFSQVRJT05TICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2VuZGlmIC8qIFZHU01fQ09NTU9OX0RFRl9QVUJMSUNfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsLzVnL3Znc21fbXNnX3VucGFjay5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsLzVnL3Znc21fbXNnX3VucGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNTZjZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvNWcvdmdzbV9tc2dfdW5wYWNrLmgKQEAgLTAsMCArMSw3NzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyAqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorICogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorICogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxMgorICoKKyAqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyAqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorICogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisgKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMKKyAqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorICogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyAqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyAqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorICogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworICogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworICogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyAqCisgKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorICogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorICogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisgKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworICogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorICoKKyAqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorICogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorICogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorICogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorICogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogTUNEX1ZHU01fR0VOX1BFRVJfSAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9NQ0RETExfVkdTTV9HRU5fUEVFUl9ICisjZGVmaW5lIF9NQ0RETExfVkdTTV9HRU5fUEVFUl9ICisKKyNpZiBkZWZpbmVkKF9fRklWRUdfTkFTX18pCisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorCisjaW5jbHVkZSAidmduYXNfbXNnX3VucGFjay5oIgorI2luY2x1ZGUgInZnbW1fbXNnX3VucGFjay5oIgorI2luY2x1ZGUgIm1jZF92Z3NtX2dlbl9wZWVyLmgiCisKKyNkZWZpbmUgRF9OT19FUENPIDY0CisjZGVmaW5lIERfTk9fQVVUSF9RT1NfUlVMRVMgNjQKKyNkZWZpbmUgRF9OT19FQVBfTUVTU0FHRSA2NAorI2RlZmluZSBEX05PX0JBQ0tfT0ZGX1RJTUVSX1ZBTCAxCisjZGVmaW5lIERfTk9fUkVRX1FPU19SVUxFUyA2NAorI2RlZmluZSBEX05PX1NFU1NJT05fQU1CUiAgNgorI2RlZmluZSBEX05PX1BEVV9BRERSIDE1CisjZGVmaW5lIERfTk9fUkVRX1FPU19GTE9XIDY0CisjZGVmaW5lIERfTk9fVkdTTV9DQVBBQklMSVRZIDE1CisjZGVmaW5lIERfTk9fTUFQUEVEX0VQU0JfQ09OVEVYVCA2NAorI2RlZmluZSBEX05PX0FVVEhfUU9TX0ZMT1cgNjQKKyNkZWZpbmUgRF9OT19TX05TU0FJIDgKKyNkZWZpbmUgRF9OT19ETk4gNjQKKwordHlwZWRlZiBlbnVtCit7CisgICAgUERVX3Nlc3Npb25fZXN0YWJsaXNobWVudF9yZXF1ZXN0PSAxOTMsCisgICAgUERVX3Nlc3Npb25fZXN0YWJsaXNobWVudF9hY2NlcHQ9IDE5NCwKKyAgICBQRFVfc2Vzc2lvbl9lc3RhYmxpc2htZW50X3JlamVjdD0gMTk1LAorICAgIFBEVV9zZXNzaW9uX2F1dGhlbnRpY2F0aW9uX2NvbW1hbmQ9IDE5NywKKyAgICBQRFVfc2Vzc2lvbl9hdXRoZW50aWNhdGlvbl9jb21wbGV0ZT0gMTk4LAorICAgIFBEVV9zZXNzaW9uX2F1dGhlbnRpY2F0aW9uX3Jlc3VsdD0gMTk5LAorICAgIC8vTmV3CisgICAgLy9QRFVfc2Vzc2lvbl9hdXRoZW50aWNhdGlvbl9yZXN1bHRfMj0gMjAxLAorICAgIFBEVV9zZXNzaW9uX21vZGlmaWNhdGlvbl9yZXF1ZXN0ID0gMjAxLAorICAgIC8vRW5kIG9mIG5ldworICAgIFBEVV9zZXNzaW9uX21vZGlmaWNhdGlvbl9yZWplY3Q9IDIwMiwKKyAgICBQRFVfc2Vzc2lvbl9tb2RpZmljYXRpb25fY29tbWFuZD0gMjAzLAorICAgIFBEVV9zZXNzaW9uX21vZGlmaWNhdGlvbl9jb21wbGV0ZT0gMjA0LAorICAgIFBEVV9zZXNzaW9uX21vZGlmaWNhdGlvbl9jb21tYW5kX3JlamVjdD0gMjA1LAorICAgIFBEVV9zZXNzaW9uX3JlbGVhc2VfcmVxdWVzdD0gMjA5LAorICAgIFBEVV9zZXNzaW9uX3JlbGVhc2VfcmVqZWN0PSAyMTAsCisgICAgUERVX3Nlc3Npb25fcmVsZWFzZV9jb21tYW5kPSAyMTEsCisgICAgUERVX3Nlc3Npb25fcmVsZWFzZV9jb21wbGV0ZT0gMjEyLAorICAgIFZHU01fc3RhdHVzPSAyMTQsCit9IG1jZGRsbF92Z3NtX21zZ190eXBlX2VudW07CisKKwordHlwZWRlZiBlbnVtCit7CisgICAgLy9OZXcKKyAgICBPdGhlcl92YWx1ZV8wX3Nob3VsZF9iZV9JUHY0djY9IDAsCisgICAgLy9FbmQgb2YgbmV3CisgICAgSVB2ND0gMSwKKyAgICBJUHY2PSAyLAorICAgIElQdjR2Nj0gMywKKyAgICBVbnN0cnVjdHVyZWQsCisgICAgRXRoZXJuZXQsCisgICAgLy9OZXcKKyAgICBPdGhlcl92YWx1ZV82X3Nob3VsZF9iZV9JUHY0djY9NiwKKyAgICAvL0VuZCBvZiBuZXcKKyAgICBwZHVfc2Vzc2lvbl90eXBlX3Jlc2VydmVkID03Cit9bWNkZGxsX3Znc21fcGR1X3Nlc3Npb25fdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTU0NfbW9kZV8xPSAxLAorICAgIFNTQ19tb2RlXzIsCisgICAgU1NDX21vZGVfMywKKyAgICB1bnVzZWRfaWZfcmVjZWl2ZWRfYnlfdGhlX253X3RoZW5fU1NDX21vZGVfMSwKKyAgICB1bnVzZWRfaWZfcmVjZWl2ZWRfYnlfdGhlX253X3RoZW5fU1NDX21vZGVfMiwKKyAgICB1bnVzZWRfaWZfcmVjZWl2ZWRfYnlfdGhlX253X3RoZW5fU1NDX21vZGVfMworfW1jZGRsbF92Z3NtX3NzY19tb2RlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFJlZmxlY3RpdmVfUW9TX25vdF9zdXBwb3J0ZWQsCisgICAgUmVmbGVjdGl2ZV9Rb1Nfc3VwcG9ydGVkCit9bWNkZGxsX3Znc21fUnFvU19lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBNdWx0aV9ob21lZF9JUHY2X1BEVV9zZXNzaW9uX25vdF9zdXBwb3J0ZWQsCisgICAgTXVsdGlfaG9tZWRfSVB2Nl9QRFVfc2Vzc2lvbl9zdXBwb3J0ZWQKK31tY2RkbGxfdmdzbV9NSDZfUERVX2VudW07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IHNwYXJlOworICAgIG1jZGRsbF92Z3NtX01INl9QRFVfZW51bSBtaDZfcGR1OworICAgIG1jZGRsbF92Z3NtX1Jxb1NfZW51bSBycW9zOworfXZnc21fbWNkZGxsX2NhcGFiaWxpdHlfc3RydWN0OworCit0eXBlZGVmIGVudW0KK3sKKyAgICB2YWx1ZV9pc19ub3RfdXNlZD0gMCwKKyAgICB2YWx1ZV9pc19pbmNyZW1lbnRlZF9pbl9tdWx0aXBsZXNfb2ZfMV9LYnBzLAorICAgIHZhbHVlX2lzX2luY3JlbWVudGVkX2luX211bHRpcGxlc19vZl80X0ticHMsCisgICAgdmFsdWVfaXNfaW5jcmVtZW50ZWRfaW5fbXVsdGlwbGVzX29mXzE2X0ticHMsCisgICAgdmFsdWVfaXNfaW5jcmVtZW50ZWRfaW5fbXVsdGlwbGVzX29mXzY0X0ticHMsCisgICAgdmFsdWVfaXNfaW5jcmVtZW50ZWRfaW5fbXVsdGlwbGVzX29mXzI1Nl9rYnBzLAorICAgIHZhbHVlX2lzX2luY3JlbWVudGVkX2luX211bHRpcGxlc19vZl8xX01icHMsCisgICAgdmFsdWVfaXNfaW5jcmVtZW50ZWRfaW5fbXVsdGlwbGVzX29mXzRfTWJwcywKKyAgICB2YWx1ZV9pc19pbmNyZW1lbnRlZF9pbl9tdWx0aXBsZXNfb2ZfMTZfTWJwcywKKyAgICB2YWx1ZV9pc19pbmNyZW1lbnRlZF9pbl9tdWx0aXBsZXNfb2ZfNjRfTWJwcywKKyAgICB2YWx1ZV9pc19pbmNyZW1lbnRlZF9pbl9tdWx0aXBsZXNfb2ZfMjU2X01icHMsCisgICAgdmFsdWVfaXNfaW5jcmVtZW50ZWRfaW5fbXVsdGlwbGVzX29mXzFfR2JwcywKKyAgICB2YWx1ZV9pc19pbmNyZW1lbnRlZF9pbl9tdWx0aXBsZXNfb2ZfNF9HYnBzLAorICAgIHZhbHVlX2lzX2luY3JlbWVudGVkX2luX211bHRpcGxlc19vZl8xNl9HYnBzLAorICAgIHZhbHVlX2lzX2luY3JlbWVudGVkX2luX211bHRpcGxlc19vZl82NF9HYnBzLAorICAgIHZhbHVlX2lzX2luY3JlbWVudGVkX2luX211bHRpcGxlc19vZl8yNTZfR2JwcywKKyAgICB2YWx1ZV9pc19pbmNyZW1lbnRlZF9pbl9tdWx0aXBsZXNfb2ZfMV9UYnBzLAorICAgIHZhbHVlX2lzX2luY3JlbWVudGVkX2luX211bHRpcGxlc19vZl80X1RicHMsCisgICAgdmFsdWVfaXNfaW5jcmVtZW50ZWRfaW5fbXVsdGlwbGVzX29mXzE2X1RicHMsCisgICAgdmFsdWVfaXNfaW5jcmVtZW50ZWRfaW5fbXVsdGlwbGVzX29mXzY0X1RicHMsCisgICAgdmFsdWVfaXNfaW5jcmVtZW50ZWRfaW5fbXVsdGlwbGVzX29mXzI1Nl9UYnBzLAorICAgIHZhbHVlX2lzX2luY3JlbWVudGVkX2luX211bHRpcGxlc19vZl8xX1BicHMsCisgICAgdmFsdWVfaXNfaW5jcmVtZW50ZWRfaW5fbXVsdGlwbGVzX29mXzRfUGJwcywKKyAgICB2YWx1ZV9pc19pbmNyZW1lbnRlZF9pbl9tdWx0aXBsZXNfb2ZfMTZfUGJwcywKKyAgICB2YWx1ZV9pc19pbmNyZW1lbnRlZF9pbl9tdWx0aXBsZXNfb2ZfNjRfUGJwcywKKyAgICB2YWx1ZV9pc19pbmNyZW1lbnRlZF9pbl9tdWx0aXBsZXNfb2ZfMjU2X1BicHMKK31tY2RkbGxfdmdzbV9Vbml0X2Zvcl9TZXNzaW9uX0FNQlJfZm9yX2Rvd25saW5rX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIEluc3VmZmljaWVudF9yZXNvdXJjZXMgPSAyNiwKKyAgICBNaXNzaW5nX29yX3Vua25vd25fRE5OID0gMjcsCisgICAgVW5rbm93bl9QRFVfc2Vzc2lvbl90eXBlID0gMjgsCisgICAgVXNlcl9hdXRoZW50aWNhdGlvbl9mYWlsZWQgPSAyOSwKKyAgICBSZXF1ZXN0X3JlamVjdGVkLF91bnNwZWNpZmllZCA9IDMxLAorICAgIFJlcXVlc3RlZF9zZXJ2aWNlX29wdGlvbl9ub3Rfc3Vic2NyaWJlZCA9IDMzLAorICAgIFNlcnZpY2Vfb3B0aW9uX3RlbXBvcmFyaWx5X291dF9vZl9vcmRlciA9IDM0LAorICAgIFBUSV9hbHJlYWR5X2luX3VzZSA9IDM1LAorICAgIFJlZ3VsYXJfZGVhY3RpdmF0aW9uID0gMzYsCisgICAgLy9OZXcKKyAgICBPdXRfb2ZfTEFETl9zZXJ2aWNlX2FyZWEgPSAzOCwKKyAgICAvL0VuZCBvZiBuZXcKKyAgICBSZWFjdGl2YXRpb25fcmVxdWVzdGVkID0gMzksCisgICAgLy9OZXcKKyAgICBJbnZhbGlkX1BEVV9zZXNzaW9uX2lkZW50aXR5ID0gNDMsCisgICAgU2VtYW50aWNfZXJyb3JzX2luX3BhY2tldF9maWx0ZXJzID0gNDQsCisgICAgU3ludGFjdGljYWxfZXJyb3JfaW5fcGFja2V0X2ZpbHRlcnMgPSA0NSwKKyAgICBQVElfbWlzbWF0Y2ggPSA0NywKKyAgICAvL0VuZCBvZiBuZXcKKyAgICBQRFVfc2Vzc2lvbl90eXBlX0lQdjRfb25seV9hbGxvd2VkID0gNTAsCisgICAgUERVX3Nlc3Npb25fdHlwZV9JUHY2X29ubHlfYWxsb3dlZCA9IDUxLAorICAgIC8vTmV3CisgICAgUERVX3Nlc3Npb25fZG9lc19ub3RfZXhpc3QgPSA1NCwKKyAgICAvL0VuZCBvZiBuZXcKKyAgICB2Z3NtX0luc3VmZmljaWVudF9yZXNvdXJjZXNfZm9yX3NwZWNpZmljX3NsaWNlX2FuZF9ETk4gPSA2NywKKyAgICBOb3Rfc3VwcG9ydGVkX1NTQ19tb2RlID0gNjgsCisgICAgdmdzbV9JbnN1ZmZpY2llbnRfcmVzb3VyY2VzX2Zvcl9zcGVjaWZpY19zbGljZSA9IDY5LAorICAgIE1pc3Npbmdfb3JfdW5rbm93bl9ETk5faW5fYV9zbGljZSA9IDcwLAorICAgIEludmFsaWRfUFRJX3ZhbHVlID0gODEsCisgICAgLy9OZXcKKyAgICBNYXhpbXVtX2RhdGFfcmF0ZV9wZXJfVUVfZm9yX3VzZXJfcGxhbmVfaW50ZWdyaXR5X3Byb3RlY3Rpb25faXNfdG9vX2xvdyA9IDgyLAorICAgIFNlbWFudGljX2Vycm9yX2luX3RoZV9Rb1Nfb3BlcmF0aW9uID0gODMsCisgICAgU3ludGFjdGljYWxfZXJyb3JfaW5fdGhlX1FvU19vcGVyYXRpb24gPSA4NCwKKyAgICAvL0VuZCBvZiBuZXcKKyAgICB2Z3NtX1NlbWFudGljYWxseV9pbmNvcnJlY3RfbWVzc2FnZSA9IDk1LAorICAgIHZnc21fSW52YWxpZF9tYW5kYXRvcnlfaW5mb3JtYXRpb24gPSA5NiwKKyAgICB2Z3NtX01lc3NhZ2VfdHlwZV9ub25fZXhpc3RlbnRfb3Jfbm90X2ltcGxlbWVudGVkID0gOTcsCisgICAgdmdzbV9NZXNzYWdlX3R5cGVfbm90X2NvbXBhdGlibGVfd2l0aF90aGVfcHJvdG9jb2xfc3RhdGUgPSA5OCwKKyAgICB2Z3NtX0luZm9ybWF0aW9uX2VsZW1lbnRfbm9uX2V4aXN0ZW50X29yX25vdF9pbXBsZW1lbnRlZCA9IDk5LAorICAgIHZnc21fQ29uZGl0aW9uYWxfSUVfZXJyb3IgPSAxMDAsCisgICAgdmdzbV9NZXNzYWdlX25vdF9jb21wYXRpYmxlX3dpdGhfdGhlX3Byb3RvY29sX3N0YXRlID0gMTAxLAorICAgIHZnc21fUHJvdG9jb2xfZXJyb3JfdW5zcGVjaWZpZWQgPSAxMTEKK31tY2RkbGxfdmdzbV9jYXVzZV92YWx1ZV9lbnVtOworCit0eXBlZGVmIHN0cnVjdCBfdmdzbV9tY2RkbGxfcGR1X2FkZHJlc3Nfc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IGxlbmd0aDsKKyAgICBrYWxfdWludDggc3BhcmU7CisgICAgbWNkZGxsX3Znc21fcGR1X3Nlc3Npb25fdHlwZV9lbnVtIHBkdV90eXBlX3ZhbDsKKyAgICBrYWxfdWludDggbm9fcGR1X2FkZHI7CisgICAga2FsX3VpbnQ4IHBkdV9hZGRyW0RfTk9fUERVX0FERFJdOworfSB2Z3NtX21jZGRsbF9wZHVfYWRkcmVzc19zdHJ1Y3Q7CisKK3R5cGVkZWYgZW51bQoreworICAgIE5vX3Byb2NlZHVyZV90cmFuc2FjdGlvbl9pZGVudGl0eV9hc3NpZ25lZCA9IDAsCisgICAgUmVzZXJ2ZWQgPSAyNTUKK30gbWNkZGxsX3Byb2NlZHVyZV90cmFuc2FjdGlvbl9pZGVudGl0eV9lbnVtOworCisvL05ldworCit0eXBlZGVmIGVudW0KK3sKKyAgICBkYXRhX3JhdGVfNjRrYnBzID0gMCwKKyAgICBGdWxsX2RhdGFfcmF0ZSA9IDI1NQorfW1jZGRsbF92Z3NtX21heF9kYXRhX3JhdGVfcGVyX1VFX2Zvcl91c2VyX3BsYW5lX2ludGVncml0eV9wcm90ZWN0aW9uX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIEFsd2F5c19vbl9QRFVfc2Vzc2lvbl9ub3RfcmVxdWVzdGVkID0gMCwKKyAgICBBbHdheXNfb25fUERVX3Nlc3Npb25fcmVxdWVzdGVkID0gMQorfW1jZGRsbF92Z3NtX2Fsd2F5c19vbl9wZHVfc2Vzc2lvbl9yZXF1ZXN0ZWRfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQWx3YXlzX29uX1BEVV9zZXNzaW9uX25vdF9hbGxvd2VkID0gMCwKKyAgICBBbHdheXNfb25fUERVX3Nlc3Npb25fcmVxdWlyZWQgPSAxCit9bWNkZGxsX3Znc21fYWx3YXlzX29uX3BkdV9zZXNzaW9uX2luZF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTU0NfbW9kZV8xX25vdF9hbGxvd2VkID0gMCwKKyAgICBTU0NfbW9kZV8xX2FsbG93ZWQgPSAxCit9bWNkZGxsX3Znc21fc3NjMV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTU0NfbW9kZV8yX25vdF9hbGxvd2VkID0gMCwKKyAgICBTU0NfbW9kZV8yX2FsbG93ZWQgPSAxCit9bWNkZGxsX3Znc21fc3NjMl9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTU0NfbW9kZV8zX25vdF9hbGxvd2VkID0gMCwKKyAgICBTU0NfbW9kZV8zX2FsbG93ZWQgPSAxCit9bWNkZGxsX3Znc21fc3NjM19lbnVtOworCit0eXBlZGVmIGVudW17CisgICAgZU1CQiA9IDEsCisgICAgVVJMTEMgPSAyLAorICAgIE1Jb1QgPSAzCit9bWNkZGxsX3Znc21fc3N0X3ZhbHVlX2VudW07CisKK3R5cGVkZWYgc3RydWN0IF92Z3NtX21jZGRsbF9hbGxvd2VkX3NzY19tb2RlX3N0cnVjdAoreworICAgIGthbF91aW50OCBzcGFyZTsKKyAgICBtY2RkbGxfdmdzbV9zc2MxX2VudW0gc3NjMTsKKyAgICBtY2RkbGxfdmdzbV9zc2MyX2VudW0gc3NjMjsKKyAgICBtY2RkbGxfdmdzbV9zc2MzX2VudW0gc3NjMzsKK312Z3NtX21jZGRsbF9hbGxvd2VkX3NzY19tb2RlX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCBfdmdzbV9tY2RkbGxfYWx3YXlzX29uX3BkdV9zZXNzaW9uX3JlcXVlc3RlZF9zdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggX3NwYXJlOworICAgIG1jZGRsbF92Z3NtX2Fsd2F5c19vbl9wZHVfc2Vzc2lvbl9yZXF1ZXN0ZWRfZW51bSBhcHNyOworfXZnc21fbWNkZGxsX2Fsd2F5c19vbl9wZHVfc2Vzc2lvbl9yZXF1ZXN0ZWRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBfdmdzbV9tY2RkbGxfYWx3YXlzX29uX3BkdV9zZXNzaW9uX2luZF9zdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggX3NwYXJlOworICAgIG1jZGRsbF92Z3NtX2Fsd2F5c19vbl9wZHVfc2Vzc2lvbl9pbmRfZW51bSBhcHNpOworfXZnc21fbWNkZGxsX2Fsd2F5c19vbl9wZHVfc2Vzc2lvbl9pbmRfc3RydWN0OworCisjaWZuZGVmIF9fTUNEX1ZHTkFTXzI0NTAxX1NQRUNfMjAxOFNFUF9fCit0eXBlZGVmIHN0cnVjdCBfdmdzbV9tY2RkbGxfaW50ZWdyaXR5X3Byb3RlY3Rpb25fbWF4X2RhdGFfcmF0ZV9zdHJ1Y3R7CisgICAgbWNkZGxsX3Znc21fbWF4X2RhdGFfcmF0ZV9wZXJfVUVfZm9yX3VzZXJfcGxhbmVfaW50ZWdyaXR5X3Byb3RlY3Rpb25fZW51bSB1bDsKKyAgICBtY2RkbGxfdmdzbV9tYXhfZGF0YV9yYXRlX3Blcl9VRV9mb3JfdXNlcl9wbGFuZV9pbnRlZ3JpdHlfcHJvdGVjdGlvbl9lbnVtIGRsOworfXZnc21fbWNkZGxsX2ludGVncml0eV9wcm90ZWN0aW9uX21heF9kYXRhX3JhdGVfc3RydWN0OworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IF92Z3NtX21jZGRsbF9pbnRlZ3JpdHlfcHJvdGVjdGlvbl9tYXhfZGF0YV9yYXRlX3N0cnVjdHsKKyAgICBtY2RkbGxfdmdzbV9tYXhfZGF0YV9yYXRlX3Blcl9VRV9mb3JfdXNlcl9wbGFuZV9pbnRlZ3JpdHlfcHJvdGVjdGlvbl9lbnVtIHVsOworICAgIC8vbWNkZGxsX3Znc21fbWF4X2RhdGFfcmF0ZV9wZXJfVUVfZm9yX3VzZXJfcGxhbmVfaW50ZWdyaXR5X3Byb3RlY3Rpb25fZW51bSBkbDsgLy9EZWZpbmVkIGluIERlYy4yMDE4Cit9dmdzbV9tY2RkbGxfaW50ZWdyaXR5X3Byb3RlY3Rpb25fbWF4X2RhdGFfcmF0ZV9zdHJ1Y3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX3Znc21fbWNkZGxsX3Nlc3Npb25fYW1icl9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfdmdzbV9Vbml0X2Zvcl9TZXNzaW9uX0FNQlJfZm9yX2Rvd25saW5rX2VudW0gdW5pdF9mb3Jfc2Vzc2lvbl9hbWJyX2Zvcl9kbDsKKyAgICBrYWxfdWludDE2IHNlc3Npb25fYW1icl9mb3JfZGw7CisgICAgbWNkZGxsX3Znc21fVW5pdF9mb3JfU2Vzc2lvbl9BTUJSX2Zvcl9kb3dubGlua19lbnVtIHVuaXRfZm9yX3Nlc3Npb25fYW1icl9mb3JfdWw7CisgICAga2FsX3VpbnQxNiBzZXNzaW9uX2FtYnJfZm9yX3VsOworfXZnc21fbWNkZGxsX3Nlc3Npb25fYW1icl9zdHJ1Y3Q7CisKKyNpZm5kZWYgX19NQ0RfVkdOQVNfMjQ1MDFfU1BFQ18yMDE4U0VQX18KK3R5cGVkZWYgc3RydWN0IF92Z3NtX21jZGRsbF9zX25zc2FpX3N0cnVjdAoreworICAgIGthbF91aW50OCBpc19zc3RfcHJlc2VudDsKKyAgICBtY2RkbGxfdmdzbV9zc3RfdmFsdWVfZW51bSBzc3Q7IC8vYWxpZ24gQW5yaXRzdQorICAgIGthbF91aW50OCBpc19zZF9wcmVzZW50OworICAgIGthbF91aW50MzIgc2Q7CisgICAga2FsX3VpbnQ4IGlzX21hcHBlZF9ocGxtbl9zc3RfcHJlc2VudDsKKyAgICBtY2RkbGxfdmdzbV9zc3RfdmFsdWVfZW51bSBtYXBwZWRfaHBsbW5fc3N0OyAvL2FsaWduIEFucml0c3UKKyAgICBrYWxfdWludDggaXNfbWFwcGVkX2hwbG1uX3NkX3ByZXNlbnQ7CisgICAga2FsX3VpbnQzMiBtYXBwZWRfaHBsbW5fc2Q7Cit9dmdzbV9tY2RkbGxfc19uc3NhaV9zdHJ1Y3Q7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgX3Znc21fbWNkZGxsX3NfbnNzYWlfc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IGlzX3NzdF9wcmVzZW50OworICAgIG1jZGRsbF92Z3NtX3NzdF92YWx1ZV9lbnVtIHNzdDsgLy9hbGlnbiBBbnJpdHN1CisgICAga2FsX3VpbnQ4IGlzX3NkX3ByZXNlbnQ7CisgICAga2FsX3VpbnQzMiBzZDsKKyAgICBrYWxfdWludDggaXNfbWFwcGVkX2NvbmZpZ3VyZWRfc3N0X3ByZXNlbnQ7CisgICAgbWNkZGxsX3Znc21fc3N0X3ZhbHVlX2VudW0gbWFwcGVkX2NvbmZpZ3VyZWRfc3N0OyAvL2FsaWduIEFucml0c3UKKyAgICBrYWxfdWludDggaXNfbWFwcGVkX2NvbmZpZ3VyZWRfc2RfcHJlc2VudDsKKyAgICBrYWxfdWludDMyIG1hcHBlZF9jb25maWd1cmVkX3NkOworfXZnc21fbWNkZGxsX3NfbnNzYWlfc3RydWN0OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF92Z3NtX21jZGRsbF9iYWNrX29mZl90aW1lcl92YWxfc3RydWN0Cit7CisgICAgbWNkZGxsX3RpbWVyM192YWx1ZV91bml0X2VudW0gdW5pdDsKKyAgICBrYWxfdWludDggdGltZXJfdmFsOworfXZnc21fbWNkZGxsX2JhY2tfb2ZmX3RpbWVyX3ZhbF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IF92Z3NtX21jZGRsbF9ycV90aW1lcl92YWxfc3RydWN0Cit7CisgICAgbWNkZGxsX3RpbWVyX3VuaXRfZW51bSB1bml0OworICAgIGthbF91aW50OCB0aW1lcl92YWw7Cit9dmdzbV9tY2RkbGxfcnFfdGltZXJfdmFsX3N0cnVjdDsKKworCisKKy8vRW5kIG9mIE5ldworCisjaWZuZGVmIF9fTUNEX1ZHTkFTXzI0NTAxX1NQRUNfMjAxOFNFUF9fIAordHlwZWRlZiBzdHJ1Y3QgX3Znc21fbWNkZGxsX3BkdV9zZXNzaW9uX2VzdGFibGlzaG1lbnRfcmVxdWVzdF9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2NyOworICAgIG1jZGRsbF9QRFVfc2Vzc2lvbl9pZGVudGl0eV92YWx1ZV9lbnVtIHBzaTsKKyAgICBtY2RkbGxfcHJvY2VkdXJlX3RyYW5zYWN0aW9uX2lkZW50aXR5X2VudW0gcHRpOworICAgIG1jZGRsbF92Z3NtX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAgdmdzbV9tY2RkbGxfaW50ZWdyaXR5X3Byb3RlY3Rpb25fbWF4X2RhdGFfcmF0ZV9zdHJ1Y3QgaW50ZWdyaXR5X21heF9kYXRhX3JhdGU7IC8vREVDLjIwMTggOiBvcHRpb24tPm1hbmRhdG9yeQorICAgIGthbF91aW50OCBwZHVfc2Vzc2lvbl90eXBlUDsKKyAgICBtY2RkbGxfdmdzbV9wZHVfc2Vzc2lvbl90eXBlX2VudW0gcGR1X3Nlc3Npb25fdHlwZTsKKyAgICBrYWxfdWludDggc3NjX21vZGVQOworICAgIG1jZGRsbF92Z3NtX3NzY19tb2RlX2VudW0gc3NjX21vZGU7CisgICAga2FsX3VpbnQ4IHZnc21fY2FwYWJpbGl0eVA7CisgICAga2FsX3VpbnQ4IG5vX3Znc21fY2FwYWJpbGl0eTsKKyAgICB2Z3NtX21jZGRsbF9jYXBhYmlsaXR5X3N0cnVjdCB2Z3NtX2NhcGFiaWxpdHk7CisgICAga2FsX3VpbnQ4IG1heF9udW1fb2Zfc3VwcG9ydGVkX3BmUDsKKyAgICBrYWxfdWludDE2IG1heF9udW1fb2Zfc3VwcG9ydGVkX3BmOworICAgIGthbF91aW50OCAgYWx3YXlzX29uX3BkdV9zZXNzaW9uX3JlcVA7CisgICAgdmdzbV9tY2RkbGxfYWx3YXlzX29uX3BkdV9zZXNzaW9uX3JlcXVlc3RlZF9zdHJ1Y3QgYWx3YXlzX29uX3BkdV9zZXNzaW9uX3JlcTsKKyAgICBrYWxfdWludDggZXBjb1A7CisgICAga2FsX3VpbnQxNiBub19lcGNvOworICAgIGthbF91aW50OCBlcGNvW0RfTk9fRVBDT107Cit9IHZnc21fbWNkZGxsX3BkdV9zZXNzaW9uX2VzdGFibGlzaG1lbnRfcmVxdWVzdF9zdHJ1Y3Q7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgX3Znc21fbWNkZGxsX3BkdV9zZXNzaW9uX2VzdGFibGlzaG1lbnRfcmVxdWVzdF9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2NyOworICAgIG1jZGRsbF9QRFVfc2Vzc2lvbl9pZGVudGl0eV92YWx1ZV9lbnVtIHBzaTsKKyAgICBtY2RkbGxfcHJvY2VkdXJlX3RyYW5zYWN0aW9uX2lkZW50aXR5X2VudW0gcHRpOworICAgIG1jZGRsbF92Z3NtX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAga2FsX3VpbnQ4IHBkdV9zZXNzaW9uX3R5cGVQOworICAgIG1jZGRsbF92Z3NtX3BkdV9zZXNzaW9uX3R5cGVfZW51bSBwZHVfc2Vzc2lvbl90eXBlOworICAgIGthbF91aW50OCBzc2NfbW9kZVA7CisgICAgbWNkZGxsX3Znc21fc3NjX21vZGVfZW51bSBzc2NfbW9kZTsKKyAgICBrYWxfdWludDggdmdzbV9jYXBhYmlsaXR5UDsKKyAgICBrYWxfdWludDggbm9fdmdzbV9jYXBhYmlsaXR5OworICAgIHZnc21fbWNkZGxsX2NhcGFiaWxpdHlfc3RydWN0IHZnc21fY2FwYWJpbGl0eTsKKyAgICBrYWxfdWludDggbWF4X251bV9vZl9zdXBwb3J0ZWRfcGZQOworICAgIGthbF91aW50MTYgbWF4X251bV9vZl9zdXBwb3J0ZWRfcGY7CisgICAga2FsX3VpbnQ4ICBpbnRlZ3JpdHlfbWF4X2RhdGFfcmF0ZVA7CisgICAgdmdzbV9tY2RkbGxfaW50ZWdyaXR5X3Byb3RlY3Rpb25fbWF4X2RhdGFfcmF0ZV9zdHJ1Y3QgaW50ZWdyaXR5X21heF9kYXRhX3JhdGU7CisgICAga2FsX3VpbnQ4ICBhbHdheXNfb25fcGR1X3Nlc3Npb25fcmVxUDsKKyAgICB2Z3NtX21jZGRsbF9hbHdheXNfb25fcGR1X3Nlc3Npb25fcmVxdWVzdGVkX3N0cnVjdCBhbHdheXNfb25fcGR1X3Nlc3Npb25fcmVxOworICAgIGthbF91aW50OCBlcGNvUDsKKyAgICBrYWxfdWludDE2IG5vX2VwY287CisgICAga2FsX3VpbnQ4IGVwY29bRF9OT19FUENPXTsKK30gdmdzbV9tY2RkbGxfcGR1X3Nlc3Npb25fZXN0YWJsaXNobWVudF9yZXF1ZXN0X3N0cnVjdDsKKyNlbmRpZgorCisKKyNpZm5kZWYgX19NQ0RfVkdOQVNfMjQ1MDFfU1BFQ18yMDE4U0VQX18KK3R5cGVkZWYgc3RydWN0IF92Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9lc3RhYmxpc2htZW50X2FjY2VwdF9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2NyOworICAgIG1jZGRsbF9QRFVfc2Vzc2lvbl9pZGVudGl0eV92YWx1ZV9lbnVtIHBzaTsKKyAgICBtY2RkbGxfcHJvY2VkdXJlX3RyYW5zYWN0aW9uX2lkZW50aXR5X2VudW0gcHRpOworICAgIG1jZGRsbF92Z3NtX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAgbWNkZGxsX3Znc21fcGR1X3Nlc3Npb25fdHlwZV9lbnVtIHNlbGVjdGVkX3BkdV9zZXNzaW9uX3R5cGU7CisgICAgbWNkZGxsX3Znc21fc3NjX21vZGVfZW51bSBzZWxlY3RlZF9zc2NfbW9kZTsKKyAgICBrYWxfdWludDE2IG5vX2F1dGhfcW9zX3J1bGVzOworICAgIGthbF91aW50OCBhdXRoX3Fvc19ydWxlc1tEX05PX0FVVEhfUU9TX1JVTEVTXTsKKyAgICBrYWxfdWludDggbm9fc2Vzc2lvbl9hbWJyOworICAgIC8vbWNkZGxsX3Znc21fVW5pdF9mb3JfU2Vzc2lvbl9BTUJSX2Zvcl9kb3dubGlua19lbnVtIHNlc3Npb25fYW1icltEX05PX1NFU1NJT05fQU1CUl07CisgICAgdmdzbV9tY2RkbGxfc2Vzc2lvbl9hbWJyX3N0cnVjdCBzZXNzaW9uX2FtYnI7CisgICAga2FsX3VpbnQ4IHZnc21fY2F1c2VQOworICAgIG1jZGRsbF92Z3NtX2NhdXNlX3ZhbHVlX2VudW0gdmdzbV9jYXVzZTsKKyAgICBrYWxfdWludDggcGR1X2FkZHJlc3NQOworICAgIC8vdmdzbV9tY2RkbGxfcGR1X2FkZHJlc3Nfc3RydWN0IHBkdV9hZGRyZXNzOworICAgIGthbF91aW50OCBub19wZHVfYWRkcmVzczsKKyAgICBrYWxfdWludDggcGR1X2FkZHJlc3NbRF9OT19QRFVfQUREUl07CisgICAga2FsX3VpbnQ4IHJxX3RpbWVyX3ZhbFA7CisgICAgLy9rYWxfdWludDggcnFfdGltZXJfdmFsOworICAgIHZnc21fbWNkZGxsX3JxX3RpbWVyX3ZhbF9zdHJ1Y3QgcnFfdGltZXJfdmFsOworICAgIGthbF91aW50OCBzX25zc2FpUDsKKyAgICBrYWxfdWludDggbm9fc19uc3NhaTsKKyAgICAvL2thbF91aW50OCBzX25zc2FpW0RfTk9fU19OU1NBSV07CisgICAgdmdzbV9tY2RkbGxfc19uc3NhaV9zdHJ1Y3Qgc19uc3NhaTsKKyAgICAvL05ldworICAgIGthbF91aW50OCBhbHdheXNfb25fcGR1X3Nlc3Npb25faW5kUDsKKyAgICB2Z3NtX21jZGRsbF9hbHdheXNfb25fcGR1X3Nlc3Npb25faW5kX3N0cnVjdCBhbHdheXNfb25fcGR1X3Nlc3Npb25faW5kOworICAgIC8vRW5kIG9mIG5ldworICAgIGthbF91aW50OCBtYXBwZWRfZXBzYl9jb250ZXh0UDsKKyAgICBrYWxfdWludDE2IG5vX21hcHBlZF9lcHNiX2NvbnRleHQ7CisgICAga2FsX3VpbnQ4IG1hcHBlZF9lcHNiX2NvbnRleHRbRF9OT19NQVBQRURfRVBTQl9DT05URVhUXTsKKyAgICBrYWxfdWludDggZWFwX21lc3NhZ2VQOworICAgIGthbF91aW50MTYgbm9fZWFwX21lc3NhZ2U7CisgICAga2FsX3VpbnQ4IGVhcF9tZXNzYWdlW0RfTk9fRUFQX01FU1NBR0VdOworICAgIGthbF91aW50OCBhdXRoX3Fvc19mbG93UDsgLy9ERUMuMjAxOCA6IGNoYW5nZSBJRSBvcmRlciAKKyAgICBrYWxfdWludDE2IG5vX2F1dGhfcW9zX2Zsb3c7CisgICAga2FsX3VpbnQ4IGF1dGhfcW9zX2Zsb3dbRF9OT19BVVRIX1FPU19GTE9XXTsKKyAgICBrYWxfdWludDggZXBjb1A7CisgICAga2FsX3VpbnQxNiBub19lcGNvOworICAgIGthbF91aW50OCBlcGNvW0RfTk9fRVBDT107CisgICAga2FsX3VpbnQ4IGRublA7IC8vREVDIDogbWFuZGF0b3J5LT5vcHRpb24KKyAgICBrYWxfdWludDggbm9fZG5uOworICAgIGthbF91aW50OCBkbm5bRF9OT19ETk5dOworfSB2Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9lc3RhYmxpc2htZW50X2FjY2VwdF9zdHJ1Y3Q7ICAKKyNlbHNlICAvL1NFUFQKK3R5cGVkZWYgc3RydWN0IF92Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9lc3RhYmxpc2htZW50X2FjY2VwdF9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2NyOworICAgIG1jZGRsbF9QRFVfc2Vzc2lvbl9pZGVudGl0eV92YWx1ZV9lbnVtIHBzaTsKKyAgICBtY2RkbGxfcHJvY2VkdXJlX3RyYW5zYWN0aW9uX2lkZW50aXR5X2VudW0gcHRpOworICAgIG1jZGRsbF92Z3NtX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAgbWNkZGxsX3Znc21fcGR1X3Nlc3Npb25fdHlwZV9lbnVtIHNlbGVjdGVkX3BkdV9zZXNzaW9uX3R5cGU7CisgICAgbWNkZGxsX3Znc21fc3NjX21vZGVfZW51bSBzZWxlY3RlZF9zc2NfbW9kZTsKKyAgICBrYWxfdWludDggbm9fZG5uOworICAgIGthbF91aW50OCBkbm5bRF9OT19ETk5dOworICAgIGthbF91aW50MTYgbm9fYXV0aF9xb3NfcnVsZXM7CisgICAga2FsX3VpbnQ4IGF1dGhfcW9zX3J1bGVzW0RfTk9fQVVUSF9RT1NfUlVMRVNdOworICAgIGthbF91aW50OCBub19zZXNzaW9uX2FtYnI7CisgICAgLy9tY2RkbGxfdmdzbV9Vbml0X2Zvcl9TZXNzaW9uX0FNQlJfZm9yX2Rvd25saW5rX2VudW0gc2Vzc2lvbl9hbWJyW0RfTk9fU0VTU0lPTl9BTUJSXTsKKyAgICB2Z3NtX21jZGRsbF9zZXNzaW9uX2FtYnJfc3RydWN0IHNlc3Npb25fYW1icjsKKyAgICBrYWxfdWludDggdmdzbV9jYXVzZVA7CisgICAgbWNkZGxsX3Znc21fY2F1c2VfdmFsdWVfZW51bSB2Z3NtX2NhdXNlOworICAgIGthbF91aW50OCBwZHVfYWRkcmVzc1A7CisgICAgLy92Z3NtX21jZGRsbF9wZHVfYWRkcmVzc19zdHJ1Y3QgcGR1X2FkZHJlc3M7CisgICAga2FsX3VpbnQ4IG5vX3BkdV9hZGRyZXNzOworICAgIGthbF91aW50OCBwZHVfYWRkcmVzc1tEX05PX1BEVV9BRERSXTsKKyAgICBrYWxfdWludDggcnFfdGltZXJfdmFsUDsKKyAgICB2Z3NtX21jZGRsbF9ycV90aW1lcl92YWxfc3RydWN0IHJxX3RpbWVyX3ZhbDsKKyAgICBrYWxfdWludDggc19uc3NhaVA7CisgICAga2FsX3VpbnQ4IG5vX3NfbnNzYWk7CisgICAgdmdzbV9tY2RkbGxfc19uc3NhaV9zdHJ1Y3Qgc19uc3NhaTsKKyAgICBrYWxfdWludDggYWx3YXlzX29uX3BkdV9zZXNzaW9uX2luZFA7CisgICAgdmdzbV9tY2RkbGxfYWx3YXlzX29uX3BkdV9zZXNzaW9uX2luZF9zdHJ1Y3QgYWx3YXlzX29uX3BkdV9zZXNzaW9uX2luZDsKKyAgICBrYWxfdWludDggbWFwcGVkX2Vwc2JfY29udGV4dFA7CisgICAga2FsX3VpbnQxNiBub19tYXBwZWRfZXBzYl9jb250ZXh0OworICAgIGthbF91aW50OCBtYXBwZWRfZXBzYl9jb250ZXh0W0RfTk9fTUFQUEVEX0VQU0JfQ09OVEVYVF07CisgICAga2FsX3VpbnQ4IGVhcF9tZXNzYWdlUDsKKyAgICBrYWxfdWludDE2IG5vX2VhcF9tZXNzYWdlOworICAgIGthbF91aW50OCBlYXBfbWVzc2FnZVtEX05PX0VBUF9NRVNTQUdFXTsKKyAgICBrYWxfdWludDggYXV0aF9xb3NfZmxvd1A7CisgICAga2FsX3VpbnQxNiBub19hdXRoX3Fvc19mbG93OworICAgIGthbF91aW50OCBhdXRoX3Fvc19mbG93W0RfTk9fQVVUSF9RT1NfRkxPV107CisgICAga2FsX3VpbnQ4IGVwY29QOworICAgIGthbF91aW50MTYgbm9fZXBjbzsKKyAgICBrYWxfdWludDggZXBjb1tEX05PX0VQQ09dOworfSB2Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9lc3RhYmxpc2htZW50X2FjY2VwdF9zdHJ1Y3Q7CisjZW5kaWYKKworCisKK3R5cGVkZWYgc3RydWN0IF92Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9lc3RhYmxpc2htZW50X3JlamVjdF9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2NyOworICAgIG1jZGRsbF9QRFVfc2Vzc2lvbl9pZGVudGl0eV92YWx1ZV9lbnVtIHBzaTsKKyAgICBtY2RkbGxfcHJvY2VkdXJlX3RyYW5zYWN0aW9uX2lkZW50aXR5X2VudW0gcHRpOworICAgIG1jZGRsbF92Z3NtX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAgbWNkZGxsX3Znc21fY2F1c2VfdmFsdWVfZW51bSB2Z3NtX2NhdXNlOworICAgIGthbF91aW50OCBiYWNrX29mZl90aW1lcl92YWxQOworICAgIGthbF91aW50OCBub19iYWNrX29mZl90aW1lcl92YWw7CisgICAgLy9rYWxfdWludDggYmFja19vZmZfdGltZXJfdmFsW0RfTk9fQkFDS19PRkZfVElNRVJfVkFMXTsKKyAgICB2Z3NtX21jZGRsbF9iYWNrX29mZl90aW1lcl92YWxfc3RydWN0IGJhY2tfb2ZmX3RpbWVyX3ZhbDsKKyAgICBrYWxfdWludDggYWxsb3dlZF9zc2NfbW9kZVA7CisgICAgLy9rYWxfdWludDggYWxsb3dlZF9zc2NfbW9kZTsKKyAgICB2Z3NtX21jZGRsbF9hbGxvd2VkX3NzY19tb2RlX3N0cnVjdCBhbGxvd2VkX3NzY19tb2RlOworICAgIGthbF91aW50OCBlYXBfbWVzc2FnZVA7CisgICAga2FsX3VpbnQxNiBub19lYXBfbWVzc2FnZTsKKyAgICBrYWxfdWludDggZWFwX21lc3NhZ2VbRF9OT19FQVBfTUVTU0FHRV07CisgICAga2FsX3VpbnQ4IGVwY29QOworICAgIGthbF91aW50MTYgbm9fZXBjbzsKKyAgICBrYWxfdWludDggZXBjb1tEX05PX0VQQ09dOworfSB2Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9lc3RhYmxpc2htZW50X3JlamVjdF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgX3Znc21fbWNkZGxsX3BkdV9zZXNzaW9uX2F1dGhlbnRpY2F0aW9uX2NvbW1hbmRfc3RydWN0Cit7CisgICAgbWNkZGxsX0VQRF92YWx1ZV9lbnVtIGV4dF9wcm90b19kaXNjcjsKKyAgICBtY2RkbGxfUERVX3Nlc3Npb25faWRlbnRpdHlfdmFsdWVfZW51bSBwc2k7CisgICAgbWNkZGxsX3Byb2NlZHVyZV90cmFuc2FjdGlvbl9pZGVudGl0eV9lbnVtIHB0aTsKKyAgICBtY2RkbGxfdmdzbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIGthbF91aW50OCBlYXBfbWVzc2FnZVA7CisgICAga2FsX3VpbnQxNiBub19lYXBfbWVzc2FnZTsKKyAgICBrYWxfdWludDggZWFwX21lc3NhZ2VbRF9OT19FQVBfTUVTU0FHRV07CisgICAga2FsX3VpbnQ4IGVwY29QOworICAgIGthbF91aW50MTYgbm9fZXBjbzsKKyAgICBrYWxfdWludDggZXBjb1tEX05PX0VQQ09dOworfSB2Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9hdXRoZW50aWNhdGlvbl9jb21tYW5kX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCBfdmdzbV9tY2RkbGxfcGR1X3Nlc3Npb25fYXV0aGVudGljYXRpb25fY29tcGxldGVfc3RydWN0Cit7CisgICAgbWNkZGxsX0VQRF92YWx1ZV9lbnVtIGV4dF9wcm90b19kaXNjcjsKKyAgICBtY2RkbGxfUERVX3Nlc3Npb25faWRlbnRpdHlfdmFsdWVfZW51bSBwc2k7CisgICAgbWNkZGxsX3Byb2NlZHVyZV90cmFuc2FjdGlvbl9pZGVudGl0eV9lbnVtIHB0aTsKKyAgICBtY2RkbGxfdmdzbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIGthbF91aW50OCBlYXBfbWVzc2FnZVA7CisgICAga2FsX3VpbnQxNiBub19lYXBfbWVzc2FnZTsKKyAgICBrYWxfdWludDggZWFwX21lc3NhZ2VbRF9OT19FQVBfTUVTU0FHRV07CisgICAga2FsX3VpbnQ4IGVwY29QOworICAgIGthbF91aW50MTYgbm9fZXBjbzsKKyAgICBrYWxfdWludDggZXBjb1tEX05PX0VQQ09dOworfSB2Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9hdXRoZW50aWNhdGlvbl9jb21wbGV0ZV9zdHJ1Y3Q7CisKKyNpZm5kZWYgX19NQ0RfVkdOQVNfMjQ1MDFfU1BFQ18yMDE4U0VQX18KK3R5cGVkZWYgc3RydWN0IF92Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9tb2RpZmljYXRpb25fcmVxdWVzdF9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2NyOworICAgIG1jZGRsbF9QRFVfc2Vzc2lvbl9pZGVudGl0eV92YWx1ZV9lbnVtIHBzaTsKKyAgICBtY2RkbGxfcHJvY2VkdXJlX3RyYW5zYWN0aW9uX2lkZW50aXR5X2VudW0gcHRpOworICAgIG1jZGRsbF92Z3NtX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAga2FsX3VpbnQ4IHZnc21fY2FwYWJpbGl0eVA7CisgICAga2FsX3VpbnQ4IG5vX3Znc21fY2FwYWJpbGl0eTsKKyAgICB2Z3NtX21jZGRsbF9jYXBhYmlsaXR5X3N0cnVjdCB2Z3NtX2NhcGFiaWxpdHk7CisgICAga2FsX3VpbnQ4IHZnc21fY2F1c2VQOworICAgIG1jZGRsbF92Z3NtX2NhdXNlX3ZhbHVlX2VudW0gdmdzbV9jYXVzZTsKKyAgICBrYWxfdWludDggbWF4X251bV9vZl9zdXBwb3J0ZWRfcGZQOworICAgIGthbF91aW50MTYgbWF4X251bV9vZl9zdXBwb3J0ZWRfcGY7CisgICAga2FsX3VpbnQ4ICBhbHdheXNfb25fcGR1X3Nlc3Npb25fcmVxUDsKKyAgICB2Z3NtX21jZGRsbF9hbHdheXNfb25fcGR1X3Nlc3Npb25fcmVxdWVzdGVkX3N0cnVjdCBhbHdheXNfb25fcGR1X3Nlc3Npb25fcmVxOworICAgIGthbF91aW50OCAgaW50ZWdyaXR5X21heF9kYXRhX3JhdGVQOworICAgIHZnc21fbWNkZGxsX2ludGVncml0eV9wcm90ZWN0aW9uX21heF9kYXRhX3JhdGVfc3RydWN0IGludGVncml0eV9tYXhfZGF0YV9yYXRlOyAgCisgICAga2FsX3VpbnQ4IHJlcV9xb3NfcnVsZXNQOworICAgIGthbF91aW50MTYgbm9fcmVxX3Fvc19ydWxlczsKKyAgICBrYWxfdWludDggcmVxX3Fvc19ydWxlc1tEX05PX1JFUV9RT1NfUlVMRVNdOworICAgIGthbF91aW50OCByZXFfcW9zX2Zsb3dQOworICAgIGthbF91aW50MTYgbm9fcmVxX3Fvc19mbG93OworICAgIGthbF91aW50OCByZXFfcW9zX2Zsb3dbRF9OT19SRVFfUU9TX0ZMT1ddOworICAgIGthbF91aW50OCBtYXBwZWRfZXBzYl9jb250ZXh0UDsgLy9ERUMuMjAxOAorICAgIGthbF91aW50MTYgbm9fbWFwcGVkX2Vwc2JfY29udGV4dDsKKyAgICBrYWxfdWludDggbWFwcGVkX2Vwc2JfY29udGV4dFtEX05PX01BUFBFRF9FUFNCX0NPTlRFWFRdOworICAgIGthbF91aW50OCBlcGNvUDsgLy9ERUMuMjAxOCA6IGNoYW5nZSBvcmRlcgorICAgIGthbF91aW50MTYgbm9fZXBjbzsKKyAgICBrYWxfdWludDggZXBjb1tEX05PX0VQQ09dOworfSB2Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9tb2RpZmljYXRpb25fcmVxdWVzdF9zdHJ1Y3Q7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgX3Znc21fbWNkZGxsX3BkdV9zZXNzaW9uX21vZGlmaWNhdGlvbl9yZXF1ZXN0X3N0cnVjdAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzY3I7CisgICAgbWNkZGxsX1BEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlX2VudW0gcHNpOworICAgIG1jZGRsbF9wcm9jZWR1cmVfdHJhbnNhY3Rpb25faWRlbnRpdHlfZW51bSBwdGk7CisgICAgbWNkZGxsX3Znc21fbXNnX3R5cGVfZW51bSBtc2dfdHlwZTsKKyAgICBrYWxfdWludDggdmdzbV9jYXBhYmlsaXR5UDsKKyAgICBrYWxfdWludDggbm9fdmdzbV9jYXBhYmlsaXR5OworICAgIHZnc21fbWNkZGxsX2NhcGFiaWxpdHlfc3RydWN0IHZnc21fY2FwYWJpbGl0eTsKKyAgICBrYWxfdWludDggdmdzbV9jYXVzZVA7CisgICAgbWNkZGxsX3Znc21fY2F1c2VfdmFsdWVfZW51bSB2Z3NtX2NhdXNlOworICAgIGthbF91aW50OCBtYXhfbnVtX29mX3N1cHBvcnRlZF9wZlA7CisgICAga2FsX3VpbnQxNiBtYXhfbnVtX29mX3N1cHBvcnRlZF9wZjsKKyAgICBrYWxfdWludDggIGFsd2F5c19vbl9wZHVfc2Vzc2lvbl9yZXFQOworICAgIHZnc21fbWNkZGxsX2Fsd2F5c19vbl9wZHVfc2Vzc2lvbl9yZXF1ZXN0ZWRfc3RydWN0IGFsd2F5c19vbl9wZHVfc2Vzc2lvbl9yZXE7CisgICAga2FsX3VpbnQ4ICBpbnRlZ3JpdHlfbWF4X2RhdGFfcmF0ZVA7CisgICAgdmdzbV9tY2RkbGxfaW50ZWdyaXR5X3Byb3RlY3Rpb25fbWF4X2RhdGFfcmF0ZV9zdHJ1Y3QgaW50ZWdyaXR5X21heF9kYXRhX3JhdGU7ICAKKyAgICBrYWxfdWludDggcmVxX3Fvc19ydWxlc1A7CisgICAga2FsX3VpbnQxNiBub19yZXFfcW9zX3J1bGVzOworICAgIGthbF91aW50OCByZXFfcW9zX3J1bGVzW0RfTk9fUkVRX1FPU19SVUxFU107CisgICAga2FsX3VpbnQ4IGVwY29QOworICAgIGthbF91aW50MTYgbm9fZXBjbzsKKyAgICBrYWxfdWludDggZXBjb1tEX05PX0VQQ09dOworICAgIGthbF91aW50OCByZXFfcW9zX2Zsb3dQOworICAgIGthbF91aW50MTYgbm9fcmVxX3Fvc19mbG93OworICAgIGthbF91aW50OCByZXFfcW9zX2Zsb3dbRF9OT19SRVFfUU9TX0ZMT1ddOworfSB2Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9tb2RpZmljYXRpb25fcmVxdWVzdF9zdHJ1Y3Q7CisjZW5kaWYKKworCit0eXBlZGVmIHN0cnVjdCBfdmdzbV9tY2RkbGxfcGR1X3Nlc3Npb25fbW9kaWZpY2F0aW9uX3JlamVjdF9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2NyOworICAgIG1jZGRsbF9QRFVfc2Vzc2lvbl9pZGVudGl0eV92YWx1ZV9lbnVtIHBzaTsKKyAgICBtY2RkbGxfcHJvY2VkdXJlX3RyYW5zYWN0aW9uX2lkZW50aXR5X2VudW0gcHRpOworICAgIG1jZGRsbF92Z3NtX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAgbWNkZGxsX3Znc21fY2F1c2VfdmFsdWVfZW51bSB2Z3NtX2NhdXNlOworICAgIGthbF91aW50OCBiYWNrX29mZl90aW1lcl92YWxQOworICAgIGthbF91aW50OCBub19iYWNrX29mZl90aW1lcl92YWw7CisgICAgLy9rYWxfdWludDggYmFja19vZmZfdGltZXJfdmFsW0RfTk9fQkFDS19PRkZfVElNRVJfVkFMXTsKKyAgICB2Z3NtX21jZGRsbF9iYWNrX29mZl90aW1lcl92YWxfc3RydWN0IGJhY2tfb2ZmX3RpbWVyX3ZhbDsKKyAgICBrYWxfdWludDggZXBjb1A7CisgICAga2FsX3VpbnQxNiBub19lcGNvOworICAgIGthbF91aW50OCBlcGNvW0RfTk9fRVBDT107Cit9IHZnc21fbWNkZGxsX3BkdV9zZXNzaW9uX21vZGlmaWNhdGlvbl9yZWplY3Rfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IF92Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9tb2RpZmljYXRpb25fY29tbWFuZF9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2NyOworICAgIG1jZGRsbF9QRFVfc2Vzc2lvbl9pZGVudGl0eV92YWx1ZV9lbnVtIHBzaTsKKyAgICBtY2RkbGxfcHJvY2VkdXJlX3RyYW5zYWN0aW9uX2lkZW50aXR5X2VudW0gcHRpOworICAgIG1jZGRsbF92Z3NtX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAga2FsX3VpbnQ4IHZnc21fY2F1c2VQOworICAgIG1jZGRsbF92Z3NtX2NhdXNlX3ZhbHVlX2VudW0gdmdzbV9jYXVzZTsKKyAgICBrYWxfdWludDggc2Vzc2lvbl9hbWJyUDsKKyAgICBrYWxfdWludDggbm9fc2Vzc2lvbl9hbWJyOworICAgIHZnc21fbWNkZGxsX3Nlc3Npb25fYW1icl9zdHJ1Y3Qgc2Vzc2lvbl9hbWJyOworICAgIGthbF91aW50OCBycV90aW1lcl92YWxQOworICAgIHZnc21fbWNkZGxsX3JxX3RpbWVyX3ZhbF9zdHJ1Y3QgcnFfdGltZXJfdmFsOworICAgIGthbF91aW50OCBhbHdheXNfb25fcGR1X3Nlc3Npb25faW5kUDsKKyAgICB2Z3NtX21jZGRsbF9hbHdheXNfb25fcGR1X3Nlc3Npb25faW5kX3N0cnVjdCBhbHdheXNfb25fcGR1X3Nlc3Npb25faW5kOworICAgIGthbF91aW50OCBhdXRoX3Fvc19ydWxlc1A7CisgICAga2FsX3VpbnQxNiBub19hdXRoX3Fvc19ydWxlczsKKyAgICBrYWxfdWludDggYXV0aF9xb3NfcnVsZXNbRF9OT19BVVRIX1FPU19SVUxFU107CisgICAga2FsX3VpbnQ4IG1hcHBlZF9lcHNiX2NvbnRleHRQOworICAgIGthbF91aW50MTYgbm9fbWFwcGVkX2Vwc2JfY29udGV4dDsKKyAgICBrYWxfdWludDggbWFwcGVkX2Vwc2JfY29udGV4dFtEX05PX01BUFBFRF9FUFNCX0NPTlRFWFRdOworICAgIGthbF91aW50OCBhdXRoX3Fvc19mbG93UDsKKyAgICBrYWxfdWludDE2IG5vX2F1dGhfcW9zX2Zsb3c7CisgICAga2FsX3VpbnQ4IGF1dGhfcW9zX2Zsb3dbRF9OT19BVVRIX1FPU19GTE9XXTsKKyAgICBrYWxfdWludDggZXBjb1A7IAorICAgIGthbF91aW50MTYgbm9fZXBjbzsKKyAgICBrYWxfdWludDggZXBjb1tEX05PX0VQQ09dOworfSB2Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9tb2RpZmljYXRpb25fY29tbWFuZF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgX3Znc21fbWNkZGxsX3BkdV9zZXNzaW9uX21vZGlmaWNhdGlvbl9jb21wbGV0ZV9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2NyOworICAgIG1jZGRsbF9QRFVfc2Vzc2lvbl9pZGVudGl0eV92YWx1ZV9lbnVtIHBzaTsKKyAgICBtY2RkbGxfcHJvY2VkdXJlX3RyYW5zYWN0aW9uX2lkZW50aXR5X2VudW0gcHRpOworICAgIG1jZGRsbF92Z3NtX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAga2FsX3VpbnQ4IGVwY29QOworICAgIGthbF91aW50MTYgbm9fZXBjbzsKKyAgICBrYWxfdWludDggZXBjb1tEX05PX0VQQ09dOworfSB2Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9tb2RpZmljYXRpb25fY29tcGxldGVfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IF92Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9tb2RpZmljYXRpb25fY29tbWFuZF9yZWplY3Rfc3RydWN0Cit7CisgICAgbWNkZGxsX0VQRF92YWx1ZV9lbnVtIGV4dF9wcm90b19kaXNjcjsKKyAgICBtY2RkbGxfUERVX3Nlc3Npb25faWRlbnRpdHlfdmFsdWVfZW51bSBwc2k7CisgICAgbWNkZGxsX3Byb2NlZHVyZV90cmFuc2FjdGlvbl9pZGVudGl0eV9lbnVtIHB0aTsKKyAgICBtY2RkbGxfdmdzbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIG1jZGRsbF92Z3NtX2NhdXNlX3ZhbHVlX2VudW0gdmdzbV9jYXVzZTsKKyAgICBrYWxfdWludDggZXBjb1A7CisgICAga2FsX3VpbnQxNiBub19lcGNvOworICAgIGthbF91aW50OCBlcGNvW0RfTk9fRVBDT107Cit9IHZnc21fbWNkZGxsX3BkdV9zZXNzaW9uX21vZGlmaWNhdGlvbl9jb21tYW5kX3JlamVjdF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgX3Znc21fbWNkZGxsX3BkdV9zZXNzaW9uX3JlbGVhc2VfcmVxdWVzdF9zdHJ1Y3QKK3sKKyAgICBtY2RkbGxfRVBEX3ZhbHVlX2VudW0gZXh0X3Byb3RvX2Rpc2NyOworICAgIG1jZGRsbF9QRFVfc2Vzc2lvbl9pZGVudGl0eV92YWx1ZV9lbnVtIHBzaTsKKyAgICBtY2RkbGxfcHJvY2VkdXJlX3RyYW5zYWN0aW9uX2lkZW50aXR5X2VudW0gcHRpOworICAgIG1jZGRsbF92Z3NtX21zZ190eXBlX2VudW0gbXNnX3R5cGU7CisgICAgLy9OZXcKKyAgICBrYWxfdWludDggdmdzbV9jYXVzZVA7CisgICAgbWNkZGxsX3Znc21fY2F1c2VfdmFsdWVfZW51bSB2Z3NtX2NhdXNlOworICAgIC8vRW5kIG9mIE5FdworICAgIGthbF91aW50OCBlcGNvUDsKKyAgICBrYWxfdWludDE2IG5vX2VwY287CisgICAga2FsX3VpbnQ4IGVwY29bRF9OT19FUENPXTsKK30gdmdzbV9tY2RkbGxfcGR1X3Nlc3Npb25fcmVsZWFzZV9yZXF1ZXN0X3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCBfdmdzbV9tY2RkbGxfcGR1X3Nlc3Npb25fcmVsZWFzZV9yZWplY3Rfc3RydWN0Cit7CisgICAgbWNkZGxsX0VQRF92YWx1ZV9lbnVtIGV4dF9wcm90b19kaXNjcjsKKyAgICBtY2RkbGxfUERVX3Nlc3Npb25faWRlbnRpdHlfdmFsdWVfZW51bSBwc2k7CisgICAgbWNkZGxsX3Byb2NlZHVyZV90cmFuc2FjdGlvbl9pZGVudGl0eV9lbnVtIHB0aTsKKyAgICBtY2RkbGxfdmdzbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIG1jZGRsbF92Z3NtX2NhdXNlX3ZhbHVlX2VudW0gdmdzbV9jYXVzZTsKKyAgICBrYWxfdWludDggZXBjb1A7CisgICAga2FsX3VpbnQxNiBub19lcGNvOworICAgIGthbF91aW50OCBlcGNvW0RfTk9fRVBDT107Cit9IHZnc21fbWNkZGxsX3BkdV9zZXNzaW9uX3JlbGVhc2VfcmVqZWN0X3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCBfdmdzbV9tY2RkbGxfcGR1X3Nlc3Npb25fcmVsZWFzZV9jb21tYW5kX3N0cnVjdAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzY3I7CisgICAgbWNkZGxsX1BEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlX2VudW0gcHNpOworICAgIG1jZGRsbF9wcm9jZWR1cmVfdHJhbnNhY3Rpb25faWRlbnRpdHlfZW51bSBwdGk7CisgICAgbWNkZGxsX3Znc21fbXNnX3R5cGVfZW51bSBtc2dfdHlwZTsKKyAgICBtY2RkbGxfdmdzbV9jYXVzZV92YWx1ZV9lbnVtIHZnc21fY2F1c2U7CisgICAga2FsX3VpbnQ4IGJhY2tfb2ZmX3RpbWVyX3ZhbFA7CisgICAga2FsX3VpbnQ4IG5vX2JhY2tfb2ZmX3RpbWVyX3ZhbDsKKyAgICAvL2thbF91aW50OCBiYWNrX29mZl90aW1lcl92YWxbRF9OT19CQUNLX09GRl9USU1FUl9WQUxdOworICAgIHZnc21fbWNkZGxsX2JhY2tfb2ZmX3RpbWVyX3ZhbF9zdHJ1Y3QgYmFja19vZmZfdGltZXJfdmFsOworICAgIGthbF91aW50OCBlYXBfbWVzc2FnZVA7CisgICAga2FsX3VpbnQxNiBub19lYXBfbWVzc2FnZTsKKyAgICBrYWxfdWludDggZWFwX21lc3NhZ2VbRF9OT19FQVBfTUVTU0FHRV07CisgICAga2FsX3VpbnQ4IGVwY29QOworICAgIGthbF91aW50MTYgbm9fZXBjbzsKKyAgICBrYWxfdWludDggZXBjb1tEX05PX0VQQ09dOworfSB2Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9yZWxlYXNlX2NvbW1hbmRfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IF92Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9yZWxlYXNlX2NvbXBsZXRlX3N0cnVjdAoreworICAgIG1jZGRsbF9FUERfdmFsdWVfZW51bSBleHRfcHJvdG9fZGlzY3I7CisgICAgbWNkZGxsX1BEVV9zZXNzaW9uX2lkZW50aXR5X3ZhbHVlX2VudW0gcHNpOworICAgIG1jZGRsbF9wcm9jZWR1cmVfdHJhbnNhY3Rpb25faWRlbnRpdHlfZW51bSBwdGk7CisgICAgbWNkZGxsX3Znc21fbXNnX3R5cGVfZW51bSBtc2dfdHlwZTsKKyAgICAvL05ldworICAgIGthbF91aW50OCB2Z3NtX2NhdXNlUDsKKyAgICBtY2RkbGxfdmdzbV9jYXVzZV92YWx1ZV9lbnVtIHZnc21fY2F1c2U7CisgICAgLy9FbmQgb2YgTkV3CisgICAga2FsX3VpbnQ4IGVwY29QOworICAgIGthbF91aW50MTYgbm9fZXBjbzsKKyAgICBrYWxfdWludDggZXBjb1tEX05PX0VQQ09dOworfSB2Z3NtX21jZGRsbF9wZHVfc2Vzc2lvbl9yZWxlYXNlX2NvbXBsZXRlX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCBfdmdzbV9tY2RkbGxfNWdzbV9zdGF0dXNfc3RydWN0Cit7CisgICAgbWNkZGxsX0VQRF92YWx1ZV9lbnVtIGV4dF9wcm90b19kaXNjcjsKKyAgICBtY2RkbGxfUERVX3Nlc3Npb25faWRlbnRpdHlfdmFsdWVfZW51bSBwc2k7CisgICAgbWNkZGxsX3Byb2NlZHVyZV90cmFuc2FjdGlvbl9pZGVudGl0eV9lbnVtIHB0aTsKKyAgICBtY2RkbGxfdmdzbV9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIG1jZGRsbF92Z3NtX2NhdXNlX3ZhbHVlX2VudW0gdmdzbV9jYXVzZTsKK30gdmdzbV9tY2RkbGxfNWdzbV9zdGF0dXNfc3RydWN0OworCitrYWxfYm9vbCBtc2dfcGVlcl91bnBhY2tfdmdzbShjb25zdCBrYWxfdWludDggKiBzcmMsIGthbF91aW50MTYgc3JjX3NpemUsIGthbF91aW50MTYgKiBkZXN0X3N0cnVjdF9pZCwgdm9pZCAqKiBkZXN0KTsKKworI2VuZGlmIC8qIF9fRklWRUdfTkFTX18gKi8KKworI2VuZGlmIC8qX01DRERMTF9WR1NNX0dFTl9QRUVSX0gqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL1RTXzM2MzMxX0FTTjFfSW50ZXJmYWNlX3BsdXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9UU18zNjMzMV9BU04xX0ludGVyZmFjZV9wbHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0ZjgzMgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9UU18zNjMzMV9BU04xX0ludGVyZmFjZV9wbHVzLmgKQEAgLTAsMCArMSw5MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDcKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9UU18zNjMzMV9BU04xX0lOVEVSRkFDRV9QTFVTX0hfCisjZGVmaW5lIF9UU18zNjMzMV9BU04xX0lOVEVSRkFDRV9QTFVTX0hfCisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZWxzZQorCit0eXBlZGVmIHN0cnVjdCBPQ1RfVkFSWV9TVFIgeworICB1bnNpZ25lZCBsb25nIG9jdHNMZW47ICAgICAgICAgICAgICAgICAKKyAgdW5zaWduZWQgY2hhciAqb2N0czsgICAgICAgICAgICAgICAgCit9IE9DVF9WQVJZX1NUUjsgICAgICAgICAgICAgIAorCit0eXBlZGVmIHN0cnVjdCBOVUxMX1NFUSB7CisgIHVuc2lnbmVkIGNoYXIgc3BhcmU7Cit9IE5VTExfU0VROworCit0eXBlZGVmIHN0cnVjdCBOVUxMX1NFVCB7CisgIHVuc2lnbmVkIGNoYXIgc3BhcmU7Cit9IE5VTExfU0VUOworCisjZW5kaWYKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIEJPT0xfVFlQRTsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBOVUxMX1RZUEU7CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjaWZuZGVmIERfMzYzMzFfQVNOMV9UUlVFCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLyogRF8zNjMzMV9BU04xX1RSVUUgKi8KKyNpZm5kZWYgRF8zNjMzMV9BU04xX0ZBTFNFCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLyogRF8zNjMzMV9BU04xX0ZBTFNFICovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZWxzZQorLyogVmFsdWUgZm9yICJCT09MX1RZUEUiICovCisjaWZuZGVmIEFTTjFfVFJVRQorI2RlZmluZSBBU04xX1RSVUUgICAgIDEgICAgLyogQml0IHZhbHVlICovCisjZW5kaWYgLyogQVNOMV9UUlVFICovCisjaWZuZGVmIEFTTjFfRkFMU0UKKyNkZWZpbmUgQVNOMV9GQUxTRSAgICAgMCAgICAvKiBCaXQgdmFsdWUgKi8KKyNlbmRpZiAvKiBBU04xX0ZBTFNFICovCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL1RTXzM2MzMxX0FTTjFfSW50ZXJuYWwuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9UU18zNjMzMV9BU04xX0ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmYmJiZQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9UU18zNjMzMV9BU04xX0ludGVybmFsLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfVFNfMzYzMzFfQVNOMV9JTlRFUk5BTF9IXworI2RlZmluZSBfVFNfMzYzMzFfQVNOMV9JTlRFUk5BTF9IXworCisvKioqKioqKioqKioqKioqKioqKioqKiogTUVTU0FHRSBJRCBERUZJTklUSU9OIFNUQVJUICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVFNfMzYzMzFfQVNOMV9CQ0NIX0JDSF9NZXNzYWdlICAgICAgICAgICAgICAgIDcwCisjZGVmaW5lIFRTXzM2MzMxX0FTTjFfQkNDSF9ETF9TQ0hfTWVzc2FnZSAgICAgICAgICAgICA3MQorI2RlZmluZSBUU18zNjMzMV9BU04xX1BDQ0hfTWVzc2FnZSAgICAgICAgICAgICAgICAgICAgNzIKKyNkZWZpbmUgVFNfMzYzMzFfQVNOMV9ETF9DQ0NIX01lc3NhZ2UgICAgICAgICAgICAgICAgIDczCisjZGVmaW5lIFRTXzM2MzMxX0FTTjFfRExfRENDSF9NZXNzYWdlICAgICAgICAgICAgICAgICA3NAorI2RlZmluZSBUU18zNjMzMV9BU04xX1VMX0NDQ0hfTWVzc2FnZSAgICAgICAgICAgICAgICAgNzUKKyNkZWZpbmUgVFNfMzYzMzFfQVNOMV9VTF9EQ0NIX01lc3NhZ2UgICAgICAgICAgICAgICAgIDc2CisjZGVmaW5lIFRTXzM2MzMxX0FTTjFfUlJDQ29ubmVjdGlvblJlY29uZmlndXJhdGlvbiAgICA3NworI2RlZmluZSBUU18zNjMzMV9BU04xX1VFQ2FwYWJpbGl0eUluZm9ybWF0aW9uICAgICAgICAgNzgKKyNkZWZpbmUgVFNfMzYzMzFfQVNOMV9VRV9FVVRSQV9DYXBhYmlsaXR5ICAgICAgICAgICAgIDc5CisjZGVmaW5lIFRTXzM2MzMxX0FTTjFfVmFyTWVhc0NvbmZpZyAgICAgICAgICAgICAgICAgICA4MAorI2RlZmluZSBUU18zNjMzMV9BU04xX1Zhck1lYXNSZXBvcnRMaXN0ICAgICAgICAgICAgICAgODEKKyNkZWZpbmUgVFNfMzYzMzFfQVNOMV9WYXJTaG9ydE1BQ19JbnB1dCAgICAgICAgICAgICAgIDgyCisjZGVmaW5lIFRTXzM2MzMxX0FTTjFfTUNDSF9NZXNzYWdlICAgICAgICAgICAgICAgICAgICA4MworI2RlZmluZSBUU18zNjMzMV9BU04xX1VFQ2FwYWJpbGl0eUVucXVpcnkgICAgICAgICAgICAgODQKKy8qKioqKioqKioqKioqKioqKioqKioqKiBNRVNTQUdFIElEIERFRklOSVRJT04gIEVORCAgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2VuZGlmCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvVFNfMzgzMzFfQVNOMV9JbnRlcm5hbC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL1RTXzM4MzMxX0FTTjFfSW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGFlMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL1RTXzM4MzMxX0FTTjFfSW50ZXJuYWwuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9UU18zODMzMV9BU04xX0lOVEVSTkFMX0hfCisjZGVmaW5lIF9UU18zODMzMV9BU04xX0lOVEVSTkFMX0hfCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiBNRVNTQUdFIElEIERFRklOSVRJT04gU1RBUlQgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBUU18zODMzMV9BU04xX0RMX0RDQ0hfTWVzc2FnZSAgICAgICAgICAgICAgICAgMTAwCisjZGVmaW5lIFRTXzM4MzMxX0FTTjFfVUxfRENDSF9NZXNzYWdlICAgICAgICAgICAgICAgICAxMDEKKyNkZWZpbmUgVFNfMzgzMzFfQVNOMV9NZWFzdXJlbWVudFJlcG9ydCAgICAgICAgICAgICAgIDEwMgorI2RlZmluZSBUU18zODMzMV9BU04xX1JSQ1JlY29uZmlndXJhdGlvbiAgICAgICAgICAgICAgMTAzCisjZGVmaW5lIFRTXzM4MzMxX0FTTjFfUlJDUmVjb25maWd1cmF0aW9uQ29tcGxldGUgICAgICAxMDQKKyNkZWZpbmUgVFNfMzgzMzFfQVNOMV9SYWRpb0JlYXJlckNvbmZpZyAgICAgICAgICAgICAgIDEwNQorI2RlZmluZSBUU18zODMzMV9BU04xX1VFX01SRENfQ2FwYWJpbGl0eSAgICAgICAgICAgICAgMTA2CisjZGVmaW5lIFRTXzM4MzMxX0FTTjFfVUVfTlJfQ2FwYWJpbGl0eSAgICAgICAgICAgICAgICAxMDcKKyNkZWZpbmUgVFNfMzgzMzFfQVNOMV9NZWFzUmVzdWx0U0NHX0ZhaWx1cmUgICAgICAgICAgIDEwOAorI2RlZmluZSBUU18zODMzMV9BU04xX0JDQ0hfQkNIX01lc3NhZ2UgICAgICAgICAgICAgICAgMTA5CisjZGVmaW5lIFRTXzM4MzMxX0FTTjFfQkNDSF9ETF9TQ0hfTWVzc2FnZSAgICAgICAgICAgICAxMTAKKyNkZWZpbmUgVFNfMzgzMzFfQVNOMV9ETF9DQ0NIX01lc3NhZ2UgICAgICAgICAgICAgICAgIDExMQorI2RlZmluZSBUU18zODMzMV9BU04xX1BDQ0hfTWVzc2FnZSAgICAgICAgICAgICAgICAgICAgMTEyCisjZGVmaW5lIFRTXzM4MzMxX0FTTjFfVUxfQ0NDSF9NZXNzYWdlICAgICAgICAgICAgICAgICAxMTMKKyNkZWZpbmUgVFNfMzgzMzFfQVNOMV9VTF9DQ0NIMV9NZXNzYWdlICAgICAgICAgICAgICAgIDExNAorI2RlZmluZSBUU18zODMzMV9BU04xX0ZyZXFCYW5kTGlzdCAgICAgICAgICAgICAgICAgICAgMTE1CisjZGVmaW5lIFRTXzM4MzMxX0FTTjFfU0lCMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTYKKyNkZWZpbmUgVFNfMzgzMzFfQVNOMV9TeXN0ZW1JbmZvcm1hdGlvbiAgICAgICAgICAgICAgIDExNworI2RlZmluZSBUU18zODMzMV9BU04xX1VFX0NhcGFiaWxpdHlSZXF1ZXN0RmlsdGVyTlIgICAgMTE4CisjZGVmaW5lIFRTXzM4MzMxX0FTTjFfTVRLX0Y0MF9VRV9NUkRDX0NhcGFiaWxpdHkgICAgICAxMTkKKyNkZWZpbmUgVFNfMzgzMzFfQVNOMV9NVEtfRjQwX1VFX05SX0NhcGFiaWxpdHkgICAgICAgIDEyMAorCisvKioqKioqKioqKioqKioqKioqKioqKiogTUVTU0FHRSBJRCBERUZJTklUSU9OICBFTkQgICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbmRpZiAvKiBfVFNfMzgzMzFfQVNOMV9JTlRFUk5BTF9IXyAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2Fic190aW1lLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvYWJzX3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDk4NmZmCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2Fic190aW1lLmgKQEAgLTAsMCArMSw4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGFic190aW1lLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqICAgCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDggMTggMjAxNSBoZWFkLmhzdQorICogW01PTFkwMDEzNzgwMl0gW01UNjI5Ml0gYWJzIHRpbWUgZ2xvYmFsIHZhcmlhYmxlIHJlbmFtZQorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiAgQUJTX1RJTUVfSU5DCisjZGVmaW5lICBBQlNfVElNRV9JTkMKKworI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisKK3R5cGVkZWYga2FsX3VpbnQ2NCBBQlNfVElDS19USU1FOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEFCU19USUNLX1RJTUUgc2ZUaWNrOworfSBnX2Fic190aW1lX3N0cnVjdDsKKworLyogTDFjb3JlIG1vZHVsZXMgdXNlICovCitleHRlcm4gZ19hYnNfdGltZV9zdHJ1Y3QgZ19hYnNfdGltZTsgLy8gRUwxIG1vZHVsZXMKK2V4dGVybiBrYWxfdWludDMyIGdfYWJzX3RpbWVfZGlmZjsgLy9UaGUgdGljayBkaXN0YW5jZSBiZXR3ZWVuIHByZXZpb3VzIGFuZCBjdXJyZW50IGludGVycnVwdDogbWluaW1hbCB2YWx1ZSBpcyAxCisKKy8qIFBjb3JlIG1vZHVsZXMgdXNlICovCitleHRlcm4gZ19hYnNfdGltZV9zdHJ1Y3QgZ19wc19hYnNfdGltZTsgLy8gUkFURE0sIEVNQUMsIEVEWU4sIEVMMiBjb3BybywgTDJUUFMKK2V4dGVybiBrYWxfdWludDMyIGwyX2dfYWJzX3RpbWVfZGlmZjsgLy9UaGUgdGljayBkaXN0YW5jZSBiZXR3ZWVuIHByZXZpb3VzIGFuZCBjdXJyZW50IGludGVycnVwdDogbWluaW1hbCB2YWx1ZSBpcyAxCisjZW5kaWYgICAvKiAtLS0tLSAjaWZuZGVmIEFCU19USU1FX0lOQyAgLS0tLS0gKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9hcHAyaXJjb21tX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2FwcDJpcmNvbW1fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4NjEyZQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9hcHAyaXJjb21tX3N0cnVjdC5oCkBAIC0wLDAgKzEsODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGFwcDJpcmNvbW1fc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIEludGVyZmFjZSBiZXR3ZWVuIElSQ09NTSBhbmQgQVBQCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAJCQkJSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BUFAySVJDT01NX1NUUlVDVF9ICisjZGVmaW5lIF9BUFAySVJDT01NX1NUUlVDVF9ICisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IHJlZl9jb3VudDsKKyAgICBrYWxfdWludDE2IG1zZ19sZW47CisgICAga2FsX2Jvb2wgICAgcmVzdWx0OyAgICAKK30gaXJjb21tX2Nvbm5lY3RfcnNwX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggcmVmX2NvdW50OworICAgIGthbF91aW50MTYgbXNnX2xlbjsKKyAgICBrYWxfdWludDE2IHdhaXRfZHVyYXRpb247ICAgIAorfSBpcmNvbW1fb3Blbl9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiB+X0FQUDJJUkNPTU1fU1RSVUNUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2FwcDJzYWZfZW51bXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9hcHAyc2FmX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRjYmI5MwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9hcHAyc2FmX2VudW1zLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogYXBwMnNhZl9lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEVudW0gZm9yIGludGVyZmFjZSBvZiBBUFAgYW5kIFNBRi4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfQVBQMlNBRl9FTlVNU19ICisjZGVmaW5lIF9BUFAyU0FGX0VOVU1TX0gKKworLyogVXNlZCB0byBzcGVjaWZ5IHRoZSBOQVQgdHlwZSAqLwordHlwZWRlZiBlbnVtCit7CisgICBTQUZfT1BFTl9JUCA9IDAsICAgICAgICAgICAgICAvKiBPcGVuIEludGVybmV0ICovCisgICBTQUZfVURQX0JMT0NLRUQsCSAgICAgICAgICAgICAvKiBVRFAgQmxvY2tlZCAqLworICAgU0FGX0ZVTExfQ09ORV9OQVQsCQkgICAgIC8qIEZ1bGwgY29uZSAqLworICAgU0FGX1JFU1RSSUNURURfQ09ORV9OQVQsCQkgLyogUmVzdHJpY3RlZCBjb25lICovCisgICBTQUZfUE9SVF9SRVNUUklDVEVEX0NPTkVfTkFULCAvKiBQb3J0IHJlc3RyaWN0ZWQgY29uZSAqLworICAgU0FGX1NZTV9OQVQsICAgICAgICAgICAgICAgICAgLyogU3ltbWV0cmljIE5BVCAqLworICAgU0FGX1NZTV9GSVJFV0FMTCAgICAgICAgCSAgICAgLyogU3ltbWV0cmljIEZpcmV3YWxsKi8KK30gc2FmX25hdF90eXBlX2VudW07CisKKy8qIFVzZWQgdG8gc3BlY2lmeSB0aGUgcmVzdWx0IGNvZGUgb2YgU0FGIG9wZXJhdGlvbiAqLwordHlwZWRlZiBlbnVtCit7CisgICBTQUZfT0s9MCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBPcGVyYXRpb24gU3VjY2VzcyAqLwkJCisgICBTQUZfTk9fU0VSVkVSX0FERFIsICAgICAgICAgICAgICAvKiBTZXJ2ZXIgQWRkcmVzcyBFcnJvciAqLworICAgU0FGX1JFUVVFU1RfVElNRU9VVCwgICAgICAgICAgICAgLyogUmVxdWVzdCBUaW1lb3V0ICovCisgICBTQUZfTk9fUEVORElOR19PUCwgICAgICAgICAgICAgICAvKiBObyBQZW5kaW5nIE9wZXJhdGlvbiAqLworICAgU0FGX0hBU19QRU5ESU5HX09QLCAgICAgICAgICAgICAgLyogSGFzIFBlbmRpbmcgT3BlcmF0aW9uICovCisgICBTQUZfU09DS0VUX0VSUk9SLCAgICAgICAgICAgICAgICAvKiBTb2NrZXQgRXJyb3IgKi8KKyAgIFNBRl9ETlNfRVJST1IsICAgICAgICAgICAgICAgICAgIC8qIEROUyBFcnJvciAqLworICAgU0FGX0NIQU5ORUxfTk9UX0VYSVNULCAgICAgICAgICAgLyogQ2hhbm5lbCBOb3QgRXhpc3QgKi8KKyAgIFNBRl9DSEFOTkVMX0VYSVNULCAgICAgICAgICAgICAgIC8qIENoYW5uZWwgQWxyZWFkeSBFeGlzdCAqLworICAgU0FGX1RPT19NQU5ZX0NIQU5ORUxTLCAgICAgICAgICAgLyogUmVhY2ggTWF4IE51bWJlciBvZiBDaGFubmVscyAqLworICAgU0FGX1RPT19NQU5ZX1BFTkRJTkdfT1AsICAgICAgICAgLyogUmVhY2ggTWF4IE51bWJlciBvZiBPcGVyYXRpb25zICovCisgICBTQUZfUkVDVl9CSU5ESU5HX0VSUl9SU1AsICAgICAgICAvKiBSZWNpZXZlIEVycm9yIEJpbmRpbmcgUmVzcCAqLworICAgU0FGX1NPQ0tFVF9DQU5DRUxfQUNUX0JFQVJFUiwgICAgLyogU29ja2V0IENhbmNlbCBBY3RpdmF0aW5nIEJlYXJlciAqLworICAgU0FGX1VOU1BFQ0lGSUVEX0VSUk9SCQkgICAgLyogR2VuZXJhbCBFcnJvciAqLworfSBzYWZfcmVzdWx0X2VudW07CisKKyNlbmRpZiAvKiBfQVBQMlNBRl9FTlVNU19IICovIAorCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvYXBwMnNhZl9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9hcHAyc2FmX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOGUyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvYXBwMnNhZl9zdHJ1Y3QuaApAQCAtMCwwICsxLDI4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiBhcHAyc2FmX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBjb21tb24gc3RydWN0IG9mIEFwcGxpY2F0aW9ucyBhbmQgU0FGLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9BUFAyU0FGX1NUUlVDVF9ICisjZGVmaW5lIF9BUFAyU0FGX1NUUlVDVF9ICisKKyNpZm5kZWYgX1NPQ19BUElfSAorI2Vycm9yIHBscyBpbmNsdWRlIHNvY19hcGkuaCBiZWZvcmUgYXBwMnNhZl9zdHJ1Y3QuaAorI2VuZGlmCisKKyNkZWZpbmUgU0FGX01BWF9TRVJWRVJfTEVOICAgICAgICAgICg2NCkgICAgLyogc2VydmVyIHN0cmluZyBsZW5ndGggY29uc3RyYWludCAqLworI2RlZmluZSBTQUZfTUFYX0RFUklWRURfQUREUl9OVU0gICAgKDIpICAgICAvKiBudW1iZXIgb2YgZGVyaXZlZCBhZGRyZXNzZXMgcXVlcmluZyBjb25zdHJhaW50ICovCisKKy8qIFRoZSBzdHJ1Y3R1cmUgZm9yIHNwZWNpZmllZCB0aGUgZGVyaXZlZCBhZGRyZXNzICovCit0eXBlZGVmIHN0cnVjdAoreworICAgc29ja2FkZHJfc3RydWN0IGxvY2FsX2FkZHI7ICAgICAgICAgIC8qIGxvY2FsIGFkZHJlc3MgKi8KKyAgIHNvY2thZGRyX3N0cnVjdCBkZXJpdmVkX2FkZHI7ICAgICAgICAvKiBkZXJpdmVkIGFkZHJlc3MgZnJvbSBzdHVuIHNlcnZlciAqLworfSBzYWZfYWRkcl9zdHJ1Y3Q7CisKKy8qIFVzZWQgdG8gb3BlbiB0aGUgY2hhbm5lbCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCByZWZfY291bnQ7CisgICBrYWxfdWludDE2IG1zZ19sZW47ICAKKyAgIAorICAga2FsX3VpbnQzMiAgZGF0YV9hY2NvdW50X2lkOyAgICAgICAgICAgICAgICAgLyogc2VsZWN0ZWQgZGF0YWFjY291bnQgZm9yIG9wZW5pbmcgY2hhbm5lbCAgKi8KKyAgIGthbF9jaGFyICAgc3R1bl9zZXJ2ZXJbU0FGX01BWF9TRVJWRVJfTEVOXTsgIC8qIHN0dW4gc2VydmVyIChudWxsIHRlcm1pbmF0ZWQpICovCisgICBrYWxfdWludDE2IHN0dW5fcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdHVuIHBvcnQgbnVtYmVyICovICAgCisgICBrYWxfY2hhciAgIHR1cm5fc2VydmVyW1NBRl9NQVhfU0VSVkVSX0xFTl07ICAvKiB0dXJuIHByb3RvLCBub3Qgc3VwcG9ydCB5ZXQgKi8KKyAgIGthbF91aW50MTYgdHVybl9wb3J0OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHR1cm4gcHJvdG8sIG5vdCBzdXBwb3J0IHlldCAqLworfSBhcHBfc2FmX29wZW5fY2hhbm5lbF9yZXFfc3RydWN0OworCisvKiBVc2VkIGZvciBjb25maXJtYXRpb24gb2YgT1BFTl9DSEFOTkVMX1JFUSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCByZWZfY291bnQ7CisgICBrYWxfdWludDE2IG1zZ19sZW47ICAKKyAgIAorICAga2FsX3VpbnQ4IHJlc3VsdDsgICAgICAgIC8qIHNhZl9yZXN1bHRfZW51bSAqLworICAga2FsX3VpbnQzMiBlcnJvcl9jYXVzZTsgIC8qIHJlc2VydmVkLCBhbHdheXMgcmV0dXJuIDAgbm93ICovCisgICBrYWxfdWludDggIGNoYW5uZWxfaWQ7ICAgLyogb3BlbmVkIGNoYW5uZWwgaWQgKi8KK30gYXBwX3NhZl9vcGVuX2NoYW5uZWxfY25mX3N0cnVjdDsKKworLyogVXNlZCB0byBhYm9ydCBPUEVOX0NIQU5ORUxfUkVRICovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4IHJlZl9jb3VudDsKKyAgIGthbF91aW50MTYgbXNnX2xlbjsgIAorICAgICAgCQorfSBhcHBfc2FmX2Fib3J0X29wZW5fY2hhbm5lbF9yZXFfc3RydWN0OworCisvKiBVc2VkIGZvciBjb25maXJtYXRpb24gb2YgQUJPUlRfT1BFTl9DSEFOTkVMX1JFUSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCByZWZfY291bnQ7CisgICBrYWxfdWludDE2IG1zZ19sZW47ICAKKyAgIAorICAga2FsX3VpbnQ4IHJlc3VsdDsgICAgICAgIC8qIHNhZl9yZXN1bHRfZW51bSAqLworICAga2FsX3VpbnQzMiBlcnJvcl9jYXVzZTsgIC8qIHJlc2VydmVkLCBhbHdheXMgcmV0dXJuIDAgbm93ICovCit9IGFwcF9zYWZfYWJvcnRfb3Blbl9jaGFubmVsX2NuZl9zdHJ1Y3Q7CisKKy8qIFVzZWQgdG8gY2xvc2UgdGhlIGNoYW5uZWwgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggcmVmX2NvdW50OworICAga2FsX3VpbnQxNiBtc2dfbGVuOyAgCisgICAKKyAgIGthbF91aW50OCAgY2hhbm5lbF9pZDsgICAvKiBzcGVjaWZpZWQgY2hhbm5lbCBpZCAqLyAgIAorfSBhcHBfc2FmX2Nsb3NlX2NoYW5uZWxfcmVxX3N0cnVjdDsKKworLyogVXNlZCBmb3IgY29uZmlybWF0aW9uIG9mIENMT1NFX0NIQU5ORUxfUkVRICovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4IHJlZl9jb3VudDsKKyAgIGthbF91aW50MTYgbXNnX2xlbjsgIAorICAgCisgICBrYWxfdWludDggcmVzdWx0OyAgICAgICAgLyogc2FmX3Jlc3VsdF9lbnVtICovCisgICBrYWxfdWludDMyIGVycm9yX2NhdXNlOyAgLyogcmVzZXJ2ZWQsIGFsd2F5cyByZXR1cm4gMCBub3cgKi8KKyAgIGthbF91aW50OCAgY2hhbm5lbF9pZDsgICAvKiBzcGVjaWZpZWQgY2hhbm5lbCBpZCAqLworfSBhcHBfc2FmX2Nsb3NlX2NoYW5uZWxfY25mX3N0cnVjdDsKKworLyogVXNlZCB0byBnZXQgdGhlIGRlcml2ZWQgSVAgYWRkcmVzcyBhbmQgcG9ydCBudW1iZXIgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggcmVmX2NvdW50OworICAga2FsX3VpbnQxNiBtc2dfbGVuOyAgCisgICAKKyAgIGthbF91aW50OCBjaGFubmVsX2lkOyAgICAvKiBhc3NvY2lhdGVkIGNoYW5uZWwgaWQgKi8KKyAgIGthbF91aW50MzIgcmVxdWVzdF9pZDsgICAvKiByZXR1cm4gc2FtZSB2YWx1ZSBpbiBjbmYgKi8KKyAgIAorICAga2FsX3VpbnQ4IHN0dW5fYWRkcl9udW07IC8qIGlkZW50aWZ5IHRoZSBudW1iZXIgb2YgYWRkcmVzc2VzIG5lZWQgdG8gcXVlcnkgKi8KKyAgIGthbF91aW50OCB0dXJuX2FkZHJfbnVtOyAvKiBub3Qgc3VwcG9ydCB5ZXQgKi8KK30gYXBwX3NhZl9nZXRfZGVyaXZlZF9hZGRyX3JlcV9zdHJ1Y3Q7CisKKy8qIFVzZWQgZm9yIGNvbmZpcm1hdGlvbiBvZiBHRVRfREVSSVZFRF9BRERSX1JFUSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCByZWZfY291bnQ7CisgICBrYWxfdWludDE2IG1zZ19sZW47ICAKKyAgIAorICAga2FsX3VpbnQ4IHJlc3VsdDsgICAgICAgIC8qIHNhZl9yZXN1bHRfZW51bSAqLworICAga2FsX3VpbnQzMiBlcnJvcl9jYXVzZTsgIC8qIHJlc2VydmVkLCBhbHdheXMgcmV0dXJuIDAgbm93ICovCisgICBrYWxfdWludDggIGNoYW5uZWxfaWQ7ICAgLyogYXNzb2NpYXRlZCBjaGFubmVsIGlkICovCisgICBrYWxfdWludDMyIHJlcXVlc3RfaWQ7ICAgLyogc2FtZSB2YWx1ZSBpbiByZXEgKi8KKyAgIHNhZl9hZGRyX3N0cnVjdCBzdHVuX2FkZHJbU0FGX01BWF9ERVJJVkVEX0FERFJfTlVNXTsgLyogYXNzb2NpYXRlZCBzdHVuIGFkZHJlc3Mgb2JqZWN0IGFycmF5ICovCisgICBrYWxfdWludDggICAgICAgc3R1bl9hZGRyX251bTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGlkZW50aWZ5IG51bWJlciBvZiBvYmplY3RzIGluIGFycmF5ICovCisgICBzYWZfYWRkcl9zdHJ1Y3QgdHVybl9hZGRyW1NBRl9NQVhfREVSSVZFRF9BRERSX05VTV07IC8qIHR1cm4gcHJvdG8sIG5vdCBzdXBwb3J0IHlldCAqLworICAga2FsX3VpbnQ4ICAgICAgIHR1cm5fYWRkcl9udW07ICAgICAgICAgICAgICAgICAgICAgICAvKiB0dXJuIHByb3RvLCBub3Qgc3VwcG9ydCB5ZXQgKi8KK30gYXBwX3NhZl9nZXRfZGVyaXZlZF9hZGRyX2NuZl9zdHJ1Y3Q7CisJCQkJCQorLyogVXNlZCB0byBhYm9ydCBHRVRfREVSSVZFRF9BRERSX1JFUSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCByZWZfY291bnQ7CisgICBrYWxfdWludDE2IG1zZ19sZW47ICAKKyAgIAorICAga2FsX3VpbnQ4IGNoYW5uZWxfaWQ7ICAgIC8qIGFzc29jaWF0ZWQgY2hhbm5lbCBpZCAqLworICAga2FsX3VpbnQzMiByZXF1ZXN0X2lkOyAgIC8qIHNoYWxsIHNhbWUgYXMgdGhlIG9uZSBpbiByZXEgKi8KKyAgIAorfSBhcHBfc2FmX2Fib3J0X2dldF9kZXJpdmVkX2FkZHJfcmVxX3N0cnVjdDsKKworLyogVXNlZCBmb3IgY29uZmlybWF0aW9uIG9mIEFCT1JUX0dFVF9ERVJJVkVEX0FERFJfUkVRICovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4IHJlZl9jb3VudDsKKyAgIGthbF91aW50MTYgbXNnX2xlbjsgIAorICAgCisgICBrYWxfdWludDggcmVzdWx0OyAgICAgICAgLyogc2FmX3Jlc3VsdF9lbnVtICovCisgICBrYWxfdWludDMyIGVycm9yX2NhdXNlOyAgLyogcmVzZXJ2ZWQsIGFsd2F5cyByZXR1cm4gMCBub3cgKi8KKyAgIGthbF91aW50OCAgY2hhbm5lbF9pZDsgICAvKiBzaGFsbCBzYW1lIGFzIHRoZSBvbmUgaW4gcmVxICovCisgICBrYWxfdWludDMyIHJlcXVlc3RfaWQ7ICAgLyogc2FtZSB2YWx1ZSBpbiByZXEgKi8KKyAgICAgIAorfSBhcHBfc2FmX2Fib3J0X2dldF9kZXJpdmVkX2FkZHJfY25mX3N0cnVjdDsKKworLyogVXNlZCB0byBnZXQgdGhlIE5BVCB0eXBlICovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4IHJlZl9jb3VudDsKKyAgIGthbF91aW50MTYgbXNnX2xlbjsgIAorICAgCisgICBrYWxfdWludDggY2hhbm5lbF9pZDsgICAgLyogYXNzb2NpYXRlZCBOQVQgdHlwZSAqLworICAgCisgICAvKiBUUlVFOiBTQUYgd2lsbCByZXBvcnQgU0FGX1JFU1RSSUNURURfQ09ORV9OQVQgZGlyZWN0bHkgYW5kIAorICAgICAgIHdpbGwgbm90IHBlcmZvcm0gZnVydGhlciB0ZXN0IGZvciBkaXN0aW5ndWlzaGluZyAKKyAgICAgICB3aGV0aGVyIGl0IGlzIFJlc3RyaWN0ZWQgQ29uZSBvciBQb3J0IFJlc3RyaWN0ZWQgQ29uZS4gCisgICAgICAgVGhpcyBjYW4gc2F2ZSB0aGUgZGlzY292ZXJ5IHRpbWUuICovCisgICBrYWxfYm9vbCBub3RfY2FyZV9wb3J0X3Jlc3RyaWN0ZWQ7IAorICAgCit9IGFwcF9zYWZfZ2V0X25hdF90eXBlX3JlcV9zdHJ1Y3Q7CisKKy8qIFVzZWQgZm9yIGNvbmZpcm1hdGlvbiBvZiBHRVRfTkFUX1RZUEVfUkVRICovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4IHJlZl9jb3VudDsKKyAgIGthbF91aW50MTYgbXNnX2xlbjsgIAorICAgCisgICBrYWxfdWludDggcmVzdWx0OyAgICAgICAgICAgIC8qIHNhZl9yZXN1bHRfZW51bSAqLworICAga2FsX3VpbnQzMiBlcnJvcl9jYXVzZTsgICAgICAvKiByZXNlcnZlZCwgYWx3YXlzIHJldHVybiAwIG5vdyAqLworICAga2FsX3VpbnQ4ICBjaGFubmVsX2lkOyAgICAgICAvKiBhc3NvY2lhdGVkIGNoYW5uZWwgaWQgKi8gICAKKyAgIGthbF91aW50OCBuYXRfdHlwZTsgICAgICAgICAgLyogc2FmX25hdF90eXBlX2VudW0gKi8KKworfSBhcHBfc2FmX2dldF9uYXRfdHlwZV9jbmZfc3RydWN0OworCisvKiBVc2VkIHRvIGdldCB0aGUgTkFUIGJpbmRpbmcgbGlmZXRpbWUgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggcmVmX2NvdW50OworICAga2FsX3VpbnQxNiBtc2dfbGVuOyAgCisgICAKKyAgIGthbF91aW50OCBjaGFubmVsX2lkOyAgICAgICAgICAgIC8qIGFzc29jaWF0ZWQgY2hhbm5lbCBpZCAqLyAgICAgIAorICAga2FsX3VpbnQzMiBpbml0aWFsX3RyaWFsX3RpbWU7IC8qIHNwZWNpZmllcyB0aGUgZmlyc3QgbGlmZXRpbWUgU0FGIHRyaWVkIHRvIHRlc3QuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6IGJ5IGRlZmF1bHQsIGluIHNlY29uZCAqLyAgCisgICBrYWxfdWludDMyIG1heF90cmlhbF9jb3VudDsgICAgLyogc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG9mIHRyaWFscy4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDogYnkgZGVmYXVsdCAqLyAgIAorICAga2FsX3VpbnQzMiBtYXhfdHJpYWxfZHVyYXRpb247IC8qIHNwZWNpZmllcyB0aGUgbWF4aW11bSBvZiB0cmlhbCBkdXJhdGlvbiB3aGljaCBhcHBsaWNhdGlvbiBjb3VsZCBlbmR1cmUuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6IGJ5IGRlZmF1bHQsIGluIHNlY29uZCAqLworICAgCit9IGFwcF9zYWZfZ2V0X25hdF9iaW5kaW5nX2xpZmV0aW1lX3JlcV9zdHJ1Y3Q7CisKKy8qIFVzZWQgZm9yIGNvbmZpcm1hdGlvbiBvZiBHRVRfTkFUX0JJTkRJTkdfTElGRVRJTUVfUkVRICovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4IHJlZl9jb3VudDsKKyAgIGthbF91aW50MTYgbXNnX2xlbjsgIAorICAgCisgICBrYWxfdWludDggcmVzdWx0OyAgICAgICAgICAgIC8qIHNhZl9yZXN1bHRfZW51bSAqLworICAga2FsX3VpbnQzMiBlcnJvcl9jYXVzZTsgICAgICAvKiByZXNlcnZlZCwgYWx3YXlzIHJldHVybiAwIG5vdyAqLworICAga2FsX3VpbnQ4ICBjaGFubmVsX2lkOyAgICAgICAvKiBhc3NvY2lhdGVkIGNoYW5uZWwgaWQgKi8gICAKKyAgIGthbF91aW50MzIgbGlmZXRpbWU7ICAgICAgICAgLyogaW4gc2Vjb25kICovCisKK30gYXBwX3NhZl9nZXRfbmF0X2JpbmRpbmdfbGlmZXRpbWVfY25mX3N0cnVjdDsKKworLyogVGhlIGFib3J0IGdldCBuYXQgdHlwZSByZXF1ZXN0IGFuZCBhYm9ydCBnZXQgZGVyaXZlZCBhZGRyIHJlcXVlc3Qgc2hhcmUgdGhlIHNhbWUgc3RydWN0cyAqLwordHlwZWRlZiBhcHBfc2FmX2Fib3J0X2dldF9kZXJpdmVkX2FkZHJfcmVxX3N0cnVjdCBhcHBfc2FmX2Fib3J0X2dldF9uYXRfdHlwZV9yZXFfc3RydWN0OworCisvKiBUaGUgYWJvcnQgZ2V0IG5hdCBsaWZldGltZSByZXF1ZXN0IGFuZCBhYm9ydCBnZXQgZGVyaXZlZCBhZGRyIHJlcXVlc3Qgc2hhcmUgdGhlIHNhbWUgc3RydWN0cyAqLwordHlwZWRlZiBhcHBfc2FmX2Fib3J0X2dldF9kZXJpdmVkX2FkZHJfcmVxX3N0cnVjdCBhcHBfc2FmX2Fib3J0X2dldF9uYXRfbGlmZXRpbWVfcmVxX3N0cnVjdDsKKworLyogVGhlIGFib3J0IGdldCBuYXQgdHlwZSBjb25maXJtIGFuZCBhYm9ydCBnZXQgZGVyaXZlZCBhZGRyIGNvbmZpcm0gc2hhcmUgdGhlIHNhbWUgc3RydWN0cyAqLwordHlwZWRlZiBhcHBfc2FmX2Fib3J0X2dldF9kZXJpdmVkX2FkZHJfY25mX3N0cnVjdCBhcHBfc2FmX2Fib3J0X2dldF9uYXRfdHlwZV9jbmZfc3RydWN0OworCisvKiBUaGUgYWJvcnQgZ2V0IG5hdCBsaWZldGltZSBjb25maXJtIGFuZCBhYm9ydCBnZXQgZGVyaXZlZCBhZGRyIGNvbmZpcm0gc2hhcmUgdGhlIHNhbWUgc3RydWN0cyAqLwordHlwZWRlZiBhcHBfc2FmX2Fib3J0X2dldF9kZXJpdmVkX2FkZHJfY25mX3N0cnVjdCBhcHBfc2FmX2Fib3J0X2dldF9uYXRfbGlmZXRpbWVfY25mX3N0cnVjdDsKKworI2VuZGlmIC8qIF9BUFAyU0FGX1NUUlVDVF9IICovIAorCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvYXMybW1pX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2FzMm1taV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2ZhMTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2FzMm1taV9zdHJ1Y3QuaApAQCAtMCwwICsxLDEzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgYXMybW1pX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGUgc3RydWN0dXJlIGRlZmluaXRpb24gYmV0d2VlbiBBUyBhbmQgTU1JLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfQVMyTU1JX1NUUlVDVF9ICisjZGVmaW5lIF9BUzJNTUlfU1RSVUNUX0gKKworLyogYWRkIFJIUiAqLworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCByc3NpOyAvKiByZWNlaXZlZCBzaWduYWwgc3RyZW5ndGggaW5kaWNhdGlvbiovCisgICAga2FsX3VpbnQ4IGJlcjsgLyogZEJtIHBvd2VyKi8KKyAgICBrYWxfdWludDggY3VycmVudF9iYW5kOworfSBtbWlhc19jZWxsX3Bvd2VyX2xldmVsX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX3BrdF90cmFuc2Zlcl9tb2RlOyAvKiBLQUxfVFJVRTogaW4gcGFja2V0IHRyYW5zZmVyIG1vZGUsIEtBTF9GQUxTRTogbm90IGluIHBhY2tldCB0cmFuc2ZlciBtb2RlICovCit9IG1taWFzX3BrdF90cmFuc2Zlcl9tb2RlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgZW51bQoreworICAgIFVBU19QT1dFUl9MRVZFTF9SU1NJLAorICAgIFVBU19QT1dFUl9MRVZFTF9SU0NQLAorICAgIFVBU19QT1dFUl9MRVZFTF9FQ04wICAgIAorfXVhc19wb3dlcl9sZXZlbF9pbmRfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHJzc2k7IC8qIHJlY2VpdmVkIHNpZ25hbCBzdHJlbmd0aCBpbmRpY2F0aW9uKi8KKyAgICBrYWxfdWludDggYmVyOyAKKyAgICBrYWxfdWludDggc2lnbmFsX3N0cmVuZ3RoOyAvKiBzaWduYWwgYmFyIGRpc3BsYXkgdmFsdWUgZm9yIE1NSSovCit9IHJhY191YXNfY2VsbF9wb3dlcl9sZXZlbF9pbmRfc3RydWN0OworCisjZW5kaWYgCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9hczJuYXNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvYXMybmFzX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YjU3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvYXMybmFzX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgYXMybmFzX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9BUzJOQVNfU1RSVUNUX0gKKyNkZWZpbmUgX0FTMk5BU19TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBtb2R1bGVfdHlwZSBtb2R1bGVfaWQ7IC8vIEVyaWM6IG1vZHVsZV9pZCBtaWdodCBiZSBsYXJnZXIgdGhhbiBVOCwgc2hvdWxkIGFsaWduIHRoaXMgc3RydWN0dXJlIHdpdGggbW9kdWxlX3R5cGUKKyAgICBrYWxfdWludDggcGVlcl9tc2dfaWQ7CisgICAga2FsX3VpbnQ4IHRyYW5zX2lkOyAKKyAgICAvLyBGb3IgTU9EX1NNLCB0aGlzIHRyYW5zX2lkIGZpZWxkIGlzIG5vdCB1c2VkIGFzIHRyYW5zYWN0aW9uIGlkLiBNT0RfU00gdXNlcyBsZWZ0IDQgYml0IGFzIHNlcmlhbCBudW1iZXIsIHRoZSByaWdodCA0IGJpdCBpcyB1c2VkIGFzIGNvbnRleHRfbnVtLgorfSBwZWVyX21zZ19pZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIGthbF91aW50OCByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiBtc2dfbGVuOworICAgIGthbF91aW50OCB0eF9zdGF0dXM7ICAgIAorICAgIGthbF91aW50MTYgc2VxX25vOworICAgIHBlZXJfbXNnX2lkX3N0cnVjdCBwZWVyX21zZzsKKyNpZiBkZWZpbmVkKF9fR0VNSU5JX18pCisgICAga2FsX2Jvb2wgaXNfcnJfaW5fc3VzcGVuZDsKKyNlbmRpZgorICAgIGthbF91aW50OCBhYm1fdHJhbnNfaWQ7IAorfSBhc19uYXNfZGF0YV9jbmZfc3RydWN0OworCisvKiBKZWZmIFd1IDIwMDUtMDItMTQgKi8KK3R5cGVkZWYgYXNfbmFzX2RhdGFfY25mX3N0cnVjdCBsbGdtbV9hc19uYXNfZGF0YV9jbmZfc3RydWN0OworCisjZW5kaWYgLy9fQVMyTkFTX1NUUlVDVF9ICisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2FzX2FjY2Vzc19zZW1fY29udGV4dC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2FzX2FjY2Vzc19zZW1fY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ODExY2MKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvYXNfYWNjZXNzX3NlbV9jb250ZXh0LmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgYXNfYWNjZXNzX3NlbV9jb250ZXh0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIHNlbWFwaG9yZSBjb250ZXh0IGZvciBBUworICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogJExvZyQKKyAqCisgKiAwNSAxNSAyMDE4IGNoZXN0ZXItemQuaHVhbmcKKyAqIFtNT0xZMDAzMjYwMTRdIFtHZW45NV1bTVNQTV0gU1cgY2hhbmdlcyBjaGVjayBpbiBVTU9MWUUKKyAqIAkKKyAqIAktQVNfQUNDRVNTX1NFTSBDYWxsYmFjayBGdW5jdGlvbgorICoKKyAqIDEyIDE0IDIwMTAgbmFuY3kuY2hhbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0FTX0FDQ0VTU19TRU1fQ09OVEVYVF9IXworI2RlZmluZSBfQVNfQUNDRVNTX1NFTV9DT05URVhUX0hfCisKKyNpZmRlZiBfX0dFTUlOSV9fCisKKy8qIE5hbmN5IDIwMTAxMDA1OiBTdWdnZXN0IEFkZCBmb3IgUkhSICovCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYWNyb3MgV2l0aG91dCBQYXJhbWV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYWNyb3MgV2l0aCBQYXJhbWV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtcyB3aXRob3V0IHRhZ3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWNsYXJhdGlvbnMgT2YgRXhwb3J0ZWQgR2xvYmFscworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZW5kaWYgLyogX19HRU1JTklfXyAqLworCisjZW5kaWYgLyogX0FTX0FDQ0VTU19TRU1fQ09OVEVYVF9IXyAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2FzX2FjY2Vzc19zZW1fZnVuY3MuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9hc19hY2Nlc3Nfc2VtX2Z1bmNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3NzMwZgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9hc19hY2Nlc3Nfc2VtX2Z1bmNzLmgKQEAgLTAsMCArMSwxOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgYXNfYWNjZXNzX3NlbV9mdW5jcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICRMb2ckCisgKgorICogMDUgMTUgMjAxOCBjaGVzdGVyLXpkLmh1YW5nCisgKiBbTU9MWTAwMzI2MDE0XSBbR2VuOTVdW01TUE1dIFNXIGNoYW5nZXMgY2hlY2sgaW4gVU1PTFlFCisgKiAJCisgKiAJLUFTX0FDQ0VTU19TRU0gQ2FsbGJhY2sgRnVuY3Rpb24KKyAqCisgKiAwOCAxOCAyMDE3IHl1aGh3YW5nLnl1CisgKiBbTU9MWTAwMjcxOTI1XSBbU1JMVEUgRW5oYW5jZW1lbnRdW1VNT0xZQV0gUlNWQSBjb2RlIHN5bmMKKyAqIC4KKyAqCisgKiAwMyAyMyAyMDE3IGZhcm1pbmcudHNlbmcKKyAqIFtNT0xZMDAyMjg0MTRdIFJTVkFTIGRpc3BhdGNoIHN1c3BlbmRfcmVxIHRvIEVMMiBpbiBzZXF1ZW5jZQorICogCQorICogCS4KKyAqCisgKiAxMSAxOSAyMDE1IHl1aGh3YW5nLnl1CisgKiBbTU9MWTAwMTQ4NTg0XSBbUlNWQVNdIGFkZCBkZWJ1ZyBpbmZvIGZvciB0cmFjZSBjb25maXJtIHByaW1pdGl2ZSBiaXRtYXNrCisgKiAuIGFkZCBjYWxsYmFjayBmdW5jdGlvbiB0byB0cmFjZSBjbmYgYml0bWFzaworICoKKyAqIDA1IDA2IDIwMTQgY2hpLWNodW5nLmxpbgorICogW01PTFkwMDA2NDA5M10gW0xURS1HZW1pbmldWzJHXSBBZGQgVFNUIGluamVjdCBjb2RlIHRvIGZvcmNlIHNsZWVwIGluIElSIHNwZWNpZmljIHN0YWdlCisgKiAJLgorICoKKyAqIDAxIDIyIDIwMTQgbWFydWNvLnR1CisgKiBbTU9MWTAwMDU0MzI0XSBbNEcgR2VtaW5pXVtNZXJnZV0gTU9MWS5NTS5HRU1JTkkuREVWIE1lcmdlIGJhY2sgdG8gTU9MWQorICogTWVyZ2UgTFRFIEdFTUlOSSB0byBNT0xZCisgKgorICogMDYgMTcgMjAxMyBtb3J0b24ubGluCisgKiBbTU9MWTAwMDI2MzQ2XSBbVm9sdW50ZWVyIFBhdGNoXSBGaXggc3ludGF4IGVycm9yIHdoaWxlIHR1cm5pbmcgR2VtaW5pIGNvbXBpbGUgb3B0aW9uIE9OCisgKiBGaXggYSBzeW50YXggZXJyb3IgYmVjYXVzZSB0aGUgb3JpZ2luYWwgYXNzaWduZXIgd2hvIGZvcmdvdCB0byBtZXJnZSB0aGlzLgorICoKKyAqIDAxIDIzIDIwMTMgbW9ydG9uLmxpbgorICogW01PTFkwMDAwOTE2Ml0gW011bHRpbW9kZV1bUlJDRV0gQ29kZSBtZXJnZSBiYWNrIHRvIE1PTFkKKyAqIFBhcnQgMiAtIE90aGVyIGNvbW1vbiBmaWxlcyBmb3IgTXVsdGltb2RlCisgKgorICogMDYgMTMgMjAxMiBqdXN0aW4ubGkKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDUgMDkgMjAxMiB4dWVjaGFvLndhbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDQgMjQgMjAxMiB3Y3B1c2VyX2ludGVncmF0b3IKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDQgMTMgMjAxMiBibGFuZGVuLndlbgorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwNiAwMyAyMDExIHdpbGxpYW0uY2hhbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDUgMTAgMjAxMSBqaW5nby55ZWgKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDUgMTAgMjAxMSB3aWxsaWFtLmNoYW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDAzIDE2IDIwMTEgcGV0ZXIuY2hpZW4KKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTIgMTQgMjAxMCBuYW5jeS5jaGFuZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfQVNfQUNDRVNTX1NFTV9GVU5DU19IXworI2RlZmluZSBfQVNfQUNDRVNTX1NFTV9GVU5DU19IXworCisjaWZkZWYgX19HRU1JTklfXworCisvKiBOYW5jeSAyMDEwMTAwNTogU3VnZ2VzdCBBZGQgZm9yIFJIUiAqLworI2luY2x1ZGUgInJzdmFzX2VudW0uaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIgLy9NU0JCIGNoYW5nZSAjaW5jbHVkZSAic3RhY2tfY29uZmlnLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKworI2lmbmRlZiBfUlNWQVNfRU5VTV9ICisjZXJyb3IgImByc3Zhc19lbnVtLmgnIG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIGBhc19hY2Nlc3Nfc2VtX2Z1bmNzLmgnIgorI2VuZGlmIAorCisjaW5jbHVkZSAiYXNfYWNjZXNzX3NlbV9jb250ZXh0LmgiCisKKworZXh0ZXJuIHZvaWQgYXNfY2hlY2tfY25mX2JpdG1hc2sodm9pZCk7CisKKyNpZmRlZiBfX0VUV1NfU1VQUE9SVF9fCisjaWYgIWRlZmluZWQoX19NVEtfVEFSR0VUX18pICYmICFkZWZpbmVkKF9fVUVfU0lNVUxBVE9SX18pCitleHRlcm4gdm9pZCBhc19zZXRfZXR3c19vd25lcihjb25zdCByc3Zhc19pZF9lbnVtIG5ld19ldHdzX293bmVyKTsKKyNlbmRpZgorI2VuZGlmCisKK2V4dGVybiB2b2lkIHJzdmFzX3NlbmRfZWwyX3N1c3BlbmRfc2VxdWVuY2Uoa2FsX3VpbnQzMiBlbDJfdGFza19zdXNwZW5kX3NxdWVuY2UpOworCisjaWYgZGVmaW5lZChfX0VUV1NfU1VQUE9SVF9fKXx8ZGVmaW5lZChfX0xURV9SQVRfXykKK2V4dGVybiBrYWxfYm9vbCBhc191cGRhdGVfZXR3c19jaGFubmVsX3ByaW9yaXR5KGNvbnN0IG1vZHVsZV90eXBlIG1vZF9zcmMsIGNvbnN0IHJzdmFzX2lkX2VudW0gaWQsIGNvbnN0IGthbF9ib29sIGlzX3Byb3RlY3RfcmVxKTsKKworZXh0ZXJuIHJzdmFzX2lkX2VudW0gYXNfZXR3c19vd25lcl9xdWVyeSh2b2lkKTsKKyNlbmRpZiAvKiBfX0VUV1NfU1VQUE9SVF9fIHx8IF9fTFRFX1JBVF9fKi8KKworCisjZW5kaWYgLyogX19HRU1JTklfXyAqLworCisjZW5kaWYgLyogX0FTX0FDQ0VTU19TRU1fRlVOQ1NfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2FzX2NvbW1vbi5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2FzX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NjIwZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvYXNfY29tbW9uLmgKQEAgLTAsMCArMSw0MDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKglhc19jb21tb24uaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgYWNjZXNzIHN0cmF0dW0KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0FTX0NPTU1PTl9IX18KKyNkZWZpbmUgX19BU19DT01NT05fSF9fCisKKy8qIElOQ0xVREVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJ0YXNrX2NvbmZpZy5oIiAgICAgICAgICAgLy9BbGZpZTogYWRkZWQgd2hlbiBwb3J0aW5nIHdpdGggS2FyZW4ncyBhc2suCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKy8qIFRZUEUgREVGSU5JVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFU4ICAgICAgICBrYWxfdWludDgKKyNkZWZpbmUgUzggICAgICAgIGthbF9pbnQ4CisjZGVmaW5lIFUxNiAgICAgICBrYWxfdWludDE2CisjZGVmaW5lIFMxNiAgICAgICBrYWxfaW50MTYKKyNkZWZpbmUgVTMyICAgICAgIGthbF91aW50MzIKKyNkZWZpbmUgUzMyICAgICAgIGthbF9pbnQzMgorI2RlZmluZSB0Qk9PTCAgICAga2FsX2Jvb2wKKyNkZWZpbmUgQm9vbCAgICAgIGthbF9ib29sCisjZGVmaW5lIFRJTUVfT0ZfREFZIGRvdWJsZQorCisjaWZuZGVmIEZBTFNFX0UKKyNkZWZpbmUgRkFMU0VfRSAgIEtBTF9GQUxTRQorI2VuZGlmCisKKyNpZm5kZWYgVFJVRV9FCisjZGVmaW5lIFRSVUVfRSAgICBLQUxfVFJVRQorI2VuZGlmCisKKyNpZm5kZWYgdE1zZworI2RlZmluZSB0TXNnICAgICAgaWxtX3N0cnVjdCoKKyNlbmRpZgorCisKKy8qIFZpbmNlbnQgMDUxMjMwOiBrZWVwIGFuZCByZW9yZGVyIHRoZSBlbnVtIHZhbHVlIFNVQ0NFU1NfRSBhbmQgRkFJTFVSRV9FIGluIGF2b2lkIAorICogdG8gY29uZnVzZSB3aXRoIHRoZSB1c2FnZSBvZiBrYWxfYm9vbCAqLworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCit0eXBlZGVmIGVudW0KK3sKKyAgIEZBSUxVUkVfRSwgICAgICAgLyogZ2VuZXJpYyBmYWlsdXJlICovCisgICBTVUNDRVNTX0UgICAgICAgIC8qIENvbW1hbmQgY29tcGxldGVkIHdpdGhvdXQgZXJyb3JzICovCit9IHRSZXR1cm5Db2RlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgICBCZWxvdyBlbnVtIGlzIHVzZWQgZm9yIEVMVCB0b29sIHRvIHJlY29nbml6ZSBNQ0RETEwgc3VwcG9ydGVkIHZlcnNpb24uCisgICBhbmQgRUxUIG1heSB1c2UgZGlmZmVyZW50IGluLXRvb2wgZGVjb2RlciBmaWxlIAorICAgT25seSBNQ0RETEwgY29udGFjdCB3aW5kb3cgYW5kIHRvb2wgdGVhbSBjYW4gbW9kaWZ5IHRoaXMgZW51bSAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBlbnVtCit7CisgICAgbWNkZGxsX2Y0MCAvKiBzdXBwb3J0IEFTTiB0byAzOC4zMzEgZjQwIHZlcnNpb24gKi8KK30gTUNERExMX0ZpbGVfSW5mbzsKKworLyogTUFDUk9TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBCSVRTX1BFUl9CWVRFICAgOAorCisjaWZkZWYgTUlOCisjdW5kZWYgTUlOCisjZW5kaWYKKyNkZWZpbmUgTUlOKEEsQikgKCgoQSk8KEIpKT8oQSk6KEIpKQorCisjaWZkZWYgTUFYCisjdW5kZWYgTUFYCisjZW5kaWYKKyNkZWZpbmUgTUFYKEEsQikgKCgoQSk+KEIpKT8oQSk6KEIpKQorCisjZGVmaW5lIFBVQkxJQworI2RlZmluZSBQUklWQVRFICAgc3RhdGljCisKKyNkZWZpbmUgTk9UX1VTRUQoeCkgKHZvaWQpKHgpCisKKyNkZWZpbmUgTk9UX1VTRURfRlNNX1BBUkFNRVRFUlMoKSBcCisgICAgICAodm9pZCkodFJlY2VpdmVkTXNnKTsgXAorICAgICAgKHZvaWQpKFUzMkludGVycHJldGVkRXZlbnQpOyBcCisgICAgICAodm9pZCkocFUzMlN0YXRlKTsgXAorICAgICAgKHZvaWQpKHB0Q29udGV4dCk7IFwKKyAgICAgICh2b2lkKShwU2F2ZWQpOyBcCisgICAgICAodm9pZCkocFJlbGVhc2VNc2cpOyBcCisgICAgICAodm9pZCkoaXNTYXZlZEV2ZW50KTsKKworI2RlZmluZSBTTV9QT1BVTEFURV9TVEFURURfUFJPQ0VTUyhzbSwgb2Zmc2V0LCB0eXBlKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZVNNX1BvcHVsYXRlUHJvY2Vzc1NlcnZpY2VTTSgmKHNtKSwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTV9TVEFURVNfICMjIHR5cGUsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVU1fRVZFTlRTXyAjIyB0eXBlLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAjIyB0eXBlICMjIF9TdGF0ZVRhYmxlLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrYWxfaW50OCopIiIjdHlwZSIiKQorCisjZGVmaW5lIElTX1ZBTElEX0VOVFJZKGNoZWNrUGFyYW1QdHIpICAgICAgICAgICAgICBcCisgICAgICAgICAocENvbnRleHQgIT0gTlVMTCkgJiYgKHBTdGF0ZSAhPSBOVUxMKSAmJiBcCisgICAgICAgICAoKGNoZWNrUGFyYW1QdHIpID09IEtBTF9UUlVFID8gKHBDb250ZXh0LT5wdlBhcmFtcyAhPSBOVUxMKSA6IEtBTF9UUlVFKQorCisKKy8qIERlc2NyaXB0aW9uOiByYW5nZSBjaGVja2luZyBtYWNyby4gIFRlc3QgaWYgdiBpcyBiZXR3ZWVuIG1pbiBhbmQKKyAgIG1heC4gVXNlIHRoaXMgbWFjcm8gd2l0aCBjb250aWd1b3VzIGVudW1lcmF0ZWQgdHlwZXMgKHNlZQorICAgSVNfV0VFS0VORCBtYWNybyBleGFtcGxlIGluIGNvbnRyYWN0X3Byb2dyYW1taW5nLmgpLiAqLworLyogTm90ZTogdG8gYXZvaWQgdGhlIGZvbGxvd2luZyB3YXJuaW5nOiBjb21wYXJpc29uIGlzIGFsd2F5cyAxIGR1ZSB0byBsaW1pdGVkIAorICogcmFuZ2Ugb2YgZGF0YSB0eXBlLiBEb24ndCB1c2UgdGhpcyBJU19JTlJBTkdFIGp1c3QgdXNlICh2IDw9IG1heCkuICovCisjZGVmaW5lIElTX0lOUkFOR0UodiwgbWluLCBtYXgpICgobWluKSA8PSAodikgJiYgKHYpIDw9IChtYXgpKQorCisvKiBEZXNjcmlwdGlvbjogdmFsaWQgcG9pbnRlciB0eXBlIGNoZWNraW5nIG1hY3JvLiAgVGVzdCBpZiBwIGlzIG5vbgorICAgbnVsbCBwb2ludGVyLiBOb3RlOiBhIHZhbGlkIHBvaW50ZXIgYWx3YXlzIHBvaW50cyBvbiBhbGxvY2F0ZWQKKyAgIG1lbW9yeS4gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBjb25jZXB0IG9mIHJlZmVyZW5jZXMgaW4gQysrLiAqLworI2RlZmluZSBJU19WQUxJRF9QVFIocCkgKChwKSAhPSBOVUxMKQorCisjZGVmaW5lIElTX1RCT09MKGZsYWcpICgoZmxhZyA9PSBUUlVFKSB8fCAoZmxhZyA9PSBGQUxTRSkpCisKKyNkZWZpbmUgVFRfRU5UUllfU0laRSAgc2l6ZW9mKHRUcmFuc2xhdGVUYWJsZUVudHJ5KQorCisjZGVmaW5lIG1TTV9FTlRSWV9GTih4KSBrYWxfYm9vbCB4KHN0cnVjdCB0Q29udGV4dCogcENvbnRleHQsIGthbF91aW50MzIqIHBTdGF0ZSkKKworI2RlZmluZSBTTV9QQVJBTShjb250ZXh0UHRyLCBwYXJhbUlEKSAgKGNvbnRleHRQdHIpLT5wdENDLT5hU0NJUGFyYW1zWyhwYXJhbUlEKV0uVTMyUGFyYW1WYWx1ZQorCisvL21hY3JvIHRvIGluaXRpYWxpc2UgbWF4IHByb2Nlc3MgaW5zdGFuY2UgYXJyYXkKKyNkZWZpbmUgSU5JVF9NQVhfSU5TVEFOQ0VTKGNvbXBvbmVudCwgYXJyYXksIHByb2Nlc3NDb3VudCkgIFwKKyAgICAgICAgIHtpbnQgaTsgZm9yKGkgPSAwOyBpIDwgKHByb2Nlc3NDb3VudCk7IGkrKyl7KGNvbXBvbmVudCktPmFNYXhJbnN0YW5jZUFycmF5W2ldPSgoYXJyYXkpW2ldKTt9KGNvbXBvbmVudCktPmFNYXhJbnN0YW5jZUFycmF5W2ldID0gKGFycmF5KVtpXTt9CisKKyNkZWZpbmUgQUxMT0NfU0VORF9JTE0obWFjcm9fc3JjX21vZCwgbWFjcm9fZGVzdF9tb2QsIG1hY3JvX3NhcF9pZCwgbWFjcm9fbXNnX2lkLCBtYWNyb19sb2NhbF9wYXJhX3B0ciwgbWFjcm9fcGVlcl9idWZmX3B0cikgXAorICAgIG1zZ19zZW5kNigobWFjcm9fc3JjX21vZCksIChtYWNyb19kZXN0X21vZCksIChtYWNyb19zYXBfaWQpLCAobWFjcm9fbXNnX2lkKSwgKGxvY2FsX3BhcmFfc3RydWN0ICopKG1hY3JvX2xvY2FsX3BhcmFfcHRyKSwgKHBlZXJfYnVmZl9zdHJ1Y3QgKikobWFjcm9fcGVlcl9idWZmX3B0cikpCisKKyNpZmRlZiBfX01US19UQVJHRVRfXyAvL29ubHkgdGFyZ2V0CisjZGVmaW5lIEFMTE9DX1NFTkRfSUxNX0NDKG1hY3JvX3NyY19tb2QsIG1hY3JvX2Rlc3RfbW9kLCBtYWNyb19zYXBfaWQsIG1hY3JvX21zZ19pZCwgbWFjcm9fbG9jYWxfcGFyYV9wdHIsIG1hY3JvX3BlZXJfYnVmZl9wdHIpIFwKKyAgICBtc2dfc2VuZDZfY2MoKG1hY3JvX3NyY19tb2QpLCAobWFjcm9fZGVzdF9tb2QpLCAobWFjcm9fc2FwX2lkKSwgKG1hY3JvX21zZ19pZCksIChsb2NhbF9wYXJhX3N0cnVjdCAqKShtYWNyb19sb2NhbF9wYXJhX3B0ciksIChwZWVyX2J1ZmZfc3RydWN0ICopKG1hY3JvX3BlZXJfYnVmZl9wdHIpKQorI2Vsc2UgLy9VVChpbmNsdWRpbmcgTW9ESVMgSVQpIG9yIE5XU0lNCisjZGVmaW5lIEFMTE9DX1NFTkRfSUxNX0NDKG1hY3JvX3NyY19tb2QsIG1hY3JvX2Rlc3RfbW9kLCBtYWNyb19zYXBfaWQsIG1hY3JvX21zZ19pZCwgbWFjcm9fbG9jYWxfcGFyYV9wdHIsIG1hY3JvX3BlZXJfYnVmZl9wdHIpIFwKKyAgICBtc2dfc2VuZDYoKG1hY3JvX3NyY19tb2QpLCAobWFjcm9fZGVzdF9tb2QpLCAobWFjcm9fc2FwX2lkKSwgKG1hY3JvX21zZ19pZCksIChsb2NhbF9wYXJhX3N0cnVjdCAqKShtYWNyb19sb2NhbF9wYXJhX3B0ciksIChwZWVyX2J1ZmZfc3RydWN0ICopKG1hY3JvX3BlZXJfYnVmZl9wdHIpKQorI2VuZGlmIC8qIF9fTVRLX1RBUkdFVF9fICovCisKKy8qIFBsZWFzZSBub3RpY2UgdGhhdCBkaGxfbG9nX3ByaW1pdGl2ZTYoKSB3aWxsIG5vdCBmcmVlIHRoZSBsb2NhbCBwYXJhbWV0ZXIgYW5kIHBlZXIgYnVmZmVyLCB1c2VycyBzaG91bGQgdGFjayBjYXJlIGFib3V0IGl0IGJ5IHRoZW1zZWxmLiAqLworI2RlZmluZSBBTExPQ19MT0dfSUxNKG1hY3JvX3NyY19tb2QsIG1hY3JvX3NhcF9pZCwgbWFjcm9fbXNnX2lkLCBtYWNyb19sb2NhbF9wYXJhX3B0cikgXAorICAgICAgICBkaGxfbG9nX3ByaW1pdGl2ZTYoKG1hY3JvX3NyY19tb2QpLCAoTU9EX0RITCksIChtYWNyb19zYXBfaWQpLCAobWFjcm9fbXNnX2lkKSwgKGxvY2FsX3BhcmFfc3RydWN0ICopKG1hY3JvX2xvY2FsX3BhcmFfcHRyKSwgTlVMTCkKKworI2RlZmluZSBNU0dfQ0FTVChwdHIsIG1zZywgY2FzdCk7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgQVNTRVJUKG1zZy0+bG9jYWxfcGFyYV9wdHIgIT0gTlVMTCk7ICAgXAorICAgICAgICAgICAgcHRyID0gKCBjYXN0ICopbXNnLT5sb2NhbF9wYXJhX3B0cjsgICAgXAorICAgICAgICAgfQorCisjZGVmaW5lIFVQTEFORV9UU1RBTVAoeCkgICAgICAgICAgICAvL3RlbXBvcmFyaWx5CisKKyNkZWZpbmUgVVBMQU5FX0JFTkNITUFSS19UU1RBTVAoeCkgIC8vdGVtcG9yYXJpbHkKKworI2RlZmluZSBDT05GT1JNQU5DRV9UU1RBTVAoeCkgICAgICAgLy90ZW1wb3JhcmlseQorCisjZGVmaW5lIHRSZXR1cm4oeCk7IHtpZiAoeCA9PSBTVUNDRVNTX0UpIHJldHVybiBLQUxfVFJVRTsgZWxzZSByZXR1cm4gS0FMX0ZBTFNFO30KKworI2RlZmluZSBhc19mcmVlX2xvY2FsX3BhcmFfc2V0X251bGwobG9jYWxfcGFyYSkgXAorZG8geyBmcmVlX2xvY2FsX3BhcmEoKGxvY2FsX3BhcmFfc3RydWN0ICopKGxvY2FsX3BhcmEpKTsgKGxvY2FsX3BhcmEpPU5VTEw7IH0gd2hpbGUoMCkKKworI2RlZmluZSBhc19mcmVlX2xvY2FsX3BhcmFfcl9zZXRfbnVsbChsb2NhbF9wYXJhKSBcCitkbyB7IGZyZWVfbG9jYWxfcGFyYV9yKChsb2NhbF9wYXJhX3N0cnVjdCAqKShsb2NhbF9wYXJhKSk7IChsb2NhbF9wYXJhKT1OVUxMOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgYXNfZnJlZV9wZWVyX2J1ZmZfc2V0X251bGwocGVlcl9idWZmKSBcCitkbyB7IGZyZWVfcGVlcl9idWZmKChwZWVyX2J1ZmZfc3RydWN0ICopKHBlZXJfYnVmZikpOyAocGVlcl9idWZmKT1OVUxMOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgYXNfZnJlZV9wZWVyX2J1ZmZfcl9zZXRfbnVsbChwZWVyX2J1ZmYpIFwKK2RvIHsgZnJlZV9wZWVyX2J1ZmZfcigocGVlcl9idWZmX3N0cnVjdCAqKShwZWVyX2J1ZmYpKTsgKHBlZXJfYnVmZik9TlVMTDsgfSB3aGlsZSgwKQorCisjZGVmaW5lIGFzX2ZyZWVfY3RybF9idWZmZXJfc2V0X251bGwocHRyKSBcCitkbyB7IGZyZWVfY3RybF9idWZmZXIocHRyKTsgKHB0cik9TlVMTDsgfSB3aGlsZSgwKQorCisvKiBESEwgYXBpKGRobF9pbnRlcm5hbF90cmFjZSkgcGFyYW1ldGVyICMyIGlzIHJlc2VydmVkLCBwYXJhbWV0ZXIgIzMgdXNlIE1USyBpbnRlcm5hbC4KKyAqIFJlZGVmaW5lIGZvciBjb2RpbmcgY29udmVuaWVuY2UuCisgKi8KKy8qI2RlZmluZSB1YXNfaW50ZXJuYWxfdHJhY2UodHJjX2NsYXNzLCBtc2dfaW5kZXgsIC4uLikgXAorZGhsX2ludGVybmFsX3RyYWNlKHRyY19jbGFzcywgREhMX1VTRVJfRkxBR19OT05FLCBESExfQUNDRVNTX0xFVkVMXzRfTVRLX0lOVEVSTkFMLCBcCisgICAgICAgICAgICAgICAgICAgbXNnX2luZGV4LCAjI19fVkFfQVJHU19fKQorKi8KKworLy8gbW9kaWZ5IGZvciBUK1cgR2VtaW5pCit0eXBlZGVmICBlbnVtCit7CisgICBGRERfTDNfU0VRX1NFTEVDVE9SX0lOVkFMSUQgPSAwLAorICAgVEREX0wzX1NFUV9TRUxFQ1RPUl9JTlZBTElEID0gRkREX0wzX1NFUV9TRUxFQ1RPUl9JTlZBTElELAorICAgRkREX0wzX1NFUV9TRUxFQ1RPUl9QUkFDSElORk9MSVNULAorICAgVEREX0wzX1NFUV9TRUxFQ1RPUl9QUkFDSElORk9MSVNUID0gRkREX0wzX1NFUV9TRUxFQ1RPUl9QUkFDSElORk9MSVNULAorICAgRkREX0wzX1NFUV9TRUxFQ1RPUl9TQ0NQQ0hJTkZPTElTVCwKKyAgIFRERF9MM19TRVFfU0VMRUNUT1JfU0NDUENISU5GT0xJU1QgPSBGRERfTDNfU0VRX1NFTEVDVE9SX1NDQ1BDSElORk9MSVNUCisKKyNpZmRlZiBfX1VNVFNfVEREMTI4X01PREVfXworICAgLFRERF9MM19TRVFfU0VMRUNUT1JfUFJBQ0hJTkZPTENSTElTVF9SNAorICAgLFRERF9MM19TRVFfU0VMRUNUT1JfU0NDUENISU5GT0xDUkxJU1RfUjRfRVhUCisjZW5kaWYKKyNpZmRlZiBfX1VNVFNfUjdfXworICAgLCBGRERfTDNfU0VRX1NFTEVDVE9SX1NDQ1BDSF9TeXN0ZW1JbmZvcm1hdGlvbl9NQk1TX3I3CisjZW5kaWYKK31GRERfTDNEZWNvZGVfc2VxdWVuY2Vfc2VsZWN0b3IsIFRERF9MM0RlY29kZV9zZXF1ZW5jZV9zZWxlY3RvcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIEZERF9MM0RlY29kZV9zZXF1ZW5jZV9zZWxlY3RvciBkZWNvZGVfc2VsZWN0b3I7CisgICBrYWxfaW50MzIgc2VxdWVuY2VfY291bnRlcjsgIAorICAgUzE2IGNlbGxfaW5kZXg7IC8vIHNoYWxsIGJlIHRoZSBzYW1lIHR5cGUgYXMgRkREX0RCSWR4ICYgVEREX0RCSWR4CisgICBVOCAgc2liX2luZGV4OyAgLy8gc2hhbGwgYmUgdGhlIHNhbWUgdHlwZSBhcyBSUkNfRkREX0RCX1NJQl9JbmRleCAmIFJSQ19URERfREJfU0lCX0luZGV4CisgICBrYWxfYm9vbCAgaXNfdWFzX3RkZDEyODsgLy8gS0FMX1RSVUUgbWVhbnMgdXNlZCBieSBUREQsIEtBTF9GQUxTRSBtZWFucyB1c2VkIGJ5IEZERAorfUZERF9MM0RlY29kZUNvbnRleHQsIEZERF9MM0VuY29kZUNvbnRleHQsIFRERF9MM0RlY29kZUNvbnRleHQsIFRERF9MM0VuY29kZUNvbnRleHQ7CisKKworI2VuZGlmIC8vX19BU19DT01NT05fSF9fCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvYXNuX2dlbl9pbmNsdWRlLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvYXNuX2dlbl9pbmNsdWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkMzViNQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9hc25fZ2VuX2luY2x1ZGUuaApAQCAtMCwwICsxLDkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgYXNuX2dlbl9pbmNsdWRlLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKKyNpZm5kZWYgX0FTTl9HRU5fSU5DTFVERV9IXworI2RlZmluZSBfQVNOX0dFTl9JTkNMVURFX0hfCisKK2V4dGVybiB2b2lkICogKCptYWxsb2NfZnApKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCAqIHJyX2Fzbl9yZWFsbG9jKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgKCpmcmVlX2ZwKSh2b2lkICopOworZXh0ZXJuIHZvaWQgKigqbWVtc2V0X2ZwKSh2b2lkICosIGludCwgdW5zaWduZWQgaW50KTsKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvYXNuX2xsY19wZWVyLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvYXNuX2xsY19wZWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmMDdlOQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9hc25fbGxjX3BlZXIuaApAQCAtMCwwICsxLDExNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogIGFzbl9sbGNfcGVlci5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogIAorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAJCQkJSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgRklMRSBOQU1FOiBhc25fbGxjX3BlZXIuaAorICogIFNZTk9QU0lTIAorICoKKyAqICAgICAgICAgICAgICAgICAgICAgIAorICovCisKKyNpZm5kZWYgX0FTTl9MTENfUEVFUl9IXworI2RlZmluZSBfQVNOX0xMQ19QRUVSX0hfCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmZGVmIFRFU1RfVE9PTAorI2luY2x1ZGUgInR0X2RlZnMuaCIKKyNlbHNlCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNlbmRpZgorI2luY2x1ZGUgImwzX2luYy5oIgorI2luY2x1ZGUgImxsY192YXJzdHIuaCIKKyNpbmNsdWRlICJsbGNfcGVlcl9pbnRlcmZhY2UuaCIKKworI2luY2x1ZGUgImFzbl9sbGNfcGVlcl9zdHJ1Y3QuaCIKKyNpbmNsdWRlICJhc25fbGxjX3BlZXJfcHVuLmgiCisKKworCisjaWZkZWYgVE9PTAorI2luY2x1ZGUgInNldF9hc25fbGxjX3BlZXIuaCIKKyNpbmNsdWRlICJnZXRfYXNuX2xsY19wZWVyLmgiCisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9jY19zc19kZWZzLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvY2Nfc3NfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyY2E3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvY2Nfc3NfZGVmcy5oCkBAIC0wLDAgKzEsMjEzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKgljY19zc19kZWZzLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBjb250YWlucyBNYWNyb3MgcmVsYXRlZCB0byBDQyBTUy4KKyAqICAgCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfQ0NfU1NfREVGU19ICisjZGVmaW5lIF9DQ19TU19ERUZTX0gKKworLyoqKioqKioqKioqKioqKioqCitJbmNsdWRlIFN0YXRlbWVudHMKKyoqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImNjX2RlZnMuaCIKKyNpbmNsdWRlICJjY19zdGRfZGVmcy5oIgorLy8jaW5jbHVkZSAia2FsX3JlbGVhc2UuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKgorTWFjcm9zIFdpdGhvdXQgUGFyYW1ldGVycyAKKyoqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIENDX1NTX0lOVkFMSURfT1JJR0lOIDAKKyNkZWZpbmUgQ0NfU1NfRlJPTV9BUFAgICAgICAgMQorI2RlZmluZSBDQ19TU19GUk9NX1BFRVIgICAgICAyCisKKy8qLS0tLS0tLS0tLS1TUyBPcGVyYXRpb25zLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKlJlbW92ZSBTU19OT05FIHNpbmNlIHRoaXMgdmFsdWUgaXMgZGVmaW5lZCBmb3Igb2xkIERUTUYgZGVzaWduLiovCisvLyNkZWZpbmUgIFNTX05PTkUJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAKKyNkZWZpbmUgIFNTX1BST0NFU1NfVU5TVFJVQ1RVUkVEX1NTX1JFUVVFU1QgICAgICAgICAgNTkKKyNkZWZpbmUgIFNTX1VOU1RSVUNUVVJFRF9TU19SRVFVRVNUICAgICAgICAgICAgICAgICAgNjAKKyNkZWZpbmUgIFNTX1VOU1RSVUNUVVJFRF9TU19OT1RJRlkgICAgICAgICAgICAgICAgICAgNjEKKyNkZWZpbmUgIFNTX1BST0NFU1NfVU5TVFJVQ1RVUkVEX1NTX0RBVEEgICAgICAgICAgICAgMTkKKyNkZWZpbmUgIFNTX05PVElGWV9TUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgIFNTX0NBTExfREVGTEVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAxMTcKKyNkZWZpbmUgIFNTX1VTRVJfVVNFUl9TRVJWSUNFICAgICAgICAgICAgICAgICAgICAgICAxMTgKKyNkZWZpbmUgIFNTX0FDQ0VTU19SRUdJU1RFUkNDRU5UUlkgICAgICAgICAgICAgICAgICAxMTkKKyNkZWZpbmUgIFNTX0ZPUldBUkRDVUdfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAxMjAKKyNkZWZpbmUgIFNTX1NQTElUX01QVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjEKKyNkZWZpbmUgIFNTX1JFVFJJRVZFX01QVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjIKKyNkZWZpbmUgIFNTX0hPTERfTVBUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjMKKyNkZWZpbmUgIFNTX0JVSUxEX01QVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjQKKyNkZWZpbmUgIFNTX0ZPUldBUkRfQ0hBUkdFX0FEVklDRSAgICAgICAgICAgICAgICAgICAxMjUKKyNkZWZpbmUgIFNTX0VYUExJQ0lUX0NUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjYKKworLyotLS0tLS0tLS0tLVNTIE9wZXJhdGlvbiBJbnZva2UgVGltZW91dCBWYWx1ZS0tLS0tLS0tLS0tKi8KKy8qIFRpbWVvdXQgVmFsdWUgaW4gTWlsbGkgU2VjcyAqLworCisjZGVmaW5lIFNTX0lOVk9DQVRJT05fTk9USUZZX1RJTUVPVVQgICAgICAgICAgICAgICAgKDMqS0FMX1RJQ0tTXzVfU0VDKSAgCisjZGVmaW5lIFNTX1BST0NFU1NfVU5TVFJVQ1RVUkVEX1NTX0RBVEFfVElNRU9VVCAgICAgKDMqS0FMX1RJQ0tTXzVfU0VDKSAgCisjZGVmaW5lIFNTX1BST0NFU1NfVU5TVFJVQ1RVUkVEX1NTX1JFUVVFU1RfVElNRU9VVCAgKDIqS0FMX1RJQ0tTXzMwX1NFQykgCisjZGVmaW5lIFNTX1VOU1RSVUNUVVJFRF9TU19SRVFVRVNUX1RJTUVPVVQgICAgICAgICAgKDIqS0FMX1RJQ0tTXzMwX1NFQykgCisjZGVmaW5lIFNTX1VOU1RSVUNUVVJFRF9TU19OT1RJRllfVElNRU9VVCAgICAgICAgICAgKDIqS0FMX1RJQ0tTXzMwX1NFQykgCisjZGVmaW5lIFNTX0ZPUldBUkRfQ0hBUkdFX0FEVklDRV9USU1FT1VUICAgICAgICAgICAgS0FMX1RJQ0tTXzFfU0VDICAgIAorI2RlZmluZSBTU19CVUlMRF9NUFRZX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICgyKktBTF9USUNLU181X1NFQykgCisjZGVmaW5lIFNTX0hPTERfTVBUWV9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgKDIqS0FMX1RJQ0tTXzVfU0VDKSAKKyNkZWZpbmUgU1NfUkVUUklFVkVfTVBUWV9USU1FT1VUICAgICAgICAgICAgICAgICAgICAoMipLQUxfVElDS1NfNV9TRUMpIAorI2RlZmluZSBTU19TUExJVF9NUFRZX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICgyKktBTF9USUNLU181X1NFQykgCisjZGVmaW5lIFNTX0VYUExJQ0lUX0NUX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgKDMqS0FMX1RJQ0tTXzVfU0VDKQorI2RlZmluZSBTU19BQ0NFU1NfUkVHSVNURVJDQ0VOVFJZX1RJTUVPVVQgICAgICAgICAgIEtBTF9USUNLU18zMF9TRUMKKyNkZWZpbmUgU1NfQ0FMTF9ERUZMRUNUSU9OX1RJTUVPVVQgICAgICAgICAgICAgICAgICBLQUxfVElDS1NfMzBfU0VDCisjZGVmaW5lIFNTX1VTRVJfVVNFUl9TRVJWSUNFX1RJTUVPVVQgICAgICAgICAgICAgICAgKDIqS0FMX1RJQ0tTXzVfU0VDKSAgCisKKworLyotLS0tLS0tLS0tLUNsYXNzIG9mIFNTIE9wZXJhdGlvbnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNTX0NMQVNTXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBTU19DTEFTU18yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgU1NfQ0xBU1NfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFNTX0NMQVNTXzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisjZGVmaW5lIFNTX1BST1RPX1ZFUl8yICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBrYWxfdWludDggKTB4MDAKKyNkZWZpbmUgU1NfUFJPVE9fVkVSXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGthbF91aW50OCApMHgwMQorI2RlZmluZSBTU19BTllfUFJPVE9fVkVSICAgICAgICAgICAgICAgICAgICAgICAgICgga2FsX3VpbnQ4ICkweEZGCisKKworLyoqKioqKioqKioqKioqKioqKioqKgorTWFjcm9zIFdpdGggUGFyYW1ldGVycyAKKyoqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgY2NfcmVzZXRfaW52X2ZzbSh0aSwgaW52X2luZGV4KSAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgQ0NfQ1RBQl9DT05URVhUKGNjX3RpX2luZm9bQ0NfQ1RBQl9DT05URVhUKGNjX3RpX3Bvb2xbdGldLlwKKwkgICAgICB0aV9pbmZvX2luZGV4KV0gICAgICAgXAorICAuaW52W2ludl9pbmRleF0uc3RhdGUpICAgICAgID0gICAgXAorICBTX0NDX0lOVk9LRV9JRExFOyAgICAgICAgICAgICAgICAgICBcCit9CisKKyNlbmRpZiAgLypfQ0NfU1NfREVGU19IKi8KKworCisKKworCisKKworCisKKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2NpcGhlcjJsbGNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvY2lwaGVyMmxsY19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjEyYzkzCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2NpcGhlcjJsbGNfc3RydWN0LmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogIGNpcGhlcjJsbGNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBjb21tb24gc3RydWN0IG9mIGNpcGhlcmluZyBtb2R1bGUgYW5kIExMQy4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9DSVBIRVIyTExDX1NUUlVDVF9ICisjZGVmaW5lIF9DSVBIRVIyTExDX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQxNiBub19pbnB1dF9idWZmZXJfcHRyOworICAgIGthbF91aW50MTYgaW5wdXRfYnVmZmVyX3B0cl9zaXplOworICAgIGthbF91aW50OCAqaW5wdXRfYnVmZmVyX3B0cjsKKyAgICBrYWxfdWludDggY2lwaGVyX2FsZ287CisgICAga2FsX3VpbnQ4IHN0YXR1czsKKyAgICBrYWxfdWludDggbm9fdXNyX3BhcmFtX3B0cjsKKyAgICBrYWxfdWludDggdXNyX3BhcmFtX3B0cl9zaXplOworICAgIGthbF91aW50OCAqdXNyX3BhcmFtX3B0cjsKK30gbGxfY2lwaGVyX3JzcF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDE2IG5vX2lucHV0X2J1ZmZlcl9wdHI7CisgICAga2FsX3VpbnQxNiBpbnB1dF9idWZmZXJfcHRyX3NpemU7CisgICAga2FsX3VpbnQ4ICppbnB1dF9idWZmZXJfcHRyOworICAgIGthbF91aW50OCBjaXBoZXJfYWxnbzsKKyAgICBrYWxfdWludDggc3RhdHVzOworICAgIGthbF91aW50OCBub191c3JfcGFyYW1fcHRyOworICAgIGthbF91aW50OCB1c3JfcGFyYW1fcHRyX3NpemU7CisgICAga2FsX3VpbnQ4ICp1c3JfcGFyYW1fcHRyOworfSBsbF9kZWNpcGhlcl9yc3Bfc3RydWN0OworI2VuZGlmIAorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9jbTJjc2NlX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2NtMmNzY2Vfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdjODk3MQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9jbTJjc2NlX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTExIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKgljbTJjc2NlX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgaXMgaW50ZW5kcyBmb3Igc3RydWN0dXJlIGRlZmluaXRpb24gYmV0d2VlbiBNTSBhbmQgQ1NDRSBsYXllcnMuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAJCQkJSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfQ00yQ1NDRV9TVFJVQ1RfSAorI2RlZmluZSBfQ00yQ1NDRV9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJtbWNtX2VudW1zLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGVjY19zdGFydDsgCit9IGNtY3NjZV9lbWVyZ2VuY3lfY2FsbF9zdGF0dXNfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSIAorfSBjY19jc2NlX3Rhc19ub3RpZnlfaW5kX3N0cnVjdDsKKyNlbmRpZiAKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvY20ybW1fc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvY20ybW1fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljZTQwNwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9jbTJtbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDE5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICoJY20ybW1fc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRzIGZvciBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBiZXR3ZWVuIE1NIGFuZCBDTSBsYXllcnMuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAJCQkJSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfQ00yTU1fU1RSVUNUX0gKKyNkZWZpbmUgX0NNMk1NX1NUUlVDVF9ICisKKyNkZWZpbmUgTUFYX1NVUFBPUlRFRF9DQUxMUwk3CisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorI2luY2x1ZGUgIm1tY21fZW51bXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHRpOworICAgIGVzdF9jYXVzZV9lbnVtIGNhdXNlOworICAgIGthbF9ib29sIHNlbmRfcHJpb3JpdHk7CisgICAgZW1scHBfcHJpb3JpdHlfZW51bSBwcmlvcml0eTsKKyAgICBrYWxfYm9vbCBuZWVkX3ByZWVtcHRpb247CisgICAga2FsX2Jvb2wgaXNfZWNhbGw7CisgICAga2FsX3VpbnQ4IGVjYWxsX3R5cGU7Cit9IG1tY21fZXN0X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB0aTsKKy8vI2lmZGVmIF9fVU1UU19UREQxMjhfTU9ERV9fCisJa2FsX2Jvb2wgZm9yY2VfcmVsZWFzZTsgLypGb3IgVEREIGNhbGwgY2xlYXJpbmcgb3B0aW1pemF0aW9uKi8KKy8vI2VuZGlmCit9IG1tY21fcmVsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB0aTsKK30gbW1jbV9wcm9tcHRfcnNwX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcHJvbXB0X3Jlal9jYXVzZSByZWplY3RfY2F1c2U7Cit9IG1tY21fcHJvbXB0X3Jlal9zdHJ1Y3Q7CisKKyNpZmRlZiBfX1JFTDZfXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHRpX2NvdW50OworICAgIGthbF91aW50OCB0aV9saXN0W01BWF9TVVBQT1JURURfQ0FMTFNdOworfSBtbWNjX3JlZXN0X3JlcV9zdHJ1Y3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCit9IG1tY21fc3RhcnRfY2FsbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKK30gbW1jbV9hYm9ydF9jYWxsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB0aV9jb3VudDsKKyAgICBrYWxfdWludDggdGlfbGlzdFtNQVhfU1VQUE9SVEVEX0NBTExTXTsKKyAgICBrYWxfdWludDggZWNjX3RpOyAvKiBpZiBubyBlY2MsIHRoaXMgdmFsdWUgc2hvdWxkIGJlIDB4RkYgKi8KK30gbW1jY19zcnZjY19lc3RfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBtbWNtX2VzdF9yZXFfc3RydWN0IG1tY2NfZXN0X3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIG1tY21fcmVsX3JlcV9zdHJ1Y3QgbW1jY19yZWxfcmVxX3N0cnVjdDsKK3R5cGVkZWYgbW1jbV9wcm9tcHRfcnNwX3N0cnVjdCBtbWNjX3Byb21wdF9yc3Bfc3RydWN0OwordHlwZWRlZiBtbWNtX3Byb21wdF9yZWpfc3RydWN0IG1tY2NfcHJvbXB0X3Jlal9zdHJ1Y3Q7CisKK3R5cGVkZWYgbW1jbV9lc3RfcmVxX3N0cnVjdCBtbXNzX2VzdF9yZXFfc3RydWN0OwordHlwZWRlZiBtbWNtX3JlbF9yZXFfc3RydWN0IG1tc3NfcmVsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgbW1jbV9lc3RfcmVxX3N0cnVjdCBtbXNtc19lc3RfcmVxX3N0cnVjdDsKK3R5cGVkZWYgbW1jbV9yZWxfcmVxX3N0cnVjdCBtbXNtc19yZWxfcmVxX3N0cnVjdDsKKworI2VuZGlmIAorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9jc3JfZnNtLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvY3NyX2ZzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZjBlZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvY3NyX2ZzbS5oCkBAIC0wLDAgKzEsNjMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDcKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgY3NyX2ZzbS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1vbnphCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGludGVuZHMgZm9yIENTUiBGU00uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAgICAgICAgICBBc3NpZ25tZW50IDogM0cgUHJvdG9jb2wgU29mdHdhcmUKKyAqICAgICAgICAgICAgICAgQ09ORklERU5USUFMCisgKiAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDA1LCBVYmlOZXRpY3MgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBDYW1icmlkZ2UgVGVjaG5vbG9neSBDZW50cmUKKyAqICAgICAgICAgICAgICAgTWVsYm91cm4gUm95c3RvbgorICogICAgICAgICAgICAgICBIZXJ0cyBTRzggNkRQIFVLCisgKiAgICAgICAgICAgICAgIFRlbDogKzQ0IDE3NjMgMjYyMjIyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDT01QT05FTlQ6ICAgIENTUgorICogTU9EVUxFOiAgICAgICAkUkNTZmlsZTogcmFiLmgsdiAkCisgKiBWRVJTSU9OOiAgICAgICRSZXZpc2lvbjogMS4yICQKKyAqIERBVEVEOiAgICAgICAgMjAwMy8wNi8xOSAxNDozNzo0OSAkCisgKiBBVVRIT1I6ICAgICAgIEthdGhpcmF2YW4KKyAqCisgKiBERVNDUklQVElPTjogIENTUiBmc20KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiAhZGVmaW5lZChDU1JfRlNNX0gpCisjZGVmaW5lIENTUl9GU01fSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgInVsMmRfbXNnaWQuaCIKKyNpbmNsdWRlICJhc19jb21tb24uaCIKKyNpbmNsdWRlICJ1YXNfY29tbW9uX3N0cnVjdC5oIgorI2luY2x1ZGUgInJhdGNtX2Nzcl9zdHJ1Y3QuaCIKKyNpbmNsdWRlICJ1YXNfY29tbW9uX2VudW1zLmgiCisjaW5jbHVkZSAiZW1fc3RydWN0LmgiCisjaW5jbHVkZSAibDFhdWRpby5oIgorI2lmZGVmIF9fVklERU9fQ0FMTF9TVVBQT1JUX18KKyNpbmNsdWRlICJUVlRfY2FsbGJhY2suaCIKKyNlbmRpZgorCisvKiBNQUNST1MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUFYX05PX09GX1NJIDI1NQorI2RlZmluZSBVTktOT1dOX0FNUl9GUkFNRV9UWVBFIDB4ZmYgLyogQ1NSIGludGVybmFsIHVzZSAqLworI2RlZmluZSBNQVhfTk9fT0ZfQ1NSX0VOVElUWSA2CisjZGVmaW5lIE1BWF9OT19PRl9DU1JfUkVBQ0hFRCAoTUFYX05PX09GX0NTUl9FTlRJVFkrMSkKKyNkZWZpbmUgQ1NSX0VOVElUWV9OT1RfRk9VTkQgKE1BWF9OT19PRl9DU1JfRU5USVRZKzIpCisjZGVmaW5lIE1BWF9BTVJfQ0xBU1MgMworI2RlZmluZSBHZXRQb3MobG93LCBoaWdoLCBwb3MpIChwb3MgPSAoKGxvdytoaWdoKS8yKSkKKyNkZWZpbmUgSU5JVF9DT0RFQ19EQVRBKENvZGVjX0RhdGFUb1NlbmQpIFwKK3sgXAorICAgQ29kZWNfRGF0YVRvU2VuZC0+QU1SQ2xhc3NbMF0gPSBOVUxMOyBcCisgICBDb2RlY19EYXRhVG9TZW5kLT5BTVJDbGFzc1sxXSA9IE5VTEw7IFwKKyAgIENvZGVjX0RhdGFUb1NlbmQtPkFNUkNsYXNzWzJdID0gTlVMTDsgXAorfQorI2RlZmluZSBNQVhfQU1SX0ZSQU1FX1NJWkUgMzEKKyNkZWZpbmUgQ1NSX0NTX0ZDU19MRU4gMworI2RlZmluZSBDU1JfQ1NfUERVX1NJWkUgNzIgIC8qIFJMUCBmcmFtZSBzaXplICovCisjZGVmaW5lIENTUl9WVF9QRFVfU0laRSA4MCAgLyogdmlkZW8gY2FsbCBmcmFtZSBzaXplICovCisjZGVmaW5lIENTUl9DU19UUkFfUERVX1NJWkUgODAgIC8qIE1BVUlfMDIzNzU5MTEsIDNHIDY0SyBUcmFuc3BhcmVudCBDU0QsIGFkZCBmb3Igc3luYy1oZGxjIENTRCAqLworI2RlZmluZSBDU1JfQVNTRVJUKHgpIERFQlVHX0FTU0VSVCh4KQorCisvKiBtdGswMjM3NCAyMDExMDgwMSB1c2UgQ1NSX05PTl9TUEVFQ0hfU0VSVklDRSB0byByZXBsYWNlIGNoZWNraW5nIG9mIHNlcnZpY2VzIG90aGVyIHRoYW4gc3BlZWNoICovCisjaWYgZGVmaW5lZChfX1ZJREVPX0NBTExfU1VQUE9SVF9fKSB8fCBkZWZpbmVkKF9fU1lOQ19IRExDX0NTRF9fKQorI2RlZmluZSBDU1JfTk9OX1NQRUVDSF9TRVJWSUNFCisjZW5kaWYKKworI2lmZGVmIF9fRU1fTU9ERV9fCisjZGVmaW5lIEZERF9TRVRfQ1NSX0VNX05FRURfVVBEQVRFKCkgRkREX0NTUkVudGl0eUluZm8uRW1OZWVkVXBkYXRlID0gS0FMX1RSVUU7CisjZGVmaW5lIEZERF9SRVNFVF9DU1JfRU1fTkVFRF9VUERBVEUoKSBGRERfQ1NSRW50aXR5SW5mby5FbU5lZWRVcGRhdGUgPSBLQUxfRkFMU0U7CisjZGVmaW5lIEZERF9JU19DU1JfRU1fTkVFRF9VUERBVEUoKSAoRkREX0NTUkVudGl0eUluZm8uRW1OZWVkVXBkYXRlKQorI2RlZmluZSBGRERfU0VUX0NTUl9FTV9TUkMoZW1fc3JjKSBGRERfQ1NSRW50aXR5SW5mby5FbVNyYyB8PSBlbV9zcmM7CisjZGVmaW5lIEZERF9DTEVBUl9DU1JfRU1fU1JDKGVtX3NyYykgRkREX0NTUkVudGl0eUluZm8uRW1TcmMgJj0gfmVtX3NyYzsKKyNkZWZpbmUgRkREX1JFU0VUX0NTUl9FTV9TUkMoKSBGRERfQ1NSRW50aXR5SW5mby5FbVNyYyA9IENTUl9FTV9OT05FOworI2RlZmluZSBGRERfSVNfQ1NSX0VNX0VOQUJMRSgpIChGRERfQ1NSRW50aXR5SW5mby5FbVNyYyAhPSBDU1JfRU1fTk9ORSkKKyNkZWZpbmUgRkREX0lTX0NTUl9FTV9ESVNBQkxFKCkgKEZERF9DU1JFbnRpdHlJbmZvLkVtU3JjID09IENTUl9FTV9OT05FKQorI2RlZmluZSBGRERfSVNfQ1NSX1VQREFURV9FTV9UT19FTFQoKSAoRkREX0NTUkVudGl0eUluZm8uRW1TcmMgJiBDU1JfRU1fRUxUKQorI2RlZmluZSBGRERfSVNfQ1NSX1VQREFURV9FTV9UT19BUCgpIChGRERfQ1NSRW50aXR5SW5mby5FbVNyYyAmIENTUl9FTV9BUCkKKyNlbmRpZgorCisvKiBGREQgTUFDUk9TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRkREX0dldFNpemVvZkFNUkNsYXNzQShGcmFtZVR5cGUsU2l6ZU9mQ2xhc3NBKSAoU2l6ZU9mQ2xhc3NBID0gKEZERF9GcmFtZVR5cGVBbmREYXRhUmF0ZVtGcmFtZVR5cGVdLnNpemVPZkNsYXNzQSkpCisjZGVmaW5lIEZERF9HZXRTaXplb2ZBTVJDbGFzc0IoRnJhbWVUeXBlLFNpemVPZkNsYXNzQikgKFNpemVPZkNsYXNzQiA9IChGRERfRnJhbWVUeXBlQW5kRGF0YVJhdGVbRnJhbWVUeXBlXS5zaXplT2ZDbGFzc0IpKQorI2RlZmluZSBGRERfR2V0U2l6ZW9mQU1SQ2xhc3NDKEZyYW1lVHlwZSxTaXplT2ZDbGFzc0MpIChTaXplT2ZDbGFzc0MgPSAoRkREX0ZyYW1lVHlwZUFuZERhdGFSYXRlW0ZyYW1lVHlwZV0uc2l6ZU9mQ2xhc3NDKSkKKyNkZWZpbmUgRkREX0NDX0RFRkFVTFRfU1RSRUFNX0lEIDEKKyNkZWZpbmUgRkREX0NTUl9TRU5EX0lMTShzcmNfbW9kX2lkLCBkZXN0X21vZF9pZCwgbXNnX2lkLCBsb2NhbF9wYXJhX3B0ciwgcGVlcl9idWZmX3B0cikgRkREX0NzclNlbmRJbG0oc3JjX21vZF9pZCwgZGVzdF9tb2RfaWQsIG1zZ19pZCwgKGxvY2FsX3BhcmFfc3RydWN0ICopbG9jYWxfcGFyYV9wdHIsIChwZWVyX2J1ZmZfc3RydWN0ICopcGVlcl9idWZmX3B0cik7CisjZGVmaW5lIEZERF9tU0VUX1NFTkRfQ09ORklHX01BUFBJTkdfSU5EKFNlbmRDZmdSZXEpIFNlbmRDZmdSZXEgPSBLQUxfVFJVRTsKKyNkZWZpbmUgRkREX21SZVNFVF9TRU5EX0NPTkZJR19NQVBQSU5HX0lORChTZW5kQ2ZnUmVxKSBTZW5kQ2ZnUmVxID0gS0FMX0ZBTFNFOworI2RlZmluZSBGRERfQ1NSX1NUQVRFX0NIQU5HRShpZHgsIG5ld1N0YXRlKSBcCisgICAgTURfVFJDX0ZERF9DU1JfX0NIQU5HRV9TVEFURShpZHgsIEZERF9DU1JFbnRpdHlJbmZvLkNTUldvcmtTcGFjZVtpZHhdLT5DU1JDdXJyZW50U3RhdGUsIG5ld1N0YXRlKTsgXAorICAgIEZERF9DU1JFbnRpdHlJbmZvLkNTUldvcmtTcGFjZVtpZHhdLT5DU1JDdXJyZW50U3RhdGUgPSBuZXdTdGF0ZTsKKworI2RlZmluZSBGRERfQ1NSRU5USVRZX0FDVElWRV9TSU0oKSAoRkREX0NTUkVudGl0eUluZm8uYWN0aXZlU2ltKQorI2RlZmluZSBURERfQ1NSX0FDVElWRV9TSU0oKSAoMCkKKworI2lmZGVmIF9fQ1NIU1BBX1NVUFBPUlRfXworI2RlZmluZSBGRERfQ1NSX1VMX0FGTV9PUFQgKEFGTV9PUFRfQUxJR05fQUxMT0MgfCBBRk1fT1BUX0RCRykKKyNkZWZpbmUgRkREX0NTUl9VTF9EQVRBX1BPT0xfU0laRSBcCisgICAgKEFGTV9QT09MX09WRVJIRUFEKEZERF9DU1JfVUxfQUZNX09QVCAsIDEgKSBcCisgICAgKyBBRk1fU1VCUE9PTF9PVkVSSEVBRChGRERfQ1NSX1VMX0FGTV9PUFQsIChNQVhfQ1NfREFUQV9TSVpFICsgc2l6ZW9mKFNIQVFfY3NyX2RhdGFfcmVxX3N0cnVjdCkgKyBGRERfTlVNX0RSTENfVU1fVVNFUl9SQl9PRkZTRVQgKyA0KSwgTUFYX0NTX1VMX01FTV9OVU0pICsgNjQpCisjZW5kaWYKKworI2lmZGVmIF9fTVRLX1RBUkdFVF9fCisjZGVmaW5lIEZERF9DU1JfTE9HX0ZJTEUoYSxiLGMpCisjZWxzZQorI2RlZmluZSBGRERfQ1NSX0xPR19GSUxFKGEsYixjKSBGRERfQ3NyV3JpdGVMb2coYSxiLGMpCisjZW5kaWYKKworLyogVEREIE1BQ1JPUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFRERF9HZXRTaXplb2ZBTVJDbGFzc0EoRnJhbWVUeXBlLFNpemVPZkNsYXNzQSkgKFNpemVPZkNsYXNzQSA9IChURERfRnJhbWVUeXBlQW5kRGF0YVJhdGVbRnJhbWVUeXBlXS5zaXplT2ZDbGFzc0EpKQorI2RlZmluZSBURERfR2V0U2l6ZW9mQU1SQ2xhc3NCKEZyYW1lVHlwZSxTaXplT2ZDbGFzc0IpIChTaXplT2ZDbGFzc0IgPSAoVEREX0ZyYW1lVHlwZUFuZERhdGFSYXRlW0ZyYW1lVHlwZV0uc2l6ZU9mQ2xhc3NCKSkKKyNkZWZpbmUgVEREX0dldFNpemVvZkFNUkNsYXNzQyhGcmFtZVR5cGUsU2l6ZU9mQ2xhc3NDKSAoU2l6ZU9mQ2xhc3NDID0gKFRERF9GcmFtZVR5cGVBbmREYXRhUmF0ZVtGcmFtZVR5cGVdLnNpemVPZkNsYXNzQykpCisjaWZkZWYgX19NVEtfVEFSR0VUX18KKyNkZWZpbmUgVEREX0NTUl9MT0dfRklMRShhLGIsYykKKyNlbHNlCisjZGVmaW5lIFRERF9DU1JfTE9HX0ZJTEUoYSxiLGMpIFRERF9jc3Jfd3JpdGVfbG9nKGEsYixjKQorI2VuZGlmCisKKy8qIFRZUEVTIERFRklOSVRJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBVOCBBTVJGcmFtZVR5cGU7CisKK3R5cGVkZWYgZW51bQoreworICAgIHN0Q1NSX0lOQUNUSVZFLAorICAgIHN0Q1NSX0FDVElWRSwKKyAgICBzdENTUl9XQUlUX0ZPUl9SQUJfRVNUQUJMSVNILAorICAgIHN0Q1NSX1dBSVRfRk9SX1JBQl9NT0RJRllfT1JfUkVMRUFTRSwKKyAgICBzdENTUl9XQUlUX0ZPUl9ST1VUSU5HCit9IHRDU1JfU3RhdGVzOworCisvKiBNQVVJXzAyMzc1OTA0ICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBSQUJfRVNUQUJfQ1JFQVRFX0NTUl9FTlRJVFlfSUZfTk9UX0ZPVU5ELAorICAgIFNFVF9ST1VURV9DUkVBVEVfQ1NSX0VOVElUWV9JRl9OT1RfRk9VTkQsCisgICAgRklORF9DU1JfRU5USVRZX0JZX1JBQl9JRCwKKyAgICBGSU5EX0NTUl9FTlRJVFlfQllfU1RSRUFNX0lECit9IHRDU1JfQWN0aW9uOworCisvKiBbTUFVSV8wMTY2MzY4MV0gQWRkIHRyYWNlIGluZm8gZm9yIFNwZWVjaCBDb2RlYyBUeXBlIFJlZmVyZW5jZSBUUzI2LjEwMywgVGFibGUgNi4zLTEgKi8KK3R5cGVkZWYgZW51bQoreworICAgIEdTTV9GUiA9IDAsICAvKiBHU00gRnVsbCBSYXRlICovCisgICAgR1NNX0hSLCAgICAgIC8qIEdTTSBIYWxmIFJhdGUgKi8KKyAgICBHU01fRUZSLCAgICAgLyogR1NNIEVuaGFuY2VkIEZ1bGwgUmF0ZSAqLworICAgIEZSX0FNUiwgICAgICAvKiBGdWxsIFJhdGUgQWRhcHRpdmUgTXVsdGktUmF0ZSAqLworICAgIEhSX0FNUiwgICAgICAvKiBIYWxmIFJhdGUgQWRhcHRpdmUgTXVsdGktUmF0ZSAqLworICAgIFVNVFNfQU1SLCAgICAvKiBVTVRTIEFkYXB0aXZlIE11bHRpLVJhdGUgKi8KKyAgICBVTVRTX0FNUl8yLCAgLyogVU1UUyBBZGFwdGl2ZSBNdWx0aS1SYXRlIDIqLworICAgIFRETUFfRUZSLCAgICAvKiBURE1BIEVuaGFuY2VkIEZ1bGwgUmF0ZSAqLworICAgIFBEQ19FRlIsICAgICAvKiBQREMgRW5oYW5jZWQgRnVsbCBSYXRlICovCisgICAgRlJfQU1SX1dCLCAgIC8qIEZ1bGwgUmF0ZSBBZGFwdGl2ZSBNdWx0aS1SYXRlIFdpZGVCYW5kICovCisgICAgVU1UU19BTVJfV0IsIC8qIFVNVFMgQWRhcHRpdmUgTXVsdGktUmF0ZSBXaWRlQmFuZCAqLworICAgIE9IUl9BTVIsICAgICAvKiA4UFNLIEhhbGYgUmF0ZSBBZGFwdGl2ZSBNdWx0aS1SYXRlICovCisgICAgT0ZSX0FNUl9XQiwgIC8qIDhQU0sgRnVsbCBSYXRlIEFkYXB0aXZlIE11bHRpLVJhdGUgV2lkZUJhbmQgKi8KKyAgICBPSFJfQU1SX1dCLCAgLyogOFBTSyBIYWxmIFJhdGUgQWRhcHRpdmUgTXVsdGktUmF0ZSBXaWRlQmFuZCAqLworICAgIE11TWUgPSAyNTUgICAvKiBSZXNlcnZlZCBmb3IgTXVNZSBkdW1teSBDb2RlYyBUeXBlLCBzaGFsbCBub3QgdG8gYmUgdXNlZCovCit9IHRDU1JfU3BlZWNoQ29kZWNUeXBlOworCisvKiBNQVVJXzAxOTY2MzQzIE5vdGU6IEFueSBtb2RpZmljYXRpb24gb2YgdGhlIGVudW0gc2hhbGwgc3luYyB3aXRoIEZyYW1lVHlwZUFuZERhdGFSYXRlW10gKi8KK3R5cGVkZWYgZW51bQoreworICAgIEFNUl9GUkFNRV80Xzc1ID0gMCwKKyAgICBBTVJfRlJBTUVfNV8xNSwKKyAgICBBTVJfRlJBTUVfNV85MCwKKyAgICBBTVJfRlJBTUVfNl83MCwKKyAgICBBTVJfRlJBTUVfN180MCwKKyAgICBBTVJfRlJBTUVfN185NSwKKyAgICBBTVJfRlJBTUVfMTBfMiwKKyAgICBBTVJfRlJBTUVfMTJfMiwKKyAgICBBTVJfRlJBTUVfU0lELAorICAgIEFNUl9GUkFNRV9HU01fRUZSX1NJRCwKKyAgICBBTVJfRlJBTUVfVERNQV9FRlJfU0lELAorICAgIEFNUl9GUkFNRV9QRENfRUZSX1NJRCwKKyAgICBSRlVfQU1SX0ZSQU1FX1RZUEVfMTIsIC8vcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKyAgICBSRlVfQU1SX0ZSQU1FX1RZUEVfMTMsIC8vcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKyAgICBSRlVfQU1SX0ZSQU1FX1RZUEVfMTQsIC8vcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKyAgICBBTVJfRlJBTUVfTk9fREFUQSA9IDE1LAorCisjaWZkZWYgX19BTVJXQl9MSU5LX1NVUFBPUlRfXworICAgIEFNUldCX0ZSQU1FXzZfNjAsCisgICAgQU1SV0JfRlJBTUVfOF84NSwKKyAgICBBTVJXQl9GUkFNRV8xMl82NSwKKyAgICBBTVJXQl9GUkFNRV8xNF8yNSwKKyAgICBBTVJXQl9GUkFNRV8xNV84NSwKKyAgICBBTVJXQl9GUkFNRV8xOF8yNSwKKyAgICBBTVJXQl9GUkFNRV8xOV84NSwKKyAgICBBTVJXQl9GUkFNRV8yM18wNSwKKyAgICBBTVJXQl9GUkFNRV8yM184NSwKKyAgICBBTVJXQl9GUkFNRV9TSUQsCisgICAgLy9BTVIgV0IgZnJhbWUgdHlwZSAxMCwgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKyAgICAvL0FNUiBXQiBmcmFtZSB0eXBlIDExLCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQorICAgIC8vQU1SIFdCIGZyYW1lIHR5cGUgMTIsIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlCisgICAgLy9BTVIgV0IgZnJhbWUgdHlwZSAxMywgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKyAgICAvL0FNUiBXQiBmcmFtZSB0eXBlIDE0LCBzcGVlY2ggbG9zdCwgbm90IHVzZWQKKyAgICAvL0FNUiBXQiBmcmFtZSB0eXBlIDE1LCBObyBEYXRhLCB1c2UgQU1SX0ZSQU1FX05PX0RBVEEgZm9yIGJvdGggTkIgYW5kIFdCCisjZW5kaWYgLypfX0FNUldCX0xJTktfU1VQUE9SVF9fICovCisKKyAgICBNQVhfTk9fT0ZfRlJBTUVfVFlQRSwgLy8gMjUKKyAgICBBTVJfRlJBTUVfVFlQRV9BTExfQkFSUkVEID0gMzEKK30gdEFNUldCX0ZyYW1lVHlwZTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgc3RDU1JfVU5LTk9XTl9QSEFTRSwKKyAgICBzdENTUl9PRERfRlJBTUUsCisgICAgc3RDU1JfRVZFTl9GUkFNRQorfSB0Q1NSX0NvZGVjUGhhc2U7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgVTggc2l6ZU9mQU1SQ2xhc3NbTUFYX0FNUl9DTEFTU107Cit9IFNpemVfQU1SQ2xhc3NlczsKKworI2lmZGVmIF9fQU1SV0JfTElOS19TVVBQT1JUX18KKy8qIE1BVUlfMDE5NjYzNDMsIHJlcXVlc3RlZCBzdWJmbG93IHNpemUgbWF5IGV4Y2VlZCAyNTUgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgVTE2IHNpemVPZkNsYXNzQTsKKyAgICBVMTYgc2l6ZU9mQ2xhc3NCOworICAgIFUxNiBzaXplT2ZDbGFzc0M7CisgICAgVTE2IHRvdGFsU2l6ZTsKK30gRnJhbWVUeXBlX0RhdGFSYXRlOworI2Vsc2UKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgVTggc2l6ZU9mQ2xhc3NBOworICAgIFU4IHNpemVPZkNsYXNzQjsKKyAgICBVOCBzaXplT2ZDbGFzc0M7CisgICAgVTggdG90YWxTaXplOworfSBGcmFtZVR5cGVfRGF0YVJhdGU7CisjZW5kaWYgLyogX19BTVJXQl9MSU5LX1NVUFBPUlRfXyAqLworCisjaWZkZWYgX19FTV9NT0RFX18KK3R5cGVkZWYgZW51bQoreworICAgIC8qIEVNIGRpc2FibGUgKi8KKyAgICBDU1JfRU1fTk9ORSA9IDB4MCwKKyAgICAvKiBiaXQgMTogdXBkYXRlIHRvIEVMVCAqLworICAgIENTUl9FTV9FTFQgPSAweDEsCisgICAgLyogYml0IDI6IHVwZGF0ZSB0byBBUCAqLworICAgIENTUl9FTV9BUCA9IDB4MgorfSB0Q1NSX1VwZGF0ZUVtU291cmNlOworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyogUkFCIGlkICovCisgICAgVTggQ1NSRW50aXR5SWQ7CisKKyAgICAvKiBTdHJlYW0gaWQgKi8KKyAgICBVOCBTdHJlYW1JZDsKKyAgICB0Q1NSX1N0YXRlcyBDU1JDdXJyZW50U3RhdGU7CisgICAgdENTUl9UYXJnZXRFbnRpdHkgQ1NSVGFyZ2V0RW50aXR5OworICAgIFU4IENTUlJhYk1vZGU7CisKKyAgICAvKiBNQVVJXzAyMzc1OTA0ICovCisKKyAgICAvKiBudW1iZXIgb2YgUkIgKi8KKyAgICBVOCBOdW1SQnM7CisgICAgLyogUkIgSURzICovCisgICAgVTggUkJbTUFYX1JCU19JTl9SQUJdOworICAgIFU4IFJCV2l0aFN0YXR1czsKKyAgICAvKiBTRFUgb2YgZWFjaCBSQiAqLworICAgIFUxNiBSZXFTaXplT2ZSQnNbTUFYX1JCU19JTl9SQUJdOworCisgICAgLyogfk1BVUlfMDIzNzU5MDQgKi8KKworICAgIFUxNiBkYXRhTGVuZ3RoOworICAgIFU4KiBkbFBkdTsKKworICAgIC8qIEN1cnJlbnQgQ29kZWNUeXBlICovCisgICAgdENTUl9TcGVlY2hDb2RlY1R5cGUgQ29kZWNUeXBlOworICAgIHRDU1JfQ29kZWNQaGFzZSBDb2RlY1BoYXNlOyAKKworICAgIC8qIEN1cnJlbnQgVUwgQ29kZWMgRGF0YSBSYXRlICovCisgICAgQU1SRnJhbWVUeXBlIEN1ckNvZGVjOworICAgIFU4IG1heENzRGVsYXk7CisgICAgVTggcHJldlJ4TldEZWxheTsKKworICAgIC8qIFJMQyBUTSBzZWdtZW50IGNvbmZpZyBvZiBlYWNoIFJCICovCisgICAga2FsX2Jvb2wgdWxSTENTZWdtZW50W01BWF9SQlNfSU5fUkFCXTsKKworICAgIC8qIEN1cnJlbnQgREwgQ29kZWMgRGF0YSBSYXRlICovCisgICAgQU1SRnJhbWVUeXBlIEN1ckRMQ29kZWM7Cit9IGFDU1JDb250ZXh0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIFU4IGFjdGl2ZVNpbTsgLyogZm9yIEwrVyBHRU1JTkksIDA6U0lNMSwgMTpTSU0yOyBmb3Igc2luZ2xlIFNJTSwgaXQgd2lsbCBiZSBhbHdheXMgMCAqLworICAgIFU4IE5vT2ZDU1JFbnRpdHlFeGlzdDsKKyAgICBLQUxfQUZNX0lEIGFmbV9pZDsKKyAgICBhQ1NSQ29udGV4dCAqQ1NSV29ya1NwYWNlW01BWF9OT19PRl9DU1JfRU5USVRZXTsKKyNpZmRlZiBfX0VNX01PREVfXworICAgIGthbF9ib29sIGlzX0VNX2FjdGl2YXRlOworICAgIFU4IEVtU3JjOyAvKiBUaGUgYml0bWFwIHdob20gQ1NSIG5lZWQgdG8gdXBkYXRlIEVNIGluZm9ybWF0aW9uIHRvICovCisgICAga2FsX2Jvb2wgRW1OZWVkVXBkYXRlOworI2VuZGlmIC8qIF9fRU1fTU9ERV9fICovCit9IGFDU1JFbnRpdHlJbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgVTggc3RyZWFtSWQ7CisgICAgVTggZnJhbWVUeXBlOworICAgIFU4IGRhdGFbTUFYX0FNUl9GUkFNRV9TSVpFXTsKK30gY3NyX2Ftcl9kYXRhX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgZW51bQoreworICAgIENTUl9JTE1fSU5WQUxJRCwgCisgICAgQ1NSX0lMTV9BQ0NFUFQsIAorICAgIENTUl9JTE1fSUdOT1JFCit9IHRDU1JfR2VtaW5pSWxtQ2hlY2s7CisKK3R5cGVkZWYgZW51bQoreworICAgIHN0Q1NSX1VMX0ZSQU1FLAorICAgIHN0Q1NSX0RMX0ZSQU1FCit9IHRDU1JfRnJhbWVEaXJlY3Q7CisKKy8qIEdMT0JBTCBWQVJJQUJMRSBERUNMQVJBVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIGFDU1JFbnRpdHlJbmZvIEZERF9DU1JFbnRpdHlJbmZvOworCisvKiBQVUJMSUMgRlVOQ1RJT04gUFJPVE9UWVBFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEZERCBGdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIHZvaWQgRkREX0NzckluaXRDU1JFbnRpdHlJbmZvKHZvaWQpOworZXh0ZXJuIHZvaWQgRkREX0NzclJlc2V0Q1NSRW50aXR5SW5mbyh2b2lkKTsKK2V4dGVybiB2b2lkIEZERF9Dc3JQcm9jZXNzQ0NVQ1NSU2V0Um91dGluZ1JlcShpbG1fc3RydWN0ICpSY3ZNc2cpOworZXh0ZXJuIHZvaWQgRkREX0NzclByb2Nlc3NDQ1NSUmFiRXN0YWJsaXNoSW5kKGlsbV9zdHJ1Y3QgKlJjdk1zZyk7CitleHRlcm4gdm9pZCBGRERfQ3NyUHJvY2Vzc0NDU1JSYWJNb2RpZnlJbmQoaWxtX3N0cnVjdCAqUmN2TXNnKTsKK2V4dGVybiB2b2lkIEZERF9Dc3JQcm9jZXNzQ0NTUlJhYlJlbGVhc2VJbmQoaWxtX3N0cnVjdCAqUmN2TXNnKTsKK2V4dGVybiB2b2lkIEZERF9Dc3JQcm9jZXNzQ1NSVW1hY1RmY0luZChpbG1fc3RydWN0ICpSY3ZNc2cpOworZXh0ZXJuIHZvaWQgRkREX0NzclByb2Nlc3NDU1JTdGF0dXNJbmQoaWxtX3N0cnVjdCAqUmN2TXNnKTsKK2V4dGVybiB2b2lkIEZERF9DU1JfU1AzR19DYWxsYmFjayhTUDNHX0V2ZW50IGV2ZW50LCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIEZERF9Dc3JQcm9jZXNzVHN0SW5qZWN0TXNnKGlsbV9zdHJ1Y3QgKlJjdk1zZyk7CisKKyNpZmRlZiBfX0NTSFNQQV9TVVBQT1JUX18KK2V4dGVybiB2b2lkIFNQM0dIU1BBX1VMX0dldFNwZWVjaEZyYW1lKGthbF91aW50OCAqZnJhbWVfdHlwZSwga2FsX3VpbnQ4ICpyYWJfYnl0ZV9hcnJheSwga2FsX3VpbnQ4ICpsZW4pOworZXh0ZXJuIHZvaWQgU1AzR0hTUEFfRExfUHV0U3BlZWNoRnJhbWUoa2FsX3VpbnQzMiBDRk4sIGthbF91aW50OCBmcmFtZV90eXBlLCBrYWxfYm9vbCBjcmNfc3RhdHVzLCBrYWxfdWludDggKnN1YmZsb3cpOworZXh0ZXJuIHZvaWQgU1AzR0hTUEFfRExfU2V0TWF4Q3NEZWxheShrYWxfdWludDggbWF4X2NzX2RlbGF5KTsKKyNlbmRpZgorCisjaWZkZWYgX19SQVRETV9VTF9TSEFRX18KK2V4dGVybiB2b2lkIEZERF9Dc3JGcmVlVG1FbG10KGthbF91aW50OCAqYWRkcik7CisjaWZkZWYgX19DU0hTUEFfU1VQUE9SVF9fCitleHRlcm4gdm9pZCBGRERfQ3NyRnJlZVVtRWxtdChrYWxfdWludDggKmFkZHIpOworI2VuZGlmCisjZW5kaWYKKworI2lmIDAKKyNpZmRlZiBfXzNHX05FV19DU19ETF9BUkNIX18KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbHNlCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19WSURFT19DQUxMX1NVUFBPUlRfXworZXh0ZXJuIHZvaWQgRkREX3Z0X2Nzcl9hY3RpdmF0ZV9yZXEodm9pZCk7CitleHRlcm4gdm9pZCBGRERfdnRfY3NyX2RlYWN0aXZhdGVfcmVxKHZvaWQpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR0VNSU5JX18pICYmIGRlZmluZWQoX19HRU1JTklfV0NETUFfXykKK2V4dGVybiB0Q1NSX0dlbWluaUlsbUNoZWNrIEZERF9Dc3JHZW1pbmlHdWFyZElsbShpbG1fc3RydWN0ICppbG1fcHRyKTsKKyNlbmRpZgorCisjaWZkZWYgX19FTV9NT0RFX18KK2V4dGVybiB2b2lkIEZERF9Dc3JQcm9jZXNzTDRDcHNFTVVwZGF0ZVJlcShpbG1fc3RydWN0ICppbG1fcHRyKTsKKyNlbmRpZgorCisjaWZuZGVmIF9fTVRLX1RBUkdFVF9fCitleHRlcm4gdm9pZCBGRERfQ3NyUHJvY2Vzc0NTUlVuaXRUZXN0TXNnKGlsbV9zdHJ1Y3QgKlJjdk1zZyk7CisjZW5kaWYKKworLyogVEREIEZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiB2b2lkIFRERF9Jbml0Q1NSRW50aXR5SW5mbyh2b2lkKTsKK2V4dGVybiB2b2lkIFRERF9SZXNldENTUkVudGl0eUluZm8odm9pZCk7CitleHRlcm4gVTggVEREX0dldENTUldvcmtTcGFjZShVOCBDU1JJZCwgVTggYWN0aW9uKTsKK2V4dGVybiB2b2lkIFRERF9Qcm9jZXNzQ0NVQ1NSU2V0Um91dGluZ1JlcShpbG1fc3RydWN0ICpSY3ZNc2cpOworZXh0ZXJuIHZvaWQgVEREX1Byb2Nlc3NDQ1NSUmFiRXN0YWJsaXNoSW5kKGlsbV9zdHJ1Y3QgKlJjdk1zZyk7CitleHRlcm4gdm9pZCBURERfUHJvY2Vzc0NDU1JSYWJNb2RpZnlJbmQoaWxtX3N0cnVjdCAqUmN2TXNnKTsKK2V4dGVybiB2b2lkIFRERF9Qcm9jZXNzQ0NTUlJhYlJlbGVhc2VJbmQoaWxtX3N0cnVjdCAqUmN2TXNnKTsKK2V4dGVybiB2b2lkIFRERF9Qcm9jZXNzVUNTRERhdGFSZXEoaWxtX3N0cnVjdCogUmN2TXNnKTsKK2V4dGVybiB2b2lkIFRERF9Qcm9jZXNzQ1NSVW1hY1RmY0luZChpbG1fc3RydWN0ICpSY3ZNc2cpOworZXh0ZXJuIHZvaWQgVEREX1Byb2Nlc3NDU1JTdGF0dXNJbmQoaWxtX3N0cnVjdCogUmN2TXNnKTsKKworI2lmZGVmIF9fVklERU9fQ0FMTF9TVVBQT1JUX18KK2V4dGVybiB2b2lkIFRERF92dF9jc3JfYWN0aXZhdGVfcmVxKHZvaWQpOworZXh0ZXJuIHZvaWQgVEREX3Z0X2Nzcl9kZWFjdGl2YXRlX3JlcSh2b2lkKTsKKyNlbmRpZgorCisjaWZkZWYgX19FTV9NT0RFX18KK2V4dGVybiB2b2lkIFRERF9Qcm9jZXNzTDRDcHNFTVVwZGF0ZVJlcShpbG1fc3RydWN0ICppbG1fcHRyKTsKKyNlbmRpZgorCit2b2lkIFRERF9VcGRhdGVDb2RlY1RvRW1JbmZvKHRDU1JfRnJhbWVEaXJlY3QgZGlyLCBVOCBmcmFtZVR5cGUpOworZXh0ZXJuIHZvaWQgVEREX1Byb2Nlc3NQTEFVVVNBVURDb25maWdNYXBwaW5nSW5kKGlsbV9zdHJ1Y3QgKlJjdk1zZyk7CitleHRlcm4gdm9pZCBURERfUHJvY2Vzc1BMQVVVU0FVRENvbmZpZ01hcHBpbmdDbmYoaWxtX3N0cnVjdCAqUmN2TXNnKTsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCitleHRlcm4gdm9pZCBURERfUHJvY2Vzc1VVU0FVRENvZGVyRGF0YUNuZihpbG1fc3RydWN0ICpSY3ZNc2cpOworCisjaWZuZGVmIF9fTVRLX1RBUkdFVF9fCitleHRlcm4gdm9pZCBURERfUHJvY2Vzc0NTUlVuaXRUZXN0TXNnKGlsbV9zdHJ1Y3QgKlJjdk1zZyk7CisjZW5kaWYKKworZXh0ZXJuIGthbF91aW50OCBGRERfQ1NSX0dldEFjdGl2ZVNJTSh2b2lkKTsKKworCisjZW5kaWYgLyogQ1NSX0ZTTV9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvY3ZhbF9yYXRkbV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9jdmFsX3JhdGRtX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYmQ4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvY3ZhbF9yYXRkbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDEwMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGN2YWxfcmF0ZG1fc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiBDVkFMIGFuZCBSQVRETV9DMksgZm9yIEMySyBQRE4gY29udHJvbAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9DVkFMX1JBVERNX1NUUlVDVF9ICisjZGVmaW5lIF9DVkFMX1JBVERNX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorLyogZm9yIHJhdF9lbnVtICovCisjaW5jbHVkZSAibDNfaW5jX2VudW1zX3B1YmxpYy5oIgorCisvKiogQ1ZBTCBhY3RpdmF0ZSBSQVRETSBDMksgcmVxdWVzdAorICogIFRoaXMgcHJpbWl0aXZlIGlzIHNlbnQgZnJvbSBDVkFMIHRvIFJBVERNIHRvIGFjdGl2YXRlIFJBVERNIEMySworICogIE1lc3NhZ2UgaXMgTVNHX0lEX0NWQUxfUkFURE1fQUNUSVZBVEVfUkVRCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIElMTSBzcGVjaWZpYyBoZWFkZXIuICovCisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIC8qKiBFUFMgYmVhcmVyIElELCByYW5nZWQgaW4gW1JBVERNX01JTl9OU0FQSV9DMks6IFJBVERNX01BWF9OU0FQSV9DMktdIHdoaWNoIGlzIFsxNjoyM10gKi8KKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGViaTsKKyAgICAvKiogQzJLIGFpciBpbnRlcmZhY2UgUEROIElELCByYW5nZWQgaW4gWzAsMTRdICovCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBjMmtfYWlyX3Bkbl9pZDsKK31jdmFsX3JhdGRtX2FjdGl2YXRlX3JlcV9zdHJ1Y3Q7CisKKy8qKiBDVkFMIGRlYWN0aXZhdGUgUkFURE0gQzJLIHJlcXVlc3QKKyAqICBUaGlzIHByaW1pdGl2ZSBpcyBzZW50IGZyb20gQ1ZBTCB0byBSQVRETSB0byBkZWFjdGl2YXRlIFJBVERNIEMySworICogIE1lc3NhZ2UgaXMgTVNHX0lEX0NWQUxfUkFURE1fREVBQ1RJVkFURV9SRVEKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qKiBJTE0gc3BlY2lmaWMgaGVhZGVyLiAqLworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICAvKiogRVBTIGJlYXJlciBJRCwgcmFuZ2VkIGluIFtSQVRETV9NSU5fTlNBUElfQzJLOiBSQVRETV9NQVhfTlNBUElfQzJLXSB3aGljaCBpcyBbMTY6MjNdICovCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBlYmk7Cit9IGN2YWxfcmF0ZG1fZGVhY3RpdmF0ZV9yZXFfc3RydWN0OworCisvKiogQ1ZBTCBub3RpZnkgUkFURE0gQzJLIGN1cnJlbnQgcmF0IG1vZGUgc2V0dGluZyByZXF1ZXN0CisgKiAgVGhpcyBwcmltaXRpdmUgaXMgc2VudCBmcm9tIENWQUwgdG8gUkFURE0gdG8gbm90aWZ5IFJBVERNIEMySyBjdXJyZW50IHJhdCBtb2RlIHNldHRpbmcKKyAqICBNZXNzYWdlIGlzIE1TR19JRF9DVkFMX1JBVERNX1NFVF9SQVRfTU9ERV9SRVEKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qKiBJTE0gc3BlY2lmaWMgaGVhZGVyLiAqLworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICAvKiogcmF0IG1vZGUgKi8KKyAgICByYXRfZW51bSAgICAgICAgICAgICAgICAgICAgICAgcmF0X21vZGU7Cit9IGN2YWxfcmF0ZG1fc2V0X3JhdF9tb2RlX3JlcV9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfQ1ZBTF9SQVRETV9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2RhdGFfcGxhbmUyc21fc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZGF0YV9wbGFuZTJzbV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGM0YWYxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2RhdGFfcGxhbmUyc21fc3RydWN0LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogZGF0YV9wbGFuZTJzbV9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGludGVuZHMgZm9yIHN0cnVjdHVyZSBkZWZpbml0aW9uIGJldHdlZW4gZGF0YSBwbGFuZSBhbmQgU00uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfREFUQV9QTEFORTJTTV9TVFJVQ1RfSAorI2RlZmluZSBfREFUQV9QTEFORTJTTV9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgkKKyAgICBrYWxfdWludDggbnNhcGk7Cit9IHNuc21fYWN0aXZhdGVfcnNwX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG5vX29mX3ZhbGlkX2VudHJpZXM7CisgICAga2FsX3VpbnQ4IG5zYXBpX2xpc3RbMTFdOworfSBzbnNtX2RlYWN0aXZhdGVfcnNwX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG5zYXBpOworfSBzbnNtX21vZGlmeV9yc3Bfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbm9fb2ZfdmFsaWRfZW50cmllczsKKyAgICBrYWxfdWludDggbnNhcGlfbGlzdFsxMV07CisgICAga2FsX3VpbnQ4IHNlcXVlbmNlX2xpc3RbMTFdOworfSBzbnNtX3NlcXVlbmNlX3JzcF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBuc2FwaTsKKyAgICBrYWxfdWludDE2IGNhdXNlOworfSBzbnNtX3N0YXR1c19yZXFfc3RydWN0OworI2VuZGlmIAorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9kYXRhX3BsYW5lX3NtX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZGF0YV9wbGFuZV9zbV9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NjNjYzAKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZGF0YV9wbGFuZV9zbV9lbnVtcy5oCkBAIC0wLDAgKzEsMTAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqIGRhdGFfcGxhbmVfc21fZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIGVudW0gZGVmaW5pdGlvbiBiZXR3ZWVuIGRhdGEgcGxhbmUgYW5kIFNNLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX1JBQk1TTV9JTlRFUkZBQ0VfSF8KKyNkZWZpbmUgX1JBQk1TTV9JTlRFUkZBQ0VfSF8KKwordHlwZWRlZiBlbnVtCit7CisgICAgTE9DQUxfREVBQ1RJVkFUSU9OLAorICAgIFBFRVJfREVBQ1RJVkFUSU9OCit9cmFibXNtX2NhdXNlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIEFDVElWQVRJT05fUFJPQ0VEVVJFID0gMCwKKyAgICBNT0RJRklDQVRJT05fUFJPQ0VEVVJFCit9c21fcHJvY2Vzc19lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSQUJNX0lOU1VGRl9SRVNPVVJDRSA9IDAsCisgICAgUkFCTV9FUlJfSU5ELAorICAgIFJBQk1fUkVFU1RfSU5ELAorICAgIFJBQk1fQUJPUlRfSU5ECit9cmFibXNtX3N0YXR1c19jYXVzZV9lbnVtOworCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZGF0YV94aWQuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9kYXRhX3hpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZThjZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZGF0YV94aWQuaApAQCAtMCwwICsxLDEwNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogZGF0YV94aWQuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGZvciBMMlIgWElEIHVzYWdlLiAKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfREFUQV9YSURfSF8KKyNkZWZpbmUgX0RBVEFfWElEX0hfCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmZGVmIFRFU1RfVE9PTAorI2luY2x1ZGUgInR0X2RlZnMuaCIKKyNlbHNlCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNlbmRpZgorCisvLyNpbmNsdWRlICJjc21fZGF0YV9lbnVtcy5oIgorI2luY2x1ZGUgImRhdGFfeGlkX3N0cnVjdC5oIgorCisjaWZkZWYgVE9PTAorI2luY2x1ZGUgInNldF9kYXRhX3hpZC5oIgorI2luY2x1ZGUgImdldF9kYXRhX3hpZC5oIgorI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZGRtX253c2VsX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2RkbV9ud3NlbF9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWIyMzljCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2RkbV9ud3NlbF9zdHJ1Y3QuaApAQCAtMCwwICsxLDExMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqIERETV9OV1NFTF9TVFJVQ1QuSAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICAKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKgorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBERE1fTldTRUxfU1RSVUNUX0gKKyNkZWZpbmUgRERNX05XU0VMX1NUUlVDVF9ICisKKy8qIGVudW0gKi8KKy8vI2luY2x1ZGUgInBzX3B1YmxpY19lbnVtLmgiCisKK3R5cGVkZWYgZW51bSB7CisgICAgRERNX05XU0VMX0RFVEFDSF9DQVVTRV9OT05FLAorICAgIERETV9OV1NFTF9ERVRBQ0hfQ0FVU0VfTk9fQUNUSU9OLAorfWRkbV9ud3NlbF9kZXRhY2hfY2F1c2VfZW51bTsKKworLyogc3RydWN0ICovCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisvLyNpbmNsdWRlICJtY2RfbDNfaW5jX3N0cnVjdC5oIgorCisvKiogTU9EX0RETSAtPiBNT0RfTldTRUw6IERETSByZXNwb25kcyBpZiBuZWVkIHRvIFBTIGRldGFjaCB0byBOV1NFTC4KKyAqICBEZXNpZ24gYXNzdW1wdGlvbgorICogID09PT09PT09PT09PT09PT09CisgKiAgLSBERE0gcmVzcG9uZHMgaWYgbmVlZCB0byBwZXJmb3JtIFBTIGRldGFjaCBhZnRlciBERE0gcmVjZWl2ZXMgTVNHX0lEX0RETV9OV1NFTF9FVVRSQU5fRElTQUJMRV9DSEVDSF9JTkQuCisgKiAgLSBJZiBubyBuZWVkIHRvIHBlcmZvcm0gUFMgZGV0YWNoLCBERE0gd2lsbCBicmluZyB0aGUgY2F1c2UgZm9yIE5XU0VMLiBOV1NFTCB3aWxsIGRlY2lkZSB3aGV0aGVyIHRvIGRpc2FibGUgRVVUUkFOIGltbWVkaWF0ZWx5IG9yIG5vdC4gCisgKgorICogIEhvdyB0byB1c2UgCisgKiAgPT09PT09PT09PQorICogIC0gMTogV2hlbiBOV1NFTCByZWNlaXZlcyB0aGlzIG1lc3NhZ2UsIE5XU0VMIGp1ZGdlIGlmIG5lZWQgdG8gZGVhY3RpdmF0ZSBMVEUgYW5kIHNlYXJjaCAyLzNHIGltbWVkaWF0ZWx5LgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCAgICBpc19wc19kZXRhY2hfbmVlZGVkOworICAgIGRkbV9ud3NlbF9kZXRhY2hfY2F1c2VfZW51bSBjYXVzZTsKKyAgICAKK30gZGRtX253c2VsX2V1dHJhbl9kaXNhYmxlX2NoZWNrX3JzcF9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBERE1fTldTRUxfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9kaXZpZGVyX3B1YmxpYy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2RpdmlkZXJfcHVibGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE2OTg5NgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9kaXZpZGVyX3B1YmxpYy5oCkBAIC0wLDAgKzEsMTI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgZGl2aWRlcl9wdWJsaWMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNYXVpX1NvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGZvciB0aGUgcHVibGljIGFjY2VzcyBmb3IgSFcgZGl2aWRlciBhY2NlbGVyYXRvciBvcGVyYXRpb24uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIERJVklERVJfUFVCTElDX0gKKyNkZWZpbmUgRElWSURFUl9fUFVCTElDX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisKKyNpZmRlZiBfX0hXX0RJVklERVJfXworCisjZGVmaW5lIERJVl9DT05UUk9MX1NJR05FRF9RVU9USUVOVF9OT05DT05TVCAweDYwMDAwMDExCisjZGVmaW5lIERJVl9DT05UUk9MX1NJR05FRF9SRU1BSU5ERVJfTk9OQ09OU1QgMHg4MDAwMDAxMQorCisjZGVmaW5lIERJVl9DT05UUk9MX1VOU0lHTkVEX1FVT1RJRU5UX05PTkNPTlNUIDB4NjAwMDAwMDEKKyNkZWZpbmUgRElWX0NPTlRST0xfVU5TSUdORURfUkVNQUlOREVSX05PTkNPTlNUIDB4ODAwMDAwMDEKKworI2RlZmluZSBESVZJREUoYSwgYikgICAoRGl2aWRlcl9PTl9PRkYoYSwgYiwgRElWX0NPTlRST0xfU0lHTkVEX1FVT1RJRU5UX05PTkNPTlNUKSkKKyNkZWZpbmUgTU9EVUxPKGEsIGIpICAgKERpdmlkZXJfT05fT0ZGKGEsIGIsIERJVl9DT05UUk9MX1NJR05FRF9SRU1BSU5ERVJfTk9OQ09OU1QpKQorCitleHRlcm4ga2FsX3VpbnQzMiBEaXZpZGVyX09OX09GRihrYWxfdWludDMyIGRpdmlkZW50LCBrYWxfdWludDMyIGRpdmlzb3IsIGthbF91aW50MzIgZGl2X2NvbnRyb2wpOworCisvLzsgcmV0dXJuIGthbF91aW50MzI6ID1RdW90aWVudCBpZiAoKGRpdl9jb250cm9sPj4yNyk9PTB4MEMpCisvLzsgICAgICAgICAgICAgICAgPVJlbWFpbmRlciBpZiAoKGRpdl9jb250cm9sPj4yNyk9PTB4MTApCisvLzsgRm9yIHNpZ25lZCBvcGVyYXRpb24sIGlmICgoZGl2X2NvbnRyb2wgJiAweDAwMDAwMDEwKT09MHgxMCksIGFuZCBpbnB1dCBkaXZpZGVudCwgCisvLzsgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpc29yLCByZXR1cm4gdmFsdWUgYXJlIGFsbCBzaWduZWQuCisvLzsgRm9yIHVuc2lnbmVkIG9wZXJhdGlvbiwgaWYgKChkaXZfY29udHJvbCAmIDB4MDAwMDAwMTApPT0wKS4KKy8vOyBkaXZfY29udHJvbD0weDYwMDAwMDExIGZvciBzaWduZWQsIG5vbi1jb25zdCBvcGVyYXRpb24sIHJldHVybiBzaWduZWQgcXVvdGllbnQuCisvLzsgZGl2X2NvbnRyb2w9MHg4MDAwMDAxMSBmb3Igc2lnbmVkLCBub24tY29uc3Qgb3BlcmF0aW9uLCByZXR1cm4gc2lnbmVkIHJlbWFpbmRlci4KKy8vOyBkaXZfY29udHJvbD0weDYwMDAwMDAxIGZvciB1bnNpZ25lZCwgbm9uLWNvbnN0IG9wZXJhdGlvbiwgcmV0dXJuIHVuc2lnbmVkIHF1b3RpZW50LgorLy87IGRpdl9jb250cm9sPTB4ODAwMDAwMDEgZm9yIHVuc2lnbmVkLCBub24tY29uc3Qgb3BlcmF0aW9uLCByZXR1cm4gdW5zaWduZWQgcmVtYWluZGVyLgorCisjZWxzZQorCisjZGVmaW5lIERJVklERSggYSwgYiApICAoKGEpLyhiKSkKKyNkZWZpbmUgTU9EVUxPKCBhLCBiICkgICgoYSklKGIpKQorCisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9lYXNfcnN2YV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9lYXNfcnN2YV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2Y1OGY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2Vhc19yc3ZhX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICBlYXNfcnN2YV9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICAgTFRFIEdlbWluaQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfRUFTX1JTVkFfU1RSVUNUX0hfCisjZGVmaW5lIF9FQVNfUlNWQV9TVFJVQ1RfSF8KKworI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisKKyNpZiBkZWZpbmVkKF9fR0VNSU5JX18pICYmIGRlZmluZWQoX19MVEVfUkFUX18pCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUFTIChFUlJDLUNFTCkgdG8gUlNWQSAoUlNWQUUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGVhc19mcmVxX3NjYW5fdHlwZV9lbnVtIGZyZXFfc2Nhbl90eXBlOworICAgIGthbF9ib29sIGlzX2Z1bGxfYmFuZDsKKyAgICBrYWxfdWludDggc2lkOyAvKiBzZXNzaW9uIGlkICovCit9ZWFzX3JzdmFlX2ZyZXF1ZW5jeV9zY2FuX3N0YXJ0X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGVhc19mcmVxX3NjYW5fc3RvcF9jYXVzZV9lbnVtIGNhdXNlOworICAgIC8qIHByZWVtcHRpb24gc2Vzc2lvbiBpZCwgb25seSB1c2VkIHdoZW4gY2F1c2U9RUFTX0ZSRVFfU0NBTl9QUkVFTVBURUQgKi8KKyAgICAvKiBhbHdheXMgcmVsZWFzZSB0aGUgcmVzb3VyY2Ugd2hlbiBjYXVzZT1FQVNfRlJFUV9TQ0FOX0ZJTklTSEVEICovCisgICAga2FsX3VpbnQ4IHNpZDsKK31lYXNfcnN2YWVfZnJlcXVlbmN5X3NjYW5fc3RvcF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7ICAgIAorICAgIExPQ0FMX1BBUkFfSERSCisgICAgZWFzX2ZyZXFfc2Nhbl90eXBlX2VudW0gZnJlcV9zY2FuX3R5cGU7CisgICAga2FsX2Jvb2wgaXNfZnVsbF9iYW5kOworICAgIGthbF91aW50OCBzaWQ7IC8qIHNlc3Npb24gaWQgKi8KK31lYXNfcnN2YWVfZnJlcXVlbmN5X3NjYW5fbW9kaWZ5X3JlcV9zdHJ1Y3Q7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJTVkEgKFJTVkFFKSB0byBFQVMgKEVSUkMtQ0VMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNpZDsgLyogc2Vzc2lvbiBpZCAqLworfXJzdmFlX2Vhc19mcmVxdWVuY3lfc2Nhbl9hY2NlcHRfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNpZDsgLyogcHJlZW1wdGlvbiBzZXNzaW9uIGlkICovCit9cnN2YWVfZWFzX2ZyZXF1ZW5jeV9zY2FuX3ByZWVtcHRfaW5kX3N0cnVjdDsKKworI2VuZGlmIC8qIGlmIGRlZmluZWQoX19HRU1JTklfXykgJiYgZGVmaW5lZChfX0xURV9SQVRfXykgKi8KKyNlbmRpZiAvKiBfRUFTX1JTVkFfU1RSVUNUX0hfICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZW1tX3B1YmxpY19zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9lbW1fcHVibGljX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZmY2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZW1tX3B1YmxpY19zdHJ1Y3QuaApAQCAtMCwwICsxLDEwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBFTU1fUFVCTElDX1NUUlVDVF9ICisjZGVmaW5lIEVNTV9QVUJMSUNfU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAicHNfcHVibGljX3N0cnVjdC5oIgorI2luY2x1ZGUgIm1jZF92Z21tX2dlbl9wZWVyLmgiCisjaW5jbHVkZSAibDNfaW5jX2xvY2FsLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgIE1BQ1JPUyAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgVFlQRSBERUZJTklUSU9OUyAmIEVOVU1TICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBEX0VNTV9JTlRFR1JJVFlfVEFVX01BWF9MRU4gICAgIDMwCQkJICAgICAgICAvLyo8IFRBVSBOQVMgbWVzc2FnZSAoTWFuZGF0b3J5IElFIG9ubHkpIGZvciBOMSBtb2RlIG9ubHkgKyBTZWN1cml0eSBoZWFkZXIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiBrZXkgc2V0IGlkIGFuZCBzZWxlY3RlZCBzZWN1cml0eSBhbGdvcml0aG1zICovCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIGVrc2lfcHJlc2VudDsKKyAgICBuYXNfa3NpX3N0cnVjdCAgICAgICAgICAgICAgZWtzaTsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRfYWxnOworICAgIAorICAgIC8qIHRoZSB1cGxpbmsgTkFTIGNvdW50ICovCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIG5hc19jb3VudF9wcmVzZW50OworICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICBuYXNfY291bnQ7CisKKyAgICAvKiBtYWtlIG1hcHBlZCBHVVRJKi8KKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgZ3V0aV9wcmVzZW50OworICAgIGd1dGlfc3RydWN0ICAgICAgICAgICAgICAgICBndXRpOyAgICAKKworICAgIC8qIGZvciBpbnRlcndvcmtpbmcgRTJWICovCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIGthc21lX3ByZXNlbnQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIGthc21lW0tBU01FX05VTV07Cit9IGVtbV9wdWJsaWNfY29udGV4dF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisKKyAgICAvKiBUQVUgZm9yIFZHTU0gTkFTIE1lc3NhZ2UgQ29udGFpbmVyIElFLCBvbmx5IHZhbGlkIGluIEhPIHByb2NlZHVyZSAoYmV0d2VlbiBSQVRfQ0hBTkdFX1NUQVJULT5GSU5JU0gpICovCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIHRhdV9tc2dfcHJlc2VudDsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgdGF1X21zZ2w7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIHRhdV9tc2dbRF9FTU1fSU5URUdSSVRZX1RBVV9NQVhfTEVOXTsKKworICAgIC8qIGVycmMgaXJhdCBuYXMgdHJhbnNwYXJlbnQgY29udGFpbmVydCwgc3RvcmUgZXJyYyBpcmF0IGNvbnRhaW5lcnQgc2hhcmluZyBmb3IgVkdNTSB1bnRpbCA0RzUgcHJvY2VkdXJlIGZpbmlzaCAqLworICAgIGlyYXRfY29udGFpbmVyX2VycmNfdG9fZW1tX3N0cnVjdCBpcmF0X2NvbnRhaW5lcjsgCit9IGVtbV9wdWJsaWNfaXJhdF9jb250ZXh0X3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworCisgICAgLyogR2VuZXJpYyBFTU0gcHVibGljIGNvbnRleHQgKi8KKyAgICBlbW1fcHVibGljX2NvbnRleHRfc3RydWN0IGVtbV9wdWJsaWNfY3R4dDsKKworICAgIC8qIGlyYXQgcmVsYXRlZCBFTU0gcHVibGljIGNvbnRleHQsIGhpZ2hseSBkZXBlbmRlbmN5IHdpdGggSVJBVC9JbnRlcndvcmtpbmcgcHJvY2VkdXJlIGFuZCByZXNldCB3aGVuIEVNTSByZWNlaXZlZCBGSU5JU0hfSU5EICovCisgICAgZW1tX3B1YmxpY19pcmF0X2NvbnRleHRfc3RydWN0IGVtbV9wdWJsaWNfaXJhdF9jdHh0OworCit9IGVtbV9wdWJsaWNfY29udGV4dF9wb29sX3N0cnVjdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIFZBUklBQkxFUyAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBGVU5DVElPTiBERUNMQVJBVElPTlMgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZW5kaWYgLyogRU1NX1BVQkxJQ19TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2VtbV9wdWJsaWNfdXRpbGl0eS5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2VtbV9wdWJsaWNfdXRpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NTVkNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZW1tX3B1YmxpY191dGlsaXR5LmgKQEAgLTAsMCArMSw2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBFTU1fUFVCTElDX1VUSUxJVFlfSAorI2RlZmluZSBFTU1fUFVCTElDX1VUSUxJVFlfSAorCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJwc19wdWJsaWNfc3RydWN0LmgiCisjaW5jbHVkZSAiZW1tX3B1YmxpY19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJpcmF0X2NvbW1vbl9zdHJ1Y3QuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgIE1BQ1JPUyAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgVFlQRSBERUZJTklUSU9OUyAmIEVOVU1TICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgVkFSSUFCTEVTICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEZVTkNUSU9OIERFQ0xBUkFUSU9OUyAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4ga2FsX2Jvb2wgZW1tX2dldF9wdWJsaWNfY29udGV4dChlbW1fcHVibGljX2NvbnRleHRfc3RydWN0ICpjdHh0X3ApOworZXh0ZXJuIGthbF9ib29sIGVtbV9nZXRfcHVibGljX2lyYXRfY29udGV4dChlbW1fcHVibGljX2lyYXRfY29udGV4dF9zdHJ1Y3QgKmN0eHRfcCk7CitleHRlcm4ga2FsX2Jvb2wgZW1tX2dldF81ZzRfaG9faW5mbyhwcm90b2NvbF9pZF9lbnVtIHBzX2lkLCBpcmF0X2NvbnRhaW5lcl9lbW1fdG9fZXJyY19zdHJ1Y3QgKmVtbV9pbmZvX3B0cik7CitleHRlcm4ga2FsX2Jvb2wgZW1tX3NldF80ZzVfc2VjdXJpdHlfcGFyYW0ocHJvdG9jb2xfaWRfZW51bSBwc19pZCwgaXJhdF9jb250YWluZXJfZXJyY190b19lbW1fc3RydWN0ICpwYXJhbV9wdHIpOworZXh0ZXJuIGthbF9ib29sIGlzX2VtbV9kZXJlZ2lzdGVyZWQoa2FsX3VpbnQ4IHBzX2lkeCk7CitleHRlcm4ga2FsX3VpbnQzMiBlbW1fZ2V0X3QzNDExX3JlbWFpbmluZ190aW1lX2Zvcl9wcyhrYWxfdWludDggcHNfaWR4KTsKKworCisjZW5kaWYgLyogRU1NX1BVQkxJQ19VVElMSVRZX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9lc21fcmF0ZG1fc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZXNtX3JhdGRtX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NDAxZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZXNtX3JhdGRtX3N0cnVjdC5oCkBAIC0wLDAgKzEsMzgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgZXNtX3JhdGRtX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIAorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkTG9nJAorICoKKyAqIDA3IDMwIDIwMjEgc3R1bi53dQorICogW01PTFkwMDY1NjUzNl0gW1RNTyBFUFNGQl1bUDIxMDQyMC0wMDM2NF0gW0NhcnJpZXIgVk9DXVtBMzI2VV1bVE1CXVtVQ0ZdW01RTC1UWF1bTlIvQmFzaWNGdW5jdGlvbi9DYWxsL0VQU0ZCXURldmljZSAiUzEgbW9kZSBub3QgcmVxdWVzdGVkIiBmYWlsaW5nIEVQU0ZCIGNhbGxzIHdpdGggNTAzCisgKiAJCisgKiAJLgorICoKKyAqIDAzIDI2IDIwMTkgbWlrZS5sdQorICogW01PTFkwMDM5MzQ1Nl0gW0dlbjk3XVtWTU9MWV0gNDVHIEludGVyUkFUICYgaW50ZXJTeXN0ZW0gZmVhdHVyZQorICogCQorICogCS4KKyAqCisgKiAxMSAyOSAyMDE4IG1pa2UubHUKKyAqIFtNT0xZMDAzNjE1NzZdIFRTMjQuMzAxIFIxNS40IEFsaWdtZW50CisgKiAuCisgKgorICogMTAgMjkgMjAxOCBtaWtlLmx1CisgKiBbTU9MWTAwMzYxNTc2XSBUUzI0LjMwMSBSMTUuNCBBbGlnbWVudAorICogCQorICogCVtNT0xZMDAzNDY3MjldIFZNT0xZX0NCciBwYXRjaCBiYWNrIHRvIFZNT0xZIFRSVU5LCisgKiAJCisgKiAJLgorICoKKyAqIDA2IDA1IDIwMTggeXUtaHNpbi5saW4KKyAqIFtNT0xZMDAzMjUxMDFdIFtVTU9MWUVdW01UNjc2MV1bTWVybG90XVtPMV1bTVAzXVtNVEJGXVtIUV1bNEdNTV1bTGFiXVtFcmljc3Nvbl1bRmF0YWwgZXJyb3IodGFzayldIGVycl9jb2RlMToweDAwMDAwMzA1IGVycl9jb2RlMjoweDg4ODgwMkRBIGVycl9jb2RlMzoweENDQ0NDQ0NDCisgKiBbaW50ZXJmYWNlXSBpc19lbWVyZ2VuY3lfYmVhcmVyLCBlbnVtLCBhbmQgbXNnIHN0cnVjdCBmb3IgZXNtX3JhdGRtX2FjX2Jhcl9hbGxldmlhdGVfcmVxOworICoKKyAqIDA0IDI2IDIwMTggd2lsbHktd2ouY2hlbgorICogW01PTFkwMDMyMjQ2MF0gW1VNT0xZRV2haT8/oWqhaabopnehaqFpP6tIVk9MVEWhaqVkMT+rSDRHpWQyP6tIVk9MVEUgpWQypmI/q0hWT0xURSBCNT+scaRVTVQ/P6FBPz+lWD9NVKWiPworICogW1VNT0xZRV1bRUwyXVtDb21tb25doWk/P6FqoWmm6KZ3oWqhaT+rSFZPTFRFoWqlZDE/q0g0R6VkMj+rSFZPTFRFIKVkMqZiP6tIVk9MVEUgQjU/rHGkVU1UPz+hQT8/pVg/TVSloj8uCisgKgorICogMDQgMjAgMjAxOCB3aWxseS13ai5jaGVuCisgKiBbTU9MWTAwMzIxNDY5XSBbUjIuVEMxNi5TUF1bQ09NTU9OXaFpPz+haqFppuimd6FqoWk/q0hWT0xURaFqpWQxP6tINEelZDI/q0hWT0xURSClZDKmYj+rSFZPTFRFIEI1P6xxpFVNVD8/oUE/P6VYP01UpaI/CisgKiAwMSAxNiAyMDE4IHl1LWhzaW4ubGluCisgKiBbTU9MWTAwMzAyMTA5XSBbTVQ2NzYzXVtCaWFuY29dW04xXVtJbmRpYSBGVF1bQ2hlbm5haV1bV1cgRlRdW1JDT01dW1RBVEEgRE9DT01PXVtUQ19NVEtfUDFfNEdfR2VtaW5pXzEzXSBbTVAxLjVdIERVVCBsb25nIFNNUyB0byBzaW0yIGZhaWxzIChjb21tb24gaW50ZXJmYWNlIHBhcnQpCisgKiBbSW50ZXJmYWNlXSBtb2RpZnkgRVNNIGNhdXNlCisgKgorICoKKyAqIDAxIDE2IDIwMTggeXUtaHNpbi5saW4KKyAqIFtNT0xZMDAzMDIxMDldIFtNVDY3NjNdW0JpYW5jb11bTjFdW0luZGlhIEZUXVtDaGVubmFpXVtXVyBGVF1bUkNPTV1bVEFUQSBET0NPTU9dW1RDX01US19QMV80R19HZW1pbmlfMTNdIFtNUDEuNV0gRFVUIGxvbmcgU01TIHRvIHNpbTIgZmFpbHMgKGNvbW1vbiBpbnRlcmZhY2UgcGFydCkKKyAqIFtJbnRlcmZhY2VdIG1vZGlmeSBFU00gY2F1c2UKKyAqCisgKiAxMiAxOCAyMDE3IHZlcmEueWVoCisgKiBbTU9MWTAwMjk0Mjc1XSBbNjI5MyBHZW1pbmldW0NvbW1vbiBJbnRlcmZhY2VdW1N3aXRjaCBkYXRhIHRvIFZvTFRFIGNhbGwgU0lNXTogU3dpdGNoIGRhdGEgc2VydmljZSB0byBTSU0gd2hpY2ggaXMgd2l0aCBvbmdvaW5nIFZvTFRFIGNhbGwKKyAqIFtFU01dIF9fRk9SQ0VfTE9DQUxfUkVMRUFTRV9fIEFkZCBuZXcgY2F1c2UgR0VNSU5JX0ZBSUxVUkUgZm9yIElETEVfTEVBVkVfUkVKCisgKgorICogMTAgMjUgMjAxNiBzdGV2ZS5rYW8KKyAqIFtNT0xZMDAyMDk2MDBdIFtVTU9MWUFdW1JBVERNLUxURV0gTS1QUyByZWxhdGVkIGNvZGUgY2hhbmdlcworICogW1VNT0xZQV9UUlVOS11bUkFURE0tTFRFXVtNUFNdIE1vZGlmeSBpbnRlcmZhY2UgZm9yIElETEVfTEVBVkVfSU5EIC4KKyAqCisgKiAwNyAyMCAyMDE2IGhlYWQuaHN1CisgKiBbTU9MWTAwMTc0NzQ2XSBbUEgxX1ZaV11bam9pbnQtY2FtcF1bUmFkaW9fUHJvdG9jb2xdW2hWb0xURV0gVEMgMi4yLjEzIGZhaWw6IHN0ZXA4LiB3YWl0IGZvciBFTU0gU1IgdGltZW91dAorICoKKyAqIDAyIDAxIDIwMTYgbWF0dGkubW9pc2FuZW4KKyAqIFtNT0xZMDAxNDU4MjddIFtSMTJdIENSMjAyNCBJbnRyb2R1Y2luZyBuZXcgUUNJcyBmb3IgTUNQVFQgc2lnbmFsaW5nCisgKgorICogMDQgMTYgMjAxNSBjYXJsc29uLmxpbgorICogW01PTFkwMDA5MTc2OV0gW0dFTUlOSV0gVHJpZ2dlciBUQVUvU1IgYWZ0ZXIgR0VNSU5JIHJlc3VtZQorICogQWRkIGl0ZXJmYWNlIChPQSBEb21haW4pCisgKgorICogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIEVTTV9SQVRETV9TVFJVQ1RfSAorI2RlZmluZSBFU01fUkFURE1fU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAibWNkX2wzX2luY19ncHJzX3N0cnVjdC5oIgorI2luY2x1ZGUgImwzX2luY19sb2NhbC5oIgorI2luY2x1ZGUgInFtdV9ibS5oIgorCisvKiB0aGUgYXZhaWxhYmxlIEVCSSByYW5nZSBpcyA1fjE1LiBUaGUgbWF4aW11bSBudW1iZXIgb2YgRVBTIGJlYXJlciBpcyBlbGV2ZW4uICovCisjZGVmaW5lIE1BWF9FUFNCX05VTUJFUiAxMQorCit0eXBlZGVmIGVudW0KK3sKKyAgICBFU01fUUNJX1JFU0VSVkVEX1ZBTFVFXzAgPSAwLCAvLyBSZXNlcnZlZAorICAgIEVTTV9RQ0lfMSA9IDEsIC8vIFFDSV8xLCBDb252ZXJzYXRpb25hbCBWb2NpZQorICAgIEVTTV9RQ0lfMiA9IDIsIC8vIFFDSV8yLCBDb252ZXJzYXRpb25hbCBWaWRlbyAoTGl2ZSBTdHJlYW1pbmcpCisgICAgRVNNX1FDSV8zID0gMywgLy8gUUNJXzMsIFJlYWwgVGltZSBHYW1pbmcKKyAgICBFU01fUUNJXzQgPSA0LCAvLyBRQ0lfNCwgTm9uLUNvbnZlcnNhdGlvbmFsIFZpZGVvIChCdWZmZXJlZCBTdHJlYW1pbmcpCisgICAgRVNNX1FDSV81ID0gNSwgLy8gUUNJXzUsIElNUyBTaWduYWxpbmcKKyAgICBFU01fUUNJXzYgPSA2LCAvLyBRQ0lfNiwgVmlkZW8gKEJ1ZmZlcmVkIFN0cmVhbWluZyksIFRDUC1iYXNlZCAoZS5nLiwgd3d3LCBlLW1haWwsIGNoYXQsIGZ0cCwgcDJwIGZpbGUgc2hhcmluZywgcHJvZ3Jlc3NpdmUgdmlkZW8sIGV0YykKKyAgICBFU01fUUNJXzcgPSA3LCAvLyBRQ0lfNywgVm9pY2UsIFZpZGVvIChMaXZlIFN0cmVhbWluZyksIEludGVyYWN0aXZlIEdhbWluZworICAgIEVTTV9RQ0lfOCA9IDgsIC8vIFFDSV84LCBWaWRlbyAoQnVmZmVyZWQgU3RyZWFtaW5nKSwgVENQLWJhc2VkIChlLmcuLCB3d3csIGUtbWFpbCwgY2hhdCwgZnRwLCBwMnAgZmlsZSBzaGFyaW5nLCBwcm9ncmVzc2l2ZSB2aWRlbywgZXRjKQorICAgIEVTTV9RQ0lfOSA9IDksIC8vIFFDSV85LCBWaWRlbyAoQnVmZmVyZWQgU3RyZWFtaW5nKSwgVENQLWJhc2VkIChlLmcuLCB3d3csIGUtbWFpbCwgY2hhdCwgZnRwLCBwMnAgZmlsZSBzaGFyaW5nLCBwcm9ncmVzc2l2ZSB2aWRlbywgZXRjKQorICAgIEVTTV9RQ0lfU1BBUkVfVkFMVUVfMTAgPSAxMCwgLy8gU3BhcmUgKDEwfjY0KQorCUVTTV9RQ0lfU1BBUkVfVkFMVUVfNjQgPSA2NCwgLy8gU3BhcmUgKDEwfjY0KQorCUVTTV9RQ0lfNjUgPSA2NSwgLy8gUUNJXzY1LCBNaXNzaW9uIENyaXRpY2FsIHVzZXIgcGxhbmUgUHVzaCBUbyBUYWxrIFZvaWNlIChlLmcuLCBNQ1BUVCkKKwlFU01fUUNJXzY2ID0gNjYsIC8vIFFDSV82NiwgTm9uLU1pc3Npb24tQ3JpdGljYWwgdXNlciBwbGFuZSBQdXNoIFRvIFRhbGsgVm9pY2UKKyAgICBFU01fUUNJXzY3ID0gNjcsIC8vIFFDSV82NywgTWlzc2lvbiBDcml0aWNhbCBWaWRlbyBzZXJ2aWNlCisJRVNNX1FDSV9TUEFSRV9WQUxVRV82OCA9IDY4LCAvLyBTcGFyZSAoNjgpCisJRVNNX1FDSV82OSA9IDY5LCAvLyBRQ0lfNjksIE1pc3Npb24gQ3JpdGljYWwgZGVsYXkgc2Vuc2l0aXZlIHNpZ25hbGxpbmcgKGUuZy4sTUMtUFRUIHNpZ25hbGxpbmcpCisJRVNNX1FDSV83MCA9IDcwLCAvLyBRQ0lfNzAsIE1pc3Npb24gQ3JpdGljYWwgRGF0YSAoZS5nLiBleGFtcGxlIHNlcnZpY2VzIGFyZSB0aGUgc2FtZSBhcyBRQ0kgNi84LzkpCisgICAgRVNNX1FDSV9TUEFSRV9WQUxVRV83MSA9IDcxLCAvLyBTcGFyZSAoNzF+MTI3KQorICAgIEVTTV9RQ0lfODQgPSA4NCwgLy8gUUNJXzg0LCBlLmcuIFVsdHJhLXJlbGlhYmxlIGFuZCBMb3cgTGF0ZW5jeSBDb21tdW5pY2F0aW9ucworICAgIEVTTV9RQ0lfODUgPSA4NSwgLy8gUUNJXzg1LCBlLmcuIFVsdHJhLXJlbGlhYmxlIGFuZCBMb3cgTGF0ZW5jeSBDb21tdW5pY2F0aW9ucworCUVTTV9RQ0lfU1BBUkVfVkFMVUVfMTI3ID0gMTI3LCAvLyBTcGFyZSAoNzF+MTI3KQorICAgIEVTTV9RQ0lfT1BFUkFUT1JfU1BFQ0lGSUNfUUNJX01JTl9WQUxVRSA9IDEyOCwgLy8gT3BlcmF0b3Itc3BlY2lmaWMgUUNJcyAxMjh+MjU0CisgICAgRVNNX1FDSV9PUEVSQVRPUl9TUEVDSUZJQ19RQ0lfTUFYX1ZBTFVFID0gMjU0LCAvLyBPcGVyYXRvci1zcGVjaWZpYyBRQ0lzIDEyOH4yNTQKKyAgICBFU01fUUNJX1JFU0VSVkVEX1ZBTFVFXzI1NSA9IDI1NSAvLyBSZXNlcnZlZAorfSBlc21fcWNpX2VudW07CisKKworLy8gUjEyIENSMjA2MyBRQ0kgY29kZSB2YWx1ZXMgInNwYXJlIGZvciBmdXR1cmUgdXNlIgorLy8gVGVtcG9yYXJ5IGRlZmluaXRpb25zIEphbnVhcnktMjAxNi4gV2hlbiBSQVRETSBjb2RlIGlzIHVwZGF0ZWQgdG8gdXNlIGVzbV9xY2lfZW51bQorLy8gdmFsdWVzIHRoZW4gdGhlc2UgZGVmaW5pdGlvbnMgc2hhbGwgYmUgZGVsZXRlZAorI2RlZmluZQkJRVNNX1FDSV9SRVNFUlZFRF9WQUxVRV8xMAlFU01fUUNJX1NQQVJFX1ZBTFVFXzEwIAorI2RlZmluZSAgICAgRVNNX1FDSV9SRVNFUlZFRF9WQUxVRV8xMjcgIEVTTV9RQ0lfU1BBUkVfVkFMVUVfMTI3CisKKwordHlwZWRlZiBlbnVtCit7CisgICAgRVNNX0lETEVfTEVBVkVfUkVKX1VOU1BFRklDSUZJRUQgID0gMHgwMSwKKyAgICBFU01fSURMRV9MRUFWRV9SRUpfREVUQUNIICAgICAgICAgPSAweDAyLAorICAgIEVTTV9JRExFX0xFQVZFX1JFSl9DT1ZFUkFHRV9PVVQgICA9IDB4MTAsCisgICAgRVNNX0lETEVfTEVBVkVfUkVKX0FDX0JBUlJFRCAgICAgID0gMHgxMSwKKyAgICBFU01fSURMRV9MRUFWRV9SRUpfTldfUkVKRUNUICAgICAgPSAweDEyLAorICAgIEVTTV9JRExFX0xFQVZFX1JFSl9HRU1JTklfU1VTUEVORCA9IDB4MTMsIC8vZ2VtaW5pIFNVU1BFTkQgZHVlIHRvIENTIHNlbWFwaG9yZSBvY2N1cGllZCBieSBhbm90aGVyIHByb3RvY2FsIHN0YWNrLCB3YWl0IGZvciByZXN1bWUKKyAgICBFU01fSURMRV9MRUFWRV9SRUpfVDMzNDZfQ09OR0VTVElPTiA9IDB4MTQsCisgICAgRVNNX0lETEVfTEVBVkVfUkVKX1QzNDE3VE8gICAgICAgID0gMHgxNSwKKyAgICBFU01fSURMRV9MRUFWRV9SRUpfR0VNSU5JX0ZBSUxVUkUgPSAweDE2LCAvL2dlbWluaSBmYWlsdXJlIGR1ZSB0byBQUyhvciBoaWdoZXIpIHNlbWFwaG9yZSBvY2N1cGllZCBieSBhbm90aGVyIHByb3RvY2FsIHN0YWNrCisgICAgRVNNX0lETEVfTEVBVkVfUkVKX0FDX0JBUlJFRF9FTUVSR0VOQ1kgPSAweDE3LAorICAgIEVTTV9JRExFX0xFQVZFX1JFSl9BQ19CQVJSRURfTk9STUFMICAgID0gMHgxOCwKKyAgICBFU01fSURMRV9MRUFWRV9SRUpfT1RIRVJTICAgICAgICAgPSAweDIwLAorICAgIEVTTV9JRExFX0xFQVZFX1JFSl9UQVVfQ09OTl9GQUlMICA9IDB4MjEsCit9aWRsZV9sZWF2ZV9yZWpfY2F1c2VfZW51bTsKKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBFU01fQUxMRVZJQVRFRF9UWVBFX0VNRVJHRU5DWSwKKyAgICBFU01fQUxMRVZJQVRFRF9UWVBFX05PUk1BTCwKK31lc21fYWxsZXZpYXRlZF90eXBlX2VudW07CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggZWJpOworICAgIGthbF91aW50OCByYl9pZHg7Cit9ZWJpX3JiaWR4X21hcF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIC8qIEVQUyBiZWFyZXIgaWRlbnRpdHkgd2hpY2ggRVNNIHdhbnRzIHRvIGluaXRpYWxpemUgKi8KKyAgICBrYWxfdWludDggZWJpOworCisgICAgLyoKKyAgICAqIERlZmF1bHQgRVBTIGJlYXJlciBpZGVudGl0eQorICAgICogSWYgdGhlIEVQUyBiZWFyZXIgRVNNIHdhbnRzIHRvIGFjdGl2YXRlIGlzIGEgZGVmYXVsdCBFUFMgYmVhcmVyLAorICAgICogbGlua2VkX2ViaSB3aWxsIGJlIHNldCB0byB0aGUgc2FtZSBhcyBlYmkKKyAgICAqLworICAgIGthbF91aW50OCBsaW5rZWRfZWJpOworCisgICAgLyogSGFyZHdhcmUgY2hhbm5lbCBpZCAoY2hvb3NlIGJ5IEVSUkMpICovCisgICAga2FsX3VpbnQ4IHJiX2lkeDsKKworICAgIGVzbV9xY2lfZW51bSBxY2k7CisgICAgCisgICAgLyogMjNHIHJhbGF0ZWQgcGFyYW1ldGVycyAqLworICAgIGthbF9ib29sIGlzX2xsY19zYXBpX3ByZXNlbnQ7CisgICAga2FsX3VpbnQ4IGxsY19zYXBpOworCisgICAga2FsX2Jvb2wgaXNfdWdfcW9zX3ByZXNlbnQ7CisgICAgcW9zX3N0cnVjdCB1Z19xb3M7CisKKyAgICBrYWxfYm9vbCBpc19yYWRpb19wcmlvcml0eV9wcmVzZW50OworICAgIGthbF91aW50OCByYWRpb19wcmlvcml0eTsKKworICAgIGthbF9ib29sIGlzX3BmaV9wcmVzZW50OworICAgIGthbF91aW50OCBwZmk7ICAgCisKKyAgICAvKiBCZWFyZXIgc2VydmljZSB0eXBlICovCisgICAga2FsX2Jvb2wgaXNfZW1lcmdlbmN5X2JlYXJlcjsKKyAgICAKK31lc21fcmF0ZG1fZXBzYl9pbml0X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIC8qIEVQUyBiZWFyZXIgaWRlbnRpdHkgd2hpY2ggRVNNIHdhbnRzIHRvIGFjdGl2YXRlICovCisgICAga2FsX3VpbnQ4IGViaTsKK31lc21fcmF0ZG1fZXBzYl9hY3RfcmVxX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogRVBTIGJlYXJlciBpZGVudGl0eSB3aGljaCBFU00gd2FudHMgdG8gaW5pdGlhbGl6ZSAqLworICAgIGthbF91aW50OCBlYmk7CisgICAgCisgICAgLyoKKyAgICAqIERlZmF1bHQgRVBTIGJlYXJlciBpZGVudGl0eQorICAgICogSWYgdGhlIEVQUyBiZWFyZXIgRVNNIHdhbnRzIHRvIGFjdGl2YXRlIGlzIGEgZGVmYXVsdCBFUFMgYmVhcmVyLAorICAgICogbGlua2VkX2ViaSB3aWxsIGJlIHNldCB0byB0aGUgc2FtZSBhcyBlYmkKKyAgICAqLworICAgIGthbF91aW50OCBsaW5rZWRfZWJpOworICAgIAorICAgIC8qIEhhcmR3YXJlIGNoYW5uZWwgaWQgKGNob29zZSBieSBFUlJDKSAqLworICAgIGthbF91aW50OCByYl9pZHg7CisgICAgCisgICAgZXNtX3FjaV9lbnVtIHFjaTsKKyAgICAKKyAgICAvKiAyM0cgcmFsYXRlZCBwYXJhbWV0ZXJzICovCisgICAga2FsX2Jvb2wgaXNfbGxjX3NhcGlfcHJlc2VudDsKKyAgICBrYWxfdWludDggbGxjX3NhcGk7CisgICAgCisgICAga2FsX2Jvb2wgaXNfdWdfcW9zX3ByZXNlbnQ7CisgICAgcW9zX3N0cnVjdCB1Z19xb3M7CisgICAgCisgICAga2FsX2Jvb2wgaXNfcmFkaW9fcHJpb3JpdHlfcHJlc2VudDsKKyAgICBrYWxfdWludDggcmFkaW9fcHJpb3JpdHk7CisgICAgCisgICAga2FsX2Jvb2wgaXNfcGZpX3ByZXNlbnQ7CisgICAga2FsX3VpbnQ4IHBmaTsgICAKKyAgICAKKyAgICAvKiBCZWFyZXIgc2VydmljZSB0eXBlICovCisgICAga2FsX2Jvb2wgaXNfZW1lcmdlbmN5X2JlYXJlcjsKKworfSBlcHNiX2luZm9fc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IGZyb21fcHNpOworICAgIGthbF91aW50NjQgcWZpX2JpdG1hcDsKKworICAgIGVwc2JfaW5mb19zdHJ1Y3QgZXBzYjsKKyAgICAKK30gZXNtX3JhdGRtX2ViaV9tYXBfdG9fcHNpX2luZm9fc3RydWN0OworCisvKiBNU0dfSURfRVNNX1JBVERNXzVHNF9DT05URVhUX1RSQU5TRkVSX1JFUSAqLyAKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIAorICAgIGthbF91aW50OCBudW1fb2ZfbWFwX2luZm87CisgICAgZXNtX3JhdGRtX2ViaV9tYXBfdG9fcHNpX2luZm9fc3RydWN0IG1hcF9pbmZvW01BWF9MNF9QU19FQklfTlVNXTsKK30gZXNtX3JhdGRtXzVnNF9jb250ZXh0X3RyYW5zZmVyX3JlcV9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAgLyogRVBTIGJlYXJlciBpZGVudGl0eSB3aGljaCBFU00gd2FudHMgdG8gZGVhY3RpdmF0ZSAqLworICAgIGthbF91aW50OCBlYmk7Cit9ZXNtX3JhdGRtX2Vwc2JfZGVhY3RfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGViaTsKKyAgICAvKiA0RyByYWxhdGVkIHBhcmFtZXRlcnMgKi8gCisgICAgZXNtX3FjaV9lbnVtIHFjaTsKKyAgICAvKiAyM0cgcmFsYXRlZCBwYXJhbWV0ZXJzICovCisgICAga2FsX2Jvb2wgaXNfbGxjX3NhcGlfcHJlc2VudDsKKyAgICBrYWxfdWludDggbGxjX3NhcGk7CisKKyAgICBrYWxfYm9vbCBpc191Z19xb3NfcHJlc2VudDsKKyAgICBxb3Nfc3RydWN0IHVnX3FvczsKKworICAgIGthbF9ib29sIGlzX3JhZGlvX3ByaW9yaXR5X3ByZXNlbnQ7CisgICAga2FsX3VpbnQ4IHJhZGlvX3ByaW9yaXR5OworCisgICAga2FsX2Jvb2wgaXNfcGZpX3ByZXNlbnQ7CisgICAga2FsX3VpbnQ4IHBmaTsKK30gZXNtX3JhdGRtX2Vwc2JfbW9kaWZ5X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIC8qIFRoZSB0b3RhbCBudW1iZXIgb2YgRVBTIGJlYXJlciB3aXRoIERSQiBlc3RhYmxpc2hlZCBhZnRlciBVRSBlbnRlciBjb25uZWN0ZWQgbW9kZSAqLworICAgIGthbF91aW50OCBlcHNiX251bTsKKworICAgIC8qIE1hcHBpbmcgYmV0d2VlbiBFQkkgJiBSQiBpbmRleCAqLworICAgIGViaV9yYmlkeF9tYXBfc3RydWN0IGViaV9yYmlkeF9tYXBbTUFYX0VQU0JfTlVNQkVSXTsKK31lc21fcmF0ZG1faWRsZV9sZWF2ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICAvKiBUaGUgZmFpbHVyZSBjYXVzZSBvZiBsZWF2ZSBpZGxlICovCisgICAgaWRsZV9sZWF2ZV9yZWpfY2F1c2VfZW51bSBpZGxlX2xlYXZlX3Jlal9jYXVzZTsKKworICAgIC8qIEJhY2tvZmYgdGltZXIgdXNlZCB3aXRoIEVTTV9JRExFX0xFQVZFX1JFSl9UQVVfQ09OTl9GQUlMICovCisgICAga2FsX3VpbnQzMiByZXRyeV90aW1lX21zOworfWVzbV9yYXRkbV9pZGxlX2xlYXZlX3Jlal9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIC8qIFdoaWNoIEVQUyBiZWFyZXJzIGhhcyBkYXRhICovCisgICAga2FsX3VpbnQxNiBlYmlfYnRtcDsKKyAgICAvKiB3aGV0aGVyIHRoZSBxdWV1ZSBvZiBlYmlfYnRtcCB3aWxsIGJlIGNsZWFyZWQgdXBvbiBJZGxlX0xlYXZlX1JlaiB3aXRoIGdlbWluaSAqLworICAgIGthbF9ib29sICAgaXNfZHJvcF9kYXRhX2J5X2dlbWluaV9jYXVzZTsKK31lc21fcmF0ZG1faWRsZV9sZWF2ZV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICAvKiBXaGV0aGVyIFVMIGRhdGEgaXMgY29taW5nICovCisgICAga2FsX2Jvb2wgaXNfdWxfZGF0YV9jb21pbmc7Cit9ZXNtX3JhdGRtX3F1ZXJ5X3VsX2RhdGFfc3RhdHVzX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIC8qIHR5cGUgd2hpY2ggaXMgZ29pbmcgdG8gYmUgYWxsZXZpYXRlZCBkdWUgdG8gYWMgYmFyIGluIGlkbGUgbGVhdmUqLworICAgIGVzbV9hbGxldmlhdGVkX3R5cGVfZW51bSBhbGxldmlhdGVkX3R5cGU7Cit9ZXNtX3JhdGRtX2FjX2Jhcl9hbGxldmlhdGVfcmVxX3N0cnVjdDsKKworCisvKiBBZGFwdGF0aW9uIGJldHdlZW4gRVNNIGFuZCBMVE0gKi8KK3R5cGVkZWYgZXNtX3JhdGRtX2Vwc2JfaW5pdF9yZXFfc3RydWN0IGVzbV9sdG1fZXBzYl9pbml0X3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIGVzbV9yYXRkbV9lcHNiX2FjdF9yZXFfc3RydWN0IGVzbV9sdG1fZXBzYl9hY3RfcmVxX3N0cnVjdDsKK3R5cGVkZWYgZXNtX3JhdGRtX2Vwc2JfZGVhY3RfcmVxX3N0cnVjdCBlc21fbHRtX2Vwc2JfZGVhY3RfcmVxX3N0cnVjdDsKK3R5cGVkZWYgZXNtX3JhdGRtX2Vwc2JfbW9kaWZ5X3JlcV9zdHJ1Y3QgZXNtX2x0bV9lcHNiX21vZGlmeV9yZXFfc3RydWN0OwordHlwZWRlZiBlc21fcmF0ZG1faWRsZV9sZWF2ZV9yZXFfc3RydWN0IGVzbV9sdG1faWRsZV9sZWF2ZV9yZXFfc3RydWN0OwordHlwZWRlZiBlc21fcmF0ZG1faWRsZV9sZWF2ZV9yZWpfc3RydWN0IGVzbV9sdG1faWRsZV9sZWF2ZV9yZWpfc3RydWN0OwordHlwZWRlZiBlc21fcmF0ZG1faWRsZV9sZWF2ZV9pbmRfc3RydWN0IGVzbV9sdG1faWRsZV9sZWF2ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlc21fcmF0ZG1fcXVlcnlfdWxfZGF0YV9zdGF0dXNfY25mX3N0cnVjdCBlc21fbHRtX3F1ZXJ5X3VsX2RhdGFfc3RhdHVzX2NuZl9zdHJ1Y3Q7Cit0eXBlZGVmIGVzbV9yYXRkbV9hY19iYXJfYWxsZXZpYXRlX3JlcV9zdHJ1Y3QgZXNtX2x0bV9hY19iYXJfYWxsZXZpYXRlX3JlcV9zdHJ1Y3Q7CisjZW5kaWYgLyogRVNNX1JBVERNX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZXNtX3NtaWNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZXNtX3NtaWNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI1MDc4MAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9lc21fc21pY19zdHJ1Y3QuaApAQCAtMCwwICsxLDE2OSBAQAorI2lmbmRlZiBFU01fRkFLRV9TTUlDX1NUUlVDVF9ICisjZGVmaW5lIEVTTV9GQUtFX1NNSUNfU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAic21pY19zdHJ1Y3QuaCIKKworI2RlZmluZSBFU01fRkFLRV9TTUlDX01BWF9QU0kgMTAKKyNkZWZpbmUgRVNNX0ZBS0VfU01JQ19NQVhfRUJJIDE1IC8vU2hvdWxkIHJlZmVyIHRvIEVTTV9FUFNCX0lEX1RPVEFMX05VTSBpbiBtb2R1bGUsIEVTTQorI2RlZmluZSBFU01fRkFLRV9TTUlDX01BWF81R19DT05GSUdfTEVOIDIwIC8vIFRoaXMgb25seSB1c2VkIGJ5IGxvZ19zbWljXzVnX2NvbmZpZ19vcHRpb25fc3RydWN0CisvLy0tLS0tIEZvciBTaW11bGF0aW5nIFNNSUMgQVBJcyAtLS0tLS8vCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sIGlzX2ViaV9hY3RpdmVbRVNNX0ZBS0VfU01JQ19NQVhfRUJJICsgMV07IC8vIGViaSAtPiBJZiBzdGF0ZSBpcyBhY3RpdmU7Cit9IHNtaWNfNGdfaWZfZWJpX21hcHBlZF9zdWNjZXNzX2NvbnRleHRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGVzbV9zbWljX2Vwc2JfY29udGV4dF9zdHJ1Y3QgZXBzYl9jb250ZXh0W0VTTV9GQUtFX1NNSUNfTUFYX0VCSSArIDFdOyAvLyBlYmkgLT4gRVBTQiBDb250ZXh0OworfSBzbWljXzRnX2dldF81ZzRfZWJpX2NvbnRleHRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgIHBzaTsKKyAgICBrYWxfdWludDY0ICBxZmlfYml0bWFwOyAgCit9IHNtaWNfZ2V0X2ViaV9tYXBwZWRfcHNpX2FuZF9xZmlfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgIHBzaTsgLy9lYmlbMV0gPSA1ID0+IGViaSAxIDw+IHBzaSA1Cit9IHNtaWNfZ2V0X2ViaV9tYXBwZWRfcHNpX2FmdGVyXzIzRzRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIHBzX2NhdXNlX2VudW0gY2F1c2VfdG9fbnc7CisgICAgc21pY180Z19zZXRfcmVzdWx0X2VudW0gcmV0OyAgCit9IHNtaWNfNGdfcGVlcl9tc2dfcHJlY2hlY2tfc3RydWN0OwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBzbWljXzRnX2lmX2ViaV9tYXBwZWRfc3VjY2Vzc19jb250ZXh0X3N0cnVjdCBzbWljXzRnX2lmX2ViaV9tYXBwZWRfc3VjY2Vzc19hcGk7CisgICAgc21pY180Z19nZXRfNWc0X2ViaV9jb250ZXh0X3N0cnVjdCAgICAgICAgICAgc21pY180Z19nZXRfNWc0X2ViaV9hcGk7CisgICAgc21pY19nZXRfZWJpX21hcHBlZF9wc2lfYW5kX3FmaV9zdHJ1Y3QgICAgICAgc21pY19nZXRfZWJpX21hcHBlZF9wc2lfYW5kX3FmaV9hcGlbRVNNX0ZBS0VfU01JQ19NQVhfRUJJICsgMV07ICAvLyBlYmkgLT4gUFNJIGFuZCBRRkkgSW5mbzsKKyAgICBzbWljX2dldF9lYmlfbWFwcGVkX3BzaV9hZnRlcl8yM0c0X3N0cnVjdCAgICBzbWljXzRnX2dldF9wc2lfYnlfZWJpX2FmdGVyXzIzRzRfYXBpW0VTTV9GQUtFX1NNSUNfTUFYX0VCSSArIDFdOyAgICAvLyBlYmkgLT4gUFNJCisgICAgc21pY180Z19wZWVyX21zZ19wcmVjaGVja19zdHJ1Y3QgICAgICAgICAgICAgc21pY180Z19wZWVyX21zZ19wcmVjaGVja1tFU01fRkFLRV9TTUlDX01BWF9QU0kgKyAxXTsgLy8gcHNpIC0+IHNtaWNfNGdfcGVlcl9tc2dfcHJlY2hlY2soKSBvdXRwdXQKKwllc21fc21pY19wcmVjaGVja19lcHNiX2NvbnRleHRfc3RydWN0CSAJIHNtaWNfNGdfcHJlY2hlY2tfZXBzYl9jb250ZXh0OworfSBlc21fdXRfZmFrZV9zbWljX2NvbnRleHRfc3RydWN0OworCisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGVzbV91dF9mYWtlX3NtaWNfY29udGV4dF9zdHJ1Y3QgZXNtX3V0X2Zha2Vfc21pY19jb250ZXh0OworfSBlc21fdXRfc2V0X2Zha2Vfc21pY19jb250ZXh0X3N0cnVjdDsgLy8gTVNHX0lEX0VTTV9VVF9TRVRfRkFLRV9TTUlDX0NPTlRFWFQsIHVzZWQgdG8gc2V0IGdfZXNtX3V0X2Zha2Vfc21pY19jb250ZXh0CisKKy8vLS0tLSBbRW5kXSBGb3IgU2ltdWxhdGluZyBTTUlDIEFQSVMgLS0tLS8vCisKK3R5cGVkZWYgZW51bQoreworICAgIEZVTkNfSURYX3NtaWNfNGdfZG9fY29udGV4dF90cmFuc2Zlcl80ZzUgPSAxLCAvLyBBbGlnbiB3aXRoIHRoZSBzdGFydCBpZHggZXhhbXBsZSBpbiBlc21fdW5pb250YWcudHh0CisgICAgRlVOQ19JRFhfc21pY180Z19pZl9lYmlfbWFwcGVkX3N1Y2Nlc3MsCisgICAgRlVOQ19JRFhfc21pY180Z19wcm9jZXNzX3Bkbl9yZWxlYXNlZCwKKyAgICBGVU5DX0lEWF9zbWljXzRnX2dldF81ZzRfZWJpX2NvbnRleHQsCisgICAgRlVOQ19JRFhfc21pY19nZXRfZWJpX21hcHBlZF9wc2lfYW5kX3FmaSwKKyAgICBGVU5DX0lEWF9zbWljXzRnX3NldF9hc3NvY2lhdGVkX2N0eF9hbmRfcGNvLAorICAgIEZVTkNfSURYX3NtaWNfNGdfZ2V0X3BzaV9ieV9lYmlfYWZ0ZXJfMjNHNCwKKyAgICBGVU5DX0lEWF9zbWljXzRnX3BlZXJfbXNnX3ByZWNoZWNrLAorfSBlc21fbG9nX2FyZ3Nfb2Zfc21pY19hcGlfZW51bTsgLy8gRGVmaW5lIGZ1bmNfaWR4PD5mdW5jX25hbWUgbWFwcGluZyBpbiBlc21fdW5pb250YWcudHh0CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2IHByb3RvY29sX2lkOworICAgIGthbF91aW50MTYgcHJvdG9jb2xfY29uZmlnX2xlbjsKKyAgICBrYWxfdWludDggcHJvdG9jb2xfY29uZmlnW0VTTV9GQUtFX1NNSUNfTUFYXzVHX0NPTkZJR19MRU5dOworfSBsb2dfc21pY181Z19jb25maWdfb3B0aW9uX3N0cnVjdDsgLy8gVGhpcyBpcyBvbmx5IGZvciBFU00gVVQsIGFuZCBzaG91bGQgaW5jbHVkZSB0aGUgc2FtZSBjb250ZW50IGFzIHNtaWNfNWdfY29uZmlnX29wdGlvbl9zdHJ1Y3QKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGVzbV9sb2dfYXJnc19vZl9zbWljX2FwaV9lbnVtIGZ1bmNfaWR4OyAvLyBXaWxsIGRldGVybWluZSB0aGUgd2hpY2ggbWVtYmVyIHRvIHVzZSBpbiB0aGUgdW5pb24gZnVuY19uYW1lCisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3R7CisgICAgICAgICAgICAvL1tJbl0KKyAgICAgICAgICAgIGthbF91aW50OCBzaW1faWR4OworICAgICAgICAgICAgLy9bT3V0XQorICAgICAgICAgICAga2FsX2Jvb2wgcmV0OworICAgICAgICB9IHNtaWNfNGdfZG9fY29udGV4dF90cmFuc2Zlcl80ZzU7CisKKyAgICAgICAgc3RydWN0eworICAgICAgICAgICAgLy9bSW5dCisgICAgICAgICAgICBrYWxfdWludDggc2ltX2lkeDsKKyAgICAgICAgICAgIGthbF91aW50OCBlYmk7CisgICAgICAgICAgICBrYWxfdWludDggcHNpOworICAgICAgICAgICAgLy9bT3V0XQorICAgICAgICAgICAga2FsX2Jvb2wgcmV0OworICAgICAgICB9IHNtaWNfNGdfaWZfZWJpX21hcHBlZF9zdWNjZXNzOworCisgICAgICAgIHN0cnVjdHsKKyAgICAgICAgICAgIC8vW0luXQorICAgICAgICAgICAga2FsX3VpbnQ4IHNpbV9pZHg7CisgICAgICAgICAgICBrYWxfdWludDggZWJpOworICAgICAgICAgICAgLy9bT3V0XQorICAgICAgICAgICAgLy8odm9pZCkKKyAgICAgICAgfSBzbWljXzRnX3Byb2Nlc3NfcGRuX3JlbGVhc2VkOworCisgICAgICAgIHN0cnVjdHsKKyAgICAgICAgICAgIC8vW0luXQorICAgICAgICAgICAga2FsX3VpbnQ4IHNpbV9pZHg7CisgICAgICAgICAgICBrYWxfdWludDggZWJpOworICAgICAgICAgICAgLy9bT3V0XQorICAgICAgICAgICAgZXNtX3NtaWNfZXBzYl9jb250ZXh0X3N0cnVjdCBlYmlfY3R4OworICAgICAgICAgICAga2FsX2Jvb2wgcmV0OworICAgICAgICB9IHNtaWNfNGdfZ2V0XzVnNF9lYmlfY29udGV4dDsKKworICAgICAgICBzdHJ1Y3R7CisgICAgICAgICAgICAvL1tJbl0KKyAgICAgICAgICAgIGthbF91aW50OCBzaW1faWR4OworICAgICAgICAgICAga2FsX3VpbnQ4IGViaTsKKyAgICAgICAgICAgIC8vW091dF0KKyAgICAgICAgICAgIGthbF91aW50OCBwc2k7CisgICAgICAgICAgICBrYWxfdWludDY0IHFmaV9iaXRtYXA7CisgICAgICAgICAgICBrYWxfYm9vbCByZXQ7CisgICAgICAgIH0gc21pY19nZXRfZWJpX21hcHBlZF9wc2lfYW5kX3FmaTsKKworICAgICAgICBzdHJ1Y3R7CisgICAgICAgICAgICAvL1tJbl0KKyAgICAgICAgICAgIGthbF91aW50OCBzaW1faWR4OworICAgICAgICAgICAga2FsX3VpbnQ4IGViaTsKKyAgICAgICAgICAgIGthbF91aW50OCBwc2k7IAorICAgICAgICAgICAgZXNtX3NtaWNfZXBzYl9jb250ZXh0X3N0cnVjdCBhc3NvY2lhdGVkX2N0eDsKKyAgICAgICAgICAgIGxvZ19zbWljXzVnX2NvbmZpZ19vcHRpb25fc3RydWN0IHBjb181Z1tTTUlDX01BWF9OVU1fT0ZfNUdfSUVfSU5fUENPXTsKKyAgICAgICAgICAgIGthbF91aW50OCBudW1fb2ZfcGNvXzVnOworICAgICAgICAgICAgLy9bT3V0XQorICAgICAgICAgICAgLy9wc19jYXVzZV9lbnVtIGNhdXNlX3RvX253OworICAgICAgICAgICAgLy90ZnRfYmVhcmVyX2FjdF9lbnVtIGJlYXJlcl9hY3Rpb247CisgICAgICAgICAgICBzbWljXzRnX3NldF9yZXN1bHRfZW51bSByZXQ7CisgICAgICAgIH0gc21pY180Z19zZXRfYXNzb2NpYXRlZF9jdHhfYW5kX3BjbzsKKworICAgICAgICBzdHJ1Y3QgCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vW0luXQorICAgICAgICAgICAga2FsX3VpbnQ4IHNpbV9pZHg7CisgICAgICAgICAgICBrYWxfdWludDggZWJpOworICAgICAgICAgICAgLy9bT3V0XQorICAgICAgICAgICAga2FsX3VpbnQ4IHBzaTsKKyAgICAgICAgICAgIGthbF9ib29sIHJldDsgICAgICAgICAgICAKKyAgICAgICAgfSBzbWljXzRnX2dldF9wc2lfYnlfZWJpX2FmdGVyXzIzRzQ7CisKKworICAgICAgICBzdHJ1Y3QKKyAgICAgICAgeworICAgICAgICAgICAgLy9baW5dCisgICAgICAgICAgICBrYWxfdWludDggc2ltX2lkeDsgIAorICAgICAgICAgICAga2FsX3VpbnQ4IHBzaTsKKyAgICAgICAgICAgIGthbF91aW50OCBlYmk7CisgICAgICAgICAgICBzbWljX2VzbV9wZWVyX21zZ19wcmVjaGVja19pbmZvX3N0cnVjdCBlc21fcHJlY2hlY2tfaW5mbzsKKyAgICAgICAgICAgIGxvZ19zbWljXzVnX2NvbmZpZ19vcHRpb25fc3RydWN0IHBjb181Z1tTTUlDX01BWF9OVU1fT0ZfNUdfSUVfSU5fUENPXTsKKyAgICAgICAgICAgIGthbF91aW50OCBudW1fb2ZfcGNvXzVnOworICAgICAgICAgICAgdGZ0X2JlYXJlcl9hY3RfZW51bSBiZWFyZXJfYWN0aW9uOworICAgICAgICAgICAgLy9bb3V0XQorICAgICAgICAgICAgcHNfY2F1c2VfZW51bSBjYXVzZV90b19udzsKKyAgICAgICAgICAgIHNtaWNfNGdfc2V0X3Jlc3VsdF9lbnVtIHJldDsKKyAgICAgICAgfSBzbWljXzRnX3BlZXJfbXNnX3ByZWNoZWNrOworCisgICAgfSBmdW5jX25hbWU7Cit9IGVzbV9sb2dfYXJnc19vZl9zbWljX2FwaV9zdHJ1Y3Q7IC8vIE1TR19JRF9FU01fTE9HX0FSR1NfT0ZfU01JQ19BUEkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZXNtX3Znc21fc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZXNtX3Znc21fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwNmFlMwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9lc21fdmdzbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDExOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogIGVzbV92Z3NtX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgVk1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGNvbW1vbiBzdHJ1Y3R1cmUgb2YgVkdTTSBhbmQgRVNNCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfRVNNX1ZHU01fU1RSVUNUX0gKKyNkZWZpbmUgX0VTTV9WR1NNX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorI2luY2x1ZGUgInZnc21fY29tbW9uX2RlZl9wdWJsaWMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHBzaTsKK30gZXNtX3Znc21fYXR0YWNoX3Bkbl9hY3RpdmF0ZWRfaW5kX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbnVtX29mX2ViaTsKKyAgICBrYWxfdWludDggZWJpW01BWF9MNF9QU19FQklfTlVNXTsKKyAgICBrYWxfYm9vbCBpc192Z3NtX2RvX2xvY2FsX3JlbGVhc2U7Cit9IHZnc21fZXNtX2NvbnRleHRfdHJhbnNmZXJfcmVxX250Zl9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG51bV9vZl9lYmk7CisgICAga2FsX3VpbnQ4IGViaVtNQVhfTDRfUFNfRUJJX05VTV07CisgICAgdmdzbV94c21faW50ZXJ3b3JraW5nX2xvY2FsX3JlbGVhc2VfcGRuX3R5cGVfZW51bSBsb2NhbF9yZWxlYXNlX3Bkbl90eXBlOworfSBlc21fdmdzbV9jb250ZXh0X3RyYW5zZmVyX3JlcV9udGZfc3RydWN0OworCisjZW5kaWYgLy8gfiBfRVNNX1ZHU01fU1RSVUNUX0gKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2V2YWxfdXBjbV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ldmFsX3VwY21fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5ZjQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ldmFsX3VwY21fc3RydWN0LmgKQEAgLTAsMCArMSw4NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGV2YWxfdXBjbV9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBVTU9MWUEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJExvZyQKKyAqCisgKiAwMiAwNyAyMDIwIGNoZW5neXUuY2hlbgorICogW01PTFkwMDQ4Njg2MF0gMjc1MjkyNKFHoWkxOTE2NaFqoWk/pX6zoT+lzqFqoWk/P6X9P6FqoWmyxKRUpOihaqFpsnmyeaRqp0A/oWqyebJ5pGqnQD+05T8/tXukpKFBpVg/rau3cz+xtQorICogW01QRF1bRmVhdHVyZSBFeHRlbnNpb25dIExvY2FsIFJlbGVhc2UgUlJDIGNvbm5lY3Rpb24gYnkgREwgZGF0YSB0eXBlCisgKiAJMS4gRGVsZXRlIGNvZGUgcmVsYXRlZCB0byBTQlBfRU1NX05PX0RMX0RBVEFfUkVMRUFTRV9QQUdJTkdfU0VNQVBIT1JFIChSZWxlYXNlIFJSQyBjb25uZWN0aW9uIGRpcmVjdGx5IGFmdGVyIERSQiBpcyBlc3RiYWxpc2hlZCBidXQgaGF2ZW50J3MgcmVjZWl2ZWQgYW55IERMIGRhdGEgZm9yIDEwMG1zKQorICogCTIuIEFwcGx5ICJMb2NhbCBSZWxlYXNlIFJSQyBjb25uZWN0aW9uIGJ5IERMIGRhdGEgdHlwZSIgdG8gTVNQTV9FTU1fVEFVX0RSQgorICogCTMuIENvbXBpbGUgc29tZSBkdXBsaWNhdGUgY29kZSwgbWVyZ2UgdGhhbSBpbnRvIGEgY29tbW9uIGZ1bmN0aW9uCisgKiAJNC4gUmVuYW1lIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmUgb2YgdGhlIGZlYXR1cmUoTG9jYWwgcmVsZWFzZSBSUkMgY29ubmVjdGlvbiBieSBETCBkYXRhdCB0eXBlKSwgbWFrZSBpdCBhIGNvbW1vbiBmdW5jdGlvbiB0byByZXF1ZXN0IFVQQ00gd2hlbmV2ZXIgRFJCIGlzIGVzdGFibGlzaGVkIGFuZCB0aGUgY29ubmVjdGlvbiBzaG91bGQgYmUgcmVsZWFzZWQgQVNBUAorICogCTUuIER1ZSB0byBWQyBndWFyZCB0aW1lciBpcyBzZXQgYXMgMTUgc2Vjb25kcyBpbiBHZW45Nywgc2tpcCBhZGRpdGlvbmFsIGNoZWNrIGRlc2lnbmVkIGZvciB0aGUgY2FzZSByZWdhcmRpbmcgVkMgZ3VhcmQgdGltZXIgYXMgMyBzZWNvbmRzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBFVkFMX1VQQ01fU1RSVUNUX0gKKyNkZWZpbmUgRVZBTF9VUENNX1NUUlVDVF9ICisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDE2IHZhbHVlOworfSBldmFsX3VwY21fc3RhcnRfcmVsZWFzZV9kcmJfc2Vzc2lvbl90aW1lcl9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNTdGFydExpc3RlbmluZ0RsRGF0YTsKK30gZXZhbF91cGNtX2RyYl9zZXNzaW9uX3N0YXR1c19udGZfc3RydWN0OworCisKKworI2VuZGlmIC8qIEVWQUxfVVBDTV9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2V4dF9tb2RlbV9sNGNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZXh0X21vZGVtX2w0Y19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTA3MjBkCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2V4dF9tb2RlbV9sNGNfc3RydWN0LmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogRVhUX01PREVNX0w0Q19TVFJVQ1QuSAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgY29tbW9uIHN0cnVjdCBvZiBFWFRfTU9ERU0gYW5kIEw0Qy4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0VYVF9NT0RFTV9MNENfU1RSVUNUX0gKKyNkZWZpbmUgX0VYVF9NT0RFTV9MNENfU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggY3NkX3Byb2ZpbGVfaWQ7Cit9IGw0Y19leHRfbW9kZW1fc2V0dXBfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgcmVzdWx0OyAvL1RydWU6IHN1Y2Nlc3NmdWwsIEZhbHNlOiBmYWlsZWQKKyAgICBrYWxfdWludDE2IGVycl9jYXVzZTsvL3JlZmVyIHRvIGwzX2luY19lbnVtcy5oCQorICAgIGthbF91aW50OCBpcF9hZGRyWzRdOworICAgIGthbF91aW50OCBwcmlfZG5zX2FkZHJbNF07CisgICAga2FsX3VpbnQ4IHNlY19kbnNfYWRkcls0XTsKKyAgICBrYWxfdWludDE2IG10dTsgIAorfSBsNGNfZXh0X21vZGVtX3NldHVwX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBjc2RfcHJvZmlsZV9pZDsJCit9IGw0Y19leHRfbW9kZW1fZGlzY19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCByZXN1bHQ7IC8vVHJ1ZTogc3VjY2Vzc2Z1bCwgRmFsc2U6IGZhaWxlZAorICAgIGthbF91aW50MTYgZXJyX2NhdXNlOy8vcmVmZXIgdG8gbDNfaW5jX2VudW1zLmgKK30gbDRjX2V4dF9tb2RlbV9kaXNjX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBjc2RfcHJvZmlsZV9pZDsKKyAgICBrYWxfdWludDE2IGVycl9jYXVzZTsvL3JlZmVyIHRvIGwzX2luY19lbnVtcy5oCit9IGw0Y19leHRfbW9kZW1fZGlzY19pbmRfc3RydWN0OworCisjZW5kaWYgLyogX0VYVF9NT0RFTV9MNENfU1RSVUNUX0ggKi8KKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZmxjMnN0YWNrX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2ZsYzJzdGFja19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjZkYzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2ZsYzJzdGFja19zdHJ1Y3QuaApAQCAtMCwwICsxLDE0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgZmxjMnN0YWNrX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDIKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBGSUxFTkFNRSA6IGZsYzJzdGFja19zdHJ1Y3QuaAorICogIFNZTk9QU0lTIDogRnVuY3Rpb25zIGZvciBlbmNvZGluZy9kZWNvZGluZy4KKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICBSIEUgViBJIFMgSSBPIE4gICAgSCBJIFMgVCBPIFIgWQorICoKKyAqLworI2lmbmRlZiBfRkxDMlNUQUNLX1NUUlVDVF9ICisjZGVmaW5lIF9GTEMyU1RBQ0tfU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCisjaWZkZWYgX19GTEMyX18KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBjb3VudDsKKyAgICBmbGMyX2VudGl0eV9zdHJ1Y3QgcG9vbF9pbmZvWzEwXTsKK30gZmxjX3Bvb2xfc3RhdHVzX3JlcG9ydF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggY291bnQ7CisgICAgZmxjMl9tbV9ibG9ja19zdHJ1Y3QgbWJfaW5mb1sxMF07Cit9IGZsY19tYl9zdGF0dXNfcmVwb3J0X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBjb3VudDsKKyAgICBmbGMyX3Byb2ZpbGVfc3RydWN0IHByb2ZpbGVfaW5mb1sxMF07Cit9IGZsY19wcm9maWxlX3N0YXR1c19yZXBvcnRfaW5kX3N0cnVjdDsKKworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBtZW1faWQ7CisgICAga2FsX3VpbnQ4IHBlcmNlbnRhZ2VfdXBwX3RocmU7CisgICAga2FsX3VpbnQ4IHBlcmNlbnRhZ2VfbG93X3RocmU7CisKKyAgICBrYWxfdWludDMyIHRvdGFsX3NpemU7CisgICAga2FsX3VpbnQzMiBjdXJyX29jYzsKKworICAgIGthbF91aW50MTYgaGl0X3VwcF90aHJlX2NvdW50czsgCQkvKiBoaXQgdXBwZXIgdGhyZXNob2xkIHRpbWVzICovCisgICAga2FsX3VpbnQxNiBoaXRfbG93X3RocmVfY291bnRzOwkJCS8qIGhpdCBsb3dlciB0aHJlc2hvbGQgdGltZXMgKi8KKyAgICBrYWxfdWludDE2IGhpdF9ub19idWZmX2F2YWlsX2NvdW50czsJLyogaGl0IG5vIGJ1ZmZlciBhdmFpbGFibGUgdGltZXMgKi8KKyAgICBrYWxfdWludDE2IHJlcG9ydF91cHBfdGhyZV9jb3VudHM7CQkvKiByZXBvcnQgdXBwZXIgdGhyZXNob2xkIHRpbWVzICovCisgICAga2FsX3VpbnQxNiByZXBvcnRfbG93X3RocmVfY291bnRzOwkJLyogcmVwb3J0IGxvd2VyIHRocmVzaG9sZCB0aW1lcyAqLworICAgIGthbF91aW50MzIgbWF4X3JlcV9idWZmX3NpemU7CQkJLyogbWF4aW11bSByZXF1ZXN0IGJ1ZmZlciBzaXplICovCisgICAga2FsX3VpbnQzMiBtYXhfYnVmZl9hbGxvY2F0ZWQ7CQkJLyogbWF4aW11bSBidWZmZXIgYWxsb2NhdGVkIHNpemUgaW4gYnl0ZXMgKi8KKyAgICBrYWxfdWludDMyIHRvdGFsX3JlcV9jb3VudHM7CQkJLyogdG90YWwgYnVmZmVyIHJlcXVlc3QgdGltZXMgKi8KK30gZmxjX3N0YXR1c19yZXBvcnRfaW5kX3N0cnVjdDsKKyNlbmRpZiAvL19fRkxDMl9fCisjZW5kaWYgIC8vX0ZMQzJTVEFDS19TVFJVQ1RfSApkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2dhc19lYXNfZW51bXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9nYXNfZWFzX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0ZGEyNwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9nYXNfZWFzX2VudW1zLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBnYXNfZWFzX2VudW1zLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9OWkEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogJExvZzokCisgKgorICogMTEgMTIgMjAxNCB0c3VuZy13ZWkudHUKKyAqIFtNT0xZMDAwODAyMTFdIFtNVDYyOTFfREVWXVtNVDYyOTFfVUVTSU1fREVWXSBDaGVjayBpbiBsb3cgcG93ZXIgdG8gTVQ2MjkxX0RFViwgTVQ2MjkxX1VFU0lNX0RFVgorICogTWVyZ2luZyBHSVNFIGxvdyBwb3dlciB0byBVTU9MWSB0cnVuaworICoKKyAqIDA5IDE2IDIwMTMgaGVucnkubGFpCisgKiBbTU9MWTAwMDM3NjYxXSBbTVQ2MjkwXSBHQVMgZGV2ZWxvcG1lbnQgZm9yIEFGUiwgTDEgbWVhc3VyZW1lbnQgY29udHJvbCwgYmFja3VwIElSIG1lYXN1cmVtZW50IG1lY2hhbmlzbSwgYW5kIG1lYXVyZW1lbnQgcmVwb3J0CisgKiAJLgorICoKKyAqIDA3IDAzIDIwMTMgbWluZy5sZWUKKyAqIFtNT0xZMDAwMjY1MDFdIFtHQVNfVUFTXSBDaXBoZXIgc3RhdHVzIG1pc21hdGNoIGVycm9yIGhhbmRsaW5nCisgKiAuCisgKgorICogMDEgMjMgMjAxMyBoZW5yeS5sYWkKKyAqIFtNT0xZMDAwMDkyMjJdIFtHQVNdW011bHRpLU1vZGUgRGV2ZWxvcG1lbnRdIE1lcmdlIEdBUyBtdWx0aS1tb2RlIGRldmVsb3BtZW50IHRvIE1PTFkKKyAqIC4KKyAqCisgKiAwMSAxMSAyMDEzIGhlbnJ5LmxhaQorICogW0hlbnJ5XVtNdWx0aS1Nb2RlIERldmVsb3BtZW50XSBHQVMgRGV2ZWxvcG1lbnQgYW5kIFI4IENSIFN5bmMKKyAqCisgKiBBZGQgY29weXJpZ2h0IGhlYWRlci4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0dBU19FQVNfRU5VTVNfSAorI2RlZmluZSBfR0FTX0VBU19FTlVNU19ICisKKyNpbmNsdWRlICJnYXNfZWFzX2ludGVyX2NvcmVfZW51bS5oIgorLyogTUFDUk9TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUFYX0dBU19FQVNfUkVESVJFQ1RfRlJFUV9OVU0gKDgpCisKKy8qIE1BWC9NSU4gdmFsdWVzICovCisjZGVmaW5lIE1BWF9FQ0VMTF9SU1JQX1ZBTCAoLTEyMCkKKyNkZWZpbmUgTUlOX0VDRUxMX1JTUlBfVkFMICgtNjAwKQorI2RlZmluZSBNQVhfRUNFTExfUlNSUV9WQUwgMAorI2RlZmluZSBNSU5fRUNFTExfUlNSUV9WQUwgKC0xMDApCisKKy8qIFRZUEVTIERFRklOSVRJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIGVudW0KK3sKKyAgIENJUEhFUl9OT1RfU1RBUlQsCisgICBDSVBIRVJfU1RBUlRfV0lUSF9BTEdPX0E1XzEsCisgICBDSVBIRVJfU1RBUlRfV0lUSF9BTEdPX0E1XzIsCisgICBDSVBIRVJfU1RBUlRfV0lUSF9BTEdPX0E1XzMsCisgICBDSVBIRVJfU1RBUlRfV0lUSF9BTEdPX0E1XzQsCisgICBDSVBIRVJfU1RBUlRfV0lUSF9BTEdPX0E1XzUsCisgICBDSVBIRVJfU1RBUlRfV0lUSF9BTEdPX0E1XzYsCisgICBDSVBIRVJfU1RBUlRfV0lUSF9BTEdPX0E1XzcKK310ZV9pcl9oYW5kb3Zlcl9jaXBoZXJfYWxnbzsKKworI2VuZGlmIC8qIEdBU19FQVNfRU5VTVNfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2dhc19lYXNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZ2FzX2Vhc19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDM5OTIwCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2dhc19lYXNfc3RydWN0LmgKQEAgLTAsMCArMSw1MDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBnYXNfZWFzX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTlpBCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAkTG9nOiQKKyAqCisgKiAwNSAyNyAyMDIxIG90X3JlbnVrYS5tYWRhbmUKKyAqIFtNT0xZMDA2NDMzMDldID8/Pz8/IE1PTFkwMDYxNzE4MSAgICA/IE1PTFkuTlIxNS5SMy5NUC5WMS42CisgKiAJCisgKiAJW0NPREUgU1lOQ10gIEJMSU5EIEZSIHRyaWdnZXIgYmFzZWQgb24gNEcgc2lnbmFsIHN0cmVuZ3RoLgorICoKKyAqIDEyIDA5IDIwMTkgaWN5LmxpCisgKiBbTU9MWTAwNDY0NjMwXSBHZW45NyBFbGV2YXRvciBNb2RlIGZlYXR1cmUKKyAqIAkKKyAqIAkuCisgKgorICogMDUgMDcgMjAxOSBzYXBuYS5rcworICogW01PTFkwMDM5NzA5NF0gW0NPREUgU1lOQ10gW0dlbjk1IHBhdGNoIGJhY2tdIE1vZGVtPz9TUlZDQyBITyBmYWlsIGNhdXNlCisgKiAuCisgKgorICogMDIgMTggMjAxOSBuYWxpbi5jaG92YXRpYQorICogW01PTFkwMDM4NDk5NV0gW1ZNT0xZXSBHRU1JTkkgMy4wLCBBRlIsIFVuaWZ5IEZyZXF1ZW5jeSBzY2FuLCBCR1NFQVJDSAorICogLmdlbWluaV9hZnJfYmcKKyAqCisgKiAxMCAwMyAyMDE4IG5hbGluLmNob3ZhdGlhCisgKiBbTU9MWTAwMzU2Mjg2XSBbR2VuOTddIGJhY2tncm91bmQgc2VhcmNoIGZlYXR1cmUKKyAqIC52bW9seSBCRworICoKKyAqIDA5IDE1IDIwMTcgYWJoaW5hdi5hZ2Fyd2FsCisgKiBbTU9MWTAwMjc4MTk4XSBbQ09ERSBTWU5DXSBbTFIxMSBNUDNdW0dBU10gW0ludGVyZmFjZV1OZXcgZmVhdHVyZSByZXF1aXJlbWVudDogU1JWQ0MgZmFpbD8/Pz8KKyAqIC4KKyAqCisgKiAxMCAyNCAyMDE2IGRlbm5pcy53ZW5nCisgKiBbTU9MWTAwMjA4NzY4XSBbTVQ2MjkzXSBbQjY2XSBCYW5kNjYgcG9ydGluZyAoRVJSQyBwYXJ0KQorICogLgorICoKKyAqIDAzIDEwIDIwMTYgbWFyay5uZworICogW01PTFkwMDE2NTk0N10gWzYyOTEgSFNSXSBQcm90b2NvbCBFbmhhbmNlbWVudCAoSGVhZGVyL0ludGVyZmFjZSkKKyAqIFtIU1IgVU1PTFldIGNlbCBpbnRlcmZhY2UKKyAqCisgKiAwMiAyNiAyMDE2IHNyaWhhcmkubWFkZGlwYXRpCisgKiBbTU9MWTAwMTYyNDYxXSCmYkFuZHJvaWQ/Pz9Nb2RlbT8/TG9nqrq73ahECisgKiAuCisgKgorICogMDYgMDEgMjAxNSBoZW5yeS5sYWkKKyAqIFtNT0xZMDAwOTI1MDhdIFtNVDYyOTFdW0xURS1DMktdIEFTIEludGVyIFJBVCBmZWF0dXJlCisgKiAuCisgKgorICogMDUgMjYgMjAxNSBjaHVuLWZhbi50c2FpCisgKiBbTU9MWTAwMDk3MDk4XSBbNjI5MV1bQ09OTl0gQ29kZSBTeW5jIGZyb20gTU9MWSB0byBVTU9MWQorICogU3luYyBNT0xZMDAwOTc1MDIgdG8gVU1PTFkgKEdBUy1FQVMgaW50ZXJmYWNlKQorICoKKyAqIDA1IDE1IDIwMTUgc29uZ3NvbmcuamlhCisgKiBbTU9MWTAwMDg0NDE2XSBbZUNTRkJdTFUgUmVkdWN0aW9uIGZlYXR1cmUKKyAqIAkuCisgKgorICogMTIgMTIgMjAxNCB5dWhod2FuZy55dQorICogW01PTFkwMDA4NzIxMV0gW0NJU0VdIGFkZCBDU0cgZmluZ2VycHJpbnQgY29tcGlsZSBvcHRpb24gYW5kIGJ1ZyBmaXgKKyAqIC4gQ0lTRSBjb2RlcworICoKKyAqIDExIDE0IDIwMTQgaGVucnkubGFpCisgKiBbTU9MWTAwMDc5MDcyXSBbTVQ2MjkxXSBDaGFuZ2UgRUFSRkNOIGZyb20ga2FsX3VpbnQxNiB0byBrYWxfdWludDMyIGZvciBDRUwgcGFydAorICogCS4KKyAqCisgKiAxMSAxMSAyMDE0IHNoaW4uY2hlbgorICogW01PTFkwMDA4MDM1N10gW0dBU10gRXh0ZW5kIGVhcmZjbiB0byBVMzIgZm9yIEdBUworICogLgorICoKKyAqIDA2IDA5IDIwMTQgYWFyb24ubGl1CisgKiBbTU9MWTAwMDY4NzcwXSBbSFpdNS40LjEgc29sdXRpb24KKyAqIEVBUyBwYXJ0OkFkZCBpbnRlcmZhY2UKKyAqCisgKiAwNiAwNSAyMDE0IHhpYW9jaGkuemhhbworICogW01PTFkwMDA2Nzc3MF0gW05ldyBTQlAgZmVhdHVyZSByZXF1ZXN0XSA0RyBiYWNrZ3JvdW5kIHNlYXJjaCAtIHJlbW92ZSBjb21waWxlIG9wdGlvbiBfXzRHX0JBQ0tHUk9VTkRfU0VBUkNIX18KKyAqIAkuCisgKgorICogMDUgMDUgMjAxNCB4aWFvY2hpLnpoYW8KKyAqIFtNT0xZMDAwNjQ0MjldIFtNVDYyOTBMVEVdW0NTRkJdW0VSUkNdTmV3IEZlYXR1cmUgOiAyRzQgQmFja2dyb3VuZCBTZWFyY2gKKyAqIAkuCisgKgorICogMDEgMjEgMjAxNCB3Y3B1c2VyX2ludGVncmF0b3IKKyAqIFtNT0xZMDAwNTQ0NzVdIFNHTFRFIG9wdGlvbiByZW5hbWUKKyAqIC4KKyAqCisgKiAxMiAzMSAyMDEzIHN0YW5sZXloeS5jaGVuCisgKiBbTU9MWTAwMDQ4NDc4XSBbTVQ2MjkwRTFdW0xUR11bR0NGXVtDTVc1MDBdW01NXVtQcmUtVGVzdF1bY2FzZSA5LjIuMy4zLjRdW0JhbmQgMzhdIEZhaWwKKyAqIEFkZCBhIGZsYWcgcHJvaGliaXRfYXBwbHlfbl9sYXllcgorICoKKyAqIDExIDEzIDIwMTMgdmVuZF9zaW1vbi5odWFuZworICogW01PTFkwMDA0NjAyN10gW01UNjI5MEUxXVtNTURTX0RDXSBNTURDIGZlYXR1cmUgcGF0Y2ggYmFjayB0byBNT0xZIHRydW5rCisgKiBDRUwgT0EgcGFydAorICoKKyAqIDA3IDI0IDIwMTMgcnVqaW5nLnpoYW8KKyAqIFtNT0xZMDAwMzEwMjBdIFtNTURTX0RDXSBNZXJnZSBNTURDIGludGVyZmFjZSB0byBNT0xZCisgKiAuMi0+MzRHIE5CUiB0cmFuc2ZlcgorICoKKyAqIDA3IDIzIDIwMTMgaGVucnkubGFpCisgKiBbTU9MWTAwMDIzOTM1XSBbTVQ2MjkwRTFdW1cvR11bVGFyZ2V0IElUXSBNZWFzIHJlc3VsdCBpcyByZWNlaXZlZCBzbyBmcmVxdWVudGx5IHdoZW4gcHJpb3JpdHkgbWVhc3VyZW1lbnQgYW5kIGRyeCBtZWFzdXJlbWVudCBhcmUgb24tZ29pbmcKKyAqIC4KKyAqCisgKiAwMyAxNCAyMDEzIG1vcnRvbi5saW4KKyAqIFtNT0xZMDAwMTE5NTddIFtNVDYyOTBdIE11bHRpbW9kZSBJVCBDQnIgbWVyZ2UgYmFjayB0byBNT0xZCisgKiBNdWx0aW1vZGUgSVQgQ0JyIG1lcmdlIGJhY2sgdG8gTU9MWSAtIHN0YWdlIDEKKyAqCisgKiAwMSAyMyAyMDEzIGhlbnJ5LmxhaQorICogW01PTFkwMDAwOTIyMl0gW0dBU11bTXVsdGktTW9kZSBEZXZlbG9wbWVudF0gTWVyZ2UgR0FTIG11bHRpLW1vZGUgZGV2ZWxvcG1lbnQgdG8gTU9MWQorICogLgorICoKKyAqIDAxIDExIDIwMTMgaGVucnkubGFpCisgKiBbSGVucnldW011bHRpLU1vZGUgRGV2ZWxvcG1lbnRdIEdBUyBEZXZlbG9wbWVudCBhbmQgUjggQ1IgU3luYworICoKKyAqIEFkZCBjb3B5cmlnaHQgaGVhZGVyLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0dBU19FQVNfU1RSVUNUX0gKKyNkZWZpbmUgX0dBU19FQVNfU1RSVUNUX0gKKworI2luY2x1ZGUgInVhc19nYXNfZW51bXMuaCIKKyNpbmNsdWRlICJnYXNfZWFzX2VudW1zLmgiICAKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImNzaV91bXRzX2Fzbi5oIiAgICAgCisjaW5jbHVkZSAibDNfaW5jX2VudW1zLmgiICAgICAKKyNpbmNsdWRlICJtY2RfbDNfaW5jX3N0cnVjdC5oIgorI2luY2x1ZGUgImNzaV9nc21fYXNuLmgiICAgICAgCisjaW5jbHVkZSAiaXJhdF9jb21tb25fc3RydWN0LmgiCisjaW5jbHVkZSAiaXJhdF9jb21tb25fZW51bXMuaCIKKyNpbmNsdWRlICJnbG9iYWxfdHlwZS5oIgorI2luY2x1ZGUgIm1yc19hc19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJnYXNfZWFzX2ludGVyX2NvcmVfc3RydWN0LmgiCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICB0ZV9pcl9jZWxsX2NoYW5nZV90cmlnZ2VyIGlyX2NlbGxfY2hhbmdlX3RyaWdnZXI7CisgIHBsbW5fc2VhcmNoX3R5cGVfZW51bSBwbG1uX3NlYXJjaF90eXBlOworICBHU01fVGFyZ2V0Q2VsbEluZm8gdGFyZ2V0X2djZWxsX2luZm87Cit9ZWFzX2dhc19ldmFsdWF0ZV9nY2VsbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIHRlX2lyX2NlbGxfcmVzZWxlY3Rpb25fc3RhdHVzIGlyX2NlbGxfZXZhbF9zdGF0dXM7CisgIHRzX2V2YWxfYWN0aXZhdGVfZmFpbF9oYW5kbGUgZXZhbF9hY3RpdmF0ZV9mYWlsX2hhbmRsZTsKK31lYXNfZ2FzX2V2YWx1YXRlX2djZWxsX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKK31lYXNfZ2FzX2V2YWx1YXRlX2djZWxsX3N0b3BfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorfWVhc19nYXNfZXZhbHVhdGVfZ2NlbGxfc3RvcF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIHRlX2lyX2NlbGxfY2hhbmdlX3RyaWdnZXIgaXJfY2VsbF9jaGFuZ2VfdHJpZ2dlcjsKKyAgcGxtbl9zZWFyY2hfdHlwZV9lbnVtIHBsbW5fc2VhcmNoX3R5cGU7ICAKKyAgR1NNX1RhcmdldENlbGxfSW5mb191bmlvbiB0YXJnZXRfZ2NlbGxfaW5mbzsKKyAgR1NNX1RhcmdldENlbGxfU0lfSW5mb191bmlvbiB0YXJnZXRfZ2NlbGxfc2lfaW5mbzsKKyAga2FsX3VpbnQzMiBjZWxsX2NoYW5nZV9hY3RpdmF0aW9uX3RpbWU7IC8qIG1pbGxpLXNlY29uZHMsICovICAgCisgIGthbF91aW50MzIgY2VsbF9jaGFuZ2VfdGltZW91dDsgLyogdmFsdWUgaW4gbWlsbGktc2Vjb25kcyBvciB6ZXJvIHdoZW4gbm90IHJlcXVpcmVkICovCisgIGthbF91aW50MzIgIHdhaXRfdGltZTsgLyogbWlsbGktU2Vjb25kczogMH4xNTAwMG1zLCBHQVMgc2hvdWxkIG5vdCByZXNlbGVjdCBiYWNrIHRvIFVNVFMvTFRFIHdpdGhpbiAid2FpdF90aW1lIiBwZXJpb2QgKi8gIAorICBrYWxfYm9vbCBuY19tb2RlX3ByZXNlbnQ7IC8qIGlmIFRSVUUgbmNfbW9kZSBpcyBwcmVzZW50ICovCisgIGthbF91aW50OCAgbmNfbW9kZTsgLyogT3B0aW9uYWwsIHByZXNlbnQgaWYgbmNfbW9kZV9wcmVzZW50IGlzIFRSVUUgKi8KKyAgaXJfbHRlX3NjZWxsX3N0cnVjdCBsdGVfc2NlbGxfaW5mOyAvKiBjZWxsIGluZm8gb2YgdGhlIHNvdXJjZSBMVEUgY2VsbCAqLworfWVhc19nYXNfYWN0aXZhdGVfZ2NlbGxfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICB0ZV9pcl9jZWxsX3Jlc2VsZWN0aW9uX3N0YXR1cyBpcl9jZWxsX2FjdGl2YXRpb25fc3RhdHVzOyAKKyAgdHNfZXZhbF9hY3RpdmF0ZV9mYWlsX2hhbmRsZSBldmFsX2FjdGl2YXRlX2ZhaWxfaGFuZGxlOworICB0ZV9pcl9jZWxsX2NoYW5nZV9mYWlsX3JlYXNvbl9lbnVtIGlyX2NlbGxfY2hhbmdlX2ZhaWxlZF9yZWFzb247ICAKK31lYXNfZ2FzX2FjdGl2YXRlX2djZWxsX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKyAgdGVfaXJfY2VsbF9jaGFuZ2VfY29tcGxldGVfc3RhdHVzIGlyX2NlbGxfY2hhbmdlX2NvbXBsZXRlX3N0YXR1czsgCisgIHRlX2lyX2NlbGxfY2hhbmdlX2ZhaWxfcmVhc29uX2VudW0gaXJfY2VsbF9jaGFuZ2VfZmFpbGVkX3JlYXNvbjsgIAorfWVhc19nYXNfZ2NlbGxfY2hhbmdlX2NvbXBsZXRlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKyAgdHNfY2lwaGVyaW5nX2luZm8gY2lwaGVyaW5nX2luZm87CisgIHBsbW5fc2VhcmNoX3R5cGVfZW51bSBwbG1uX3NlYXJjaF90eXBlOworICB0ZV9nc21fYmFuZF9pbmRpY2F0b3IgYmFuZF9pbmRpY2F0b3I7CisgIGthbF91aW50MTYgICAgICAgICBtZXNzYWdlX2xlbmd0aDsKK31lYXNfZ2FzX2hhbmRvdmVyX2djZWxsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKyAgdGVfaXJfaGFuZG92ZXJfc3RhdHVzIGlyX2hhbmRvdmVyX3RvX2dzbV9zdGF0dXM7CisgIHRlX2lyX2hhbmRvdmVyX2NpcGhlcl9hbGdvIGlyX2hhbmRvdmVyX3RvX2dzbV9jaXBoZXJfYWxnbzsKKyAgaG9fZnJvbV9sdGVfdHlwZV9lbnVtIGx0ZV9ob190eXBlOworI2lmZGVmIF9fU1JWQ0NfQ0VMTF9JTkZPX18KKyAga2FsX3VpbnQxNiBiY2NoX2FyZmNuOworI2VuZGlmCit9ZWFzX2dhc19oYW5kb3Zlcl9nY2VsbF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIGthbF91aW50OCB0MzIxMl90aW1lcl92YWw7CisgIGthbF9ib29sIGF0dF9mbGFnOworICBrYWxfdWludDMyIHdhaXRfdGltZTsKKyAgLyogX19BTFBTMDI1MDY4NzhfU1VQUE9SVF9fICovCisgIHRlX2lyX2NhbGxfdHlwZSBjYWxsX3R5cGU7ICAKK31lYXNfZ2FzX2hvX2FjdGl2YXRlX2djZWxsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKyAgdGVfaXJfaGFuZG92ZXJfc3RhdHVzIGlyX2hhbmRvdmVyX3RvX2dzbV9zdGF0dXM7CisgI2lmZGVmIF9fU1JWQ0NfQ0VMTF9JTkZPX18KKyAgdGVfaXJfaGFuZG92ZXJfcGh5X2ZhaWxfc3ViY2F1c2UgaXJfaGFuZG92ZXJfdG9fZ3NtX3BoeV9mYWlsX3N1YmNhdXNlOworICNlbmRpZiAvKl9fU1JWQ0NfQ0VMTF9JTkZPX18qLworfWVhc19nYXNfaG9fYWN0aXZhdGVfZ2NlbGxfY25mX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgZWFzX3RhcmdldF9jZWxsX2luZm8gICB0YXJnZXRfY2VsbDsKKyAgIHBsbW5fc2VhcmNoX3R5cGVfZW51bSAgcGxtbl9zZWFyY2hfdHlwZTsKKy8qIF9fNEdfQkFDS0dST1VORF9TRUFSQ0hfXyBiZWdpbiAqLworICAgLyoyRzQgYmFja2dyb3VuZCBzZWFyY2ggcGFyYW1ldGVyKi8KKyAgIGthbF9ib29sIGlzX2JhY2tncm91bmRfc2VhcmNoX3RyaWdnZXI7CisgICBnYXNfY2VsbF9pbmZvIHNlcnZpbmdfY2VsbF9pbmZvOworLyogX180R19CQUNLR1JPVU5EX1NFQVJDSF9fIGVuZCAqLworCit9IGdhc19lYXNfZXZhbHVhdGVfZWNlbGxfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKKyAgIHRlX2lyX2NlbGxfcmVzZWxlY3Rpb25fc3RhdHVzICBldmFsX3N0YXR1czsKKyAgIHRzX2V2YWxfYWN0aXZhdGVfZmFpbF9oYW5kbGUgICBldmFsX2FjdGl2YXRlX2ZhaWxfaGFuZGxlOworfSBnYXNfZWFzX2V2YWx1YXRlX2VjZWxsX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSCisgICB0ZV9pcl9jZWxsX2NoYW5nZV90cmlnZ2VyICB0cmlnZ2VyOworICAga2FsX3VpbnQzMiAgICAgICAgICAgICByZW1haW5fd2FpdF90aW1lOworICAgZWFzX3RhcmdldF9jZWxsX2luZm8gICB0YXJnZXRfY2VsbDsKKyAgIGthbF91aW50MzIgICAgICAgICAgICAgY2VsbF9jaGFuZ2VfdGltZW91dDsgICAKKyAgIHBsbW5fc2VhcmNoX3R5cGVfZW51bSAgcGxtbl9zZWFyY2hfdHlwZTsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgcmVkaXJlY3RfZnJlcV9udW07CisgICBsdGVfcmVkaXJlY3RfaW5mbyAgICAgIHJlZGlyZWN0X2ZyZXFfaW5mbyBbTUFYX0dBU19FQVNfUkVESVJFQ1RfRlJFUV9OVU1dOworICAga2FsX2Jvb2wJaXNfZ2FzX2NlbGxfaW5mX3ZhbGlkOworICAgbXJzX2dhc19jZWxsX2luZl9zdHJ1Y3QgZ2FzX2NlbGxfaW5mOworICAga2FsX3VpbnQzMiByZW1haW5pbmdfdGltZV9hZnI7IC8qdmFsdWUgaW4gbWlsbGktc2Vjb25kcyB2YWxpZCBpbiBjYXNlIG9mIEFGUiovCisgICBrYWxfYm9vbCAgICAgICAgICAgICAgIGlzX2VsZXZhdG9yX21vZGU7CisgICBrYWxfYm9vbCAJCQkgIGlzX2N1c3RvbV90aHJlc2hvbGRfbmVlZDsKK30gZ2FzX2Vhc19hY3RpdmF0ZV9lY2VsbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgdGVfaXJfY2VsbF9yZXNlbGVjdGlvbl9zdGF0dXMgIGFjdGl2ZV9zdGF0dXM7CisgICB0c19ldmFsX2FjdGl2YXRlX2ZhaWxfaGFuZGxlICAgZXZhbF9hY3RpdmF0ZV9mYWlsX2hhbmRsZTsKKyAgIHRlX2lyX2NlbGxfY2hhbmdlX2ZhaWxfcmVhc29uX2VudW0gIGlyX2NlbGxfY2hhbmdlX2ZhaWxlZF9yZWFzb247Cit9IGdhc19lYXNfYWN0aXZhdGVfZWNlbGxfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKKyAgIC8qIE5vIHBhcmFtZXRlcnMgaGVyZSAqLworfSBnYXNfZWFzX2V2YWx1YXRlX2VjZWxsX3N0b3BfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKKyAgIC8qIE5vIHBhcmFtZXRlcnMgaGVyZSAqLworfSBnYXNfZWFzX2V2YWx1YXRlX2VjZWxsX3N0b3BfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICB0ZV9pcl9jZWxsX2NoYW5nZV9jb21wbGV0ZV9zdGF0dXMgY2VsbF9jaGFuZ2VfY29tcGxldGVfc3RhdHVzOworICB0ZV9pcl9jZWxsX2NoYW5nZV9mYWlsX3JlYXNvbl9lbnVtIGNlbGxfY2hhbmdlX2ZhaWxlZF9yZWFzb247Cit9Z2FzX2Vhc19lY2VsbF9jaGFuZ2VfY29tcGxldGVfaW5kX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHBsbW5fc2VhcmNoX3R5cGVfZW51bSBwbG1uX3NlYXJjaF90eXBlOworICAgIGF1dG9fc2VhcmNoX2NtZF9lbnVtICBhdXRvX3NlYXJjaF9jbWQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgIG51bV9mcmVxOworICAgIEVBUkZDTiAgICAgICAgICAgICAgICBmcmVxX2xpc3RbTUFYX05VTV9DU0dfRlJFUV07Cit9IGdhc19lYXNfc2VhcmNoX2NzZ19lY2VsbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHNlYXJjaF9zdGF0dXNfZW51bSBzZWFyY2hfc3RhdHVzOyAgICAKKyAgICBrYWxfdWludDggICAgICAgICBudW1fY3NnX2ZyZXFfc2VhcmNoX3Jlc3VsdDsKKyAgICBjc2dfZnJlcV9zZWFyY2hfcmVzdWx0X3N0cnVjdCBjc2dfZnJlcV9zZWFyY2hfcmVzdWx0X2xpc3RbTUFYX05VTV9DU0dfRlJFUV07Cit9IGdhc19lYXNfc2VhcmNoX2NzZ19lY2VsbF9jbmZfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcGxtbl9zZWFyY2hfdHlwZV9lbnVtIHBsbW5fc2VhcmNoX3R5cGU7CisgICAgYXV0b19zZWFyY2hfY21kX2VudW0gIGF1dG9fc2VhcmNoX2NtZDsgICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgbnVtX2ZyZXE7CisgICAgRUFSRkNOICAgICAgICAgICAgICAgIGZyZXFfbGlzdFtNQVhfTlVNX0NTR19GUkVRXTsKK30gZ2FzX2Vhc19ldmFsdWF0ZV9jc2dfZWNlbGxfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBzZWFyY2hfc3RhdHVzX2VudW0gc2VhcmNoX3N0YXR1czsgICAgICAgIAorICAgIGthbF91aW50OCAgICAgICAgIG51bV9jc2dfZnJlcV9zZWFyY2hfcmVzdWx0OworICAgIGNzZ19mcmVxX3NlYXJjaF9yZXN1bHRfc3RydWN0IGNzZ19mcmVxX3NlYXJjaF9yZXN1bHRfbGlzdFtNQVhfTlVNX0NTR19GUkVRXTsKK30gZ2FzX2Vhc19ldmFsdWF0ZV9jc2dfZWNlbGxfY25mX3N0cnVjdDsKKworLyo0RzIgQ1NHIEZJTkdFUlBSSU5UICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBwbG1uX2lkX3N0cnVjdCAgICBjc2dfcGxtbjsKKyAgICBrYWxfdWludDMyICAgICAgICBjc2dfaWQ7CisgICAga2FsX3VpbnQzMiAgICAgICAgY3NnX2NlbGxfaWQ7CisgICAgRUFSRkNOICAgICAgICAgICAgY3NnX2ZyZXF1ZW5jeTsKKyAgICBrYWxfdWludDE2ICAgICAgICBjc2dfcGh5c2ljYWxfY2VsbF9pZDsKK30gZWFzX2dhc19idWlsZF9maW5nZXJwcmludF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKK30gZWFzX2dhc19idWlsZF9maW5nZXJwcmludF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKK30gZWFzX2dhc19hYm9ydF9maW5nZXJwcmludF9pbmRfc3RydWN0OworCisvKiBMVEUgdG8gR0FTIElSIE1lYXN1cmVtZW50ICovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKK30gZWFzX2dhc19jb25maWdfZ2NlbGxfcHJpb19tZWFzX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorfSBlYXNfZ2FzX2NvbmZpZ19nY2VsbF9tZWFzX2NuZl9zdHJ1Y3Q7CisKKy8qIEdBUyB0byBMVEUgSVIgTWVhc3VyZW1lbnQgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIExPQ0FMX1BBUkFfSERSCisgIGthbF91aW50OCB0aWQ7CisgIGthbF9ib29sIGhwc19mbGFnOworICBrYWxfdWludDggcHJpb19tZWFzX3BlcmlvZDsKKyAga2FsX3VpbnQ4IGZyZXFfbnVtOworICBlYXNfbWVhc19mcmVxX2luZm9fc3RydWN0IGZyZXFbTUFYX01FQVNfSVJBVF9GUkVRXTsKK30gZ2FzX2Vhc19sdGVfbWVhc3VyZW1lbnRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorfSBnYXNfZWFzX2x0ZV9tZWFzdXJlbWVudF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICBMT0NBTF9QQVJBX0hEUgorICBrYWxfdWludDggZnJlcV9udW07CisgIGVhc19ocHNfcXVhbGlmeV9zdHJ1Y3QgZnJlcVtNQVhfTUVBU19JUkFUX0ZSRVFdOworICAvKiBUaGlzIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG1lYXN1cmVtZW50IHBlcmlvZCBzaG91bGQgYmUgcmVzZXQKKyAgICogaW1tZWRpYXRlbHkuIChUUlVFOiAgbWVhcyBpcyBwZXJmb3JtZWQgaW4gdGhlIGZpcnN0IERSWC4gCisgICAqICAgICAgICAgICAgICAgRkFMU0U6IG1lYXMgaXMgcGVyZm9ybWVkIGluIHRoZSBmaXJzdCBULW1lYXMgb2NjYXNpb24pIAorICAgKiBJbiBjdXJyZW50IGRlc2lnbiwgdGhlIGZvbGxvd2luZyBydWxlcyBzaG91bGQgYmUgZm9sbG93ZWQuCisgICAqICgxKUlmIGZyZXFfbnVtICE9IDAsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCBhcyBGQUxTRSBvbmx5IGlmIHRtZWFzdXJlIG1lYXN1cmVtZW50IAorICAgKiAgICAgICAgICAgICAgICAgICAgICBpcyB0cmlnZ2VyZWQgd2hlbiBwcmlvcml0eSBtZWFzdXJlbWVudCBpcyBvbi1nb2luZyAoaS5lLiwgYXQKKyAgICogICAgICAgICAgICAgICAgICAgICAgbGVhc3Qgb25lIG9mIExURSBjZWxscyBoaXRzIHByaW9yaXR5IHJlc2VsZWN0aW9uIGNyaXRlcmlhIGZvciAKKyAgICogICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkgYmFzZWQgbWVhc3VyZW1lbnQgcmVzZWxlY3Rpb24pLiBJZiBhbnkgaW1wcm92ZW1lbnQgaXMgCisgICAqICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCwgdGhlIHVzYWdlIGxpbWl0YXRpb24gZm9yIHRoaXMgZmxhZyBzaG91bGQgYmUgY29uZmlybWVkIAorICAgKiAgICAgICAgICAgICAgICAgICAgICB3aXRoIEVMMSdzIGNvbGxlYWd1ZS4KKyAgICogKDIpIElmIGZyZXFfbnVtID09IDAsIHRoaXMgZmxhZyB3aWxsIGFsd3lhcyBiZSBzZXQgYXMgRkFMU0U7CisgICAqLworICBrYWxfYm9vbCBpc19tZWFzX3BlcmlvZF9yZXNldDsKK30gZ2FzX2Vhc19sdGVfaHBzX3F1YWxpZnlfY2VsbF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICBMT0NBTF9QQVJBX0hEUgorICBrYWxfdWludDggdGlkOworICBrYWxfdWludDggZnJlcV9udW07CisgIGVhc19tZWFzX2ZyZXFfcnNsdF9zdHJ1Y3QgZnJlcVtNQVhfTUVBU19JUkFUX0ZSRVFdOworI2lmZGVmIFVOSVRfVEVTVAorICBrYWxfdWludDMyIG1lYXNfaW5kX21zX2RpZmY7CisjZW5kaWYgLyogVU5JVF9URVNUICovCit9IGdhc19lYXNfbHRlX21lYXN1cmVtZW50X2luZF9zdHJ1Y3Q7CisKKy8qIExURSB0byBHQVMgQ0dJIENvbGxlY3Rpb24gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKyAga2FsX3VpbnQ4IHRpZDsKKyAgcmVwb3J0X2NnaV9yZXFfdHlwZV9lbnVtIHJlcG9ydF9jZ2lfcmVxX3R5cGU7CisgIHRlX2dzbV9iYW5kX2luZGljYXRvciBnc21fYmFuZF9pbmRpY2F0b3I7CisgIGthbF91aW50MTYgYXJmY247CisgIGthbF91aW50OCBic2ljOworfSBlYXNfZ2FzX3JlcG9ydF9jZ2lfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF9ib29sIGlzX3JhY192YWxpZDsKKyAgICBrYWxfdWludDggcmFjOworfSBnY2VsbF9jZ2lfaW5mb19vcHRpb25hbF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjZ2lfaW5mb19zdGF0dXNfZW51bSBjZ2lfaW5mb19zdGF0dXM7CisgICAga2FsX3VpbnQxNiBhcmZjbjsKKyAgICBrYWxfdWludDggYnNpYzsKKyAgICBrYWxfaW50MTYgcnNzaV9pbl9xdWFydGVyX2RibTsKKyAgICBrYWxfdWludDE2IGNlbGxfaWQ7CisgICAgcGxtbl9pZF9zdHJ1Y3QgcGxtbl9pZDsKKyAgICBrYWxfdWludDE2IGxhYzsKKyAgICBnY2VsbF9jZ2lfaW5mb19vcHRpb25hbF9zdHJ1Y3Qgb3B0aW9uYWxfZmllbGQ7Cit9IGdjZWxsX2NnaV9pbmZvX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICBrYWxfdWludDggdGlkOworICBnY2VsbF9jZ2lfaW5mb19zdHJ1Y3QgZ2NlbGxfY2dpX2luZm87Cit9IGVhc19nYXNfcmVwb3J0X2NnaV9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIC8qIEtBTF9UUlVFIDogcmVhZHkgdGltZXIgdGltZW91dCBkdXJpbmcgMkc0IElSIENDTyBwcm9jZWR1cmUuCisgICAqIEtBTF9GQUxTRSA6IDJHNCBJUiBDQ08gcHJvY2VkdXJlIGlzIHJlamVjdGVkIGJ5IE5BUyBhbmQKKyAgICogICAgICAgICAgICAgcmVhZHkgdGltZXIgdGltZW91dCBpcyBub3QgcmVxdWlyZWQgdG8gaGFuZGxlIGJ5CisgICAqICAgICAgICAgICAgIEVBUy4KKyAgICovCisgIGthbF9ib29sIGlzX2hhbmRsaW5nX25lZWRlZDsKK30gZ2FzX2Vhc19yZWFkeV90aW1lcl9zdGF0dXNfaW5kX3N0cnVjdDsKKworCisvKiBfXzRHX0JBQ0tHUk9VTkRfU0VBUkNIX18gYmVnaW4gKi8KKy8qMkc0IGJhY2tncm91bmQgc2VhcmNoKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSCisgICAvKiBObyBwYXJhbWV0ZXJzIGhlcmUgKi8KK30gZ2FzX2Vhc19iYWNrZ3JvdW5kX3NlYXJjaF9zdGFydF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgLyogTm8gcGFyYW1ldGVycyBoZXJlICovCit9IGdhc19lYXNfYmFja2dyb3VuZF9zZWFyY2hfc3RhcnRfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKKyAgIC8qIE5vIHBhcmFtZXRlcnMgaGVyZSAqLworfSBnYXNfZWFzX2JhY2tncm91bmRfc2VhcmNoX3N0b3BfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKKyAgIC8qIExURSBkZXRlY3RlZCBjZWxsIGluZm8gKi8KKyAgIEVBUkZDTiAgICAgICAgICAgICBlYXJmY247CisgICBrYWxfdWludDE2ICAgICAgICAgcGNpOyAgIAorfSBlYXNfZ2FzX2JhY2tncm91bmRfc2VhcmNoX2ZvdW5kX2luZF9zdHJ1Y3Q7CisvKiBfXzRHX0JBQ0tHUk9VTkRfU0VBUkNIX18gZW5kICovCisKKy8qIEhTUl9TTklGRl9TRUFSQ0ggKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSCisgICAvKiBMVEUgZGV0ZWN0ZWQgY2VsbCBpbmZvICovCisgICBFQVJGQ04gICAgICAgICAgICAgZWFyZmNuOworICAga2FsX3VpbnQxNiAgICAgICAgIHBjaTsgICAKK30gZWFzX2dhc19oc3JfY2VsbF9mb3VuZF9pbmRfc3RydWN0OworI2VuZGlmIC8qIF9HQVNfRUFTX1NUUlVDVF9IICovCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2dhc19yc3ZhX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2dhc19yc3ZhX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZGU2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZ2FzX3JzdmFfc3RydWN0LmgKQEAgLTAsMCArMSw5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgZ2FzX3JzdmFfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgIEdlbWluaShXRytHKQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfR0FTX1JTVkFfU1RSVUNUX0hfCisjZGVmaW5lIF9HQVNfUlNWQV9TVFJVQ1RfSF8KKworLyogUkhSIHN1Z2dlc3QgQWRkICovCisjaW5jbHVkZSAibDNfaW5jX2VudW1zLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKworI2lmIGRlZmluZWQoX19HRU1JTklfXykgJiYgZGVmaW5lZChfX1VNVFNfUkFUX18pICYmIGRlZmluZWQoX19HU01fUkFUX18pCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FTIChNUEFMKSB0byBSU1ZBIChSU1ZBRykgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgeyAgICAKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGdhc19mcmVxX3NjYW5fdHlwZV9lbnVtIGZyZXFfc2Nhbl90eXBlOworICAgIGthbF9ib29sIGlzX2Z1bGxfYmFuZDsKKyAgICBrYWxfdWludDggc2lkOyAvKiBzZXNzaW9uIGlkICovCit9Z2FzX3JzdmFnX2ZyZXF1ZW5jeV9zY2FuX3N0YXJ0X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGdhc19mcmVxX3NjYW5fc3RvcF9jYXVzZV9lbnVtIGNhdXNlOworICAgIAorICAgIC8qIHByZWVtcHRpb24gc2Vzc2lvbiBpZCwgb25seSB1c2VkIHdoZW4gY2F1c2U9R0FTX0ZSRVFfU0NBTl9QUkVFTVBURUQgKi8KKyAgICBrYWxfdWludDggcHJlZW1wdF9zaWQ7Cit9Z2FzX3JzdmFnX2ZyZXF1ZW5jeV9zY2FuX3N0b3BfcmVxX3N0cnVjdDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNWQSAoUlNWQUcpIHRvIEdBUyAoTVBBTCkgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBnYXNfZnJlcV9zY2FuX3Jlc3VsdF9lbnVtIHJlc3VsdDsKKyAgICBrYWxfdWludDggc2lkOyAvKiBzZXNzaW9uIGlkICovCit9cnN2YWdfZ2FzX2ZyZXF1ZW5jeV9zY2FuX3N0YXJ0X2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBwcmVlbXB0X3NpZDsgLyogcHJlZW1wdGlvbiBzZXNzaW9uIGlkICovCit9cnN2YWdfZ2FzX2ZyZXF1ZW5jeV9zY2FuX3ByZWVtcHRfaW5kX3N0cnVjdDsKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9nbW1sbGNfZW51bXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9nbW1sbGNfZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzk4MTAzCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2dtbWxsY19lbnVtcy5oCkBAIC0wLDAgKzEsMTAxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICBnbW1sbGNfZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogIFRoaXMgZmlsZSBjb250YWlucyBlbnVtIGRlZmluaXRpb24gYmV0d2VlbiBHTU0gYW5kIExMQy4gCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCisjaWZuZGVmIF9HTU1MTENfSU5URVJGQUNFX0gKKyNkZWZpbmUgX0dNTUxMQ19JTlRFUkZBQ0VfSAorCisgCisvKiBBc3N1bWVkIDogSUVJIFZhbHVlIHRvIGJlIFVzZWQgZm9yIEFSUSBWYXIgKi8KKyNkZWZpbmUgQVJRX1ZBUl9JRUkgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisKKy8qIEFSUSB2YXIgbGVuZ3RoIGluIExMR01NX1dJTkRPV19DTkYgYW5kIExMR01NX1dJTkRPV19SRVEgKi8KKyNkZWZpbmUgQVJRX1ZBUjFfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEFSUV9WQVIyX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBBUlFfVkFSM19MRU5HVEggICAgICAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgQVJRX1ZBUjRfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAweDA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKKy8qIENhdXNlIFZhbHVlcyB0byBiZSB1c2VkIGluIExMR01NX1NUQVRVU19JTkRfTVNHICovCisjZGVmaW5lIE1VTFRJUExFX1RMTElfQVNTSUdNTkVOVCAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBGUk1SX1JFQ0VJVkVEX0lOX0FCTSAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgVU5TT0xJQ0lURURfUkVTUE9OU0VfUkVDRUlWRUQgICAgICAgICAweDAyCisjZGVmaW5lIE1BWF9SRVRYX0NPVU5UX1JFQUNIRUQgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBGUkFNRV9SRUpFQ1RfQ09ORElUSU9OICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTExDX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIExPV0VSX0xBWUVSX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgMHgwNiAKKworI2VuZGlmIC8qIEVuZCBvZiBnbW1sbGNfaW50ZXJmYWNlLmggKi8KKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZ21zc19ud3NlbF9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9nbXNzX253c2VsX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YTRiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvZ21zc19ud3NlbF9zdHJ1Y3QuaApAQCAtMCwwICsxLDEyOTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogIGdtc3NfbndzZWxfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRzIGZvciBzdHJ1Y3QgZGVmaW5pdGlvbiBiZXR3ZWVuIE5XU0VMIGFuZCBHTVNTLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0dNU1NfTldTRUxfU1RSVUNUX0gKKyNkZWZpbmUgX0dNU1NfTldTRUxfU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAibDNfaW5jX2VudW1zX3B1YmxpYy5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorI2luY2x1ZGUgIm1jZF9sM19pbmNfc3RydWN0LmgiCisjaW5jbHVkZSAicHNfcHVibGljX2VudW0uaCIKKyNpbmNsdWRlICJsM19pbmNfbG9jYWwuaCIKKyNpbmNsdWRlICJtbV9tbWlfZW51bXMuaCIKKworI2lmZGVmIF9fTFRFX1JBVF9fCisjaW5jbHVkZSAibnZyYW1fZGF0YV9pdGVtcy5oIgorI2luY2x1ZGUgIm52cmFtX2VkaXRvcl9kYXRhX2l0ZW0uaCIKKyNlbmRpZgorCisjaWZkZWYgX19JTVNfU1VQUE9SVF9fCisjaW5jbHVkZSAiaW1zX2NvbW1vbl9kZWYuaCIKKyNpbmNsdWRlICJpbXNfaW50ZXJmYWNlX21kLmgiCisjZW5kaWYgLyogX19JTVNfU1VQUE9SVF9fICovCisKKyNpbmNsdWRlICJyc3Zhc19lbnVtLmgiCisjaW5jbHVkZSAiZ21zc19wdWJsaWMuaCIKKyNpbmNsdWRlICJyYWNfZ21zc19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJud3NlbF9ldmFsX3N0cnVjdC5oIgorI2luY2x1ZGUgImdtc3NfY3ZhbF9zdHJ1Y3QuaCIKKyNpbmNsdWRlICJuYXNfc3ZfY3NzX3N0cnVjdC5oIgorCisjaW5jbHVkZSAibnZyYW1fZWRpdG9yX2RhdGFfaXRlbS5oIgorI2luY2x1ZGUgIm5hc19udnJhbV9lZGl0b3IuaCIKKyNpbmNsdWRlICJzaW1fcHNfc3RydWN0LmgiCisjaW5jbHVkZSAic2ltX3B1YmxpY19lbnVtX3B1YmxpYy5oIgorI2luY2x1ZGUgIm1tc3NfZGVmLmgiCisjaW5jbHVkZSAibnZyYW1fc3RydWN0LmgiCisjaW5jbHVkZSAicmFjMmw0Y19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJuYXNfc3Zfc3RydWN0LmgiCisKKyNpbmNsdWRlICJsNGMycmFjX3N0cnVjdC5oIgorI2luY2x1ZGUgInJhYzJsNGNfc3RydWN0LmgiCisKKy8qIEdNU1MgLT4gTldTRUwgKi8KK3R5cGVkZWYgcmFjX2dtc3NfaW5pdF9yZXFfc3RydWN0IGdtc3NfbndzZWxfaW5pdF9yZXFfc3RydWN0OwordHlwZWRlZiByYWNfZ21zc19jdXN0b21fcGxtbl9saXN0X3VwZGF0ZV9yZXFfc3RydWN0IGdtc3NfbndzZWxfY3VzdG9tX3BsbW5fbGlzdF91cGRhdGVfcmVxX3N0cnVjdDsKK3R5cGVkZWYgcmFjX2dtc3NfZ2V0X2N1c3RvbV9wbG1uX2xpc3RfcmVxX3N0cnVjdCBnbXNzX253c2VsX2dldF9jdXN0b21fcGxtbl9saXN0X3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIHJhY19nbXNzX2dldF9jdXN0b21fcGxtbl9saXN0X2NuZl9zdHJ1Y3QgZ21zc19ud3NlbF9nZXRfY3VzdG9tX3BsbW5fbGlzdF9jbmZfc3RydWN0OwordHlwZWRlZiByYWNfZ21zc191ZW1vZGVfcGFyYW1fdXBkYXRlX3JlcV9zdHJ1Y3QgZ21zc19ud3NlbF91ZW1vZGVfcGFyYW1fdXBkYXRlX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIHJhY19nbXNzX3ZvbHRlX3N0YXR1c191cGRhdGVfcmVxX3N0cnVjdCBnbXNzX253c2VsX3ZvbHRlX3N0YXR1c191cGRhdGVfcmVxX3N0cnVjdDsKK3R5cGVkZWYgcmFjX2dtc3NfY2FsbF9zdGF0dXNfcmVxX3N0cnVjdCBnbXNzX253c2VsX2NhbGxfc3RhdHVzX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgcmFjX2dtc3Nfc2V0X3BsbW5fYmFycmluZ190aW1lcl9yZXFfc3RydWN0IGdtc3NfbndzZWxfc2V0X3BsbW5fYmFycmluZ190aW1lcl9yZXFfc3RydWN0OwordHlwZWRlZiByYWNfZ21zc19zZXRfcGxtbl9iYXJyaW5nX3RpbWVyX2NuZl9zdHJ1Y3QgZ21zc19ud3NlbF9zZXRfcGxtbl9iYXJyaW5nX3RpbWVyX2NuZl9zdHJ1Y3Q7Cit0eXBlZGVmIHJhY19nbXNzX2dldF9wbG1uX2JhcnJpbmdfdGltZXJfcmVxX3N0cnVjdCBnbXNzX253c2VsX2dldF9wbG1uX2JhcnJpbmdfdGltZXJfcmVxX3N0cnVjdDsKK3R5cGVkZWYgcmFjX2dtc3NfZ2V0X3BsbW5fYmFycmluZ190aW1lcl9jbmZfc3RydWN0IGdtc3NfbndzZWxfZ2V0X3BsbW5fYmFycmluZ190aW1lcl9jbmZfc3RydWN0OwordHlwZWRlZiByYWNfZ21zc19pbXNfdGltZXJfc3RhdHVzX3VwZGF0ZV9yZXFfc3RydWN0IGdtc3NfbndzZWxfaW1zX3RpbWVyX3N0YXR1c191cGRhdGVfcmVxX3N0cnVjdDsKK3R5cGVkZWYgcmFjX2dtc3NfYWJvcnRfZW53c2VsX3NlYXJjaF9yZXFfc3RydWN0IGdtc3NfbndzZWxfYWJvcnRfZW53c2VsX3NlYXJjaF9yZXFfc3RydWN0OwordHlwZWRlZiByYWNfZ21zc19pbXNfY2FsbF9lbmRfc3RhdHVzX2luZF9zdHJ1Y3QgZ21zc19ud3NlbF9pbXNfY2FsbF9lbmRfc3RhdHVzX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIHJhY19nbXNzX3NldF9pbXNfcm9hbWluZ19jb25maWdfcmVxX3N0cnVjdCBnbXNzX253c2VsX3NldF9pbXNfcm9hbWluZ19jb25maWdfcmVxX3N0cnVjdDsKK3R5cGVkZWYgcmFjX2dtc3Nfc2V0X3ByZWZlcl9yYXRfcmVxX3N0cnVjdCBnbXNzX253c2VsX3NldF9wcmVmZXJfcmF0X3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIHJhY19nbXNzX2dldF9wcmVmZXJfcmF0X3JlcV9zdHJ1Y3QgZ21zc19ud3NlbF9nZXRfcHJlZmVyX3JhdF9yZXFfc3RydWN0OwordHlwZWRlZiByYWNfZ21zc19nZXRfcHJlZmVyX3JhdF9jbmZfc3RydWN0IGdtc3NfbndzZWxfZ2V0X3ByZWZlcl9yYXRfY25mX3N0cnVjdDsKK3R5cGVkZWYgcmFjX2dtc3NfY2FtcF91aV9pbmRfc3RydWN0IGdtc3NfbndzZWxfY2FtcF91aV9pbmRfc3RydWN0OworI2lmZGVmIF9fTUJJTV9NU19ORVRXT1JLX0JMQUNLTElTVF9fCit0eXBlZGVmIHJhY19nbXNzX2ZwbG1uX2FjdGlvbl9jbmZfc3RydWN0IGdtc3NfbndzZWxfZnBsbW5fYWN0aW9uX2NuZl9zdHJ1Y3Q7Cit0eXBlZGVmIHJhY19nbXNzX253X2JsYWNrX2xpc3Rfc3RhdGVfaW5kX3N0cnVjdCBnbXNzX253c2VsX253X2JsYWNrX2xpc3Rfc3RhdGVfaW5kX3N0cnVjdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBwbG1uX3NlbGVjdGlvbl9tb2RlX2VudW0gcGxtbl9zZWxfbW9kZTsKK30gZ21zc19ud3NlbF9zZWxfbW9kZV9yZXFfc3RydWN0OworCit0eXBlZGVmIG5hc19zdl9hbnlfYXR0YWNoX3JlcV9zdHJ1Y3QgZ21zc19ud3NlbF9hdHRhY2hfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBuYXNfc3ZfYW55X2RldGFjaF9yZXFfc3RydWN0IGdtc3NfbndzZWxfZGV0YWNoX3JlcV9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcGxtbl9yZXNlbGVjdGlvbl9lbnVtIHBsbW5fc2VhcmNoX21vZGU7ICAgICAgIC8qIHBsbW5fcmVzZWxlY3Rpb25fZW51bSAqLworICAgIHBsbW5faWRfcmF0X3N0cnVjdCBzZWxlY3RlZF9wbG1uOyAvKiBTZWxlY3RlZCBQTE1OICovCisgICAga2FsX2Jvb2wgaXNfbWFudWFsX2NzZ19zZWw7CisgICAga2FsX3VpbnQzMiBjc2dfaWQ7CisgICAgcmF0X2VudW0gcHJlZmVyX3JhdDsgICAvLyAgMDpkZWZhdWx0ICwgIDE6R1NNICwgICAyOlVNVFMKKyAgICBrYWxfYm9vbCBmcm9tX2w0YzsKKyAgICBrYWxfdWludDMyIGZhY3RvcnlfbW9kZV9hcmZjbjsgLy8weEZGRkYgbWVhbnMgaW52YWxpZCBhcmZjbiwgLyogMjAwODExMTAgbXRrMDA3MTQsIGZvciBmYXN0IGNhbXAgb24gdGVzdCBtYWNoaW5lICovCisgICAgZW5kY19zZWFyY2hfZW51bSBlbmRjX3NlYXJjaDsgLyogU2VhcmNoIEVOREMgY2VsbCBvciBub3QgZm9yIExURSBjZWxsLiAqLworfSBnbXNzX253c2VsX3JhY19wbG1uX3NlYXJjaF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBwbG1uX2lkX3JhdF9zdHJ1Y3QgcGxtbl9pZF9yYXQ7Cit9IGdtc3NfbndzZWxfcmFjX2NzZ19saXN0X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgbmFzX3N2X2dtc3Nfc2V0X3JhdF9tb2RlX3JlcV9zdHJ1Y3QgZ21zc19ud3NlbF9zZXRfcmF0X21vZGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBuYXNfc3ZfYW55X3Jmb2ZmX3JlcV9zdHJ1Y3QgZ21zc19ud3NlbF9yZm9mZl9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19zdXBwb3J0aW5nX3JvYW1pbmc7CisgICAga2FsX2Jvb2wgZGlzYWJsZV9pbnRlcm5hdGlvbmFsX3JvYW1pbmdfc3VwcG9ydDsKKyAgICBrYWxfYm9vbCBkaXNhYmxlX25hdGlvbmFsX3JvYW1pbmdfc3VwcG9ydDsKKyAgICBrYWxfYm9vbCBkaXNhYmxlX2hocGxtbl9zZWFyY2hfc3VwcG9ydDsKK30gZ21zc19ud3NlbF9zZXRfcm9hbWluZ19tb2RlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGVsZXZhdG9yX21vZGVfZW51bSBlbGV2YXRvcl9tb2RlOworfWdtc3NfbndzZWxfZWxldmF0b3JfbW9kZV9yZXFfc3RydWN0OworCisvKiBOV1NFTCAtPiBHTVNTICovCisKK3R5cGVkZWYgbndzZWxfZXZhbF9jMmtfY3NmYl9zdGFydF9pbmRfc3RydWN0IGdtc3NfbndzZWxfYzJrX2NzZmJfc3RhcnRfaW5kX3N0cnVjdDsKK3R5cGVkZWYgbndzZWxfZXZhbF9jMmtfY3NmYl9lc3RfaW5kX3N0cnVjdCBnbXNzX253c2VsX2Mya19jc2ZiX2VzdF9pbmRfc3RydWN0OwordHlwZWRlZiBud3NlbF9ldmFsX2Mya19jc2ZiX3N0b3BfaW5kX3N0cnVjdCBnbXNzX253c2VsX2Mya19jc2ZiX3N0b3BfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcHJvY19zdGF0dXNfZW51bSBzdGF0dXM7ICAgICAgICAgIC8qIHByb2Nfc3RhdHVzX2VudW0gKi8KKyAgICBtbV9jYXVzZV9lbnVtIGNhdXNlOyAgICAgICAgICAgLyogbW1fY2F1c2VfZW51bSAqLworICAgIGthbF9ib29sIGlzX29uX2hwbG1uOworICAgIGNlbGxfaW5mb19hbmRfcmF0X3N0cnVjdCBjZWxsX2luZm87Cit9IGdtc3NfbndzZWxfcmFjX3BsbW5fc2VhcmNoX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHByb2Nfc3RhdHVzX2VudW0gc3RhdHVzOyAgICAgICAgIC8qIHByb2Nfc3RhdHVzX2VudW0gKi8KKyAgICBtbV9jYXVzZV9lbnVtICBjYXVzZTsgICAgICAgICAgLyogbW1fY2F1c2VfZW51bSAqLworICAgIGthbF91aW50OCBudW1fb2ZfaHBsbW47CisgICAgcmFjX3BsbW5fbGlzdF9zdHJ1Y3QgcGxtbl9saXN0OworICAgIGxpc3RfaW5kX3NvdXJjZV9lbnVtIHNvdXJjZTsKKyAgICBwcmlvX2NsYXNzX2VudW0gZ21zc19jbGFzc19saXN0W1JBQ19NQVhfTlVNX0xJU1RFRF9QTE1OU107CisgICAga2FsX2Jvb2wgaXNfQzJLX3NpYl9zY2hlZHVsZWQ7Cit9IGdtc3NfbndzZWxfcmFjX3BsbW5fbGlzdF9jbmZfc3RydWN0OworCit0eXBlZGVmIGdtc3NfbndzZWxfcmFjX3BsbW5fbGlzdF9jbmZfc3RydWN0IGdtc3NfbndzZWxfcGxtbl9saXN0X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzdXNwX2lkOworICAgIHN1c3BfcmVzdV9zb3VyY2VfZW51bSB0YXJnZXQ7Cit9IGdtc3NfbndzZWxfc3VzcGVuZF9zdGF0dXNfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcHJvY19zdGF0dXNfZW51bSBzdGF0dXM7CisgICAgbW1fY2F1c2VfZW51bSBjYXVzZTsKKyAgICByYWNfY3NnX2xpc3Rfc3RydWN0IGNzZ19saXN0OworfSBnbXNzX253c2VsX3JhY19jc2dfbGlzdF9jbmZfc3RydWN0OworCit0eXBlZGVmIG5hc19zdl9nbXNzX3NldF9yYXRfbW9kZV9jbmZfc3RydWN0IGdtc3NfbndzZWxfc2V0X3JhdF9tb2RlX2NuZl9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfbm90X3N1c3BlbmQ7IC8qIGluZGljYXRlIGlmIGlzX3NlYXJjaGluZyA9IFRSVUUgaXMgZHVlIHRvIEdlbWluaSBzdXNwZW5kICovCisgICAga2FsX2Jvb2wgaXNfdXBkYXRlX2lzX3NlYXJjaGluZzsgLyogaWYgVFJVRSwgUkFDIGNhbiBjaGVjayBpc19zZWFyY2hpbmcgZmxhZyAqLworICAgIGthbF9ib29sIGlzX3NlYXJjaGluZzsKKyAgICBrYWxfYm9vbCBpc19jYW1wX29uX2NlbGw7IC8qIGlmIGlzX3NlYXJjaGluZyA9IEZBTFNFICYmIGlzX2NhbXBfb25fY2VsbCA9IEZBTFNFLCB0aGVuIFJBQyB1cGRhdGUgdG8gTDRDOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSwgaWdub3JlIHRoZSBpc19zZWFyY2hpbmcgZmxhZy4gICovCisgICAga2FsX2Jvb2wgaXNfb25faHBsbW47CisgICAga2FsX2Jvb2wgaXNfdXBkYXRlX2FjdGl2ZV9yYXQ7CisgICAgcmF0X2VudW0gYWN0aXZlX3JhdDsKKy8vI2lmZGVmIF9fS09SX0NVU1RPTUlaQVRJT05fXworICAgIHBsbW5faWRfc3RydWN0IHJwbG1uOyAgICAgLyogR2V0IFJQTE1OICovCisvLyNlbmRpZgorfSBnbXNzX253c2VsX3BsbW5fc3RhdHVzX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIG53c2VsX2ltc19zZXJ2aWNlX2VudW0gc2VydmljZV90eXBlOworICAgIGthbF9ib29sIGlzX3QzMTFfZXhwaXJlOyAgLyogUlJDIGNvbm5lY3Rpb24gcmVsZWFzZSBkdWUgdG8gUlJDIFQzMTEgdGltZXIgZXhwaXJlICovCit9IGdtc3NfbndzZWxfaW1zX3NlcnZpY2VfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgZW50ZXJfY2F1c2UxOF9wbG1uOworfSBnbXNzX253c2VsX2NzX2RvbWFpbl9hdmFpbGFiaWxpdHlfaW5kX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBzdXNwX3Jlc3VfYWN0aW9uX2VudW0gYWN0aW9uOworICAgIHN1c3BfcmVzdV9yZXN1bHRfZW51bSByZXN1bHQ7CisgICAgc3VzcF9yZXN1X3NvdXJjZV9lbnVtIHRhcmdldDsKK30gZ21zc19ud3NlbF9zdXNwX3Jlc3VfdXBkYXRlX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHN1c3BfcmVzdV9tb2RlX2VudW0gIG1vZGU7CisgICAgc3VzcF9yZXN1X2FjdGlvbl9lbnVtIGFjdGlvbjsKKyAgICBrYWxfdWludDggICAgICAgICAgICBzdXNwX2lkOworICAgIHN1c3BfcmVzdV9zb3VyY2VfZW51bSBzb3VyY2U7Cit9IGdtc3NfbndzZWxfc3VzcF9yZXN1X3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIHRpbWVyX2ludGVydmFsW01BWF9SRUNPVkVSWV9USU1FUl9OVU1dOworfSBnbXNzX253c2VsX3NldF9yZWNvdmVyeV9zZWFyY2hfdGltZXJfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiB0aW1lcl9pbnRlcnZhbFtNQVhfUkVDT1ZFUllfVElNRVJfTlVNXTsKK30gZ21zc19ud3NlbF9nZXRfcmVjb3Zlcnlfc2VhcmNoX3RpbWVyX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIHJlc3VsdDsKK30gZ21zc19ud3NlbF9zZXRfcmVjb3Zlcnlfc2VhcmNoX3RpbWVyX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHBsbW5faWRfc3RydWN0IHBsbW47CisgICAgcmF0X2VudW0gcmF0OworICAgIGthbF91aW50OCBhcmFfc3RhcnRbMl07CisgICAga2FsX3VpbnQ4IGFyYV9lbmRbMl07Cit9Z21zc19ud3NlbF9hcmFsX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICB2b2ljZV9kb21haW5fcHJlZmVyZW5jZV9lbnVtIHV0cmFuX3ZvaWNlX2RvbWFpbl9wcmVmZXJlbmNlOworfSBnbXNzX253c2VsX3NldF91dHJhbl92b2ljZV9kb21haW5fcHJlZmVyZW5jZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHJhY19nbXNzX2RhdGFfc2VydmljZV9zdGF0dXNfdXBkYXRlX3JlcV9zdHJ1Y3QgZ21zc19ud3NlbF9kYXRhX3NlcnZpY2Vfc3RhdHVzX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggdHJ4X2lkOworCisgICAgLyogVGhlIE1NU1Mgc2VhcmNoIHR5cGUuCisgICAgKi8KKyAgICBtbXNzX3NlYXJjaF90eXBlX2VudW0gICBtbXNzX3NlYXJjaF90eXBlOworCisgICAgLyogVGhlIHNlYXJjaCBSQVQsIG9ubHkgdmFsaWQgZm9yIE1NU1NfU0VBUkNIX05PUk1BTC4KKyAgICAqLworICAgIHJhdF9lbnVtIHJhdDsKKworICAgIC8qIFRoZSBzZWFyY2ggcHJpb19jbGFzcywgb25seSB2YWxpZCBmb3IgTU1TU19TRUFSQ0hfTk9STUFMLgorICAgICovCisgICAgcHJpb19jbGFzc19lbnVtIGdtc3NfY2xhc3M7CisKKyAgICAvKiBUaGUgc2VhcmNoIGR1cGxleCB0eXBlLgorICAgICovCisgICAgbHRlX2R1cGxleF90eXBlX2VudW0gZHVwbGV4X3R5cGU7CisKKyAgICAvKiBUaGUgc2VhcmNoIHRhcmdldCdzIE1DQy4gTldTRUwgd2lsbCBpZ25vcmUgUExNTnMgbm90IGluIHRoaXMgTUNDLgorICAgICoqIE9ubHkgbWNjMSwgbWNjMiwgbWNjMyBmaWVsZHMgYXJlIHZhbGlkLgorICAgICoqIElmIHRoZSB2YWx1ZSBhcmUgYWxsIDB4MEYsIGl0IG1lYW5zIG5vIE1DQyByZXN0cmljdGlvbi4KKyAgICAqKiAgTm90ZTogVGhpcyBmaWVsZCBvbmx5IHZhbGlkIGZvciBNTVNTX1NFQVJDSF9OT1JNQUwuCisgICAgKi8KKyAgICBwbG1uX2lkX3N0cnVjdCBtY2M7CisKKyAgICAvKiBzY2FuIHR5cGUgZm9yIGZhc3Qgcm9hbWluZy4KKyAgICAqLworICAgIHNjYW5fdHlwZV9lbnVtICAgICAgICAgIHNjYW5fdHlwZTsKKworICAgIC8qIGltcyBlbWVyZ2VuY3kgY2VsbCByZXF1aXJlZCBjb250cm9sbGVkIGJ5IEdNU1MKKyAgICAqLworICAgIGthbF9ib29sIGlzX2ltc19lbWVyZ2VuY3lfcmVxdWlyZWQ7CisKKyAgICAvKiBUaGUgTU1TUyBzZWFyY2ggbGlzdChpZS4gTVJVLCBSQUwpLgorICAgICovCisgICAgbW1zc18zZ3BwX2xpc3Rfc3RydWN0ICAgbW1zc19saXN0OworCisgICAgLyogU2VhcmNoIHR5cGUsIGUuZyBzdG9yZWQgLHF1aWNrIG9yIG5vcm1hbC4KKyAgICAqLworICAgIGdtc3Nfc2VhcmNoX3R5cGVfZW51bSBnbXNzX3NlYXJjaF90eXBlOworCisgICAga2FsX2Jvb2wgaXNfc3JsdGU7CisKKyAgICBrYWxfYm9vbCBpc190b19kZWFjdGl2YXRlX2Mya19jc19zZXJ2aWNlOworCisgICAgLy8gaXMgZmlyc3Qgc2VhcmNoIGFmdGVyIHBvd2VyLW9uCisgICAga2FsX2Jvb2wgaXNfcG93ZXJfb247CisKKyAgICAvKiBub3RpZnkgTldTRUwgaWYgdGhpcyBpcyBmb3IgYmV0dGVyIHN5c3RlbSByZXNlbGVjdGlvbiwgcmVwbGFjZSBNTVNTX1NFQVJDSF9CRVRURVJfU1lTVEVNX1JFU0VMRUNUSU9OKi8KKyAgICBrYWxfYm9vbCBpc19ic3I7CisKKyAgICAvKiBub3RpZnkgTldTRUwgd2hpY2ggY2FtcGluZyBjZWxsIFZETSBpcyB1c2VkIG5vdy4gb25seSBmb3IgZW1lcmdlbmN5IGNhbGwgKi8KKyAgICBrYWxfdWludDE2IGNhbXBpbmdfaW5mb19pZDsKK30gZ21zc19ud3NlbF9wbG1uX3NlYXJjaF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggdHJ4X2lkOworICAgIHByb2Nfc3RhdHVzX2VudW0gcHJvY19zdGF0dXM7CisgICAgcmF0X2VudW0gcmF0OworICAgIHByaW9fY2xhc3NfZW51bSBnbXNzX2NsYXNzOworICAgIG1tX2NhdXNlX2VudW0gcHJvY19jYXVzZTsKKyAgICBtbV9jYXVzZV9lbnVtIG53X21tX2NhdXNlOworICAgIGVzbV9jYXVzZV9lbnVtIGVzbV9jYXVzZTsKK30gZ21zc19ud3NlbF9wbG1uX3NlYXJjaF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByYXRfZW51bSByYXQ7CisgICAgbHRlX2R1cGxleF90eXBlX2VudW0gZHVwbGV4X3R5cGU7CisgICAgcGxtbl9pZF9zdHJ1Y3QgbWNjOyAvKiBvbmx5IG1jYzEsIG1jYzIsIG1jYzMgYXJlIHZhbGlkLCBmb3IgTldTRUwgdG8gaWdub3JlIFBMTU5zIG5vdCBpbiB0aGlzIE1DQyAqLworICAgIHByaW9fY2xhc3NfZW51bSBxdWlja19saXN0X2NsYXNzOyAvKiBIb21lIG9yIFBSRUY6IHF1aWNrIGxpc3Q7IG90aGVyczogbm9ybWFsIGxpc3QqLworICAgIHNjYW5fdHlwZV9lbnVtICAgICAgICAgIHNjYW5fdHlwZTsKKyAgICBrYWxfYm9vbCBpc19lbGV2YXRvcl9tb2RlOworfSBnbXNzX253c2VsX3BsbW5fbGlzdF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfdXNlcl9wbG1uX2xpc3Rfb25nb2luZzsKK30gZ21zc19ud3NlbF9wbG1uX2xpc3Rfc3RhdHVzX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHJhY19nbXNzX3BsbW5fbGlzdF9yZXFfc3RydWN0IGdtc3NfbndzZWxfcmFjX3BsbW5fbGlzdF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBwbG1uX2lkX3N0cnVjdCBtY2M7IC8qIG9ubHkgbWNjMSwgbWNjMiwgbWNjMyBhcmUgdmFsaWQsIGZvciBOV1NFTCB0byBpZ25vcmUgUExNTnMgbm90IGluIHRoaXMgTUNDICovCisgICAgcHJpb19jbGFzc19lbnVtIHF1aWNrX2xpc3RfY2xhc3M7IC8qIEhvbWUgb3IgUFJFRjogcXVpY2sgbGlzdDsgb3RoZXJzOiBub3JtYWwgbGlzdCovCisgICAgZ21zc19yYXRfZW51bSBjMmtfcHNfcmF0OyAvKiAxeFJUVCBvciBIUlBEICovCit9IGdtc3NfbndzZWxfYzJrX25vcm1hbF9zZXJ2aWNlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHByb2Nfc3RhdHVzX2VudW0gcHJvY19zdGF0dXM7CisgICAgcHJpb19jbGFzc19lbnVtIGdtc3NfY2xhc3M7ICAgICAvLyBPbmx5IGNvdW50IHBsbW4gd2l0aCBzdWl0YWJsZSBjZWxsLgorICAgIG1tX2NhdXNlX2VudW0gY2F1c2U7CisgICAgcmFjX3BsbW5fbGlzdF9zdHJ1Y3QgcGxtbl9saXN0OyAvLyBBbGwgYXZhaWxhYmxlIHBsbW4gaW5jbHVkaW5nIGZvcmJpZGRlbiBhbmQgbWF5X3N1aXRhYmxlX2NlbGxfZXhpc3Q9RkFMU0UuCisgICAgcHJpb19jbGFzc19lbnVtIGdtc3NfY2xhc3NfbGlzdFtSQUNfTUFYX05VTV9MSVNURURfUExNTlNdOyAgICAgLy9tYXBwaW5nIHRvIHBsbW5fbGlzdC5wbG1uX2lkX3JhdFtSQUNfTUFYX05VTV9MSVNURURfUExNTlNdCit9IGdtc3NfbndzZWxfcGxtbl9saXN0X2NuZl9zdHJ1Y3Q7CisKKyNpZmRlZiBfX0dFTUlOSV9fCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBhc19zdXNwZW5kX21vZGVfcmVhc29uX2VudW0gY2F1c2U7Cit9IGdtc3NfbndzZWxfc3VzcGVuZF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc192aXJ0dWFsX2lkbGVfbW9kZTsKK30gZ21zc19ud3NlbF9yZXN1bWVfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfdmlydHVhbF9pZGxlX21vZGU7Cit9IGdtc3NfbndzZWxfdmlydHVhbF9tb2RlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX2xpbWl0ZWRfdmlydHVhbF9pZGxlOworfSBnbXNzX253c2VsX2xpbWl0ZWRfdmlydHVhbF9pZGxlX2luZF9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfX0dFTUlOSV9fICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIG1tX2NhdXNlX2VudW0gY2F1c2U7ICAgICAgICAvKiBGT1JCSURERU5fUExNTiBmb3IgbGltaXRlZCBzZXJ2aWNlOyBOT19DT1ZFUkFHRSBmb3Igbm8gY292ZXJhZ2UgKi8KKyAgICBwbG1uX2lkX3JhdF9zdHJ1Y3QgcGxtbl9pZDsKKyAgICBrYWxfYm9vbCBpbW1lZGlhdGVfZHVwbGV4X21vZGVfY2hhbmdlOworfSBnbXNzX253c2VsX291dF9vZl9zZXJ2aWNlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHByaW9fY2xhc3NfZW51bSBnbXNzX2NsYXNzOworICAgIHJhdF9lbnVtIHJhdDsKK30gZ21zc19ud3NlbF9jbGFzc19yYXRfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgbndzZWxfZXZlbnRfdHlwZV9lbnVtIGV2ZW50OworfSBnbXNzX253c2VsX2V2ZW50X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX2NvbnRyb2xsZWRfYnlfZ21zczsKK30gZ21zc19ud3NlbF9nbXNzX3N0YXR1c191cGRhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgcmVzZXRfYmFyX2xpc3Q7Cit9IGdtc3NfbndzZWxfcmVzZXRfc2VhcmNoX3Jlc3VsdF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgaXJhdF90eXBlX2VudW0gaXJhdF90eXBlOworICAgIGMya19pcmF0X2F0dGFjaF9yZXN1bHRfZW51bSByZXN1bHQ7Cit9IGdtc3NfbndzZWxfYzJrX2lyYXRfY29tcGxldGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHJhdF9lbnVtIHJhdDsKKyAgICBhc19zbmlmZmVyX3JlcV9zZXJ2aWNlX2VudW0gc25pZmZlcl9zZXJ2aWNlX3R5cGU7Cit9IGdtc3NfbndzZWxfc25pZmZlcl9zdGFydF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmF0X2VudW0gcmF0OworfSBnbXNzX253c2VsX3NuaWZmZXJfc3RvcF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmF0X2VudW0gcmF0OworfSBnbXNzX253c2VsX3NpZ25hbF9hcHBlYXJfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIG52cmFtX2dtc3NfZGF0YV9zdHJ1Y3QgZ21zc19kYXRhOworICAgIC8vVXNlIGFjY2Vzc19pZCA9IDAgdG8gaWdub3JlIE5WUkFNX1dSSVRFX0NORgorICAgIC8vICAgIGFjY2Vzc19pZCA9IDB4MTB+MHgxZiB0byB3YWl0IE5WUkFNX1dSSVRFX0NORiBvZiBOVlJBTV9FRl9OV1NFTF9EQVRBX0xJRAorICAgIGthbF91aW50OCBhY2Nlc3NfaWQ7Cit9IGdtc3NfbndzZWxfbnZyYW1fd3JpdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBudnJhbV93cml0ZV9jbmZfc3RydWN0IGdtc3NfbndzZWxfbnZyYW1fd3JpdGVfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHByaW9fY2xhc3NfZW51bSBwcmlvX2NsYXNzOworICAgIHJhdF9lbnVtIHJhdDsgICAgICAgICAgICAgICAvKiB1c2VkIHRvIG5vdGlmeSBud3NlbCBtc3BsIHJhdCB3aGVuIHN1c3BlbmQvcmVzdW1lICovCit9IGdtc3NfbndzZWxfcHJpb19jbGFzc191cGRhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzaW1fZ21zc19yZWFkeV9pbmRfc3RydWN0IGdtc3NfbndzZWxfc2ltX3JlYWR5X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc2ltX2Vycm9yX2luZF9zdHJ1Y3QgZ21zc19ud3NlbF9zaW1fZXJyb3JfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgYWN0X3NpbV9lbnVtICBhY3RpdmVfc2ltOworfSBnbXNzX253c2VsX2FjdGl2ZV9zaW1faW5mb19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggdHJ4X2lkOworICAgIGthbF91aW50OCByYXRfbnVtOworICAgIHJhdF9lbnVtIHJhdFtNQVhfTUNDX1NFQVJDSF9SQVRfTlVNXTsKKyAgICBnbXNzX3NlYXJjaF90eXBlX2VudW0gZ21zc19zZWFyY2hfdHlwZTsKKyAgICBrYWxfYm9vbCBpc19wb3dlcl9vbjsgICAgLy8gaXMgZmlyc3Qgc2VhcmNoIGFmdGVyIHBvd2VyLW9uCit9IGdtc3NfbndzZWxfbWNjX3NlYXJjaF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggdHJ4X2lkOworICAgIHByb2Nfc3RhdHVzX2VudW0gcHJvY19zdGF0dXM7CisgICAga2FsX3VpbnQ4IHBsbW5fY291bnQ7CisgICAgcGxtbl9pZF9yYXRfc3RydWN0IHBsbW5faWRfcmF0W1JBQ19NQVhfTlVNX0xJU1RFRF9QTE1OU107Cit9IGdtc3NfbndzZWxfbWNjX3NlYXJjaF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBwbG1uX2lkX3N0cnVjdCBwbG1uX2lkOworfSBnbXNzX253c2VsX2Rpc2FibGVfZXV0cmFuX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgbDRjcmFjX253X3JlZ19zdGF0dXNfaW5kX3N0cnVjdCBnbXNzX253c2VsX3JlZ19zdGF0dXNfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgZGF0YV9lbmFibGVkX3NldHRpbmc7CisgICAga2FsX2Jvb2wgZGF0YV9yb2FtaW5nX3NldHRpbmc7Cit9IGdtc3NfbndzZWxfcm9hbWluZ19kYXRhX2NvbmZpZ19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIGthbF9ib29sICAgICAgICAgICAgICBpc19zaW1fcmVhZHk7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgIHRyeF9pZDsKKworICAgIC8vIEhPTUUrRUhPTUUgUExNTgorICAgIC8vIElmIG51bV9vZl9laHBsbW4gPiA0KE1BWF9OVU1fSFBMTU4pLCBmaWxsIE1BWF9OVU1fSFBMTU4gYXQgbW9zdAorICAgIC8vIG51bV9vZl9laHBsbW4gd2lsbCBiZSB0aGUgbnVtYmVyIGluIHRoaXMgbWVzc2FnZQorICAgIC8vIGlzX3JlbWFpbmluZ19laHBsbW4gaW5kaWNhdGVzIHRoZSBsYXN0IGVocGxtbiBvciBub3QKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgaXNfcmVtYWluaW5nX2VocGxtbjsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgbnVtX29mX2VocGxtbjsKKyAgICBwbG1uX2lkX3JhdF9zdHJ1Y3QgICAgZWhwbG1uW1BMTU5fSU5GT19NQVhfTlVNX0hQTE1OXTsKKworICAgIC8vIFBSRUZFUiBQTE1OCisgICAgLy8gSWYgbnVtX29mX3VwbG1uID4gMzIoTldTRUxfTUFYX05VTV9QTE1OUyksIGZpbGwgTldTRUxfTUFYX05VTV9QTE1OUyBQTE1OIGF0IG1vc3QuCisgICAgLy8gbnVtX29mX3VwbG1uIHdpbGwgYmUgdGhlIG51bWJlciBpbiB0aGlzIG1lc3NhZ2UKKyAgICAvLyBpc19yZW1haW5pbmdfdXBsbW4gaW5kaWNhdGVzIHRoZSBsYXN0IHVwbG1uIG9yIG5vdAorICAgIGthbF9ib29sICAgICAgICAgICAgICBpc19yZW1haW5pbmdfdXBsbW47CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgIG51bV9vZl91cGxtbjsKKyAgICBwbG1uX2lkX3JhdF9zdHJ1Y3QgICAgdXBsbW5bTldTRUxfTUFYX05VTV9QTE1OU107CisKKyAgICAvLyBJZiBudW1fb2Zfb3BsbW4gPiAzMihOV1NFTF9NQVhfTlVNX1BMTU5TKSwgZmlsbCBOV1NFTF9NQVhfTlVNX1BMTU5TIFBMTU4gYXQgbW9zdC4KKyAgICAvLyBudW1fb2Zfb3BsbW4gd2lsbCBiZSB0aGUgbnVtYmVyIGluIHRoaXMgbWVzc2FnZQorICAgIC8vIGlzX3JlbWFpbmluZ19vcGxtbiBpbmRpY2F0ZXMgdGhlIGxhc3Qgb3BsbW4gb3Igbm90CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgIGlzX3JlbWFpbmluZ19vcGxtbjsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgbnVtX29mX29wbG1uOworICAgIHBsbW5faWRfcmF0X3N0cnVjdCAgICBvcGxtbltOV1NFTF9NQVhfTlVNX1BMTU5TXTsKK30gZ21zc19ud3NlbF9wbG1uX2luZm9faW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgdW10c19kdXBsZXhfbW9kZV90eXBlICAgc291cmNlX3VtdHNfZHVwbGV4X21vZGU7CisgICAgdW10c19kdXBsZXhfbW9kZV90eXBlICAgdGFyZ2V0X3VtdHNfZHVwbGV4X21vZGU7CisgICAgbHRlX2R1cGxleF9tb2RlX3R5cGUgICAgc291cmNlX2x0ZV9kdXBsZXhfbW9kZTsKKyAgICBsdGVfZHVwbGV4X21vZGVfdHlwZSAgICB0YXJnZXRfbHRlX2R1cGxleF9tb2RlOworICAgIG1vZGVfc3dpdGNoX2NhdXNlX2VudW0gIGNhdXNlOworICAgIHBsbW5faWRfcmF0X3N0cnVjdCAgICAgIHBsbW5faWRfcmF0OyAvLyBvbmx5IHZhbGlkIHdoZW4gbW9kZV9zd2l0Y2hfY2F1c2UgPT0gTU9ERV9TV0lUQ0hfUExNTl9DSEFOR0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgcmF0IGlzIEMySywgb25seSBNQ0MgcGFydCBpcyB2YWxpZAorICAgIGthbF9ib29sICAgICAgICAgICAgICAgIG5lZWRfY25mOworfSBnbXNzX253c2VsX2R1cGxleF9tb2RlX2NoYW5nZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBtb2RlX3N3aXRjaF9jYXVzZV9lbnVtICBjYXVzZTsKK30gZ21zc19ud3NlbF9nbG9iYWxfbW9kZV9jaGFuZ2Vfc3RhcnRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIHZvaWNlX292ZXJfaW1zX29uZ29pbmc7Cit9IGdtc3NfbndzZWxfaW1zX2NhbGxfaW5mb19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByYXRfZW51bSAgICAgICAgICAgICAgIHJhdDsKKyAgICBwbG1uX2lkX3N0cnVjdCAgICAgICAgIHBsbW5faWQ7Cit9IGdtc3NfbndzZWxfc2V0X2F1eF9wbG1uX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHNldF9hdXhfcGxtbl9yZXN1bHRfZW51bSAgcmVzdWx0OworfSBnbXNzX253c2VsX3NldF9hdXhfcGxtbl9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByYXRfZW51bSAgICAgICAgICAgICAgIHJhdDsKKyAgICBwbG1uX2lkX3N0cnVjdCAgICAgICAgIHBsbW5faWQ7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICBhcmZjbjsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgIHJlcXVlc3RlZF9iYW5kOworfSBnbXNzX253c2VsX3NldF9tcnVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgc2V0X21ydV9yZXN1bHRfZW51bSByZXN1bHQ7Cit9IGdtc3NfbndzZWxfc2V0X21ydV9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19hdHRhY2hfbmVlZGVkOworfSBnbXNzX253c2VsX3JhdF9jaGFuZ2Vfc3VjY2Vzc19ub3RpZnlfcmVxX3N0cnVjdDsKKworLyogTk9URTogdGhpcyBwcmltaXRpdmUgbmVlZCB0byByZXBvcnQgaW4gTFdDRyBtb2RlIGFuZCBldmVuIEdXTCBvbmx5IG1vZGUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAgLyoqPCB0aGUgbGF0ZXN0IGNhbXBpbmcgcmVjb3JkICAqLworICAgIG1tc3NfM2dwcF9yZWNfdHlwZSAgICAgICBuZXdfcmVjOworCisgICAgLyoqPCBpbmRpY2F0ZSBpZiB0aGUgcmVjb3JkIGlzIHJlZ2lzdGVyZWQgb3Igbm90ICAqLworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICBpc19yZWdpc3RlcmVkOworCisgICAgLyoqPCBpbmRpY2F0ZSBpZiB0aGUgY2VsbCBzdXBwb3J0IGltcyBlbWVyZ2VuY3kgY2FsbCwgb25seSBhcHBsaWNhYmxlIHdoZW4gTFRFIGNlbGwgICovCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgIGlzX2ltc19lbWVyZ2VuY3lfc3VwcG9ydDsKKworICAgIC8qKjwgaW5kaWNhdGUgdGhlIGN1cnJlbnQgY2VsbCBpbmZvIHRyeCBpZCwgdXNlZCBieSBWRE0vR01TUy9OV1NFTCB0byBkaXN0aW5ndWlzaCB0aGUgZW1lcmdlbmN5IGNhbGwgY2VsbCB1c2VkICAqLworICAgIGthbF91aW50MTYgICAgICAgICAgICAgICBjYW1waW5nX2luZm9faWQ7CisKK30gZ21zc19ud3NlbF9jYW1waW5nX2luZm9faW5kX3N0cnVjdDsKKworLy8gbmV3IHByaW1pdGl2ZSBmb3IgQVMgSVJBVCBzdGFnZSAxIHN1Y2Nlc3MKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX2F0dGFjaF9uZWVkZWQ7Cit9IGdtc3NfbndzZWxfaXJhdF9jMmxfc3VjY2Vzc19ub3RpZnlfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcGxtbl9iYXNlZF90aW1lcl9lbnVtIHRpbWVyX3R5cGU7CisgICAgdGltZXJfc3RhdHVzX2VudW0gdGltZXJfc3RhdHVzOworICAgIHBsbW5faWRfc3RydWN0IHRhcmdldF9wbG1uOworICAgIHBsbW5fcmVzdHJpY3RfYWRkaXRpb25hbF9pbmZvcm1hdGlvbl9lbnVtIGV2ZW50OworfSBnbXNzX253c2VsX3BsbW5fcmVzdHJpY3Rpb25fY2hhbmdlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgdHJ4X2lkOworICAgIGthbF91aW50MTYgbGFzdF9pZHhfb2ZfZWhwbG1uOworICAgIGthbF91aW50MTYgbGFzdF9pZHhfb2Zfb3BsbW47CisgICAga2FsX3VpbnQxNiBsYXN0X2lkeF9vZl91cGxtbjsKK30gZ21zc19ud3NlbF9wbG1uX2luZm9fcnNwX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmF0X2VudW0gcmF0OworfSBnbXNzX253c2VsX3NldF9maXJzdF9jYW1wX29uX3ByZWZlcl9yYXRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sICBiRXZkb0VudGVyQ29ubmVjdGlvbjsgIC8qIFRSVUUsIG1lYW5zIEVWRE8gaGFzIGJlZW4gaW4gUFMgY29ubmVjdGlvbiBzdGF0ZTsgZWxzZSwgRVZETyBoYXMgYmVlbiBpbiBpZGxlIHN0YXRlLiAqLworfSBnbXNzX253c2VsX2V2ZG9fcHNfY29ubmVjdGlvbl9zdGF0dXNfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sICBiMXhSdHRFbnRlckNvbm5lY3Rpb247ICAvKiBUUlVFLCBtZWFucyAxeFJUVCBoYXMgYmVlbiBpbiBQUyBjb25uZWN0aW9uIHN0YXRlOyBlbHNlLCAxeFJUVCBoYXMgYmVlbiBpbiBpZGxlIHN0YXRlLiAqLworfSBnbXNzX253c2VsXzF4cnR0X3BzX2Nvbm5lY3Rpb25fc3RhdHVzX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBodm9sdGVfbW9kZV9lbnVtICAgIHNvdXJjZV9odm9sdGVfbW9kZTsgICAgICAgICAgICAvKiogaW5kaWNhdGUgb3JpZ2luYWwgaHZvbHRlIG1vZGUgKi8gLy8gZW51bSBkZWZpbmVkIGluIGltc19jb21tb25fZGVmLmgKKyAgICBodm9sdGVfbW9kZV9lbnVtICAgIHRhcmdldF9odm9sdGVfbW9kZTsgICAgICAgICAgICAvKiogaW5kaWNhdGUgc291cmNlIGh2b2x0ZSBtb2RlICovIC8vIGVudW0gZGVmaW5lZCBpbiBpbXNfY29tbW9uX2RlZi5oCisgICAga2FsX2Jvb2wgICAgICAgICAgICBpc19zaWxlbnRfcmVkaWFsX2FuZF9jYWxsX29uZ29pbmc7Cit9IGdtc3NfbndzZWxfaHZvbHRlX21vZGVfY2hhbmdlX3JlcV9zdHJ1Y3Q7CisKKyNpZmRlZiBfX05XU0VMX1FVSUNLX1NFQVJDSF9GT1JfUk9BTUlOR19fCit0eXBlZGVmIGw0Y3JhY19oaWdoX3ByaW9fc2VhcmNoX3RpbWVyX2NvbmZpZ19yZXFfc3RydWN0IGdtc3NfbndzZWxfaGlnaF9wcmlvX3NlYXJjaF90aW1lcl9jb25maWdfcmVxX3N0cnVjdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByYXRfZW51bSAgICAgICAgICAgICAgcmF0OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9ubHkgdmFsaWQgd2hlbiBlbWNfYmFyX3R5cGUgIT0gIEVNQ19CQVJfVFlQRV9OT05FICovCisgICAgcGxtbl9pZF9zdHJ1Y3QgICAgICAgIHBsbW5faWQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBvbmx5IHZhbGlkIHdoZW4gZW1jX2Jhcl90eXBlICE9ICBFTUNfQkFSX1RZUEVfTk9ORSAqLworICAgIGthbF91aW50MTYgICAgICAgICAgICBiYW5kOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb25seSB2YWxpZCB3aGVuIGVtY19iYXJfdHlwZSAhPSAgRU1DX0JBUl9UWVBFX05PTkUgKi8KK30gZ21zc19ud3NlbF9lbWNfYmFyX25ldHdvcmtfcmVxX3N0cnVjdDsKKworLy8jaWZkZWYgX19LT1JfQ1VTVE9NSVpBVElPTl9fCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBwbG1uX2lkX3N0cnVjdCBycGxtbjsgICAgLyogR2V0IFJQTE1OICovCit9IGdtc3NfbndzZWxfcnBsbW5faW5kX3N0cnVjdDsKKy8vI2VuZGlmCisKK3R5cGVkZWYgbDRjcmFjX2ZwbG1uX2FjdGlvbl9yZXFfc3RydWN0IGdtc3NfbndzZWxfZnBsbW5fYWN0aW9uX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgbDRjcmFjX253X3JlZ19yZWpfaW5kX3N0cnVjdCBnbXNzX253c2VsX253X3JlZ19yZWpfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBsNGNyYWNfcGxtbl9mb3VuZF9pbmRfc3RydWN0IGdtc3NfbndzZWxfcmFjX3BsbW5fZm91bmRfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBsNGNyYWNfc2V0X2FsbG93ZWRfbWNjX2xpc3RfcmVxX3N0cnVjdCBnbXNzX253c2VsX3NldF9hbGxvd2VkX21jY19saXN0X3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIGw0Y3JhY19zZXRfYWxsb3dlZF9tY2NfbGlzdF9jbmZfc3RydWN0IGdtc3NfbndzZWxfc2V0X2FsbG93ZWRfbWNjX2xpc3RfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHJlY292ZXJfY2F1c2VfZW51bSAgICAgY2F1c2U7Cit9IGdtc3NfbndzZWxfcmFjX2ludmFsaWRfc2ltX3JlY292ZXJfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmF0X3R5cGVfZW51bSBzb3VyY2VfcmF0OworICAgIHJhdF90eXBlX2VudW0gdGFyZ2V0X3JhdDsKK30gZ21zc19ud3NlbF9nbXNzX2lyYXRfc3RhcnRfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmF0X3R5cGVfZW51bSBzb3VyY2VfcmF0OworICAgIHJhdF90eXBlX2VudW0gdGFyZ2V0X3JhdDsKK30gZ21zc19ud3NlbF9nbXNzX2lyYXRfZmluaXNoX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgbmFzX3N2X2Nzc19tY2Nfc2VhcmNoX3JlcV9zdHJ1Y3QgZ21zc19ud3NlbF9jc3NfbWNjX3NlYXJjaF9yZXFfc3RydWN0OwordHlwZWRlZiBuYXNfc3ZfY3NzX21jY19zZWFyY2hfY25mX3N0cnVjdCBnbXNzX253c2VsX2Nzc19tY2Nfc2VhcmNoX2NuZl9zdHJ1Y3Q7Cit0eXBlZGVmIG5hc19zdl9jc3NfcHNfcmVnX3JlcV9zdHJ1Y3QgZ21zc19ud3NlbF9jc3NfcHNfcmVnX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIG5hc19zdl9jc3NfcHNfcmVnX2NuZl9zdHJ1Y3QgZ21zc19ud3NlbF9jc3NfcHNfcmVnX2NuZl9zdHJ1Y3Q7Cit0eXBlZGVmIG5hc19zdl9jc3NfY3NfcmVnX3JlcV9zdHJ1Y3QgZ21zc19ud3NlbF9jc3NfY3NfcmVnX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIG5hc19zdl9jc3NfY3NfcmVnX2NuZl9zdHJ1Y3QgZ21zc19ud3NlbF9jc3NfY3NfcmVnX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX2ltc19zdXBwb3J0OworfSBnbXNzX253c2VsX2ltc192b3BzX3N1cHBvcnRfc3RhdHVzX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBpbXNfc3BlY2lhbF9ldmVudF9lbnVtICAgICAgICAgIGltc19ldmVudDsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgIHNpcF9jYXVzZTsKK30gZ21zc19ud3NlbF9pbXNfcmVnX3N0YXR1c191cGRhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHJhdF9lbnVtIGRpc2FibGVfcmF0OworfSBnbXNzX253c2VsX3JhdF9kaXNhYmxlX2NvbmZpZ19yZXFfc3RydWN0OworCit0eXBlZGVmIHJhY19nbXNzX2RhdGFfYWxsb3dfcmVxX3N0cnVjdCBnbXNzX253c2VsX2RhdGFfYWxsb3dfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBnbXNzX2N2YWxfc2VuZF9kYW5fc21zX2luZF9zdHJ1Y3QgZ21zc19ud3NlbF9zZW5kX2Rhbl9zbXNfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX2ludmFsaWQ7CisgICAgcGxtbl9pZF9zdHJ1Y3QgICAgcGxtbl9pZDsKK30gZ21zc19ud3NlbF9pbGxlZ2FsX21lX2luZF9zdHJ1Y3Q7CisKKyNpZiBkZWZpbmVkKF9fTFRFX1JBVF9fKSAmJiAoZGVmaW5lZChfX0dTTV9SQVRfXykgfHwgZGVmaW5lZChfX1VNVFNfUkFUX18pKQordHlwZWRlZiBud3NlbF9ldmFsX3Bvd2VyX29uX3Byb3RlY3Rpb25fcmVxX3N0cnVjdCBnbXNzX253c2VsX3Bvd2VyX29uX3Byb3RlY3Rpb25fcmVxX3N0cnVjdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiAgICAgICAgICAgIHRyeF9pZDsgICAgICAgICAvKiBUcmFuc2FjdGlvbiBJRCAqLworICAgIHJhdF9lbnVtICAgICAgICAgICAgICBhdmFpbGFibGVfcmF0OyAgLyogcmF0IG5lZWQgdG8gYmUgc2VhcmNoZWQgKi8KKyAgICByYXRfZW51bSAgICAgICAgICAgICAgcHJlZmVyX3JhdDsgICAgIC8qIHN1YnNldCBvZiBhdmFpbGFibGUgcmF0LCBzZWFyY2ggdGhvc2UgUkFUIGZpcnN0LiBSQVROX05PTkUgaWYgbm8gcHJlZmVyZW5jZSAqLworICAgIG1vZHVsZV90eXBlICAgICAgICAgICBzb3VyY2U7ICAgICAgICAgLyogVGhlIHNvdXJjZSBtb2R1bGUgb2YgdGhpcyBzZXJ2aWNlIHNjYW4gKi8KK30gZ21zc19ud3NlbF9zZXJ2aWNlX3NjYW5fcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICB0cnhfaWQ7ICAgLyogVHJhbnNhY3Rpb24gSUQgKi8KKyAgICBwcm9jX3N0YXR1c19lbnVtICAgICAgc3RhdHVzOyAgIC8qIFBST0NfU1VDQ0VTUywgUFJPQ19GQUlMRUQgb3IgUFJPQ19SRUpFQ1RFRCAqLworICAgIG1vZHVsZV90eXBlICAgICAgICAgICBzb3VyY2U7ICAgLyogVGhlIHNvdXJjZSBtb2R1bGUgb2YgdGhpcyBzZXJ2aWNlIHNjYW4gKi8KK30gZ21zc19ud3NlbF9zZXJ2aWNlX3NjYW5fY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIG5vcm1hbF9vb3NfcmVjb3Zlcnlfcm91bmRfcHJlc2VudDsKKyAgICBrYWxfdWludDggbm9ybWFsX29vc19yZWNvdmVyeV9yb3VuZDsgLyogZGVmYXVsdCB2YWx1ZSA9NSwgcmFuZ2UgWzIsMTBdICovCisgICAga2FsX2Jvb2wgaW5hY3RpdmVfZnVsbGJhbmRfcGVyaW9kX3ByZXNlbnQ7CisgICAga2FsX3VpbnQxNiBpbmFjdGl2ZV9mdWxsYmFuZF9wZXJpb2Q7IC8qIGRlZmF1bHQgdmFsdWUgPTIwMHMsIHJhbmdlIFs5MCwzNjBdICovCisgICAga2FsX2Jvb2wgaW5hY3RpdmVfc25pZmZlcl9wZXJpb2RfcHJlc2VudDsKKyAgICBrYWxfdWludDggaW5hY3RpdmVfc25pZmZlcl9wZXJpb2Q7IC8qIGRlZmF1bHQgdmFsdWUgPTMwcywgcmFuZ2UgWzEwLDYwXSAqLworICAgIGthbF9ib29sIGlzX2luYWN0aXZlX21vZGVfcHJlc2VudDsKKyAgICBrYWxfYm9vbCBpc19pbmFjdGl2ZV9tb2RlOyAvKiBUUlVFOiBFbnRlciBpbmFjdGl2ZSBtb2RlLCBGQUxTRTogTGVhdmUgaW5hY3RpdmUgbW9kZSovCit9IGdtc3NfbndzZWxfaW5hY3RpdmVfbW9kZV9jb25maWd1cmF0aW9uX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgcmFjX2dtc3Nfc2NyZWVuX29uX3JlcV9zdHJ1Y3QgZ21zc19ud3NlbF9zY3JlZW5fb25fcmVxX3N0cnVjdDsKK3R5cGVkZWYgcmFjX2dtc3NfdHJ5X3N3aXRjaF9yYXRfcmVzdWx0X2luZF9zdHJ1Y3QgZ21zc19ud3NlbF90cnlfc3dpdGNoX3JhdF9yZXN1bHRfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBud3NlbF9uYXNfc3Zfc3lzX2luZm9fdXBkYXRlX2luZF9zdHJ1Y3QgZ21zc19ud3NlbF9zeXNfaW5mb191cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgbndzZWxfbmFzX3N2X3BsbW5fZm91bmRfaW5kX3N0cnVjdCBnbXNzX253c2VsX3BsbW5fZm91bmRfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHBsbW5fc2VhcmNoX3N0YXR1c19lbnVtIHBsbW5fc2VhcmNoX3N0YXR1czsKKyAgICByZWduX3Byb2Nfc3RhdHVzX2VudW0gcmVnbl9wcm9jX3N0YXN0dXM7Cit9IGdtc3NfbndzZWxfcmVnbl9zdGF0dXNfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfb3Zlcl9pbmFjdGl2ZV9tb2RlX3RocmVzaG9sZDsgLy8gVHJ1ZTogZmlyc3Qgc2NhbiBhbmQgc2xlZXAgaXMgZG9uZQorfSBnbXNzX253c2VsX3NlcnZpY2VfcmVjb3Zlcnlfcm91bmRfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByYXRfZW51bSByYXQ7CisgICAgbmV0d29ya19zY2FuX3JhdF91bmlvbl90eXBlICBud19zY2FuX3JhdF9vdXRwdXQ7CisgICAgbndzZWxfcGxtbl9saXN0X3N0YXR1c19lbnVtICAgc3RhdHVzOworfSBnbXNzX253c2VsX3JhY19wbG1uX3NjYW5faW5kX3N0cnVjdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvaXJhdF9jb21tb25fZW51bXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9pcmF0X2NvbW1vbl9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZDk5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvaXJhdF9jb21tb25fZW51bXMuaApAQCAtMCwwICsxLDY1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA3CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGlyYXRfY29tbW9uX2VudW1zLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfSVJBVF9DT01NT05fRU5VTVNfSAorI2RlZmluZSBfSVJBVF9DT01NT05fRU5VTVNfSAorCisjaW5jbHVkZSAiYXNfaW50ZXJfY29yZV9lbnVtLmgiCisjaW5jbHVkZSAiaXJhdF9jb21tb25fZW51bXNfcHVibGljLmgiICAgIC8vVE9ETzogQ0wjOTQ4OTQxLCBsMWNvcmUgYXNpbnRlcmZhY2UgYnVpbGQgZXJyb3IKKyNpbmNsdWRlICJnbG9iYWxfdHlwZS5oIgorLyogTUFDUk9TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1BWCBWYWx1ZXMgKi8KKyNkZWZpbmUgU1RBRE5CWV9HU01fTUFYX0JTSUNfTlVNIDMyCisKKyNkZWZpbmUgTUFYX05VTV9DU0dfRlJFUSAoOCkgLyogTWF4aW11bSBudW1iZXIgdXNlZCBmb3IgM0c0IEF1dG9udW1vdXMgQ1NHIFNlYXJjaCAqLworI2RlZmluZSBNQVhfTlVNX0VDRUxMX01FQVNfUkVTVUxUICg4KQorCisvKiBNYXhpbXVtIG51bWJlciB1c2VkIGZvciAyRyBvciAzRyB0byBMVEUgcmVkaXJlY3Rpb24gaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgUENJX0JJVE1BUF9NQVhfTlVNICg2MykKKworI2RlZmluZSBNQVhfTlVNX0NTR19DQVJSSUVSUyA4CisjZGVmaW5lIE1BWF9OUl9PRl9DU0dfQ0VMTFNfSU5fQ0VMTF9MSVNUIDgKKworI2lmIChkZWZpbmVkKF9fVU1UU19SNV9fKSAmJiAoZGVmaW5lZChfX0dFUkFOX1I1X18pKSkKKyNkZWZpbmUgTUFYX0dTTV9TWVNfSU5GT19CTE9DS1NfTlVNICgxMCkKKyNlbmRpZgorCisjZGVmaW5lIE1BWF9UQVJHRVRfR1NNX0NFTExTX05VTSAoOTYpCisKKy8qIE1heGltdW4gc2l6ZSBvZiBHU00gbGlzdCBmb3IgNEcyIElSIGRpcmVjdGlvbiAqLworI2RlZmluZSBNQVhfQllURV9PRl9HU01fQVJGQ04gKDEyOCkKKworLyogVXNlZCBmb3IgSVIgSGFuZG92ZXIgKi8KKyNkZWZpbmUgTUFYX0xFTl9IT19UT19VVFJBTl9NU0cgKDI1MSkgICAgICAgICAgLyogT2N0ZXRzICovCisjZGVmaW5lIE1BWF9MRU5fVVRSQU5fSEFORE9WRVJfSU5GT19NU0cgKDI1MSkgIC8qIE9jdGV0cyAqLworI2RlZmluZSBNQVhfTEVOX1VUUkFOX0hBTkRPVkVSX0lORk9fRVVUUkFOX01TRyAoMzUwKSAvKiBPY3RldHMqLworI2RlZmluZSBOQVNfU0VDVVJJVFlfUEFSQU1fTEVOICg2KQorCisvKiBVc2VkIGZvciBJUiBSZWRpcmVjdGlvbiAodHNfZXV0cmFfcmVkaXJlY3RfaW5mbykgKi8KKyNkZWZpbmUgTUFYX1VBU19FQVNfUkVESVJFQ1RfRlJFUV9OVU0gKDgpCisjZGVmaW5lIE1BWF9OUlJDX0VSUkNfUkVESVJFQ1RfRlJFUV9OVU0gKDgpCisKKy8qIE5BUyBBcnJheSBMZW5ndGggKi8KKyNkZWZpbmUgVUdTTV9USV9JRV9MRU4gIDIgLy8gYWNjb3JkaW5nIHRvIDI0LjAwNyAxMS4yLjMuMS4zCisjZGVmaW5lIENLX0xFTiAgICAgICAgICAxNgorI2RlZmluZSBJS19MRU4gICAgICAgICAgMTYKKyNkZWZpbmUgS0NfTEVOICAgICAgICAgIDgKKyNkZWZpbmUgS0MxMjhfTEVOICAgICAgIDE2CisjZGVmaW5lIFBUTVNJX0xFTiAgICAgICA0IC8qIG5vdCBpbmNsdWRlIFAtVE1TSSBNb2JpbGUgSUUgaGVhZGVyICgweEY0KSAqLworI2RlZmluZSBQVE1TSV9TSUdfTEVOICAgMworI2RlZmluZSBSQUlfTEVOICAgICAgICAgNgorI2RlZmluZSBMQUlfTEVOICAgICAgICAgNQorI2RlZmluZSBNU19JRF9MRU4gICAgICAgOAorI2RlZmluZSBUTVNJX0xFTiAgICAgIDQKKworI2RlZmluZSBLQVNNRV9OVU0gMzIKKyNkZWZpbmUgTkhfTlVNIDMyCisKKyNpZiAoQ1VSX0dFTiA+PSBNRF9HRU45NykKKy8qKgorICogVXNlZCBmb3IgRU4tREMgYW5kIE5SIGNhcGFiaWxpdHkgZW5xdWlyeSBpbiBFQVMKKyAqIERhdGE6IEZyZXFCYW5kTGlzdCBpbiBUUyAzOC4zMzEKKyAqIE1hdGhlbWF0aWNzOiBiYW5kRVVUUkE6IDI2KygyNTYtMSkqOSA9IDIzMjEKKyAqICAgICAgICAgICAgICBiYW5kTlI6IDI4KygxMDI0LTEpKjExID0gMTEyODEKKyAqICAgICAgICAgICAgICBUb3RhbDogMTcwMC4yNSAob2N0ZXRzKQorICovCisjZGVmaW5lIE1BWF9MRU5fRlJFUV9CQU5EX0xJU1RfU1RSSU5HICgxNzAwKQorCisvKioKKyAqIExURSBQRENQOiAiVGhlIG1heGltdW0gc3VwcG9ydGVkIHNpemUgb2YgYSBQRENQIFNEVSBpcyA4MTg4IG9jdGV0cy4KKyAqICgzNi4zMjMpICAgVGhlIG1heGltdW0gc3VwcG9ydGVkIHNpemUgb2YgYSBQRENQIENvbnRyb2wgUERVIGlzIDgxODggb2N0ZXRzLiIKKyAqIFRha2UgVUUtRVVUUkEtQ2FwYWJpbGl0eSBpbnRvIGFjY291bnQsIGxldCdzIHNldCB0aGUgbWF4aW11bSBzaXplIGFzIDI4MTYKKyAqIGZvciB0aGUgdGltZSBiZWluZy4gKGkuZS4gSXQgc2hhbGwgd2FybiBpZiBhbnkgY2FwYWJpbGl0eSBzaXplIGlzIGxhcmdlciB0aGFuCisgKiBvbmUtdGhpcmQgb2YgbWF4aW11bSBhbGxvd2VkIFBEQ1AgU0RVIHNpemUuICg4MTg4ICogMS8zKSkKKyAqLworI2RlZmluZSBNQVhfTEVOX0VVVFJBX05SX0NBUF9TVFJJTkcgKDI4MTYpIC8qKjwgT2N0ZXRzICovCisjZGVmaW5lIE1BWF9MRU5fTlJfQ0FQX1NUUklORyAoMjgxNikgICAgICAgLyoqPCBPY3RldHMgKi8KKyNlbmRpZiAvKiAoQ1VSX0dFTiA+PSBNRF9HRU45NykgKi8KKworLyogVFlQRVMgREVGSU5JVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgICBJUl9SRVNVTFRfU1VDQ0VTUyAgID0gMCwgICAgICAgICAgICAgLy9JbnRlci1SQVQgY2hhbmdlIGlzIHN1Y2Nlc3NmdWwuCisgICAgSVJfUkVTVUxUX0ZBSUxVUkUgICA9IDEsICAgICAgICAgICAgIC8vSW50ZXItUkFUIGNoYW5nZSBpcyBmYWlsZWQgaW4gdGFyZ2V0IFJBVC4KKyAgICBJUl9SRVNVTFRfUkVKRUNUICAgID0gMiwgICAgICAgICAgICAgLy9JbnRlci1SQVQgY2hhbmdlIGlzIHJlamVjdGVkIGluIHNvdXJjZSBSQVQuCisgICAgSVJfUkVTVUxUX1NVQ0NFU1NfRk9SQ0VEX0JZX05BUyA9IDMsIC8vSW50ZXItUkFUIGNoYW5nZSBpcyBmb3JjZWQgdG8gc3VjY2VzcyBpbiB0YXJnZXQgTkFTLgorICAgIElSX1JFU1VMVF9HRU1JTklfU1VTUEVORF9SRUpFQ1QgPSA0ICAvLyBJbnRlci1SQVQgY2hhbmdlIGlzIHJlamVjdGVkIGR1ZSB0byBnZW1pbmkgc3VzcGVuZAorfSBpcmF0X3Jlc3VsdF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBJUl9TTV9WSUVXX1NVQ0NFU1MsCisgICAgSVJfU01fVklFV19GQUlMLAorICAgIElSX1NNX1ZJRVdfU1VDQ0VTU19CVVRfMjNHX1JBVF9VTktOT1dOLCAvLyBkdWUgdG8gNEcyMyBJUl9UWVBFX1NFQVJDSAorICAgIElSX1NNX1ZJRVdfTk9UX1JFVkVMRU5UX1RPX1NNIC8vZXg6IENDTyBzdGFnZSAxLCBmcm9tIFNNJ3MgcG9pbnQgb2YgdmlldywgQ0NPIHN0YWdlIDEgZG9lcyBub3QgbWVhbiBhbnl0aGluZywgU00gZG9lcyBub3QgbmVlZCB0byBkbyBhbnl0aGluZywgU00ganVzdCBuZWVkIHRvIHJlbGF5IHRoaXMgbXNnLgorfSBpcmF0X3NtX3ZpZXdfcmVzdWx0X2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIElSX1RSQU5TRkVSX0JFQVJFUl9QUklNQVJZX1BEUF9DT05URVhUICAgID0gMHgwMCwKKyAgICBJUl9UUkFOU0ZFUl9CRUFSRVJfREVGQVVMVF9FUFNfQ09OVEVYVCAgICA9IElSX1RSQU5TRkVSX0JFQVJFUl9QUklNQVJZX1BEUF9DT05URVhULAorICAgIElSX1RSQU5TRkVSX0JFQVJFUl9TRUNPTkRBUllfUERQX0NPTlRFWFQgID0gMHgwMSwKKyAgICBJUl9UUkFOU0ZFUl9CRUFSRVJfREVESUNBVEVEX0VQU19DT05URVhUICA9IElSX1RSQU5TRkVSX0JFQVJFUl9TRUNPTkRBUllfUERQX0NPTlRFWFQsCisgICAgSVJfVFJBTlNGRVJfQkVBUkVSX1JFSkVDVEVEX0JZX1NNX0RVRV9UT19OU0FQSV9OT1RfVkFMSUQsCisgICAgSVJfVFJBTlNGRVJfQkVBUkVSX1JFSkVDVEVEX0JZX1NNX0RVRV9UT19QRFBfQUREUl9UWVBFX05PVF9WQUxJRCwKKyAgICBJUl9UUkFOU0ZFUl9CRUFSRVJfUkVKRUNURURfQllfU01fRFVFX1RPX1RGVF9WQUxJREFURV9GQUlMLAorICAgIElSX1RSQU5TRkVSX0JFQVJFUl9SRUpFQ1RFRF9CWV9TTV9EVUVfVE9fTk9fMjNHX1FPUywKKyAgICBJUl9UUkFOU0ZFUl9CRUFSRVJfUkVKRUNURURfQllfU01fRFVFX1RPX05PXzIzR19USSwKKyAgICBJUl9UUkFOU0ZFUl9CRUFSRVJfUkVKRUNURURfQllfU01fRFVFX1RPX05PXzJHX0xMQ19TQVBJLAorICAgIElSX1RSQU5TRkVSX0JFQVJFUl9SRUpFQ1RFRF9CWV9TTV9EVUVfVE9fTk9fMkdfUkFESU9fUFJJT1JJVFksCisgICAgSVJfVFJBTlNGRVJfQkVBUkVSX1JFSkVDVEVEX0JZX1NNX0RVRV9UT19OT19FUFNfUU9TLAorICAgIElSX1RSQU5TRkVSX0JFQVJFUl9SRUpFQ1RFRF9CWV9TTV9EVUVfVE9fRVhDRUVEX0dQUlNfTUFYX1BEUF9TVVBQT1JUX0tJTExfUUNJXzFfVE9fNCwKKyAgICBJUl9UUkFOU0ZFUl9CRUFSRVJfUkVKRUNURURfQllfU01fRFVFX1RPX0VYQ0VFRF9HUFJTX01BWF9QRFBfU1VQUE9SVF9LSUxMX1FDSV81X1RPXzlfU0VDT05EQVJZLAorICAgIElSX1RSQU5TRkVSX0JFQVJFUl9SRUpFQ1RFRF9CWV9TTV9EVUVfVE9fRVhDRUVEX0dQUlNfTUFYX1BEUF9TVVBQT1JUX0tJTExfUUNJXzVfVE9fOV9QUklNQVJZLAorICAgIElSX1RSQU5TRkVSX0JFQVJFUl9SRUpFQ1RFRF9CWV9TTV9EVUVfVE9fUFJJTUFSWV9NQVBQRURfRkFJTEVELAorICAgIElSX1RSQU5TRkVSX0JFQVJFUl9SRUpFQ1RFRF9CWV9TTV9EVUVfVE9fRU1DX0JFQVJFUl9OT1RfQUxMT1dFRCwKKyAgICBJUl9UUkFOU0ZFUl9CRUFSRVJfUkVKRUNURURfQllfU01fRFVFX1RPXzRHMjNfSU1TX1BETl9MT0NBTF9SRUxFQVNFLAorICAgIElSX1RSQU5TRkVSX0JFQVJFUl9CRUFSRVJfVFlQRV9OT1RfREVURVJNSU5FRF9ZRVRfSU5fNEcKK30gaXJhdF90cmFuc2Zlcl9iZWFyZXJfdHlwZV9lbnVtOworCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKK3R5cGVkZWYgZW51bQoreworICAgIFJBVF9UWVBFX0dBUywgICAgICAgICAgICAvLyBHRVJBTgorICAgIFJBVF9UWVBFX1VBU19GREQsICAgICAgICAvLyBVVFJBTiAoRkREIG1vZGUpCisgICAgUkFUX1RZUEVfVUFTX1RERCwgICAgICAgIC8vIFVUUkFOIChUREQgbW9kZSkKKyAgICBSQVRfVFlQRV9FQVMsICAgICAgICAgICAgLy8gRS1VVFJBTiAoTFRFKQorICAgIFJBVF9UWVBFX0dBU19VQVNfVEJELCAgICAvLyBpZiA0RzIzIGlyYXRfdHlwZSA9PSBJUl9UWVBFX1NFQVJDSCwgTFRFIHJhdCBkb2VzIG5vdCBrbm93IHdoaWNoIHRhcmdldCByYXQgd2lsbCBiZSBjaG9zZW4uCisgICAgUkFUX1RZUEVfQ0FTLCAgICAgICAgICAgIC8vIENETUEyMDAwCisgICAgUkFUX1RZUEVfTlJBUywgICAgICAgICAgICAvLyBOUgorICAgIFJBVF9UWVBFX05PTkUgICAgICAgICAgICAvLyBGb3IgaW52YWxpZCB2YWx1ZSwgYWRkIG5ldyBSQVQgYWJvdWUgaXQuCit9IHJhdF90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bSB7CisgICAgTkFTX1NWX0NBTVBFRF9PTl9DRUxMX1RZUEVfVU5LTk9XLAorICAgIE5BU19TVl9DQU1QRURfT05fQ0VMTF9UWVBFX0FDQ0VQVEFCTEVfQ0VMTCwKKyAgICBOQVNfU1ZfQ0FNUEVEX09OX0NFTExfVFlQRV9TVUlUQUJMRV9DRUxMLAorICAgIE5BU19TVl9DQU1QRURfT05fQ0VMTF9UWVBFX01BWF9OVU1fT0ZfQ0VMTF9UWVBFLAorfSBuYXNfc3ZfY2FtcGVkX29uX2NlbGxfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBCRUFSRVJfTUFQX0lOVkFMSUQsIC8vIG5vIHN1Y2ggYmVhcmVyCisgICAgQkVBUkVSX01BUF9BQ1RJVkUsIC8vIGJlYXJlciBtYXBwaW5nIHN1Y2Nlc3MKKyAgICBCRUFSRVJfTUFQX0ZBSUxFRCwgLy8gYmVhcmVyIG1hcHBpbmcgZmFpbHVyZSBhbmQgbG9jYWwgcmVsZWFzZWQKKyAgICBCRUFSRVJfTUFQX0ZBSUxFRF9EVUVfVE9fREVUQUNILCAvLyBiZWFyZXIgbWFwcGluZyBmYWlsdXJlIGJlY2F1c2UgbmV3IE1NIGlzIGRldGFjaGVkLgorICAgIEJFQVJFUl9NQVBfRkFJTEVEX0RVRV9UT19DVVJSRU5UX1NJTV9OT1RfSEFWRV9DT05URVhUX01FTU9SWSwgLy8gZm9yIGV4YW1wbGUsIGlmIEVTTSBjb250ZXh0IHRyYW5zZmVyIHRvIE1PRF9TTSwgYnV0IGNvbnRleHQgbWVtb3J5IGlzIG9jY3VwaWVkIGJ5IE1PRF9TTV8yLCB0aGF0IG1lYW5zIE1PRF9TTV8yIGhhcyBQRFAgYW5kIGhlbnNlIE1PRF9TTSBjYW5ub3QgYWN0aXZhdGUgYW55IFBEUAorICAgIEJFQVJFUl9NQVBfRkFJTEVEX0RVRV9UT19OU0FQSV9OT1RfVkFMSUQsCisgICAgQkVBUkVSX01BUF9GQUlMRURfRFVFX1RPX1BEUF9BRERSX1RZUEVfTk9UX1ZBTElELAorICAgIEJFQVJFUl9NQVBfRkFJTEVEX0RVRV9UT19URlRfVkFMSURBVEVfRkFJTCwKKyAgICBCRUFSRVJfTUFQX0ZBSUxFRF9EVUVfVE9fTk9fMjNHX1FPUywKKyAgICBCRUFSRVJfTUFQX0ZBSUxFRF9EVUVfVE9fTk9fMjNHX1RJLAorICAgIEJFQVJFUl9NQVBfRkFJTEVEX0RVRV9UT19OT18yR19MTENfU0FQSSwKKyAgICBCRUFSRVJfTUFQX0ZBSUxFRF9EVUVfVE9fTk9fMkdfUkFESU9fUFJJT1JJVFksCisgICAgQkVBUkVSX01BUF9GQUlMRURfRFVFX1RPX05PX0VQU19RT1MsCisgICAgQkVBUkVSX01BUF9GQUlMRURfRFVFX1RPX0VYQ0VFRF9HUFJTX01BWF9QRFBfU1VQUE9SVF9LSUxMX1FDSV8xX1RPXzQsCisgICAgQkVBUkVSX01BUF9GQUlMRURfRFVFX1RPX0VYQ0VFRF9HUFJTX01BWF9QRFBfU1VQUE9SVF9LSUxMX1FDSV81X1RPXzlfU0VDT05EQVJZLAorICAgIEJFQVJFUl9NQVBfRkFJTEVEX0RVRV9UT19FWENFRURfR1BSU19NQVhfUERQX1NVUFBPUlRfS0lMTF9RQ0lfNV9UT185X1BSSU1BUlksCisgICAgQkVBUkVSX01BUF9GQUlMRURfRFVFX1RPX1BSSU1BUllfTUFQUEVEX0ZBSUxFRCwKKyAgICBCRUFSRVJfTUFQX0ZBSUxFRF9EVUVfVE9fRU1DX0JFQVJFUl9OT1RfQUxMT1dFRCwKKyAgICBCRUFSRVJfTUFQX0ZBSUxFRF9EVUVfVE9fNEcyM19JTVNfTE9DQUxfUkVMRUFTRSwKKyAgICBCRUFSRVJfTUFQX0ZBSUxFRF9EVUVfVE9fNEc1X0ZBSUxVUkUsCisgICAgLy9CRUFSRVJfTUFQX0xPQ0FMX1JFTEVBU0UgLy8gYmVhcmVyIGxvY2FsIHJlbGVhc2VkCit9IGJlYXJlcl9tYXBwaW5nX3Jlc3VsdF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBIT19GUk9NX0xURV9UWVBFX0lOVkFMSUQsCisgICAgSE9fRlJPTV9MVEVfVFlQRV9QU19ITywKKyAgICBIT19GUk9NX0xURV9UWVBFX1NSVkNDX0hPLAorICAgIEhPX0ZST01fTFRFX1RZUEVfUFNfU1JWQ0NfSE8KK30gaG9fZnJvbV9sdGVfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBHQVNfQ0lQSEVSX0FMR09fSU5WQUxJRCwKKyAgICBHQVNfQ0lQSEVSX0FMR09fS0MsCisgICAgR0FTX0NJUEhFUl9BTEdPX0tDMTI4Cit9IGdhc19jaXBoZXJfYWxnb19lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBET01BSU5fSURfSU5WQUxJRCwKKyAgICBET01BSU5fSURfUFNfUFJFU0VOQ0UsCisgICAgRE9NQUlOX0lEX0NTX1BSRVNFTkNFCit9IHNlY19jdHh0X2RvbWFpbl9pZF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBNVF9DU0ZCX1RZUEVfSU5WQUxJRCwKKyAgICBNVF9DU0ZCX1RZUEVfU1RNU0lfVE1TSSwKKyAgICBNVF9DU0ZCX1RZUEVfSU1TSQorfSBtdF9jc2ZiX3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgTE9PUEJBQ0tfTU9ERV9ERUFDVElWQVRFLAorICAgIExPT1BCQUNLX01PREVfQUNUSVZBVEVfQSwKKyAgICBMT09QQkFDS19NT0RFX0FDVElWQVRFX0IsCisgICAgTE9PUEJBQ0tfTU9ERV9BQ1RJVkFURV9DLAorICAgIExPT1BCQUNLX01PREVfQ0xPU0VMT09QX0EsCisgICAgTE9PUEJBQ0tfTU9ERV9DTE9TRUxPT1BfQiwKKyAgICBMT09QQkFDS19NT0RFX0NMT1NFTE9PUF9DCit9IGxvb3BiYWNrX21vZGVfc3RhdHVzX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFRBVV9OT1RfUkVRVUlSRUQsCisgICAgVEFVX1JFUVVJUkVELAorICAgIFRBVV9DT01CX1RBTEFfSU1TSV9BVFRBQ0gKK30gdGF1X3JlcXVpcmVkX2VudW07CisKKyNpZiAwIC8vIHVzZSB0aGUgb25lIGRlZmluZWQgaW4gbDNfaW5jX2VudW1zLmggaW5zdGVhZAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKKy8qIE1lcmdlZCBmcm9tIEdTTSAvIFVNVFMgTXVsdGltb2RlIGRldmVsb3BtZW50IGJyYW5jaCAqKioqKioqKioqLwordHlwZWRlZiBlbnVtCit7CisgICBVTVRTX1VOREVGSU5FRF9NT0RFLAorICAgVU1UU19GRERfTU9ERSwKKyAgIFVNVFNfVEREX01PREUKK30gdGVfdW10c19tb2RlOworCit0eXBlZGVmIGVudW0geworICAgQVVUT19TRUFSQ0hfU1RBUlQgPSAweDAwLAorICAgQVVUT19TRUFSQ0hfUkVTVU1FID0gMHgwMSwKKyAgIEFVVE9fU0VBUkNIX1NUT1AgPSAweDAyCit9IGF1dG9fc2VhcmNoX2NtZF9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgU0VBUkNIX1NUQVRVU19TVVNQRU5ERUQgPSAweDAwLAorICAgU0VBUkNIX1NUQVRVU19GSU5JU0hFRCA9IDB4MDEsCisgICBTRUFSQ0hfU1RBVFVTX1NUT1BQRUQgPSAweDAyCit9IHNlYXJjaF9zdGF0dXNfZW51bTsKKworLyoqCisgKiBAYnJpZWYgCisgKiAgICAgdGVfaXJfaGFuZG92ZXJfc3RhdHVzIHNwZWNpZmllcyB0aGUgcmVzdWx0IG9mIGludGVyLVJBVCBoYW5kb3ZlciAKKyAqICAgICBwcm9jZWR1cmUgCisgKiAgICAgLiAKKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAvKiBIYW5kb3ZlciBtZXNzYWdlIGlzIGNvcnJlY3Qgb3IgcHJvY2VkdXJlIGlzIHN1Y2Nlc3MgKi8KKyAgIElSX0hBTkRPVkVSX1NUQVRVU19OT1JNQUxfRVZFTlQsCisgICAvKiBBcHBsaWNhYmxlIGR1cmluZyBFdmFsdWF0aW9uIG9ubHkgKi8KKyAgIElSX0hBTkRPVkVSX1NUQVRVU19GUkVRVUVOQ1lfTk9UX0lNUExFTUVOVEVELAorICAgLyogQXBwbGljYWJsZSBvbmx5IGZvciBBY3RpdmF0aW9uIHByb2NlZHVyZQorICAgICogSE8gdG8gR1NNOiBIYW5kb3ZlciBwcm9jZWR1cmUgZmFpbGVkIGR1ZSB0byBsb3dlciBsYXllciBmYWlsdXJlIGF0IEdTTS4KKyAgICAqIEhPIHRvIFVUUkFOOiBGYWlsdXJlIHRvIGVzdGFibGlzaCBjaGFubmVscyBvbiBjZWxsKHMpIHJlcXVpcmVkIGZvciBoYW5kb3ZlcgorICAgICogICAgICAgICAgICAgIGF0IGFueSBwb2ludCBkdXJpbmcgaGFuZG92ZXIgYWN0aXZhdGlvbiBwcm9jZWR1cmUuCisgICAgKi8KKyAgIElSX0hBTkRPVkVSX1NUQVRVU19QSFlTSUNBTF9DSEFOTkVMX0ZBSUxVUkUsCisgICAvKiBBcHBsaWNhYmxlIGR1cmluZyBFdmFsdWF0aW9uIHByb2NlZHVyZQorICAgICogSGFuZG92ZXIgcHJvY2VkdXJlIGZhaWxlZCBkdWUgdG8gaW5jb25zaXRlbnQvbWlzc2luZyBwYXJhbWV0ZXJzIHByb3RvY29sCisgICAgKiBlcnJvci4gCisgICAgKi8KKyAgIElSX0hBTkRPVkVSX1NUQVRVU19QUk9UT0NPTF9FUlJPUiwKKyAgIC8qIEFwcGxpY2FibGUgb25seSBkdXJpbmcgRXZhbHVhdGlvbiBwcm9jZWR1cmUKKyAgICAqIEhPIHRvIEdTTTogSGFuZG92ZXIgbWVzc2FnZSBoYXMgYSBjaGFubmVsIG1vZGUgY29uZmlndXJhdGlvbiB3aGljaCBpcyBub3QKKyAgICAqICAgICAgICAgICAgc3VwcG9ydGVkCisgICAgKiBITyB0byBVVFJBTiA6IFByZWRlZmluZWQgY29uZmlndXJhdGlvbiBub3QgcmVhZCBvciBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gCisgICAgKiAgICAgICAgICAgICAgIG5vdCBpbXBsZW1lbnRlZC4gCisgICAgKi8KKyAgIElSX0hBTkRPVkVSX1NUQVRVU19VTlNVUFBPUlRFRF9DT05GSUdVUkFUSU9OLAorICAgLyogQXBwbGljYWJsZSBvbmx5IGZvciBhY3RpdmF0aW9uIHByb2NlZHVyZSwgZS5nLiBhYm9ydCBDUyBjb25uZWN0aW9uIGJ5IFVBUyAqLworICAgSVJfSEFORE9WRVJfU1RBVFVTX1VOU1BJQ0lGSUVEX0VSUk9SCit9IHRlX2lyX2hhbmRvdmVyX3N0YXR1czsKKwordHlwZWRlZiBlbnVtIHsKKyAgIElSX0ZSRVFVRU5DWV9OT1RfSU1QTEVNRU5URUQsCisgICBJUl9OT19SRVNQT05TRV9PTl9UQVJHRVRfQ0VMTCwKKyAgIElSX1JFSkVDVF9PTl9UQVJHRVRfQ0VMTCwKKyAgIC8qIDNHIGZhaWxlZCByZWFzb24gKi8KKyAgIElSX0NPTkZJR1VSQVRJT05fVU5BQ0NFUFRBQkxFLAorICAgSVJfUEhZU0lDQUxfQ0hBTk5FTF9GQUlMVVJFLAorICAgLyogZm9yIEdlbWluaSAqLworICAgSVJfU1VTUEVORElOR19EVVJJTkdfSVJfQ0VMTF9SRVNFTCwKKyAgIElSX0NFTExfQ0hBTkdFX0ZBSUxfUkVBU09OX05PTkUKK30gdGVfaXJfY2VsbF9jaGFuZ2VfZmFpbF9yZWFzb25fZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICBHQVNfVUFTX1JFRElSRUNUSU9OX0lORk8gPSAweDAwLAorICAgRUFTX1VBU19SRURJUkVDVElPTl9JTkZPID0gMHgwMSwKKyAgIFVBU19HQVNfUkVESVJFQ1RJT05fSU5GTyA9IDB4MDIsCisgICBFQVNfR0FTX1JFRElSRUNUSU9OX0lORk8gPSAweDAzCit9IHRlX2lyX3JlZGlyZWN0aW9uX3R5cGU7CisKKyNpZmRlZiBfX1NSVkNDX0NFTExfSU5GT19fCit0eXBlZGVmIGVudW0KK3sKKyAgIElSX0hBTkRPVkVSX1BIWV9GQUlMX1NVQkNBVVNFX05PTkUgPSAweDAwLAorICAgSVJfSEFORE9WRVJfUEhZX0ZBSUxfU1VCQ0FVU0VfVElNRV9BRFZfT1VUX09GX1JBTkdFLAorICAgSVJfSEFORE9WRVJfUEhZX0ZBSUxfU1VCQ0FVU0VfTjIwMF9USU1FT1VULAorICAgSVJfSEFORE9WRVJfUEhZX0ZBSUxfU1VCQ0FVU0VfVDMxMjRfVElNRU9VVCwKKyAgIElSX0hBTkRPVkVSX1BIWV9GQUlMX1NVQkNBVVNFX0NPTlRFTlRJT05fUkVTX0ZBSUwsCisgICBJUl9IQU5ET1ZFUl9QSFlfRkFJTF9TVUJDQVVTRV9PVEhFUgorfXRlX2lyX2hhbmRvdmVyX3BoeV9mYWlsX3N1YmNhdXNlOworI2VuZGlmIC8qIF9fU1JWQ0NfQ0VMTF9JTkZPX18qLworCisKKyNpZiAoZGVmaW5lZChfX1VNVFNfUjVfXykgJiYgZGVmaW5lZChfX0dFUkFOX1I1X18pKQordHlwZWRlZiBlbnVteworICAgR0VSQU5fU3lzSW5mb19Ob25lLAorICAgR0VSQU5fU3lzSW5mb19TSSwKKyAgIEdFUkFOX1N5c0luZm9fUFNJCit9IEdFUkFOX1N5c0luZm9UeXBlOworI2VuZGlmCisKK3R5cGVkZWYgZW51bSB7CisgICBDSVBIRVJfU1RBVFVTX05PVF9TVEFSVEVELAorICAgQ0lQSEVSX1NUQVRVU19TVEFSVEVECit9IHRlX2NuX2RvbWFpbl9jaXBoZXJfc3RhdHVzOworCit0eXBlZGVmIGVudW0KK3sKKyAgIElNU0lfUEFHSU5HX1RZUEUsCisgICBUTVNJX1BBR0lOR19UWVBFCit9IHBhZ2luZ190eXBlX2VudW07IC8qIHBhZ2luZyBmb3IgQ1NGQiAqLworCit0eXBlZGVmIGVudW0KK3sKKyAgIFVOS05PV05fU0VSVklDRV9UWVBFLAorICAgQ0FMTF9TRVJWSUNFX1RZUEUsCisgICBTU19TRVJWSUNFX1RZUEUsCisgICBMQ1NfU0VSVklDRV9UWVBFCit9IGNzZmJfc2VydmljZV90eXBlX2VudW07IC8qIHNlcnZpY2UgdHlwZSBmb3IgTU8vTVQgQ1NGQiAqLworCit0eXBlZGVmIGVudW0KK3sKKyAgIENTRkJfSU5EX05PTkUsCisgICBDU0ZCX0lORF9NTywKKyAgIENTRkJfSU5EX01UCit9IGNzZmJfaW5kaWNhdG9yX2VudW07IC8qIHBhZ2luZyBmb3IgQ1NGQiAqLworCisKK3R5cGVkZWYgZW51bQoreworICAgTk9STUFMX0NFTEwgPSAweDAwLAorICAgQ1NHX0NFTEwgICAgPSAweDAxLAorICAgSFlCUklEX0NFTEwgPSAweDAyCit9IGNzZ19hY2Nlc3NfbW9kZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKwlCRUFSRVJfU0VSVklDRV9UWVBFX05PUk1BTCA9IDAsCisJQkVBUkVSX1NFUlZJQ0VfVFlQRV9FTUVSR0VOQ1kKK30gYmVhcmVyX3NlcnZpY2VfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBDT05OX1JFTF9JTkRfQ0FVU0VfT1RIRVIsCisgICAgQ09OTl9SRUxfSU5EX0NBVVNFX0NTRkJfSElHSCAgIC8qIDM2LjMzMSBSZWxlYXNlQ2F1c2UgKi8KK30gY29ubl9yZWxfaW5kX2NhdXNlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIEMyS19JUkFUX0FUVEFDSF9TVUNDRVNTID0gMCwKKyAgICBDMktfSVJBVF9BVFRBQ0hfRkFJTFVSRQorfSBjMmtfaXJhdF9hdHRhY2hfcmVzdWx0X2VudW07CisKKworLyogX19BTFBTMDI1MDY4NzhfU1VQUE9SVF9fICovCit0eXBlZGVmIGVudW17CisgIElSX0NBTExfVFlQRV9NTywKKyAgSVJfQ0FMTF9UWVBFX01ULAorICBJUl9DQUxMX1RZUEVfRU1FUkdFTkNZLAorICBJUl9DQUxMX1RZUEVfSU5WQUxJRAorfSB0ZV9pcl9jYWxsX3R5cGU7CisKK3R5cGVkZWYgZW51bXsKKyAgRU5BU0FTX0VOVEVSX0ZMSUdIVF9NT0RFLAorICBFTkFTQVNfTEVBVkVfRkxJR0hUX01PREUsCit9IGVuYXNhc19mbGlnaHRfbW9kZV9lbnVtOworCit0eXBlZGVmIGVyYWNfcmF0X2VudW0gZW5hc2FzX3JhdF9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIENBX0JBTkRXSURUSF9DTEFTU19FVVRSQV9BLAorICAgIENBX0JBTkRXSURUSF9DTEFTU19FVVRSQV9CLAorICAgIENBX0JBTkRXSURUSF9DTEFTU19FVVRSQV9DLAorICAgIENBX0JBTkRXSURUSF9DTEFTU19FVVRSQV9ELAorICAgIENBX0JBTkRXSURUSF9DTEFTU19FVVRSQV9FLAorICAgIENBX0JBTkRXSURUSF9DTEFTU19FVVRSQV9GLAorICAgIENBX0JBTkRXSURUSF9DTEFTU19FVVRSQV9JTlZBTElECit9IGNhX2JhbmR3aWR0aF9jbGFzc19ldXRyYV9lbnVtOworCisjZW5kaWYgLyogX0lSQVRfQ09NTU9OX0VOVU1TX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9pcmF0X2NvbW1vbl9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9pcmF0X2NvbW1vbl9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzlhMWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2lyYXRfY29tbW9uX3N0cnVjdC5oCkBAIC0wLDAgKzEsODg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDcKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgaXJhdF9jb21tb25fc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0lSQVRfQ09NTU9OX1NUUlVDVF9ICisjZGVmaW5lIF9JUkFUX0NPTU1PTl9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJtbWlfbDNfZW51bXMuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX2dwcnNfc3RydWN0LmgiCisjaW5jbHVkZSAicHNfcHVibGljX2VudW0uaCIKKyNpbmNsdWRlICJzdGFja19jb25maWcuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJsM19pbmNfbG9jYWwuaCIKKyNpbmNsdWRlICJpcmF0X2NvbW1vbl9lbnVtcy5oIgorI2luY2x1ZGUgIm1jZF9sM19pbmNfc3RydWN0LmgiCisjaW5jbHVkZSAiYXNfaW50ZXJfY29yZV9zdHJ1Y3QuaCIKKyNpbmNsdWRlICJnbG9iYWxfdHlwZS5oIgorI2luY2x1ZGUgImdlbmVyYWxfcW9zX3N0cnVjdC5oIgorCisjZGVmaW5lIE1BWF9WQUwoVkFMX0EsIFZBTF9CKSAgICgoKFZBTF9BKSA+IChWQUxfQikpID8gKFZBTF9BKTooVkFMX0IpKQorCisjaWYgZGVmaW5lZChHUFJTX01BWF9QRFBfU1VQUE9SVCkgJiYgZGVmaW5lZChMVEVfTUFYX0VQU0JfU1VQUE9SVCkKKyAgICAjZGVmaW5lIE1BWF9UUkFOU0ZFUlJFRF9CRUFSRVJfTlVNIE1BWF9WQUwoR1BSU19NQVhfUERQX1NVUFBPUlQsIExURV9NQVhfRVBTQl9TVVBQT1JUKQorI2VsaWYgZGVmaW5lZChMVEVfTUFYX0VQU0JfU1VQUE9SVCkKKyAgICAjZGVmaW5lIE1BWF9UUkFOU0ZFUlJFRF9CRUFSRVJfTlVNIExURV9NQVhfRVBTQl9TVVBQT1JUIC8vIGZhaWwgc2FmZSwgdGhpcyBsaW5lIGhhcyBubyBtZWFuaW5nLiBqdXN0IHByZXZlbnQgY29tcGlsZSBlcnJvcgorI2Vsc2UKKyAgICAjZGVmaW5lIE1BWF9UUkFOU0ZFUlJFRF9CRUFSRVJfTlVNIEdQUlNfTUFYX1BEUF9TVVBQT1JUIC8vIGZhaWwgc2FmZSwgdGhpcyBsaW5lIGhhcyBubyBtZWFuaW5nLiBqdXN0IHByZXZlbnQgY29tcGlsZSBlcnJvcgorI2VuZGlmCisKKy8vI2RlZmluZSBNQVhfQkVBUkVSX0NUWFRfTlVNIE1BWF9UUkFOU0ZFUlJFRF9CRUFSRVJfTlVNCisKKyNkZWZpbmUgTUFYX0JFQVJFUl9DVFhUX05VTSAxMQorI2RlZmluZSBNQVhfQkVBUkVSX0lEICAgICAgIDE2CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggICB0aV9sZW47CisgICAga2FsX3VpbnQ4ICAgdGlbVUdTTV9USV9JRV9MRU5dOworfWlyYXRfdGlfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX2Jvb2wgICAgICAgIGNhdXNlX3ByZXNlbnQ7CisgICAgcHNfY2F1c2VfZW51bSAgIGNhdXNlX3ZhbHVlOworfWlyYXRfYWRkcl90eXBlX2xpbWl0YXRpb25fY2F1c2Vfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBxY2k7Cit9IHNpbXBsZV9lcHNfcW9zX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8vIGlmIGlSQVQsIHNvdXJjZSBTTSBuZWVkIHRvIGZpbGwgdGhlIGZvbGxvd2luZyBmaWVsZHMKKyAgICBpcmF0X3RyYW5zZmVyX2JlYXJlcl90eXBlX2VudW0gIGJlYXJlcl90eXBlOworICAgIAorICAgIC8vIE5TQVBJIC8gRUJJIChyYW5nZSBpcyA1fjE1KQorICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgYmVhcmVyX2lkOworICAgIAorICAgIC8vIE5TQVBJIC8gRUJJIChyYW5nZSBpcyA1fjE1KQorICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgbGlua2VkX2JlYXJlcl9pZDsKKyAgICAKKwkKKyAgICAvLyBzZWNvbmRhcnkgYmVhcmVyIHNldCBpcF9hZGRyX3R5cGUgPSBOVUxMX1RZUEUKKyAgICBpcF9hZGRyX3N0cnVjdCAgICAgICAgICAgICAgICAgIGlwX2FkZHI7CisgICAgCisgICAgLy8gc2Vjb25kYXJ5IGJlYXJlciBkb2Vzbid0IG5lZWQgdG8gc2V0IHRoaXMgZmllbGQKKyAgICBhcG5fc3RydWN0ICAgICAgICAgICAgICAgICAgICAgIGFwbjsKKyAgICAKKyAgICAvLyB0aGlzIHBhcmFtZXRlciBpcyBjcml0aWNhbCB0byAyM0cuIFNNIGNhbiBqdXN0IHNlbmQgTUFQIEZBSUwgdG8gRVNNIHdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHByZXNlbnQKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIGlzX3VnX3Fvc19wcmVzZW50OworICAgIC8vIG5lZ290aWF0ZWQgcW9zIHBhcmFtZXRlciB1c2VkIGluIDIzRworICAgIHFvc19zdHJ1Y3QgICAgICAgICAgICAgICAgICAgICAgdWdfcW9zOworICAgIAorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgaXNfZXBzX3Fvc19wcmVzZW50OworICAgIC8vIFdoZW4gRVNNIHRyYW5zZmVyIG1vcmUgdGhhbiBHUFJTX01BWF9QRFBfU1VQUE9SVCBjb250ZXh0cyB0byBTTSwgCisgICAgLy8gU00gbmVlZCB0byB1c2UgZXBzX3FvcyB0byBkZWNpZGUgd2hpY2ggY29udGV4dHMgbmVlZCB0byBiZSBtYXBwZWQgZmFpbGVkIGFuZCBpbmZvcm0gRVNNIHRvIGxvY2FsIHJlbGVhc2UgaXQuCisgICAgZXBzX3Fvc19zdHJ1Y3QgICAgICAgICAgIGVwc19xb3M7CisgICAgCisgICAgLy8gdGhpcyBwYXJhbWV0ZXIgaXMgY3JpdGljYWwgdG8gMkcuIGlmIGlSQVQgaXMgNEcyLCBTTSBjYW4ganVzdCBzZW5kIE1BUCBGQUlMIHRvIEVTTSB3aGVuIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBwcmVzZW50CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBpc19sbGNfc2FwaV9wcmVzZW50OworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgbGxjX3NhcGk7IAorICAgIAorICAgIC8vIHRoaXMgcGFyYW1ldGVyIGlzIGNyaXRpY2FsIHRvIDJHLiBpZiBpUkFUIGlzIDRHMiwgU00gY2FuIGp1c3Qgc2VuZCBNQVAgRkFJTCB0byBFU00gd2hlbiB0aGlzIHBhcmFtZXRlciBpcyBub3QgcHJlc2VudAorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgaXNfcmFkaW9fcHJpb3JpdHlfcHJlc2VudDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHJhZGlvX3ByaW9yaXR5OworICAgIAorICAgIC8vIHRoaXMgcGFyYW1ldGVyIGlzIGNyaXRpY2FsIHRvIDJHLiBpZiBpUkFUIGlzIDRHMiwgU00gY2FuIGp1c3Qgc2VuZCBNQVAgRkFJTCB0byBFU00gd2hlbiB0aGlzIHBhcmFtZXRlciBpcyBub3QgcHJlc2VudAorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGZpX3ByZXNlbnQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBwZmk7CisgICAgCisgICAgLy8gdGhpcyBwYXJhbWV0ZXIgaXMgY3JpdGljYWwgdG8gMjNHLiBTTSBjYW4ganVzdCBzZW5kIE1BUCBGQUlMIHRvIEVTTSB3aGVuIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBwcmVzZW50CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBpc190aV9wcmVzZW50OworICAgIGlyYXRfdGlfc3RydWN0ICAgICAgICAgICAgICAgICAgdGk7CisgICAgCisgICAgaXJhdF9hZGRyX3R5cGVfbGltaXRhdGlvbl9jYXVzZV9zdHJ1Y3QgYWRkcl90eXBlX2xpbWl0YXRpb25fY2F1c2U7CisgICAgCisgICAgYmVhcmVyX3NlcnZpY2VfdHlwZV9lbnVtCQkJCWJlYXJlcl9zZXJ2aWNlX3R5cGU7CisgICAgCisgICAgLyogb25seSB1c2VkIGluIDIzRzQgaW50ZXItUkFULCB3aGVuIHRjbV9yZXF1ZXN0ZWRfZGVhY3Q9PUtBTF9UUlVFLCB0aGlzIFBEUCBtdXN0IG1hcCBmYWlsLCB1c2VkIHRvIHBlcmZvcm0gbG9jYWwgZGVhY3QgKi8KKyAgICBrYWxfYm9vbCB0Y21fcmVxdWVzdGVkX2RlYWN0OworCisgICAgLy9CQ00gYW5kIEVURlQgcGFyYW1ldGVycyB0byBtYWludGFpbiBzeW5jIGJldHdlZW4gU00gYW5kIEVTTQorICAgIGJjbV9lbnVtICAgIGJjbV9pbmZvOworICAgIGV0ZnRfZW51bSAgIGV0ZnRfaW5mbzsKK31iZWFyZXJfY3R4dF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCAgICAgICAgICAgdG90YWxfbnVtYmVyOyAgICAgICAgICAgICAgICAgICAvLyBUb3RhbCBudW1iZXIgb2YgUERQIGNvbnRleHQvRVBTIGJlYXJlciB3aGljaCB3aWxsIHRyYW5zZmVyIHRvIHRhcmdldCBSQVQKKyAgICBiZWFyZXJfY3R4dF9zdHJ1Y3QgIGNvbnRleHRbTUFYX1RSQU5TRkVSUkVEX0JFQVJFUl9OVU1dOyAvLyBiZWFyZXIgY29udGV4dCB3aGljaCB3aWxsIHRyYW5zZmVyIHRvIHRhcmdldCBSQVQKK31iZWFyZXJfY3R4dF90cmFuc2Zlcl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvLyBOU0FQSSAvIEVCSSAocmFuZ2UgaXMgNX4xNSkKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGJlYXJlcl9pZDsKKyAgICAKKyAgICAvLyB0aGlzIHBhcmFtZXRlciBpcyBjcml0aWNhbCB0byAyM0cuIFNNIGNhbiBqdXN0IHNlbmQgTUFQIEZBSUwgdG8gRVNNIHdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHByZXNlbnQKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIGlzX3VnX3Fvc19wcmVzZW50OworICAgIC8vIG5lZ290aWF0ZWQgcW9zIHBhcmFtZXRlciB1c2VkIGluIDIzRworICAgIHFvc19zdHJ1Y3QgICAgICAgICAgICAgICAgICAgICAgdWdfcW9zOworICAgIAorICAgIC8vIHRoaXMgcGFyYW1ldGVyIGlzIGNyaXRpY2FsIHRvIDJHLiBpZiBpUkFUIGlzIDRHMiwgU00gY2FuIGp1c3Qgc2VuZCBNQVAgRkFJTCB0byBFU00gd2hlbiB0aGlzIHBhcmFtZXRlciBpcyBub3QgcHJlc2VudAorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgaXNfbGxjX3NhcGlfcHJlc2VudDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGxsY19zYXBpOyAKKyAgICAKKyAgICAvLyB0aGlzIHBhcmFtZXRlciBpcyBjcml0aWNhbCB0byAyRy4gaWYgaVJBVCBpcyA0RzIsIFNNIGNhbiBqdXN0IHNlbmQgTUFQIEZBSUwgdG8gRVNNIHdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHByZXNlbnQKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIGlzX3JhZGlvX3ByaW9yaXR5X3ByZXNlbnQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICByYWRpb19wcmlvcml0eTsKKyAgICAKKyAgICAvLyB0aGlzIHBhcmFtZXRlciBpcyBjcml0aWNhbCB0byAyRy4gaWYgaVJBVCBpcyA0RzIsIFNNIGNhbiBqdXN0IHNlbmQgTUFQIEZBSUwgdG8gRVNNIHdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHByZXNlbnQKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BmaV9wcmVzZW50OworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgcGZpOworICAgIAorICAgIC8vIHRoaXMgcGFyYW1ldGVyIGlzIGNyaXRpY2FsIHRvIDIzRy4gU00gY2FuIGp1c3Qgc2VuZCBNQVAgRkFJTCB0byBFU00gd2hlbiB0aGlzIHBhcmFtZXRlciBpcyBub3QgcHJlc2VudAorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgaXNfdGlfcHJlc2VudDsKKyAgICBpcmF0X3RpX3N0cnVjdCAgICAgICAgICAgICAgICAgIHRpOworCit9YmVhcmVyX2xlZ2FjeV9yYXRfcGFyYV9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBzZWNfY3R4dF9kb21haW5faWRfZW51bSBkb21haW5faWQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgdW10c19jaXBoZXJpbmdfa2V5W0NLX0xFTl07CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgdW10c19pbnRlZ3JpdHlfa2V5W0lLX0xFTl07CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgZ3NtX2NpcGhlcmluZ19rZXlbS0NfTEVOXTsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICBnc21fY2lwaGVyaW5nX2tleTEyOFtLQzEyOF9MRU5dOworfXNlY3VyaXR5X2NvbnRleHRfc3RydWN0OworCisKKy8qIE1lcmdlZCBmcm9tIEdTTSAvIFVNVFMgTXVsdGltb2RlIGRldmVsb3BtZW50IGJyYW5jaCAqKioqKioqKioqLworLyogQ29tbW9uIHN0cnVjdHVyZSAqLworLyogTWVhc3VyZW1lbnQgcmVxdWVzdC9jb25maXJtIHJlbGF0ZWQ6IEdBUy9VQVMgdG8gRUFTICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2CXBoeXNpY2FsX2NlbGxfaWQ7CisgICBrYWxfaW50MTYJY3BpY2hfcnNjcDsKKyAgIGthbF9pbnQxNgljcGljaF9lY19uMDsKK30gaXJfcmVwb3J0ZWRfZmRkX2NlbGxzX2NzZ19tZWFzX2luZm87CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICB1YXJmY247CisgICBrYWxfaW50MTYgICB1YXJmY25fcnNzaTsKKyAgIGthbF91aW50OCAgIG51bV9yZXBvcnRlZF9jZWxsczsKKyAgIGlyX3JlcG9ydGVkX2ZkZF9jZWxsc19jc2dfbWVhc19pbmZvICBpcl9yZXBvcnRlZF9mZGRfY2VsbHNfY3NnX21lYXNfaW5mb19saXN0W01BWF9OUl9PRl9DU0dfQ0VMTFNfSU5fQ0VMTF9MSVNUXTsKK30gaXJfdW10c19jYXJyaWVyX2NzZ19tZWFzX3Jlc3VsdF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IEZERF9tZWFzX1VtdHNDZWxsTGlzdAoreworICAga2FsX3VpbnQ4IG51bUVsZW1lbnRzOworCisgICBtZWFzX1VtdHNDZWxsTGlzdFBlckNhcnJpZXIgZWxlbWVudFtGRERfTUFYX05VTV9NRUFTVVJFRF9VTVRTX0NBUlJJRVJTXTsKK30KK0ZERF9tZWFzX1VtdHNDZWxsTGlzdDsKKwordHlwZWRlZiBzdHJ1Y3QgVEREX21lYXNfVW10c0NlbGxMaXN0Cit7CisgICBrYWxfdWludDggbnVtRWxlbWVudHM7CisKKyAgIG1lYXNfVW10c0NlbGxMaXN0UGVyQ2FycmllciBlbGVtZW50W1RERF9NQVhfTlVNX01FQVNVUkVEX1VNVFNfQ0FSUklFUlNdOworfQorVEREX21lYXNfVW10c0NlbGxMaXN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgaXNfdmFsaWQ7CisgICBFQVJGQ04gICAgICBlYXJmY247CisgICBrYWxfdWludDE2ICBwY2k7CisgICBrYWxfdWludDMyICBjZWxsX2lkOworICAga2FsX2Jvb2wgICAgc2liMl9oc19mbGc7CisgICBrYWxfYm9vbCAgICBlbDFfaHN0X21kX2ZsZzsKKyAgIGthbF91aW50MzIgIHZhbGlkX2R1cmF0aW9uOworfSBpcl9sdGVfc2NlbGxfc3RydWN0OworCisvKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSByZWRpcmVjdGlvbiBpbmZvIGZyb20gR1NNIG9yIFVNVFMgdG8gTFRFICovCit0eXBlZGVmIHN0cnVjdAoreworICAgRUFSRkNOICAgICAgZWFyZmNuOworICAga2FsX2Jvb2wgICAgdGFyZ2V0X2NlbGxfdmFsaWRfZmxhZzsKKyAgIGthbF91aW50MTYgIHRhcmdldF9jZWxsOworICAga2FsX2Jvb2wgICAgbm90X2FsbG93ZWRfZXhpc3RfZmxhZzsKKyAgIC8qIEl0IGlzIGEgTFRFIFBDSSBiaXQgbWFwICgwLTUwMyksIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiBub3RfYWxsb3dlZF9jZWxscyBbMF0gCisgICAgKiByZXByZXNlbnRzIFBDSS0wLCBhbmQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIG5vdF9hbGxvd2VkX2NlbGxzIFswXSAKKyAgICAqIHJlcHJlc2VudHMgUENJLTcuCisgICAgKiBUaGUgY2VsbCBJRHMgKFBDSSkgb2Ygbm90IGFsbG93ZWQgY2VsbHMgYXJlIHNldCB0byAgIjEiIGFuZCB0aGUgY2VsbCBJRHMgCisgICAgKiAoUENJKSBvZiB0aG9zZSBvdGhlciB0aGFuIG5vdCBhbGxvd2VkIGNlbGxzIGFyZSBzZXQgdG8gIjAiLgorICAgICovCisgICBrYWxfdWludDggICBub3RfYWxsb3dlZF9jZWxsW1BDSV9CSVRNQVBfTUFYX05VTV07Cit9IGx0ZV9yZWRpcmVjdF9pbmZvOworI2lmZGVmIF9fVU1UU19GRERfTU9ERV9fCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgdWFyZmNuOworICAga2FsX3VpbnQxNiAgc2NyYW1ibGluZ19jb2RlOworICAga2FsX2Jvb2wgICAgdHhfZGl2ZXJzaXR5OworfSB0c191bXRzX2ZkZF9jZWxsOworI2VuZGlmCisKKyNpZmRlZiBfX1VNVFNfVEREMTI4X01PREVfXwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgIHVhcmZjbjsKKyAgIGthbF91aW50MTYgIGNlbGxfcGFyYW1ldGVyOworICAga2FsX2Jvb2wgICAgdHN0ZDsKKyAgIGthbF9ib29sICAgIHNjdGQ7Cit9IHRzX3VtdHNfdGRkX2NlbGw7CisjZW5kaWYKKwordHlwZWRlZiB1bmlvbgoreworICAgdHNfdW10c19mZGRfY2VsbCAgZmRkX2NlbGw7CisjaWZkZWYgX19VTVRTX1RERDEyOF9NT0RFX18KKyAgIHRzX3VtdHNfdGRkX2NlbGwgIHRkZF9jZWxsOworI2VuZGlmCit9IHRzX3VtdHNfdGFyZ2V0X2NlbGxfdW5pb247CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbAkgaXNfYmVzdF9jZWxsX3N1aXRhYmxlX2FsbG93ZWRfQ1NHOworICAga2FsX2Jvb2wgIGlzX2Jlc3RfY2VsbF9hbGxvd2VkX2h5YnJpZDsKKyAgIGlyX3VtdHNfY2Fycmllcl9jc2dfbWVhc19yZXN1bHRfc3RydWN0IGlyX3VtdHNfY2Fycmllcl9jc2dfbWVhc19yZXN1bHQ7Cit9IHRzXzNHX2NzZ191Y2VsbF9ldmx1YXRpb25fcmVzdWx0OworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2Jvb2wgICAgYnNpY19wcmVzZW50OyAvKiBpZiBUUlVFIGJzaWMgaXMgcHJlc2VudCAqLworICAga2FsX3VpbnQ4ICAgYnNpYzsgICAgICAgICAvKiBPcHRpb25hbCwgcHJlc2VudCBpZiBic2ljX3ByZXNlbnQgaXMgVFJVRSAqLworICAgdGVfZ3NtX2JhbmRfaW5kaWNhdG9yICBnc21fYmFuZF9pbmRpY2F0b3I7CisgICBrYWxfdWludDE2ICBiY2NoX2FyZmNuOworfSBHU01fVGFyZ2V0Q2VsbEluZm87CisKKyNpZiBkZWZpbmVkKF9fVU1UU19GRERfTU9ERV9fKSB8fCBkZWZpbmVkKF9fVU1UU19UREQxMjhfTU9ERV9fKSAvLyBCSk0KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICAgICAgICAgIG51bUVsZW1lbnRzOworICAgR1NNX1RhcmdldENlbGxJbmZvICB0YXJnZXRfZ2NlbGxfaW5mb1tNQVhfVEFSR0VUX0dTTV9DRUxMU19OVU1dOworfSB1YXNfZ2FzX3JlZGlyZWN0SW5mbzsKKyNlbmRpZiAvKiBkZWZpbmVkKF9fVU1UU19GRERfTU9ERV9fKSB8fCBkZWZpbmVkKF9fVU1UU19UREQxMjhfTU9ERV9fKSAqLworCit0eXBlZGVmIHN0cnVjdAoreworICAgdGVfZ3NtX2JhbmRfaW5kaWNhdG9yICBnc21fYmFuZF9pbmRpY2F0b3I7CisgICBrYWxfdWludDggICAgICAgICAgICAgKkFSRkNOX2JpdG1hcDsKK30gZWFzX2dhc19yZWRpcmVjdEluZm87CisKKyNpZiBkZWZpbmVkKF9fVU1UU19GRERfTU9ERV9fKSB8fCBkZWZpbmVkKF9fVU1UU19UREQxMjhfTU9ERV9fKSAvLyBCSk0KK3R5cGVkZWYgdW5pb24KK3sKKyAgIHVhc19nYXNfcmVkaXJlY3RJbmZvICB1YXNfcmVkaXJlY3RJbmZvOworICAgZWFzX2dhc19yZWRpcmVjdEluZm8gIGVhc19yZWRpcmVjdEluZm87Cit9IHJlZGlyZWN0X2luZm9fdW5pb247CisjZW5kaWYgLyogZGVmaW5lZChfX1VNVFNfRkREX01PREVfXykgfHwgZGVmaW5lZChfX1VNVFNfVEREMTI4X01PREVfXykgKi8KKworI2lmIChkZWZpbmVkKF9fVU1UU19SNV9fKSAmJiBkZWZpbmVkKF9fR0VSQU5fUjVfXykpCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICBudW1PY3RldHM7CisgICBrYWxfdWludDggIHN0cmluZ0RhdGFbMjNdOyAvKiBPbmx5IHRoZSBmaXJzdCBudW1PY3RldHMgZWxlbWVudHMgYXJlIHZhbGlkICovCit9IEdFUkFOX1N5c3RlbUluZm9CbG9jazsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgbnVtRWxlbWVudHM7CisgICBHRVJBTl9TeXN0ZW1JbmZvQmxvY2sgIGVsZW1lbnRbTUFYX0dTTV9TWVNfSU5GT19CTE9DS1NfTlVNXTsgLyogT25seSB0aGUgZmlyc3QgbnVtRWxlbWVudHMgYXJlIHZhbGlkICovCit9IEdFUkFOX1N5c3RlbUluZm9ybWF0aW9uOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fVU1UU19GRERfTU9ERV9fKSB8fCBkZWZpbmVkKF9fVU1UU19UREQxMjhfTU9ERV9fKSAvLyBCSk0KK3R5cGVkZWYgc3RydWN0IEdTTV9SZWRpcmVjdF9JbmZvCit7CisgICB0ZV9pcl9yZWRpcmVjdGlvbl90eXBlICByZWRpcmVjdGlvbl90eXBlOworICAgcmVkaXJlY3RfaW5mb191bmlvbiAgICAgcmVkaXJlY3Rpb25faW5mbzsKK30gR1NNX1JlZGlyZWN0X0luZm87CisjZW5kaWYgLyogZGVmaW5lZChfX1VNVFNfRkREX01PREVfXykgfHwgZGVmaW5lZChfX1VNVFNfVEREMTI4X01PREVfXykgKi8KKworI2lmIChkZWZpbmVkKF9fVU1UU19SNV9fKSAmJiBkZWZpbmVkKF9fR0VSQU5fUjVfXykpIC8vIEJKTQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIEdFUkFOX1N5c0luZm9UeXBlICAgICAgICBzeXNfaW5mb190eXBlOworICAgR0VSQU5fU3lzdGVtSW5mb3JtYXRpb24gIHN5c19pbmZvOworfSB0ZV9pcl9nZXJhbl9zeXNfaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgYnNpYzsKKyAgIHRlX2dzbV9iYW5kX2luZGljYXRvciAgZ3NtX2JhbmRfaW5kaWNhdG9yOworICAga2FsX3VpbnQxNiAgICAgICAgICAgICBiY2NoX2FyZmNuOworICAgdGVfaXJfZ2VyYW5fc3lzX2luZm8gICBnc21fc3lzX2luZm87Cit9IEdTTV9UYXJnZXRDZWxsX1NJX0luZm87CisjZW5kaWYgLyogKGRlZmluZWQoX19VTVRTX1I1X18pICYmIGRlZmluZWQoX19HRVJBTl9SNV9fKSkgKi8KKworI2lmIGRlZmluZWQoX19VTVRTX0ZERF9NT0RFX18pIHx8IGRlZmluZWQoX19VTVRTX1RERDEyOF9NT0RFX18pIC8vIEJKTQordHlwZWRlZiB1bmlvbgoreworICAgR1NNX1RhcmdldENlbGxJbmZvICB0YXJnZXRfZ2NlbGxfcmVzZWxlY3RfaW5mbzsKKyAgIEdTTV9SZWRpcmVjdF9JbmZvICAgdGFyZ2V0X2djZWxsX3JlZGlyZWN0X2xpc3Q7Cit9IEdTTV9UYXJnZXRDZWxsX0luZm9fdW5pb247CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICAgICAgICAgICAgICBudW1FbGVtZW50czsKKyAgIEdTTV9UYXJnZXRDZWxsX1NJX0luZm8gIHRhcmdldF9nY2VsbF9TSV9pbmZvW01BWF9UQVJHRVRfR1NNX0NFTExTX05VTV07Cit9IEdTTV9UYXJnZXRDZWxsX1NJX0luZm9fTGlzdDsKKwordHlwZWRlZiB1bmlvbgoreworICAgdGVfaXJfZ2VyYW5fc3lzX2luZm8gICAgICAgICB0YXJnZXRfZ2NlbGxfcmVzZWxlY3RfU0lfaW5mbzsKKyAgIEdTTV9UYXJnZXRDZWxsX1NJX0luZm9fTGlzdCAgdGFyZ2V0X2djZWxsX3JlZGlyZWN0X1NJX2xpc3Q7Cit9IEdTTV9UYXJnZXRDZWxsX1NJX0luZm9fdW5pb247CisjZW5kaWYgLyogZGVmaW5lZChfX1VNVFNfRkREX01PREVfXykgfHwgZGVmaW5lZChfX1VNVFNfVEREMTI4X01PREVfXykgKi8KKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICB0ZV9jbl9kb21haW5fY2lwaGVyX3N0YXR1cyAgY2lwaGVyX3N0YXR1czsKKyAgIC8qIFRoZSBmb2xsb3dpbmcgZmxhZyBpcyBvbmx5IHVzZWQgd2hlbiAyRyAtPiAzRyBITyBhbmQgY2lwaGVyaW5nIGlzIG9uLiAKKyAgICAqIE5vcm1hbGx5LCB0aGlzIGZsYWcgc2hvdWxkIGJlIHNldCB0byBLQUxfRkFMU0UuIElmIEdBUyBnb3QgYSBuZXcgCisgICAgKiBjaXBoZXJpbmcga2V5LCBidXQgdGhpcyBoYXNuJ3QgYmVlbiBhY3RpdmF0ZWQgeWV0IChHQVMgaGFzbid0IHJlY2VpdmVkIAorICAgICogQ0lQSEVSIENPTU1BTkQpLCBhbmQgdGhlbiAyRyAtPiAzRyBITyBoYXBwZW5zLCAzRyBOVyB3aWxsIHVzZSBPTEQga2V5CisgICAgKiBmb3IgdGhlIGZvbGxsb3dpbmcgY2lwaGVyaW5nLiBUaHVzLCBhdCB0aGlzIGNhc2UsIEdBUyBzaG91bGQgc2V0IHRoaXMgCisgICAgKiBmbGFnIHRvIFRSVUUuIFJSQ0Ugd2lsbCB1c2UgT0xEIGtleSBpbnN0ZWFkIG9mIE5FVyBrZXkgZm9yIGNpcGhlcmluZy4KKyAgICAqIFBsZWFzZSByZWZlciB0byAyNS4zMzEgQ1IgMjU2NworICAgICovCisgICBrYWxfYm9vbCAgaXNfbmV3X2NpcGhlcl9rZXlfcmVjZWl2ZWQ7Cit9IHRzX2NpcGhlcmluZ19pbmZvOworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiBwY2k7CisgICBrYWxfaW50MTYgIHJzcnA7CisgICBrYWxfaW50MTYgIHJzcnE7Cit9IGVjZWxsX21lYXNfcmVzdWx0X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIEVBUkZDTiAgICAgIGVhcmZjbjsKKyAgIGthbF9ib29sICAgIGlzX2Jlc3RfY2VsbF9zdWl0YWJsZV9hbGxvd2VkX0NTRzsKKyAgIGthbF9ib29sICAgIGlzX2Jlc3RfY2VsbF9hbGxvd2VkX2h5YnJpZDsKKyAgIGVjZWxsX21lYXNfcmVzdWx0X3N0cnVjdCAgZWNlbGxfbWVhc19yZXN1bHQ7Cit9IGNzZ19mcmVxX3NlYXJjaF9yZXN1bHRfc3RydWN0OworCisvLyBSQVQgY2hhbmdlIGZyb20gMjNHIHRvIDRHLCBOQVMgY29udGV4dCB0cmFuc2ZlcihNTS0+RU1NKQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvLyBVQVMgLT4gRU1NCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIG5hc19zZWN1cml0eV9wYXJhbVtOQVNfU0VDVVJJVFlfUEFSQU1fTEVOXTsKKworICAgIC8vIE1NIC0+IEVNTQorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICBpc19nbW1fcmVhZHlfY29ubmVjdGVkOworICAgIHRhdV9yZXF1aXJlZF9lbnVtICAgICAgICAgICB0YXVfcmVxdWlyZWQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIGNrc247CisgICAgc2VjdXJpdHlfY29udGV4dF9zdHJ1Y3QgICAgIHNlY3VyaXR5X2NvbnRleHQ7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIGlzX3B0bXNpX3ZhbGlkOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBwdG1zaVtQVE1TSV9MRU5dOworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICBpc19wdG1zaV9zaWdfdmFsaWQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIHB0bXNpX3NpZ1tQVE1TSV9TSUdfTEVOXTsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfcmFpX3ZhbGlkOworICAgIHJhaV9zdHJ1Y3QgICAgICAgICAgICAgICAgICByYWk7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIGlzX2xhaV92YWxpZDsKKyAgICBsYWlfc3RydWN0ICAgICAgICAgICAgICAgICAgbGFpOworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICBpc190bXNpX3ZhbGlkOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICB0bXNpW1RNU0lfTEVOXTsKKyAgICBnc21fdXBkYXRlX3N0YXR1c19lbnVtICAgICAgbW1fdXBkYXRlX3N0YXR1czsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfZWNjX2xpc3RfdmFsaWQ7CisgICAgcGxtbl9pZF9zdHJ1Y3QgICAgICAgICAgICAgIGVjY19saXN0X3BsbW47CisgICAgZ3NtX3N0YXRlX2VudW0gICAgICAgICAgICAgIGdzbV9hdHRhY2hfc3RhdGU7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIGlzX3BzX3N1c3BlbmRlZDsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfcHJldl9yYXVfc3VzcGVuZGVkOyAvLyBbMi0+NCBvbmx5XSBUbyBub3RpZnkgRU1NIHdoZXRoZXIgdGhlcmUgaXMgYSBzdXNwZW5kZWQvdW5maW5pc2hlZCBSQVUKKyNpZmRlZiBfX05HX0VDQUxMX1NVUFBPUlRfXworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICBpc190MzI0Ml9ydW5uaW5nOworICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICB0MzI0Ml9yZW1haW5pbmdfdGltZTsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfdDMyNDNfcnVubmluZzsKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgdDMyNDNfcmVtYWluaW5nX3RpbWU7CisjZW5kaWYKK30gbW0yZW1tX2lyYXRfaW5mb19zdHJ1Y3Q7CisKKy8vIFJBVCBjaGFuZ2UgZnJvbSA0RyB0byAyM0csIE5BUyBjb250ZXh0IHRyYW5zZmVyKEVNTS0+TU0pCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8vIEVSUkMgLT4gUkFUQ00gKEdBUy9VQVM/KQorICAgIGhvX2Zyb21fbHRlX3R5cGVfZW51bSAgICAgICBpcl9ob190eXBlOworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICBnc21fY2lwaGVyX2tleV9pbmZvUDsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgZ3NtX2NpcGhlcl9rZXkxMjhfaW5mb1A7CisgICAgY3NmYl9pbmRpY2F0b3JfZW51bSAgICAgICAgIGNzZmJfaW5kaWNhdG9yOworICAgIAorICAgIC8vIEVNTSAtPiBSQVRDTQorICAgIGxvb3BiYWNrX21vZGVfc3RhdHVzX2VudW0gICBsb29wYmFja19tb2RlX3N0YXR1czsKKworICAgIC8vIEVNTSB0byBNTQorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICByYXVfcmVxdWlyZWQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIG5hc19rc2k7CisgICAgc2VjdXJpdHlfY29udGV4dF9zdHJ1Y3QgICAgIHNlY3VyaXR5X2NvbnRleHRbMl07CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIGlzX21hcHBlZF9wdG1zaV92YWxpZDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgbWFwcGVkX3B0bXNpW1BUTVNJX0xFTl07CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIGlzX21hcHBlZF9wdG1zaV9zaWdfdmFsaWQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIG1hcHBlZF9wdG1zaV9zaWdbUFRNU0lfU0lHX0xFTl07CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIGlzX21hcHBlZF9yYWlfdmFsaWQ7CisgICAgcmFpX3N0cnVjdCAgICAgICAgICAgICAgICAgIG1hcHBlZF9yYWk7CisgICAgbXRfY3NmYl90eXBlX2VudW0gICAgICAgICAgIG10X2NzZmJfdHlwZTsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfZWNjX2xpc3RfdmFsaWQ7CisgICAgcGxtbl9pZF9zdHJ1Y3QgICAgICAgICAgICAgIGVjY19saXN0X3BsbW47CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIGlzX2VpYTBfdXNlZDsKKyAgICBjb25uX3JlbF9pbmRfY2F1c2VfZW51bSAgICAgcmVkaXJfY2F1c2U7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIGlzX2x0ZV9ycmNfY29ubl9mYWlsdXJlOworI2lmZGVmIF9fTkdfRUNBTExfU1VQUE9SVF9fCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIGlzX3QzNDQ0X3J1bm5pbmc7CisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgIHQzNDQ0X3JlbWFpbmluZ190aW1lOworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICBpc190MzQ0NV9ydW5uaW5nOworICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICB0MzQ0NV9yZW1haW5pbmdfdGltZTsKKyNlbmRpZgorfSBlbW0ybW1faXJhdF9pbmZvX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8vIFNNIC0+IEVTTQorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICBzbV9kZWFjdGl2YXRlX2lzcjsKKworfSBzbTJlc21faXJhdF9pbmZvX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCB0b3RhbF9udW1iZXI7IC8vIFRvdGFsIG51bWJlciBvZiBhY3RpdmUgRVBTIGJlYXJlciBvbiBFU00KKyAgICBiZWFyZXJfbGVnYWN5X3JhdF9wYXJhX3N0cnVjdCBwYXJhbWV0ZXJzW01BWF9UUkFOU0ZFUlJFRF9CRUFSRVJfTlVNXTsKK31zbV9lc21fYmVhcmVyX2xlZ2FjeV9wYXJhX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvLyBFU00gLT4gTU0KKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgZXNtX2RlYWN0aXZhdGVfaXNyOworCisgICAgLy8gRVNNIC0+IFNNCisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgIG5zYXBpX3N0YXR1czsKKworICAgIC8vIEVTTSAtPiBTTQorICAgIHNtX2VzbV9iZWFyZXJfbGVnYWN5X3BhcmFfc3RydWN0IGJlYXJlcl9sZWdhY3lfcGFyYTsKKworfSBlc20yc21faXJhdF9pbmZvX3N0cnVjdDsKKworLyogX180R19CQUNLR1JPVU5EX1NFQVJDSF9fIGJlZ2luKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBFQVJGQ04gICAgICBlYXJmY247CisgICBrYWxfdWludDE2ICBwY2k7CisgICBrYWxfaW50MTYgICByc3JwOworICAga2FsX2ludDE2ICAgcnNycTsKKyAgIGthbF9pbnQxNiAgIHNpbnI7CisgICBrYWxfaW50MTYgICByc19zaW5yOworICAga2FsX2Jvb2wgICAgcnNycV9vbl9hbGxfc3ltYm9sczsKKyAgIGthbF9ib29sICAgIHJzcnFfd2lkZWJhbmQ7Cit9IGVhc19jZWxsX2luZm87CisKKy8qIDNHNCBiYWNrZ3JvdW5kIHNlYXJjaCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgIHVhcmZjbjsKKyAgIGthbF91aW50MTYgIHBjaTsKKyAgIGthbF9pbnQxNiAgIHJzY3A7CisvKkZERDppbiBxZEJtLlJhbmdlOi00ODB+LTEwMCBtZWFucyAoLTEyMCB+LTI1KWRCbSBpbiAwLjI1IGRCIFN0ZXAuKi8KKy8qVEREOmluIHFkQm0uUmFuZ2U6LTUwMH4tMTAwIG1lYW5zICgtMTI1IH4tMjUpZEJtIGluIDAuMjUgZEIgU3RlcC4qLworLy8jaWZkZWYgX19VTVRTX0ZERF9NT0RFX18KKyAgIGthbF9pbnQxNiAgIGVjX24wOyAvKkVjL04wLCBpbiBxZEIuIFJhbmdlOiAtMTAwfjAgbWVhbnMgLTI1fjAgZEIgaW4gMC4yNSBkQiBzZXRwLiovCisvLyNlbmRpZiAvL19fVU1UU19GRERfTU9ERV9fCit9IHVhc19jZWxsX2luZm87CisKKworLyoyRzQgYmFja2dyb3VuZCBzZWFyY2ggKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICBnYXJmY247CisgICBrYWxfdWludDE2ICBic2ljOworICAgdGVfZ3NtX2JhbmRfaW5kaWNhdG9yIGdzbV9iYW5kX2luZDsKKyAgIGthbF9pbnQzMiAgIHJzc2k7ICAgCit9IGdhc19jZWxsX2luZm87CisvKiBfXzRHX0JBQ0tHUk9VTkRfU0VBUkNIX18gZW5kKi8KKworCit0eXBlZGVmIHN0cnVjdCB7CisgIGthbF91aW50OCBlcHNiZWFyZXJfaWQ7CisgIGthbF91aW50OCByYl9pbmRleDsKK31lbmFzYXNfZXBzYmVhcmVyX21hcHBpbmdfc3RydWN0OworCisjZGVmaW5lIEVOQVNBU19NQVhfRFJCIDExCisKK3R5cGVkZWYgc3RydWN0IHsKKyAga2FsX3VpbnQ4IG51bV9vZl9iZWFyZXI7CisgIGVuYXNhc19lcHNiZWFyZXJfbWFwcGluZ19zdHJ1Y3QgYmVhcmVyW0VOQVNBU19NQVhfRFJCXTsKK31lbmFzYXNfYWRkX2Vwc2JlYXJlcl9saXN0X3N0cnVjdDsKKworLyogVFMgMjQuNTAxLCA5LjExLjIuOSBTMSBtb2RlIHRvIE4xIG1vZGUgTkFTIHRyYW5zcGFyZW50IGNvbnRhaW5lciwgdGhlIHNpemUgb2YgdGhlIHZhbHVlIHBhcnQgKi8KKyNkZWZpbmUgRU5BU0FTX01BWF9TSVpFX0lSQVRfNEc1X05BU19DT05UQUlORVIgKDEwKQorCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgZGF0YV9sZW47CisgICAga2FsX3VpbnQ4IGRhdGFbRU5BU0FTX01BWF9TSVpFX0lSQVRfNEc1X05BU19DT05UQUlORVJdOworfSBpcmF0X25hc19jb250YWluZXJfb2N0ZXRfc3RyaW5nX3N0cnVjdCwgZXJyY19ucnJjX25hc19jb250YWluZXJfb2N0ZXRfc3RyaW5nX3N0cnVjdDsKKworI2RlZmluZSBOUlJDX05BU19TRUNVUklUWV9QQVJBTV9GUk9NX05SX0xFTkdUSCAoMSkKKworLyogNUc0ICovIAordHlwZWRlZiBzdHJ1Y3QgeyAKKyAgICBrYWxfdWludDggbmFzX3NlY3VyaXR5X3BhcmFtX2Zyb21fbnJbIAorICAgICAgICBOUlJDX05BU19TRUNVUklUWV9QQVJBTV9GUk9NX05SX0xFTkdUSF07IAorfSBpcmF0X2NvbnRhaW5lcl9ucnJjX3RvX3ZnbW1fc3RydWN0OyAKKwordHlwZWRlZiBzdHJ1Y3QgeyAKKyAgICBrYWxfYm9vbCBpc19rYXNtZV92YWxpZDsgLy8gaXNfa2FzbWVfdmFsaWQgc2hhbGwgYmUgS0FMX1RSVUUgd2hlbiBpbiBJUkFUIEhPIGNhc2UgCisgICAga2FsX3VpbnQ4IGthc21lW0tBU01FX05VTV07IAorfSBpcmF0X2NvbnRhaW5lcl9lbW1faW5mb19zdHJ1Y3QsIGlyYXRfY29udGFpbmVyX2VtbV90b19lcnJjX3N0cnVjdDsgCisKKy8qIDRHNSAqLyAKK3R5cGVkZWYgc3RydWN0IHsgCisgICAga2FsX2Jvb2wgaXNfbmFzX2NvbnRhaW5lcl92YWxpZDsgLy8gaXNfbmFzX2NvbnRhaW5lcl92YWxpZCBhbmQgaXNfbmhfdmFsaWQgd2lsbCBiZSBLQUxfVFJVRSB3aGVuIGluIElSQVQgSE8gY2FzZSAKKyAgICBpcmF0X25hc19jb250YWluZXJfb2N0ZXRfc3RyaW5nX3N0cnVjdCBuYXNfY29udGFpbmVyOyAKKyAgICBrYWxfYm9vbCBpc19uaF92YWxpZDsgCisgICAga2FsX3VpbnQ4IE5IW05IX05VTV07IAorfSBpcmF0X2NvbnRhaW5lcl9lcnJjX3RvX2VtbV9zdHJ1Y3Q7IAorCit0eXBlZGVmIHN0cnVjdCB7IAorICAgIG5ycmNfa2FtZl9zdHJ1Y3Qga2FtZjsgCisgICAga2FsX3VpbnQzMiB1bF9uYXNfY291bnQ7IAorfSBpcmF0X2NvbnRhaW5lcl92Z21tX3RvX25ycmNfc3RydWN0OyAKKworCisjZW5kaWYgLyogX0lSQVRfQ09NTU9OX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvaXJjb21tMmFwcF9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9pcmNvbW0yYXBwX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNWJhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvaXJjb21tMmFwcF9zdHJ1Y3QuaApAQCAtMCwwICsxLDc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBpcmNvbW0yYXBwX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBJbnRlcmZhY2UgYmV0d2VlbiBJUkNPTU0gYW5kIEFQUAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVJDT01NMkFQUF9TVFJVQ1RfSAorI2RlZmluZSBfSVJDT01NMkFQUF9TVFJVQ1RfSAorCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiBtc2dfbGVuOworICAgIGthbF9ib29sICAgIHJlc3VsdDsgICAgCisgICAga2FsX3VpbnQ4IGVycl9jYXVzZTsKK30gaXJjb21tX2Nvbm5lY3RfY25mX3N0cnVjdDsKKworI2VuZGlmIC8qIH5fSVJDT01NMkFQUF9TVFJVQ1RfSCAqLworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvaXJjb21tX2FwcF9lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2lyY29tbV9hcHBfZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTU3ZGNhCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2lyY29tbV9hcHBfZW51bXMuaApAQCAtMCwwICsxLDkwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBpcmNvbW1fYXBwX2VudW1zLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIEVudW0gdmFsdWUgYmV0d2VlbiBJUkNPTU0gYW5kIEFQUC4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lSQ09NTV9BUFBfRU5VTVNfSAorI2RlZmluZSBfSVJDT01NX0FQUF9FTlVNU19ICisKK3R5cGVkZWYgZW51bQoreworICAgSVJDT01NX0lETEUsCisgICBJUkNPTU1fV0FJVEksCisgICBJUkNPTU1fV0FJVFIsCisgICBJUkNPTU1fQ09OTgorfSBpcmNvbW1fc3RhdGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICBJUkNPTU1fSUFTX0NMT1NFLAorICAgSVJDT01NX0lBU19XQUlUSSwKKyAgIElSQ09NTV9JQVNfT1BFTgorfSBpcmNvbW1faWFzX3N0YXRlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgSVJDT01NX0VSUl9MTVBfRkFJTEVELAorICAgSVJDT01NX0VSUl9JQVNfRkFJTEVELAorICAgSVJDT01NX0VSUl9UVFBfRkFJTEVELAorICAgSVJDT01NX0VSUl9JUkNPTU1fRkFJTEVECit9IGlyY29tbV9lcnJfY2F1c2VfZW51bTsKKworI2VuZGlmIC8qIH5fSVJDT01NX0FQUF9FTlVNU19IICovCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9pcmRhX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvaXJkYV9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOTM4YzAKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvaXJkYV9lbnVtcy5oCkBAIC0wLDAgKzEsMTI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lSREFfRU5VTVNfSAorI2RlZmluZSBfSVJEQV9FTlVNU19ICisKKy8qbGluayBlcnJvciBjb2RlKi8KK3R5cGVkZWYgZW51bQoreworCUlSREFfU1VDQ0VTUz0wLAorCUlSREFfV1JPTkdfQ0NfU1RBVEVfRVJST1IsCisJSVJEQV9XUk9OR19TQ19TVEFURV9FUlJPUiwKKwlJUkRBX05PX0RFVklDRV9FUlJPUiwKKwlJUkRBX0xBUF9DT05ORUNUX0ZBSUxfRVJST1IsCQkJCQorCUlSREFfTFNBUF9DT05ORUNUX0ZBSUxfRVJST1IsCisJSVJEQV9MU0FQX0NPTk5FQ1RfSU5fUFJPR1JFU1NfRVJST1IKK30gaXJkYV9lcnJvcl9jb2RlX2VudW07CisKKy8qY2xhc3MgSUQqLwordHlwZWRlZiBlbnVtCit7CisgTFBUX0NMQVNTX0lEID0wLAkJICAgCisgQ09NTV9DTEFTU19JRCwJCisgT0JFWF9ERUZBVUxUX0lELAorIElSTEFOX0NMQVNTX0lELAkKKyBERVZfQ0xBU1NfSUQsCQorIFRUUDJfQ0xBU1NfSUQsCQorIFBOUF9DTEFTU19JRCAgICAKK31pcmRhX2NsYXNzX2lkX2VudW07CisKKy8qYXR0cmlidXRlIElEICovCit0eXBlZGVmIGVudW0KK3sKKyBPQkVYX0lSWEZFUl9BVFRSSUJVVEVfSUQ9MCwJCisgREVWX05BTUVfQVRUUklCVVRFX0lELAkJLy9PQkVYX0lSWEZFUl9BVFRSSUJVVEVfSUQrMQorIElSREFfU1VQX0FUVFJJQlVURV9JRCwJCS8vREVWX05BTUVfQVRUUklCVVRFX0lEKzEKKyBMTVBfU0VMX0FUVFJJQlVURV9JRCwJCS8vSVJEQV9TVVBfQVRUUklCVVRFX0lEKzEKKyBUVFBfU0VMX0FUVFJJQlVURV9JRCwJCS8vTE1QX1NFTF9BVFRSSUJVVEVfSUQrMQorIENPTU1fUEFSX0FUVFJJQlVURV9JRCwJCS8vVFRQX1NFTF9BVFRSSUJVVEVfSUQrMQorIFBOUF9ERVZJQ0VJRF9JRCwJICAgICAgICAgLy8iRGV2aWNlSUQiCisgUE5QX05BTUVfSUQsCQkgICAgICAgICAvLyJOYW1lIgorIFBOUF9NQU5VRkFDVFVSRVJfSUQsCSAgIC8vIk1hbnVmYWN0dXJlciIKKyBQTlBfQ0FURUdPUllfSUQsCSAgICAgICAgIC8vIkNhdGVnb3J5IgorIFBOUF9WRVJTSU9OX0lELAkJICAgICAgLy8iVmVyc2lvbiIKKyBQTlBfU1RBVFVTX0lECQkgICAgICAgICAvLyJTdGF0dXMiCit9aXJkYV9hdHRyaWJ1dGVfaWRfZW51bTsKKworLypkaXNjb25uZWN0IGNvZGUqLwordHlwZWRlZiBlbnVtCit7CisgRElTQ09OTkVDVF9SRUFTT05fVVNFUl9SRVFVRVNUPTAsCQkJCQkgICAgIAorIERJU0NPTk5FQ1RfUkVBU09OX0xBUF9ESVNDT05ORUNULAkJCQkgICAgIAorIERJU0NPTk5FQ1RfUkVBU09OX0xBUF9DT05ORUNUX0ZBSUwsCQkJCSAgCisgRElTQ09OTkVDVF9SRUFTT05fTEFQX1JFU0VULAkJCQkJCSAgICAgCisgRElTQ09OTkVDVF9SRUFTT05fTE1fSU5JVElBVEUsCQkJCQkgICAgIAorIERJU0NPTk5FQ1RfUkVBU09OX1RUUF9ESVNDT05ORUNURURfTFNBUCwJCQorIERJU0NPTk5FQ1RfUkVBU09OX05PTl9SRVNQT05TSVZFX0xNX01VWF9DTElFTlQsCQorIERJU0NPTk5FQ1RfUkVBU09OX05PX0xNX01VWF9DTElFTlQsCQkJCSAgCisgRElTQ09OTkVDVF9SRUFTT05fQ09ORU5DVElPTl9IQUxGX09QRU4sCQkJICAKKyBESVNDT05ORUNUX1JFQVNPTl9JTExFR0FMX1NPVVJDRV9BRERSRVNTLAkJICAKKyBESVNDT05ORUNUX1JFQVNPTl9VTlNQRUNJRklFRF9SRUFTT049MHhmZgkJCSAgICAgCit9aXJkYV9kaXNjb25uZWN0X2NvZGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgU1VDQ0VTUz0wLAkJCQkJICAgICAKKyBOT19TVUNIX0NMQVNTLAkJCQkgICAgIAorIE5PX1NVQ0hfQVRUUklCVVRFCit9aXJkYV9pYXNfcmV0dXJuX2NvZGVfZW51bTsKKworLypJQVMgTFNBUF9zZWwqLwordHlwZWRlZiBlbnVtCit7CitJQVNfU0VSVkVSX0xTQVBfU0VMPTAsCSAvKiAwICAgSUFTIHNlcnZlciBzZWwgKi8KK0lBU19DTElFTlRfTFNBUF9TRUwsCSAgICAvKiAxICAgSUFTIGNsaWVudCBzZWwgKi8KK0xNUF9MU0FQX1NFTCwJCSAgICAgICAvKiAyICAgTE1QIGFwcCBzZWwsIGFsc28gSUFTIENsaWVudCAqLworLy9SQVdfQ09NTV9MU0FQX1NFTCwJICAgIC8qIDMgICBSQVcgQ09NTSBhcHAgc2VsICovCisvL0xQVF9MU0FQX1NFTCwJCSAgICAgICAvKiA0ICAgTFBUIGFwcCBzZWwgKi8KK1RUUF9MU0FQX1NFTCwJCSAgICAgICAvKiA1ICAgVElOWVRQIGFwcCBzZWwgKi8KKy8vVFRQMl9MU0FQX1NFTCwJCSAgICAgICAvKiA2ICAgVElOWVRQIGFwcCAyIHNlbCAqLworT0JFWF9MU0FQX1NFTCwJCSAgICAgICAvKiA3ICAgRGVmYXVsdCBPQkVYIGFwcCBzZWwgKi8KK09CRVhfSVJYRkVSX0xTQVBfU0VMLAkgLyogOCAgIE9CRVggaXJ4ZmVyIGFwcCBzZWwgKi8KK0NPTU1YX0xTQVBfU0VMLAkJICAgIC8qIDkgICBJckNPTU0gMyBvciA5IHdpcmUgYXBwIHNlbCAqLworLy9MQU5fQ09OVFJPTF9MU0FQX1NFTCwJIC8qIDEwICBJckxBTiBjb250cm9sIGNoYW5uZWwgKi8KKy8vTEFOX0RBVEFfTFNBUF9TRUwsCSAgICAgICAvKiAxMSAgSXJMQU4gZGF0YSBjaGFubmVsICovCitNQVhfU0VMCit9aXJkYV9sYXNwX3NlbF9lbnVtOworCit0eXBlZGVmIGVudW0gCit7CitGTENfT1dORVJfTlVMTCA9IDAsCitGTENfT1dORVJfT0JFWCAsCitGTENfT1dORVJfSVJDT01NIAorfWlyZGFfZmxjX293bmVyX2VudW07CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2lyZGFfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvaXJkYV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzE0MzczCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2lyZGFfc3RydWN0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUkRBX1NUUlVDVF9ICisjZGVmaW5lIF9JUkRBX1NUUlVDVF9ICisKKworLypNc2cgc2VudCB0byBUVFAqLwordHlwZWRlZiBzdHJ1Y3QgIAoreworCWthbF91aW50OCAJcmVmX2NvdW50OworCWthbF91aW50MTYgCW1zZ19sZW47CQkJLyogTE9DQUxfUEFSQV9IRFIgKi8KKwkKKwlrYWxfdWludDggCWxvY2FsX2xzYXBfc2VsOworCWthbF91aW50OCAJcmVtb3RlX2xzYXBfc2VsOworCWthbF91aW50OCAJZGlzY29ubmVjdF9yZWFzb247CQkvKiBmb3IgZGlzY29ubmVjdCBwcmltaXRpdmUgb25seSAqLworCWthbF91aW50OCAgIHJldHVybl9jb2RlOwkJCSAgIC8qIHJldHVybiBjb2RlIGZvciBjb25uZWN0IGNvbmZpcm0gcHJpbWl0aXZlICovCisJa2FsX3VpbnQ4IAlyZW1vdGVfYXBfbHNhcF9zZWw7CQkvKiBMU0FQIHNlbGVjdG9yIGdldCBieSBJQVMgY2xpZW50LCBJQVMgb25seSAqLworCWthbF91aW50OCAJY2xhc3NfbmFtZV9pbmRleDsJCSAgIC8qIGluZGV4IGZvciBJQVMgY2xpZW50IHRvIGZpbmQgY2xhc3MgbmFtZSAqLworCWthbF91aW50OCAJYXR0cmlidXRlX25hbWVfaW5kZXg7CS8qIGluZGV4IGZvciBJQVMgY2xpZW50IHRvIGZpbmQgYXR0cmlidXRlIG5hbWUgKi8JCisJa2FsX3VpbnQ4IAlpYXNfcmV0dXJuX2NvZGU7CQkgICAvKiBmb3IgSUFTIG9ubHkgKi8KKwlrYWxfdWludDE2ICBvcGVuX3RpbWU7ICAgICAgICAgICAgICAvKiBpcmRhIG9wZW4gcGVyaW9kKi8gCit9IHR0cF9kYXRhX3JlcXVlc3Rfc3RydWN0OworCit0eXBlZGVmIHR0cF9kYXRhX3JlcXVlc3Rfc3RydWN0IGlyZGFfb3Blbl9zdHJ1Y3Q7Cit0eXBlZGVmIHR0cF9kYXRhX3JlcXVlc3Rfc3RydWN0IHR0cF9jb25uZWN0X3JlcXVlc3Rfc3RydWN0OyAgICAgICAgICAgICAgICAgICAgICAgCit0eXBlZGVmIHR0cF9kYXRhX3JlcXVlc3Rfc3RydWN0IHR0cF9jb25uZWN0X3Jlc3BvbnNlX3N0cnVjdDsgICAgICAgICAgICAgICAgICAgICAgIAordHlwZWRlZiB0dHBfZGF0YV9yZXF1ZXN0X3N0cnVjdCB0dHBfZGlzY29ubmVjdF9yZXF1ZXN0X3N0cnVjdDsgICAgICAgICAgICAgICAgICAgICAKK3R5cGVkZWYgdHRwX2RhdGFfcmVxdWVzdF9zdHJ1Y3QgbG1wX2RhdGFfcmVxdWVzdF9zdHJ1Y3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCit0eXBlZGVmIHR0cF9kYXRhX3JlcXVlc3Rfc3RydWN0IGxtcF9jb25uZWN0X3JlcXVlc3Rfc3RydWN0OyAgICAgICAgICAgICAgICAgICAgICAgIAordHlwZWRlZiB0dHBfZGF0YV9yZXF1ZXN0X3N0cnVjdCBsbXBfY29ubmVjdF9yZXNwb25zZV9zdHJ1Y3Q7ICAgICAgICAgICAgICAgICAgICAgICAKK3R5cGVkZWYgdHRwX2RhdGFfcmVxdWVzdF9zdHJ1Y3QgbG1wX2Rpc2Nvbm5lY3RfcmVxdWVzdF9zdHJ1Y3Q7ICAgICAgICAgICAgICAgICAgICAgCit0eXBlZGVmIHR0cF9kYXRhX3JlcXVlc3Rfc3RydWN0IGxtcF9saW5rX2Rpc2Nvbm5lY3RfcmVxdWVzdF9zdHJ1Y3Q7ICAgICAgICAgICAgICAgIAordHlwZWRlZiB0dHBfZGF0YV9yZXF1ZXN0X3N0cnVjdCBpYXNfZ2V0X3JlbW90ZV9sc2FwX3NlbF9zdHJ1Y3Q7ICAgICAgICAgICAgICAgICAgICAKK3R5cGVkZWYgdHRwX2RhdGFfcmVxdWVzdF9zdHJ1Y3QgbG1wX2RhdGFfaW5kaWNhdGlvbl9zdHJ1Y3Q7ICAgICAgICAgICAgICAgICAgICAgICAgCit0eXBlZGVmIHR0cF9kYXRhX3JlcXVlc3Rfc3RydWN0IGxtcF9jb25uZWN0X2luZGljYXRpb25fc3RydWN0OyAgICAgICAgICAgICAgICAgICAgIAordHlwZWRlZiB0dHBfZGF0YV9yZXF1ZXN0X3N0cnVjdCBsbXBfY29ubmVjdF9jb25maXJtX3N0cnVjdDsgICAgICAgICAgICAgICAgICAgICAgICAKK3R5cGVkZWYgdHRwX2RhdGFfcmVxdWVzdF9zdHJ1Y3QgbG1wX2xzYXBfZGlzY29ubmVjdF9pbmRpY2F0aW9uX3N0cnVjdDsgICAgICAgICAgICAgCit0eXBlZGVmIHR0cF9kYXRhX3JlcXVlc3Rfc3RydWN0IGxtcF9saW5rX2Rpc2Nvbm5lY3RfaW5kaWNhdGlvbl9zdHJ1Y3Q7ICAgICAgICAgICAgIAordHlwZWRlZiB0dHBfZGF0YV9yZXF1ZXN0X3N0cnVjdCBpYXNfZ2V0X3JlbW90ZV9sc2FwX3NlbF9jb25maXJtX3N0cnVjdDsgICAgICAgICAgICAKK3R5cGVkZWYgdHRwX2RhdGFfcmVxdWVzdF9zdHJ1Y3QgdHRwX2RhdGFfaW5kaWNhdGlvbl9zdHJ1Y3Q7ICAgICAgICAgICAgICAgICAgICAgICAgCit0eXBlZGVmIHR0cF9kYXRhX3JlcXVlc3Rfc3RydWN0IHR0cF9jb25uZWN0X2luZGljYXRpb25fc3RydWN0OyAgICAgICAgICAgICAgICAgICAgIAordHlwZWRlZiB0dHBfZGF0YV9yZXF1ZXN0X3N0cnVjdCB0dHBfY29ubmVjdF9jb25maXJtX3N0cnVjdDsgICAgICAgICAgICAgICAgICAgICAgICAKK3R5cGVkZWYgdHRwX2RhdGFfcmVxdWVzdF9zdHJ1Y3QgdHRwX2xzYXBfZGlzY29ubmVjdF9pbmRpY2F0aW9uX3N0cnVjdDsgICAgICAgICAgICAgCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbDJyMnJscC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2wycjJybHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmRhZjcxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2wycjJybHAuaApAQCAtMCwwICsxLDEwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogZGF0YV94aWQuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGZvciBMMlIgdG8gUkxQIGludGVyZmFjZS4gCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX0wyUjJSTFBfSF8KKyNkZWZpbmUgX0wyUjJSTFBfSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgVEVTVF9UT09MCisjaW5jbHVkZSAidHRfZGVmcy5oIgorI2Vsc2UKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJkYXRhX3hpZC5oIiAgCisjaW5jbHVkZSAibDJyMnJscF9lbnVtcy5oIgorI2luY2x1ZGUgImwycjJybHBfc3RydWN0LmgiCisKKyNpZmRlZiBUT09MCisjaW5jbHVkZSAic2V0X2wycjJybHAuaCIKKyNpbmNsdWRlICJnZXRfbDJyMnJscC5oIgorI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sMnIycmxwX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbDJyMnJscF9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYmFmMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbDJyMnJscF9lbnVtcy5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqIGwycjJybHBfZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGluY2x1ZGVzIHRoZSBlbnVtIHZhbHVlIGJldHdlZW4gTDJSIHRvIFJMUCBpbnRlcmZhY2UuIAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9MMlJfMl9STFBfRU5VTVNfSF8KKyNkZWZpbmUgX0wyUl8yX1JMUF9FTlVNU19IXworCit0eXBlZGVmIGVudW0gCit7CisgICAgUkxQX0VSUl9OMl9USU1FT1VUUyA9IDEsICAgCisgICAgUkxQX0VSUl9JX0ZSQU1FX04yX1RJTUVPVVRTLAorICAgIFJMUF9FUlJfUE9MTF9OMl9USU1FT1VUUywKKyAgICBSTFBfRVJSX0RBVEFfTUlTTUFUQ0gsCisgICAgUkxQX0VSUl9JUl9GQUlMLAorICAgIFJMUF9FUlJfUkVNQVBfTk9UX0VOQUJMRSAgIAorfSBSTFBfRVJST1JfRU5VTTsKKwordHlwZWRlZiBlbnVtIAoreworICAgIFJMUF9SRVNQT05TRSA9IDAsICAgCisgICAgUkxQX0NPTU1BTkQKK30gUkxQX0NfUl9FTlVNOworCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbDJyMnJscF9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sMnIycmxwX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiY2Q4MjMKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbDJyMnJscF9zdHJ1Y3QuaApAQCAtMCwwICsxLDIxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogbDJyMnJscF9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGZvciBMMlIgdG8gUkxQIGludGVyZmFjZS4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwMgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEZJTEVOQU1FIDogbDJyMnJscF9zdHJ1Y3QuaAorICogIFNZTk9QU0lTIDogRnVuY3Rpb25zIGZvciBlbmNvZGluZy9kZWNvZGluZy4KKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICBSIEUgViBJIFMgSSBPIE4gICAgSCBJIFMgVCBPIFIgWQorICoKKyAqLworI2lmbmRlZiBfTDJSMlJMUF9TVFJVQ1RfSAorI2RlZmluZSBfTDJSMlJMUF9TVFJVQ1RfSAorCisjaW5jbHVkZSAiZGF0YV94aWRfc3RydWN0LmgiCisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcmF0OworICAgIGthbF91aW50OCB1c2VyX3JhdGU7CisgICAga2FsX3VpbnQ4IGlzX0ZSOworfSBsMnJfcmxwX2F0dGFjaF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggaXNfc3VjY2Vzc2Z1bDsKK30gbDJyX3JscF9jb25uX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBpc19zdWNjZXNzZnVsOworfSBsMnJfcmxwX2Nvbm5fcmVzcF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBjX29yX3I7IC8qIGNvbW1hbmQgb3IgcmVzcCovCisgICAgeGlkX3BhcmFtc19zdHJ1Y3QgeGlkX3BhcmFtczsKK30gbDJyX3JscF94aWRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGNfb3JfcjsgLyogY29tbWFuZCBvciByZXNwKi8KKyAgICB4aWRfcGFyYW1zX3N0cnVjdCB4aWRfcGFyYW1zOworfSBsMnJfcmxwX3hpZF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggZXJyb3JfY2F1c2U7Cit9IGwycl9ybHBfZXJyb3JfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGlzX3N1Y2Nlc3NmdWw7Cit9IGwycl9ybHBfcmVzZXRfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG51bV9vZl9mcmFtZXNfYWxsb3dlZDsKK30gbDJyX3JscF9yZWFkeV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggaXNfbmV4dF9mb2xsb3dlZDsKK30gbDJyX3JscF9kYXRhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB1c2VyX3JhdGU7CisgICAga2FsX3VpbnQ4IHJhdDsKK30gbDJyX3JscF9jaGFuZ2VfcmF0ZV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcmF0OworICAgIGthbF91aW50OCB1c2VyX3JhdGU7CisgICAga2FsX3VpbnQxNiBudW1fb2ZfZnJhbWVzOyAvKiBubyBvZiBmcmFtZXMgdG8gYmUgcmVtYXBwZWQqLworfSBsMnJfcmxwX3JlbWFwX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBpc19zdWNjZXNzZnVsOworfSBsMnJfcmxwX3Rlc3RfY25mX3N0cnVjdDsKKworLyogRm9yIFVUIGVudmlyb25tZW50LiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGR0eF9hbGxvdzsKKyAgICBrYWxfdWludDggcmF0OworICAgIGthbF91aW50OCB1c2VyX3JhdGU7CisgICAga2FsX3VpbnQ4IGlzX0ZSOworICAgIGthbF91aW50OCB0aWNrX3JhdGU7CisgICAga2FsX3VpbnQ4IGJ5dGVfY250OworfSBjc2RfdXBsaW5rX3RpY2tfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4ICBwb3J0OworICAgIGthbF91aW50MTYgYnl0ZV9jbnQ7Cit9IGNzZF91YXJ0X3JlYWR5X3RvX3JlYWRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggIHBvcnQ7Cit9IGNzZF91YXJ0X3JlYWR5X3RvX3dyaXRlX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4ICBwb3J0OworfSBjc2RfdWFydF9mdWxsX2luZF9zdHJ1Y3Q7CisKKyNlbmRpZiAKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbDMybGxjX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbDMybGxjX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhjOTgwOQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sMzJsbGNfZW51bXMuaApAQCAtMCwwICsxLDg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgbDMybGxjX2VudW1zLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfTDMyTExDX0VOVU1TX0gKKyNkZWZpbmUgX0wzMkxMQ19FTlVNU19ICisKKworLyogQ2lwaGVyaW5nIHRvIGJlIHVzZWQgb3IgTm90IGZvciBhIG1lc3NhZ2UgOiBVc2VkICovCisvKiBpbiBjaXBoZXJJbmQudmFsdWUgb2YgTExfVU5JVERBVEFfUkVRX01TR19TVFJVQ1QgKi8KKyNkZWZpbmUgQ0lQSEVSX09GRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENJUEhFUl9PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbDMybGxjX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2wzMmxsY19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjUyYTUzCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2wzMmxsY19zdHJ1Y3QuaApAQCAtMCwwICsxLDExOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgbDMybGxjX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgY29tbW9uIHN0cnVjdCBvZiBMYXllcjMgYW5kIExMQy4gCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9MMzJMTENfU1RSVUNUX0gKKyNkZWZpbmUgX0wzMkxMQ19TVFJVQ1RfSAorCisjaW5jbHVkZSAiYXMybmFzX3N0cnVjdC5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAibWNkX2wzX2luY19ncHJzX3N0cnVjdC5oIgorI2luY2x1ZGUgImZsYzJfY29uZmlnLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBpOworICAgIGthbF91aW50OCByYWRpb19wcmlvcml0eTsKKyAgICBrYWxfdWludDggY2lwaGVyX2luZDsKKyAgICBrYWxfdWludDggbXNnX3R5cGU7CisgICAgZmxjMl9wb29sX2lkX2VudW0gcHNwZHVfdWxfcG9vbF9pZCA7CisgICAga2FsX3VpbnQzMiB0bGxpOworICAgIGthbF91aW50OCBwZmk7CisgICAgY29uY2lzZV9xb3Nfc3RydWN0IHFvc19wYXJhbTsKKyAgICBwZWVyX21zZ19pZF9zdHJ1Y3QgcGVlcl9tc2dfaWQ7ICAgIAorfSBsbF91bml0ZGF0YV9yZXFfc3RydWN0OworCit0eXBlZGVmIGxsX3VuaXRkYXRhX3JlcV9zdHJ1Y3QgbGxnbW1fdW5pdGRhdGFfcmVxX3N0cnVjdDsKK3R5cGVkZWYgbGxfdW5pdGRhdGFfcmVxX3N0cnVjdCBsbHNtc191bml0ZGF0YV9yZXFfc3RydWN0OwordHlwZWRlZiBsbF91bml0ZGF0YV9yZXFfc3RydWN0IGxsc25kX3VuaXRkYXRhX3JlcV9zdHJ1Y3Q7CisjZW5kaWYgCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2wzX2luYy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2wzX2luYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYWJiNzIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbDNfaW5jLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBsM19pbmMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworI2lmbmRlZiBfTDNfSU5DX0hfCisjZGVmaW5lIF9MM19JTkNfSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKworI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorI2luY2x1ZGUgIm1jZF9sM19pbmNfc3RydWN0LmgiCisjaW5jbHVkZSAibDNfaW5jX2xvY2FsLmgiCisKKyNpZmRlZiBUT09MCisjaW5jbHVkZSAic2V0X2wzX2luYy5oIgorI2luY2x1ZGUgImdldF9sM19pbmMuaCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2wzbGxjX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbDNsbGNfZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODAyZWE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2wzbGxjX2VudW1zLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBsM2xsY19lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCisKKyNpZm5kZWYgX0wzTExDX0VOVU1TX0gKKyNkZWZpbmUgX0wzTExDX0VOVU1TX0gKKworCit0eXBlZGVmIGVudW0geworICAgIFJSX0NBVVNFX1BBR0VfUkVTUCwKKyAgICBSUl9DQVVTRV9DRUxMX1VQREFURSwKKyAgICBSUl9DQVVTRV9DRUxMX1VQREFURV9XSVRIX1VTRVJfREFUQSwgCisgICAgUlJfQ0FVU0VfR01NX1NJR05BTElORywKKyAgICBSUl9DQVVTRV9TTV9TSUdOQUxJTkcsCisgICAgUlJfQ0FVU0VfU01TX0RBVEEsCisgICAgUlJfQ0FVU0VfU05EX0RBVEEsCisgICAgUlJfQ0FVU0VfU05EX1NJR05BTElORywKKyAgICBSUl9DQVVTRV9MTENfU0lHTkFMSU5HLAorICAgIFJSX0NBVVNFX0xMQ19EQVRBLAorICAgIFJSX0NBVVNFX01FQVNfUkVQT1JULAorICAgIFJSX0NBVVNFX0NFTExfQ0hBTkdFX0ZBSUxVUkUsCisgICAgUlJfQ0FVU0VfUkxDX1RFU1RfTU9ERSwKKy8qIEV2ZWx5biAyMDA5MDQxNTogTWVyZ2UgUjYgKi8KKyAgICBSUl9DQVVTRV9STENfU1JCX0xPT1BCQUNLX01PREUsCisgICAgUlJfQ0FVU0VfTk9ORSA9IDB4RkYKK30gcmVzX3JlcV9jYXVzZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBOT19UTExJX0NIQU5HRSA9IDAsICAvKiBUaGlzIGlzIG1hZGUgemVybyBpbnRlbnRpb25hbGx5ICovCisgICAgVU5BU1NJR05fVExMSSwKKyAgICBVTkFTU0lHTl9PTERfVExMSSwKKyAgICBBU1NJR05fTkVXX1RMTEksCisgICAgQVNTSUdOX1RMTEksCisgICAgQ0lQSEVSX0NIQU5HRV9SRVEsCisgICAgU1RBUlRfVVNJTkdfVExMSQorfSB0bGxpX3VwZGF0ZV90eXBlX2VudW07CisKKworI2VuZGlmICAgICAgIC8qIEVuZCBvZiBsM2xsY19pbnRlcmZhY2UuaCAqLworCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sNF9jb21tb24uaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sNF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzRjOGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2w0X2NvbW1vbi5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBsNF9jb21tb24uaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCisjaWZuZGVmIF9MNF9DT01NT05fSAorI2RlZmluZSBfTDRfQ09NTU9OX0gKKworLy8jaW5jbHVkZSAia2FsX25vbl9zcGVjaWZpY19nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgVEVTVF9UT09MCisjaW5jbHVkZSAidHRfZGVmcy5oIgorI2Vsc2UKKy8vI2luY2x1ZGUgImthbF9yZWxlYXNlLmgiCisjZW5kaWYKKworZXh0ZXJuIGthbF91aW50MzIgbDRfcHVuX3NyY19idWZmWzE4MF07CitleHRlcm4ga2FsX3VpbnQzMiBsNF9wdW5fZGVzdF9idWZmWzIwMF07CisKKy8vI2luY2x1ZGUgIm1jZF9sNF9jb21tb24uaCIKKworI2lmZGVmIFRPT0wKKyNpbmNsdWRlICJzZXRfbDRfY29tbW9uLmgiCisjaW5jbHVkZSAiZ2V0X2w0X2NvbW1vbi5oIgorI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2w0YnNicF9wdWJsaWNfYXBpLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbDRic2JwX3B1YmxpY19hcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjAzMzgxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2w0YnNicF9wdWJsaWNfYXBpLmgKQEAgLTAsMCArMSwxODQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxNAorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tLS0tCisgKiAgIGw0YnNicF9wdWJsaWNfYXBpLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgZGVmaW5lcyBmdW5jdGlvbnMvZW51bXMgZm9yIGV4dGVybmFsIG1vZHVsZSB1c2FnZS4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDkgMDYgMjAxOSB0aXRpLnd1CisgKiBbTU9MWTAwNDMxOTk5XSBbOTddIGNvZGUgc3luYworICogCQorICogCS4KKyAqCisgKiAwNiAxMiAyMDE4IHBldGVyLXNsLnllaAorICogW01PTFkwMDMzMjc3MF0gRFNCUCByZWNvbmZpZyBtb2RpZmljYXRpb24gYW5kIFNJTSB0cmFuc19pZCBhZGRpdGlvbiBmb3IgRFNCUAorICogLgorICoKKyAqIDA2IDEyIDIwMTggcGV0ZXItc2wueWVoCisgKiBbTU9MWTAwMzMyNzcwXSBEU0JQIHJlY29uZmlnIG1vZGlmaWNhdGlvbiBhbmQgU0lNIHRyYW5zX2lkIGFkZGl0aW9uIGZvciBEU0JQCisgKiAuCisgKgorICogMDUgMTcgMjAxOCBwZXRlci1zbC55ZWgKKyAqIFtNT0xZMDAzMjY3MThdIFtHZW45M10gQWRkIFNCUCBBUEkgdG8gZ2V0IG9wZXJhdG9yIGJ5IFBMTU4gSUQKKyAqIC4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9MNEJTQlBfUFVCTElDX0FQSV9IXworI2RlZmluZSBfTDRCU0JQX1BVQkxJQ19BUElfSF8KKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAic2ltX2V4cG9ydGVkX2VudW0uaCIKKworCisjaWZuZGVmIEw0QlNCUF9EU0JQX01PREVfREVGSU5FRAorI2RlZmluZSBMNEJTQlBfRFNCUF9NT0RFX0RFRklORUQKK3R5cGVkZWYgZW51bQoreworICAgIEw0QlNCUF9EU0JQX01PREVfTk9ORSwKKyAgICBMNEJTQlBfRFNCUF9NT0RFXzEsCisgICAgTDRCU0JQX0RTQlBfTU9ERV8yLCAgICAgICAKK30gbDRic2JwX2RzYnBfbW9kZV9lbnVtOworI2VuZGlmCisKK3R5cGVkZWYgZW51bQoreworICAgTDRCU0JQX0RTQlBfU1RBVFVTX05PTkUsCisgICBMNEJTQlBfRFNCUF9TVEFUVVNfTEVWRUwxX0RTQlBfT05ET0lORywKKyAgIEw0QlNCUF9EU0JQX1NUQVRVU19MRVZFTDJfRFNCUF9PTkRPSU5HLAorfSBsNGJzYnBfZHNicF9zdGF0dXNfZW51bTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbDRic2JwX2dldF9kc2JwX3N0YXR1cygpCisqCisqIERFU0NSSVBUSU9OCisqICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBjdXJyZW50IEQtU0JQIHByb2NlZHVyZSBzdGF0dXMuCisqCisqIFBBUkFNRVRFUlMKKyogICBwc19pZCAgICAgICAgIFtJTl0gICAgcHJvdG9jb2wgc3RhY2sgSUQKKyoKKyogUkVUVVJOUworKiAgIGw0YnNicF9kc2JwX3N0YXR1c19lbnVtCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBsNGJzYnBfZHNicF9zdGF0dXNfZW51bSBsNGJzYnBfZ2V0X2RzYnBfc3RhdHVzKHByb3RvY29sX2lkX2VudW0gcHNfaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZVTkNUSU9OCisgKiAgbDRic2JwX2V4cGVjdGVkX2VmdW5fc3RhdGUKKyAqCisgKiBERVNDUklQVElPTgorICogIENvbXB1dGUgZXhwZWN0ZWQgRUZVTiBzdGF0ZSBhY2NvcmRpbmcgdG8gdGhlIEQtU0JQIHN0YXR1cworICoKKyAqIFBBUkFNRVRFUlMKKyAqICBjdXJyZW50X2VmdW4gICBbSU5dIGN1cnJlbnQgRUZVTiBzdGF0ZQorICoKKyAqIFJFVFVSTlMKKyAqICBrYWxfdWludDggZXhwZWN0ZWQgRUZVTiBzdGF0ZSAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4ga2FsX3VpbnQ4IGw0YnNicF9leHBlY3RlZF9lZnVuX3N0YXRlKGthbF91aW50OCBjdXJyZW50X2VmdW4pOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZVTkNUSU9OCisgKiAgbDRic2JwX2dldF9vcGVyYXRvcl9ieV9wbG1uX2lkCisgKgorICogREVTQ1JJUFRJT04KKyAqICBnZXQgU0JQIElEIGJ5IFBMTU4gSUQgKE1DQytNTkMpCisgKgorICogUEFSQU1FVEVSUworICogIHBsbW4gICAgW0lOXSAgICBQTE1OIElEIGluIGludGVnZXIgZm9ybWF0LCBleC4gNDYwLTAxID0gNDYwMDEKKyAqCisgKiBSRVRVUk5TCisgKiAgdm9pZAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBrYWxfdWludDMyIGw0YnNicF9nZXRfb3BlcmF0b3JfYnlfcGxtbl9pZChrYWxfdWludDMyIHBsbW5faWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZVTkNUSU9OCisgKiAgbDRic2JwX2dldF9hcF9kc2JwX21vZGUKKyAqCisgKiBERVNDUklQVElPTgorICogIGdldCBBUCBEU0JQIE1vZGUgKE5vbmUsIE1vZGVfMSwgTW9kZTIpCisgKgorICogUEFSQU1FVEVSUworICogIGlsbV9wdHIgW0lOXQorICoKKyAqIFJFVFVSTlMKKyAqICB2b2lkCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIGw0YnNicF9kc2JwX21vZGVfZW51bSBsNGJzYnBfZ2V0X2FwX2RzYnBfbW9kZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGVU5DVElPTgorICogIGw0YnNicF9nZXRfbWNjX21uY19mb3JfY3VycmVudF9zaW1fc2JwX2lkCisgKgorICogREVTQ1JJUFRJT04KKyAqICBnZXQgTUNDL01OQyBmb3IgY3VycmVudCB1c2VkIFNJTSBTQlAgSUQuCisgKiAgUGxlYXNlIGNvbnRhY3Qgd2l0aCBTQlAgb3duZXIgdG8gbWFrZSBzdXJlIHlvdSBjb3VsZCB1c2UgdGhpcyBBUEkuCisgKgorICogUEFSQU1FVEVSUworICogIGN1cnJlbnRfcHNfaWQgICBbSU5dIEN1cnJlbnQgUFMgSUQKKyAqICBtY2NbTDRCU0JQX01BWF9NQ0NfTU5DX0xFTl0gICAgICAgICAgICAgICAgW0lOXSBNQ0MgZm9yIGN1cnJlbnQgdXNlZCBTSU0gU0JQIElECisgKiAgbW5jW0w0QlNCUF9NQVhfTUNDX01OQ19MRU5dICAgICAgICAgICAgICAgIFtJTl0gTU5DIGZvciBjdXJyZW50IHVzZWQgU0lNIFNCUCBJRAorICoKKyAqCisgKiBSRVRVUk5TCisgKiAgVm9pZAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiB2b2lkIGw0YnNicF9nZXRfbWNjX21uY19mb3JfY3VycmVudF9zaW1fc2JwX2lkKHByb3RvY29sX2lkX2VudW0gY3VycmVudF9wc19pZCwga2FsX3VpbnQ4ICptY2MsIGthbF91aW50OCAqbW5jKTsKKworCisjZW5kaWYgLy8gX1ZETV9FWFRFUk5BTF9MSUJfSF8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sNGMyZXh0X21vZGVtX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbDRjMmV4dF9tb2RlbV9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMDQzMjIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbDRjMmV4dF9tb2RlbV9lbnVtcy5oCkBAIC0wLDAgKzEsODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBsNGMyZXh0X21vZGVtX2VudW1zLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCisjaWZuZGVmIF9MNENfRVhUX01PREVNX0VOVU1TX0gKKyNkZWZpbmUgX0w0Q19FWFRfTU9ERU1fRU5VTVNfSAorCit0eXBlZGVmIGVudW0geworICAgRVhUX01PREVNX0lETEUsCisgICBFWFRfTU9ERU1fQ0FMTF9TRVRVUCwKKyAgIEVYVF9NT0RFTV9QUFBfQUNUSVZBVElORywKKyAgIEVYVF9NT0RFTV9QUFBfQ09OTkVDVEVELAorICAgRVhUX01PREVNX1BQUF9ERUFDVElWQVRJTkcsCisgICBFWFRfTU9ERU1fUkVDVl9FU0NBUEUsCisvLyAgIEVYVF9NT0RFTV9XQUlUX09LLAorICAgRVhUX01PREVNX1NUQVRFX1NJWkUKK30gZXh0X21vZGVtX3N0YXRlX2VudW07CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2w0Y19tcnNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbDRjX21yc19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWEwNmI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2w0Y19tcnNfc3RydWN0LmgKQEAgLTAsMCArMSw2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBMNENfTVJTX1NUUlVDVF9ICisjZGVmaW5lIEw0Q19NUlNfU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICBNQUNST1MgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICBUWVBFIERFRklOSVRJT05TICYgRU5VTVMgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfZHNkYV9hbGxvd2VkOworfSBsNGNfbXNwbV9nZW1pbmlfc3RhdHVzX3VwZGF0ZV9pbmRfc3RydWN0OyAKKyAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgVkFSSUFCTEVTICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRlVOQ1RJT04gREVDTEFSQVRJT05TICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2VuZGlmIC8qIEw0Q19NUlNfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sYXBkbTJycl9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sYXBkbTJycl9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzZlYTExCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2xhcGRtMnJyX3N0cnVjdC5oCkBAIC0wLDAgKzEsMjYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgbGFwZG0ycnJfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9MQVBETTJSUl9TVFJVQ1RfSAorI2RlZmluZSBfTEFQRE0yUlJfU1RSVUNUX0gKKworLyogYWRkIFJIUiAqLworI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIiAvKiBNU0JCIGJ5IFJhY2hlbCAqLworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisKKyNpbmNsdWRlICJycl9jb21tb25fZW51bXMuaCIKKyNpbmNsdWRlICJsYXBkbV9lbnVtcy5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBsYXBkbV9zYXBpX2hlYWRlciBzYXBfaWQ7CisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hhbm5lbF90eXBlOworfSBsYXBkbV9ycl91bml0ZGF0YV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBsYXBkbV9zYXBpX2hlYWRlciBzYXBfaWQ7CisgICAgTEFQRE1fRVNUQl9NT0RFIGVzdGJfbW9kZTsKKyAgICBjaGFubmVsX3R5cGVfZW51bSBjaGFubmVsX3R5cGU7Cit9IGxhcGRtX3JyX2VzdGJfY29uZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGxhcGRtX3NhcGlfaGVhZGVyIHNhcF9pZDsKKyAgICBMQVBETV9FU1RCX01PREUgZXN0Yl9tb2RlOworICAgIGNoYW5uZWxfdHlwZV9lbnVtIGNoYW5uZWxfdHlwZTsKK30gbGFwZG1fcnJfZXN0Yl9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBsYXBkbV9zYXBpX2hlYWRlciBzYXBfaWQ7CisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hhbm5lbF90eXBlOworfSBsYXBkbV9ycl9zdXNfY29uZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGxhcGRtX3NhcGlfaGVhZGVyIHNhcF9pZDsKKyAgICBMQVBETV9FU1RCX01PREUgZXN0Yl9tb2RlOworICAgIGNoYW5uZWxfdHlwZV9lbnVtIGNoYW5uZWxfdHlwZTsKK30gbGFwZG1fcnJfcmVzdW1lX2NvbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBsYXBkbV9zYXBpX2hlYWRlciBzYXBfaWQ7CisgICAgTEFQRE1fRVNUQl9NT0RFIGVzdGJfbW9kZTsKKyAgICBjaGFubmVsX3R5cGVfZW51bSBjaGFubmVsX3R5cGU7Cit9IGxhcGRtX3JyX3JlY29uX2NvbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBsYXBkbV9zYXBpX2hlYWRlciBzYXBfaWQ7CisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hhbm5lbF90eXBlOworfSBsYXBkbV9ycl9kYXRhX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGxhcGRtX3NhcGlfaGVhZGVyIHNhcF9pZDsKKyAgICBrYWxfdWludDggcmVsZWFzZV9tb2RlOworICAgIExBUERNX0VSUk9SX0NBVVNFIGVycm9yX2NhdXNlOworICAgIGNoYW5uZWxfdHlwZV9lbnVtIGNoYW5uZWxfdHlwZTsKK30gbGFwZG1fcnJfcmVsX2NvbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBsYXBkbV9zYXBpX2hlYWRlciBzYXBfaWQ7CisgICAga2FsX3VpbnQ4IHJlbGVhc2VfbW9kZTsKKyAgICBMQVBETV9FUlJPUl9DQVVTRSBlcnJvcl9jYXVzZTsKKyAgICBjaGFubmVsX3R5cGVfZW51bSBjaGFubmVsX3R5cGU7Cit9IGxhcGRtX3JyX3JlbF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBsYXBkbV9zYXBpX2hlYWRlciBzYXBfaWQ7CisgICAgTEFQRE1fRVJST1JfQ0FVU0UgZXJyb3JfY2F1c2U7CisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hhbm5lbF90eXBlOworfSBsYXBkbV9ycl9lcnJvcl9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBsYXBkbV9zYXBpX2hlYWRlciBzYXBfaWQ7CisgICAga2FsX3VpbnQ4IGNoX21vZGU7CisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hfdHlwZTsKKyAgICBrYWxfdWludDggdGNoX3R5cGU7Cit9IGxhcGRtX3VsX2RhdGFfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICAvKiBkb3dubGluayAqLworICAgIGthbF9ib29sICB2YWxpZDsKKyAgICBsYXBkbV9zYXBpX2hlYWRlciBzYXBfaWQ7CisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hfdHlwZTsKKyAgICBrYWxfYm9vbCBpc19iYWRfZnJhbWU7CisgICAgbGFwZG1fZnJhbWVfdHlwZSBmcmFtZV90eXBlOworICAgIGthbF9ib29sIGJpdF9jcjsKKyAgICBrYWxfYm9vbCBiaXRfbTsKKyAgICBrYWxfYm9vbCBiaXRfcGY7CisgICAga2FsX3VpbnQ4IHNlbmRfc2VxX251bTsgLypyaXBwbGU6IHVzZWQgdG8gc3RvcmUgTlMgb2YgZG93biBsaW5rIGRhdGEqLworICAgIGthbF91aW50OCByZWN2X3NlcV9udW07CisgICAga2FsX3VpbnQxNiBpbmZvX2xlbjsKKworICAgIC8qIHVwbGluayAqLworICAgIGthbF91aW50MTYgc2RjY2hfdHFfY3VycmVudF9jb3VudDsgLyogV3JpdGluZyB0aW1lICovCisgICAga2FsX3VpbnQzMiBzZGNjaF91bF9kYXRhX2luZGV4OyAvKiBpbmRleCBvZiBlYWNoIHVsIGRhdGEgcmVxICovCisgICAga2FsX2Jvb2wgc2RjY2hfbmVlZF90cmFuc21pdF91bF9kYXRhOyAvKiBpbmRpY2F0ZSBpZiB1bF9kYXRhIG5lZWRzIHRvIGJlIHRyYW5zbWl0dGVkICovCisgICAga2FsX3VpbnQ4IHNkY2NoX3VsX2RhdGFbMjNdOworICAgIGthbF91aW50MTYgZmFjY2hfdHFfY3VycmVudF9jb3VudDsgLyogV3JpdGluZyB0aW1lICovCisgICAga2FsX3VpbnQzMiBmYWNjaF91bF9kYXRhX2luZGV4OyAvKiBpbmRleCBvZiBlYWNoIHVsIGRhdGEgcmVxICovCisgICAga2FsX2Jvb2wgZmFjY2hfbmVlZF90cmFuc21pdF91bF9kYXRhOyAvKiBpbmRpY2F0ZSBpZiB1bF9kYXRhIG5lZWRzIHRvIGJlIHRyYW5zbWl0dGVkICovCisgICAga2FsX3VpbnQ4IGZhY2NoX3VsX2RhdGFbMjNdOworICAgIGthbF91aW50MTYgc2FjY2hfdHFfY3VycmVudF9jb3VudDsgLyogV3JpdGluZyB0aW1lICovCisgICAga2FsX3VpbnQzMiBzYWNjaF91bF9kYXRhX2luZGV4OyAvKiBpbmRleCBvZiBlYWNoIHVsIGRhdGEgcmVxICovCisgICAga2FsX2Jvb2wgc2FjY2hfbmVlZF90cmFuc21pdF91bF9kYXRhOyAvKiBpbmRpY2F0ZSBpZiB1bF9kYXRhIG5lZWRzIHRvIGJlIHRyYW5zbWl0dGVkICovCisgICAga2FsX3VpbnQ4IHNhY2NoX3VsX2RhdGFbMjNdOworI2lmZGVmIF9fUkVQRUFURURfQUNDSF9fCisgICAga2FsX2Jvb2wgaXNfcmVwZXRpdGlvbjsgLyogU0FDQ0ggKi8KKyNlbmRpZiAvKl9fUkVQRUFURURfQUNDSF9fKi8KK30gbGFwZG1fZGxfYW5kX3VsX2luZF9zdHJ1Y3Q7CisKKy8qIGJyd2FuZywgMDYvMDQvMDgsIFtNQVVJXzAwMTg1OTE1XSB7ICovICAgIAordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgbGFwZG1fc2FwaV9oZWFkZXIgc2FwaTsKKyAgICBrYWxfdWludDggbXVpOworICAgIGthbF9ib29sICAgIGlzX3N1Y2Nlc3NmdWw7CisjaWZkZWYgX19BR1BTX0NPTlRST0xfUExBTkVfXworICAgIGxhcGRtX2xheWVyM19tZXNzYWdlX3R5cGVfZW51bSBzZWdtZW50X3R5cGU7CisjZW5kaWYgLyogX19BR1BTX0NPTlRST0xfUExBTkVfXyAqLyAgICAgCit9IGxhcGRtX3JyX2RhdGFfY29uZl9zdHJ1Y3Q7CisvKiBicndhbmcsIDA2LzA0LzA4LCBbTUFVSV8wMDE4NTkxNV0gfSAqLyAgICAKKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2xhcGRtX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbGFwZG1fZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTBjNWNhCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2xhcGRtX2VudW1zLmgKQEAgLTAsMCArMSwxMzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICAgIGxhcGRtX2VudW1zLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0xBUERNX0VOVU1TX0gKKyNkZWZpbmUgX0xBUERNX0VOVU1TX0gKKworLyogc3RhdGVzIG9mIExBUERtIEZTTSAqLwordHlwZWRlZiBlbnVtIGxhcGRtX2ZzbV9zdGF0ZQoreworICAgIExBUERNX0lETEUgPSAwLAorICAgIExBUERNX0VTVEFCTElTSElORywKKyAgICBMQVBETV9FU1RBQkxJU0hFRCwKKyAgICBMQVBETV9TVVNQRU5ERUQsCisgICAgTEFQRE1fUkVMRUFTSU5HLAorICAgIExBUERNX05VTV9TVEFURVMKK30KK2xhcGRtX2ZzbV9zdGF0ZTsKKworLyogTEFQRG0gZnJhbWUgdHlwZXMgKi8KK3R5cGVkZWYgZW51bSBsYXBkbV9mcmFtZV90eXBlCit7CisgICAgTEFQRE1fSV9GUkFNRSA9IDEsCisgICAgTEFQRE1fUlJfRlJBTUUsCisgICAgTEFQRE1fUkVKX0ZSQU1FLAorICAgIExBUERNX1NBQk1fRlJBTUUsCisgICAgTEFQRE1fRE1fRlJBTUUsCisgICAgTEFQRE1fRElTQ19GUkFNRSwKKyAgICBMQVBETV9VSV9GUkFNRSwKKyAgICBMQVBETV9VQV9GUkFNRSwKKyAgICBMQVBETV9GSUxMX0ZSQU1FCit9CitsYXBkbV9mcmFtZV90eXBlOworCit0eXBlZGVmIGVudW0gbGFwZG1fcXVldWVfdHlwZQoreworICAgIExBUERNX0lOVF9RID0gMSwKKyAgICBMQVBETV9FWFRfUQorfQorbGFwZG1fcXVldWVfdHlwZTsKKworI2lmZGVmIF9fQUdQU19DT05UUk9MX1BMQU5FX18KK3R5cGVkZWYgZW51bQoreworICAgIExBUERNX0lOSVRJQUxfQ0FVU0UgPSAwLAorICAgIEwzX01FU0dfQ0FOX05PVF9QUkVFTVBUX0FQUF9NRVNHID0gMSwKKyAgICBMM19NRVNHX0NBTl9QUkVFTVBUX0FQUF9NRVNHID0gMgorfSBsYXBkbV9hZ3BzX2NhdXNlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIEFHUFNfU0VORF9OT19GUkFNRSA9IDAsCisgICAgQUdQU19TRU5EX0ZJUlNUX1NFR19PUl9TSU5HTEVfTUVTRyA9IDEsCisgICAgQUdQU19TRU5EX01JRF9PUl9MQVNUX1NFRyA9IDIsCisgICAgQUdQU19TRU5EX05PUk1BTF9MM19NRVNHID0gMworfSBsYXBkbV9hZ3BzX3NlbmRpbmdfZW51bTsKKyNlbmRpZiAvKiBfX0FHUFNfQ09OVFJPTF9QTEFORV9fICovIAorCisvKiBQZXRlciwgTEFQRE0gcmVmYWN0b3IgKi8KK3R5cGVkZWYgZW51bQoreworICAgTEFQRE1fTk9ORV9FVkVOVF9JTl9QUk9HUkVTUyA9IDAsCisgICBMQVBETV9FU1RBQkxJU0hfSU5fUFJPR1JFU1MsCisgICBMQVBETV9JUl9FU1RCTElTSF9JTl9QUk9HUkVTUywgIAorICAgTEFQRE1fUkVMRUFTRV9JTl9QUk9HUkVTUywKKyAgIExBUERNX1JFU1VNUFRJT05fSU5fUFJPR1JFU1MsCisgICBMQVBETV9SRUNPTk5FQ1RJT05fSU5fUFJPR1JFU1MKK31sYXBkbV90cmlnZ2VyZWRfZXZlbnRfZW51bTsKKworI2VuZGlmIC8qIF9MQVBETV9FTlVNU19IICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2xsYzJsM19lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2xsYzJsM19lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNzBhNDUKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbGxjMmwzX2VudW1zLmgKQEAgLTAsMCArMSw4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIGxsYzJsM19lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX0xMQzJMM19FTlVNU19ICisjZGVmaW5lIF9MTEMyTDNfRU5VTVNfSAorCisvKiBWYWx1ZSB0byBiZSB1c2VkIGZvciBjaXBoZXJJbmQgIGluIExMX1VOSVREQVRBX0lORF9NU0cgKi8KKyNkZWZpbmUgTVNHX0RFQ0lQSEVSRUQgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNU0dfTk9UX0RFQ0lQSEVSRUQgICAgICAgICAgICAgICAxIAorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2xsYzJsM19zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGMybDNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhZGU2NwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGMybDNfc3RydWN0LmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogIGxsYzJsM19zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGNvbW1vbiBzdHJ1Y3Qgb2YgTExDIGFuZCBMYXllcjMuIAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9MTEMyTDNfU1RSVUNUX0gKKyNkZWZpbmUgX0xMQzJMM19TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNhcGk7CisgICAga2FsX3VpbnQ4IGNpcGhlcl9pbmQ7CisgICAga2FsX3VpbnQzMiB0bGxpOworfSBsbF91bml0ZGF0YV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKK30gbDNfZHVtbXlfc3RydWN0OworCisvKiBKb2huIFRhbmcgMjAwMy8wMy8xNC4gKi8KK3R5cGVkZWYgbGxfdW5pdGRhdGFfaW5kX3N0cnVjdCBsbGdtbV91bml0ZGF0YV9pbmRfc3RydWN0OwordHlwZWRlZiBsbF91bml0ZGF0YV9pbmRfc3RydWN0IGxsc21zX3VuaXRkYXRhX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGxsX3VuaXRkYXRhX2luZF9zdHJ1Y3QgbGxzbmRfdW5pdGRhdGFfaW5kX3N0cnVjdDsKKyNlbmRpZiAKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbGxjMm1tX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2xsYzJtbV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWM5OGU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2xsYzJtbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDExMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgbGxjMm1tX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgY29tbW9uIHN0cnVjdCBvZiBMTEMgYW5kIE1NLiAKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfTExDMk1NX1NUUlVDVF9ICisjZGVmaW5lIF9MTEMyTU1fU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgdGxsaTsKK30gbGxnbW1fdHJpZ2dlcl9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIHRsbGk7CisgICAga2FsX3VpbnQ4IGNhdXNlOworfSBsbGdtbV9zdGF0dXNfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBsbGdtbV9zdGF0dXNfaW5kX3N0cnVjdCBsbGNfZ21tX3N0YXR1c19pbmRfc3RydWN0OyAKKworI2VuZGlmIAorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGMycmxjX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2xsYzJybGNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEyZmE2MgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGMycmxjX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICBsbGMycmxjX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgY29tbW9uIHN0cnVjdCBvZiBMTEMgYW5kIFJMQy4gCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0xMQzJSTENfU1RSVUNUX0gKKyNkZWZpbmUgX0xMQzJSTENfU1RSVUNUX0gKKworLyogTmFuY3kgMjAxMDEwMDU6IFN1Z2dlc3QgQWRkIGZvciBSSFIgKi8KKyNpbmNsdWRlICJhczJuYXNfc3RydWN0LmgiCisjaW5jbHVkZSAibWNkX2wzX2luY19ncHJzX3N0cnVjdC5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAiZmxjMl9jb25maWcuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiB0bGxpOworICAgIGNvbmNpc2VfcW9zX3N0cnVjdCBxb3NfcGFyYW07CisgICAga2FsX3VpbnQ4IGxsY19wZHVfdHlwZTsKKyAgICBrYWxfdWludDggcmFkaW9fcHJpb3JpdHk7CisgICAgZmxjMl9wb29sX2lkX2VudW0gcHNwZHVfdWxfcG9vbF9pZCA7CisgICAga2FsX3VpbnQ4IGNhdXNlOworICAgIGthbF91aW50OCBwZHVfZm9ybWF0OworICAgIGthbF91aW50OCBwZmk7CisgICAgcGVlcl9tc2dfaWRfc3RydWN0IHBlZXJfbXNnX2lkOworICAgIGthbF91aW50OCBhYm1fdHJhbnNfaWQ7ICAgICAgICAgLyogTGV0IExMQyBrbm93cyB0aGUgbW9kZSBvZiB0aGlzIFBEVSovCit9IGdycl9kYXRhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgdGxsaTsKKyAgICBjb25jaXNlX3Fvc19zdHJ1Y3QgcW9zX3BhcmFtOworICAgIGthbF91aW50OCBsbGNfcGR1X3R5cGU7CisgICAga2FsX3VpbnQ4IHJhZGlvX3ByaW9yaXR5OworICAgIGZsYzJfcG9vbF9pZF9lbnVtIHBzcGR1X3VsX3Bvb2xfaWQgOworICAgIGthbF91aW50OCBjYXVzZTsKKyAgICBrYWxfdWludDggcGZpOworICAgIHBlZXJfbXNnX2lkX3N0cnVjdCBwZWVyX21zZ19pZDsgICAgCit9IGdycl91bml0ZGF0YV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcnhfcmVhZHk7Cit9IGdycl9yZWFkeV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19hbGxfZmx1c2g7CisgICAga2FsX2Jvb2wgYXJlX3R3b19wZHBfc2FtZV9xb3M7ICAgIAorICAgIGthbF91aW50OCByYWRpb19wcmlvcml0eTsgLyogTExDIHNoYWxsIGRlY3JlbWVudCBieSBvbmUuICovICAgIAorICAgIGNvbmNpc2VfcW9zX3N0cnVjdCBxb3NfcGFyYW07ICAgIAorICAgIGthbF9ib29sIGlzX25lZWRfY25mOworfSBncnJfZmx1c2hfcmVxX3N0cnVjdDsKKworI2VuZGlmIAorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGMyc25kX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2xsYzJzbmRfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM0ZmVlNgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGMyc25kX3N0cnVjdC5oCkBAIC0wLDAgKzEsMjA0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICBsbGMyc25kX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgY29tbW9uIHN0cnVjdCBvZiBMTEMgYW5kIFNORENQLiAKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0xMQzJTTkRfU1RSVUNUX0gKKyNkZWZpbmUgX0xMQzJTTkRfU1RSVUNUX0gKKworCisvLyBQb3lpbmc6IDIwMTAxMTA1LiBSSFIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN1Z2dlc3QgQWRkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBpOworICAgIGthbF91aW50MzIgdGxsaTsKKyAgICBrYWxfdWludDE2IHVpX2luZm9fZmllbGRfbGVuZ3RoOworICAgIGthbF91aW50MTYgaV9pbmZvX2ZpZWxkX2xlbmd0aDsKK30gbGxfZXN0YWJsaXNoX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBpOworICAgIGthbF91aW50MzIgdGxsaTsKKyAgICBrYWxfdWludDE2IHVpX2luZm9fZmllbGRfbGVuZ3RoOworICAgIGthbF91aW50MTYgaV9pbmZvX2ZpZWxkX2xlbmd0aDsKK30gbGxfZXN0YWJsaXNoX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBpOworICAgIGthbF91aW50MzIgdGxsaTsKKyAgICBrYWxfdWludDE2IHVpX2luZm9fZmllbGRfbGVuZ3RoOworICAgIGthbF91aW50MTYgaV9pbmZvX2ZpZWxkX2xlbmd0aDsKK30gbGxfeGlkX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBpOworICAgIGthbF91aW50MzIgdGxsaTsKKyAgICBrYWxfdWludDE2IHVpX2luZm9fZmllbGRfbGVuZ3RoOworICAgIGthbF91aW50MTYgaV9pbmZvX2ZpZWxkX2xlbmd0aDsKK30gbGxfeGlkX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBpOworICAgIGthbF91aW50OCBsX3BhcmFtZXRlcjsKKyAgICBrYWxfdWludDMyIHRsbGk7Cit9IGxsX3JlbGVhc2VfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNhcGk7CisgICAga2FsX3VpbnQzMiB0bGxpOworfSBsbF9yZWxlYXNlX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBpOworICAgIGthbF91aW50MzIgdGxsaTsKKyAgICBrYWxfdWludDE2IHVpX2luZm9fZmllbGRfbGVuZ3RoOworICAgIGthbF91aW50MTYgaV9pbmZvX2ZpZWxkX2xlbmd0aDsKK30gbGxfcmVzZXRfaW5kX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc2FwaTsKKyAgICBrYWxfdWludDMyIHRsbGk7Cit9IGxsX2RhdGFfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNhcGk7CisgICAga2FsX3VpbnQxNiByZWZlcmVuY2U7CisgICAga2FsX3VpbnQzMiB0bGxpOworfSBsbF9kYXRhX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBpOworICAgIGthbF91aW50MzIgdGxsaTsKKyAgICBrYWxfdWludDggY2F1c2U7Cit9IGxsX3N0YXR1c19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKK30gbGxfZmx1c2hfY25mX3N0cnVjdDsKKwordHlwZWRlZiBsbF9lc3RhYmxpc2hfaW5kX3N0cnVjdCBsbHNuZF9lc3RhYmxpc2hfaW5kX3N0cnVjdDsKK3R5cGVkZWYgbGxfZXN0YWJsaXNoX2NuZl9zdHJ1Y3QgbGxzbmRfZXN0YWJsaXNoX2NuZl9zdHJ1Y3Q7Cit0eXBlZGVmIGxsX3hpZF9pbmRfc3RydWN0IGxsc25kX3hpZF9pbmRfc3RydWN0OwordHlwZWRlZiBsbF94aWRfY25mX3N0cnVjdCBsbHNuZF94aWRfY25mX3N0cnVjdDsKK3R5cGVkZWYgbGxfcmVsZWFzZV9pbmRfc3RydWN0IGxsc25kX3JlbGVhc2VfaW5kX3N0cnVjdDsKK3R5cGVkZWYgbGxfcmVsZWFzZV9jbmZfc3RydWN0IGxsc25kX3JlbGVhc2VfY25mX3N0cnVjdDsKK3R5cGVkZWYgbGxfZGF0YV9jbmZfc3RydWN0IGxsc25kX2RhdGFfY25mX3N0cnVjdDsKK3R5cGVkZWYgbGxfcmVzZXRfaW5kX3N0cnVjdCBsbHNuZF9yZXNldF9pbmRfc3RydWN0OwordHlwZWRlZiBsbF9kYXRhX2luZF9zdHJ1Y3QgbGxzbmRfZGF0YV9pbmRfc3RydWN0OwordHlwZWRlZiBsbF9zdGF0dXNfaW5kX3N0cnVjdCBsbHNuZF9zdGF0dXNfaW5kX3N0cnVjdDsKK3R5cGVkZWYgbGxfZmx1c2hfY25mX3N0cnVjdCBsbHNuZF9mbHVzaF9jbmZfc3RydWN0OworI2VuZGlmIAorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGNfZmxvd2N0cmwuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGNfZmxvd2N0cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjJmZDExCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2xsY19mbG93Y3RybC5oCkBAIC0wLDAgKzEsMTM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICoJbGxjX2Zsb3djdHJsLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zIGFuZCBlbnVtZXJhdGlvbnMgZm9yIExMQy1zcGVjaWZpYyBmbG93IGNvbnRyb2wuCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfTExDX0ZMT1dDVFJMX0gKKyNkZWZpbmUgX0xMQ19GTE9XQ1RSTF9ICisKKy8qKioqKioqKioqKioqKioqKgorSW5jbHVkZSBTdGF0ZW1lbnRzCisqKioqKioqKioqKioqKioqKiovCisvLyNpbmNsdWRlICJrYWxfbm9uX3NwZWNpZmljX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJmbGMyX2NvbmZpZy5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioKK01hY3JvcyBXaXRob3V0IFBhcmFtZXRlcnMgCisqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioKK0VudW1zIFdpdGhvdXQgVGFncyAKKyoqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKgorVHlwZSBEZWZpbml0aW9ucyAKKyoqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgZW51bSB7CisgICAgTExDX0dQUlNfQUNLX0RBVEEsCisgICAgTExDX0dQUlNfVU5BQ0tfREFUQSwKKyAgICBMTENfR1BSU19TVVBFUlZJU09SWV9EQVRBCit9IGxsY19mbGMyX2RhdGFfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIExMQ19HUFJTX1VMLAorICAgIExMQ19HUFJTX0RMLAorICAgIExMQ19HUFJTX1VMX0RMIC8vSmVmZjogTmVlZCB0byBkaXNjdXNzCit9IGxsY19mbGMyX2Rpcl9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIExMQ19HUFJTX0ZMQ19STlJfVFJJR0dFUiwKKyAgICBMTENfR1BSU19GTENfUlJfVFJJR0dFUgorfSBsbGNfZmxjMl9zdGFja190cmlnZ2VyX2VudW07CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfdWludDggc2FwaTsKKyAgIGthbF91aW50MzIgYmxvY2tlZF9tZW1fc2l6ZTsKK30gbGxjX2ZsYzJfcnJfcm5yX3hpZF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBsbGNfZmxjMl9ycl9ybnJfeGlkX3N0cnVjdCBsbHNuZF9ybnJfc3RvcF9zdHJ1Y3Q7Cit0eXBlZGVmIGxsY19mbGMyX3JyX3Jucl94aWRfc3RydWN0IHJsY19sbGNfcm5yX3RyaWdnZXJfc3RydWN0OworCisvKioqKioqKioKK0NvbnN0YW50cyAKKyoqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKgorTWFjcm9zIFdpdGggUGFyYW1ldGVycyAKKyoqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioKK0V4cG9ydGVkIEZ1bmN0aW9uIFByb3RvdHlwZXMgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitmbGMyX3Bvb2xfaWRfZW51bSBsbGNfZ2V0X2ZsYzJfcG9vbF9pZF9lbnVtX3ZhbCAoa2FsX3VpbnQ4IHNhcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGxjX2ZsYzJfZGF0YV90eXBlX2VudW0gZGF0YV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxsY19mbGMyX2Rpcl9lbnVtIGRpcik7CisKK2ZsYzJfcG9vbF9pZF9lbnVtIGxsY19nZXRfZmxjMl9wb29sX2lkX2VudW1fZnJvbV9uc2FwaSAoa2FsX3VpbnQ4IG5zYXBpKTsKKwordm9pZCBsbGNfZmxjMl9ybnJfcnJfaW5kKGZsYzJfcG9vbF9pZF9lbnVtIHBvb2xfaWQsIGxsY19mbGMyX3N0YWNrX3RyaWdnZXJfZW51bSBhY3Rpb25fcmVxKTsKKworLyogUm9lYnJ0IDptb3ZlIHRvIEZMQzIgKi8KKy8qCitleHRlcm4gdm9pZCBmbGMyX2NpcGhlcl9jYWxsYmFjayhmbGMyX3RocmVzX2hpdF9lbmVudF9lbnVtIGV2ZW50LCBmbGMyX3Bvb2xfaWRfZW51bSBwb29sX2lkKTsKKyovCisKK2V4dGVybiB2b2lkIGxsY19mbGMyX3BzcGR1X2Fja19kbF9wb29sX2xvd190aHJlc2hvbGRfaGl0KGZsYzJfcG9vbF9pZF9lbnVtIHBvb2xfaWQpOworCitleHRlcm4gdm9pZCBsbGNfZmxjMl9wc3BkdV9hY2tfZGxfcG9vbF9oaWdoX3RocmVzaG9sZF9oaXQoZmxjMl9wb29sX2lkX2VudW0gcG9vbF9pZCk7CisKK2ZsYzJfcG9vbF9pZF9lbnVtIGxsY19nZXRfZmxjMl9wb29sX2lkX2VudW1fdmFsX2J5X25zYXBpIChrYWxfdWludDggbnNhcGksIGxsY19mbGMyX2Rpcl9lbnVtIGRpcik7CisKKyNlbmRpZiAvKiBfTExDX0ZMT1dDVFJMX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGNfcGVlcl9pbnRlcmZhY2UuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGNfcGVlcl9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWI5YTAyCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2xsY19wZWVyX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqCWxsY19wZWVyX2ludGVyZmFjZS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgb2YgZW51bSB0eXBlIHVzZWQgaW4gQVNOLUdlbmVyYXRlZCBoZWFkZXIKKyAqCSBmaWxlLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9MTENfUEVFUl9JTlRFUkZBQ0VfSF8KKyNkZWZpbmUgX0xMQ19QRUVSX0lOVEVSRkFDRV9IXworCit0eXBlZGVmIGVudW0ge1JSID0gMCwgUk5SID0gMSwgQUNLID0gMiwgU0FDSyA9IDN9IGZyYW1lX3R5cGVfZW51bTsKK3R5cGVkZWYgZW51bSB7IFRXT19CSVQsIEVJR0hUX0JJVCB9ICAgICAgICAgICAgICAgbGVuX2VudW07CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGNfc3BlY2lmaWNfZGVmaW5lcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2xsY19zcGVjaWZpY19kZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y1MTZkZAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGNfc3BlY2lmaWNfZGVmaW5lcy5oCkBAIC0wLDAgKzEsMjk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKglsbGNfc3BlY2lmaWNfZGVmaW5lcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgb2YgZGVmaW5lIGNvbnN0YW50cyBhbmQgTUFDUk9zIHVzZWQgaW4gTExDCisgKgkgaW1wbGVtZW50YXRpb24uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAJCQkJSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX0xMQ19TUEVDSUZJQ19ERUZJTkVTX0gKKyNkZWZpbmUgX0xMQ19TUEVDSUZJQ19ERUZJTkVTX0gKKworLyoqKioqKioqKioqKioqKioqCitJbmNsdWRlIFN0YXRlbWVudHMKKyoqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKgorTWFjcm9zIFdpdGhvdXQgUGFyYW1ldGVycyAKKyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIC0tLS0gbGxjX2RlZnMuaCAtLS0tICovCisKKyNpZmRlZiBfX1NNU19PVkVSX1BTX1NVUFBPUlRfXworI2RlZmluZSBOT19PRl9BRE1fU0FQSSAgICAgICAgICAgICAgICAyCisjZWxzZQorI2RlZmluZSBOT19PRl9BRE1fU0FQSSAgICAgICAgICAgICAgICAxCisjZW5kaWYKKworI2RlZmluZSBOT19PRl9BQk1fU0FQSSAgICAgICAgICAgICAgICA0CisKKyNpZm5kZWYgX19NVEtfVEFSR0VUX18KKyNkZWZpbmUgTUFYX0xMQ19RVUVVRV9TSVpFICAgICAgICAgICA0OCAKKyNlbHNlIC8qIF9fTVRLX1RBUkdFVF9fICovCisKKy8qIEplZmYgV3UgMjAwNS0xMi0yMTogTUFYX0xMQ19RVUVVRV9TSVpFIG1heSBiZSBvYnNlbGV0ZS4gTmVlZCBkaXNjdXNzIHdpdGggSm9zZXBoICovCisjZGVmaW5lIE1BWF9MTENfUVVFVUVfU0laRSAgICAgICAgICAgNDgqMiAvLyhQRFVfQ09OVFhUX1VOQUNLX1VMX01BWF9OVU1fT0ZfQlVGRiAqIDIpIC8vc2FtZSBhcyBQRFVfQ09OVFhUX1VOQUNLX1VMX01BWF9OVU1fT0ZfQlVGRiAqIDIgUERQIGNvbnRleHQKKworI2VuZGlmIC8qIF9fTVRLX1RBUkdFVF9fICovCisKKyNkZWZpbmUgREVGQVVMVF9MTENfVFhfUVVFVUVfU0laRSAgICAgICBNQVhfTExDX1FVRVVFX1NJWkUgCisKKyNkZWZpbmUgVU5BU1NJR05FRF9UTExJICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorCisjZGVmaW5lIEFDS19GT1JNQVQgICAgICAgICAgMQorI2RlZmluZSBOT05fQUNLX0ZPUk1BVCAgICAgIDAKKyNkZWZpbmUgQUNLX1JFUUQgICAgICAgICAgICAxCisjZGVmaW5lIEFDS19OT1RfUkVRRCAgICAgICAgMgorCisjZGVmaW5lIFNBQ0tfQklUTUFQX01BU0sgICAgMHgxZgorI2RlZmluZSBVSV9GUkFNRV9GT1JNQVQgICAgIDYKKworCisvKiAtLS0tIGxsY19sbGVyeC5oIC0tLS0gKi8KKyNkZWZpbmUgTUlOX1VfRlJBTUVfTEVOR1RIICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIE1JTl9GUk1SX0ZSQU1FX0xFTkdUSCAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgTUlOX1VJX0ZSQU1FX0xFTkdUSF9GT1JfR01NICAgICAgICA2ICsgMgorI2RlZmluZSBNSU5fVUlfRlJBTUVfTEVOR1RIX0ZPUl9TTkRDUCAgICAgIDYgKyBOMjAyCisjZGVmaW5lIE1JTl9VSV9GUkFNRV9MRU5HVEhfRk9SX1NNUyAgICAgICAgOCAKKyNkZWZpbmUgTUlOX1NfTk9OU0FDS19GUkFNRV9MRU5HVEggICAgICAgICA2CisjZGVmaW5lIE1JTl9TX1NBQ0tfRlJBTUVfTEVOR1RIICAgICAgICAgICAgNworI2RlZmluZSBNSU5fU05fREFUQV9SRVFfSEVBREVSX0xFTkdUSCAgICAxCisjZGVmaW5lIE1JTl9JX05PTlNBQ0tfRlJBTUVfTEVOR1RIICAgICAgICAgKCA3ICsgTUlOX1NOX0RBVEFfUkVRX0hFQURFUl9MRU5HVEggKQorLyogLS0tLSBlbmQgb2YgbGxjX2xsZXJ4LmggLS0tLSAqLworCisKKy8qIC0tLS0gbGxjX2xsbWUuaCAtLS0tICovCisjZGVmaW5lIFBNX0JJVF9PTiAgICAgIDB4MDEKKy8qIC0tLS0gZW5kIG9mIGxsY19sbG1lLmggLS0tLSAqLworCisKKworLyogLS0tLSBsbGNfbXV4LmggLS0tLSAqLworI2RlZmluZSBHRU5FUkFURV9DUkMgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ0hFQ0tfQ1JDICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBST1RFQ1RFRF9NT0RFICAgICAgICAgICAgMQorI2RlZmluZSBVTlBST1RFQ1RFRF9NT0RFICAgICAgICAgIDAKKworI2RlZmluZSBOMjAyICAgICAgICAgICAgICAgICAgICAgIDQKKworLyogLS0tLSBlbmQgb2YgbGxjX211eC5oIC0tLS0gKi8KKworCisvKiAtLS0tIGxsY19wZWVyLmggLS0tLSAqLworCisjZGVmaW5lIEZDU19MRU5HVEggICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFVfSEVBREVSX0xFTkdUSCAgICAgICAgICAgICAyCisjZGVmaW5lIFVJX0hFQURFUl9MRU5HVEggICAgICAgICAgICAzCisjZGVmaW5lIElfSEVBREVSX0xFTkdUSCAgICAgICAgICAgICA0CisjZGVmaW5lIElfU0FDS19GSVhFRF9IRUFERVJfTEVOR1RIICA1CisjZGVmaW5lIFNfU0FDS19GSVhFRF9IRUFERVJfTEVOR1RIICAzCisjZGVmaW5lIENPTlRST0xfRklFTERfT0ZGU0VUICAgICAgICAxCisKKyNkZWZpbmUgU0VUX1cxX0ZJRUxEICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgU0VUX1cyX0ZJRUxEICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgU0VUX1czX0ZJRUxEICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgU0VUX1cxVzNfRklFTEQgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgU0VUX1czVzRfRklFTEQgICAgICAgICAgICAgIDB4MEMKKyNkZWZpbmUgU0VUX1cyVzRfRklFTEQgICAgICAgICAgICAgIDB4MEEKKyNkZWZpbmUgU0VUX1cxVzNXNF9GSUVMRCAgICAgICAgICAgIDB4MEQKKworCisvKiBQRCB2YWx1ZSAqLworI2RlZmluZSBERUZBVUxUX1BEICAgICAgICAgICAgICAgICAgMHgwMAorCisKKy8qKiogQ1IgYml0IHZhbHVlcyBpbiBMTEMgZnJhbWUgKioqLworI2RlZmluZSBNU19DT01NQU5EICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1TX1JFU1BPTlNFICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU0dTTl9DT01NQU5EICAgICAgICAgICAgICAgMQorI2RlZmluZSBTR1NOX1JFU1BPTlNFICAgICAgICAgICAgICAwCisKKyNkZWZpbmUgRlJNUl9JTkZPX0xFTkdUSCAgICAgICAgICAgMHgwQQorI2RlZmluZSBBRERfRklFTERfTEVOR1RIICAgICAgICAgICAweDAxCisjZGVmaW5lIFJFSl9GUk1fQ05UUkxfTEVOR1RIICAgICAgIDB4MDYKKworLyogSSBmcmFtZSBhbmQgUyBmcmFtZSBmb3JtYXRzICovCisjZGVmaW5lIFJSX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNBQ0tfRk9STUFUICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFDS19GT1JNQVQgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFJOUl9GT1JNQVQgICAgICAgICAgICAgICAgICAyCisKKyNkZWZpbmUgWElEX0NPTU1BTkQgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgWElEX1JFU1BPTlNFICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgU19GT1JNQVRfQklUUyAgICAgICAgICAgICAgMHgwMgorCisjZGVmaW5lIElfRk9STUFUX0JJVCAgICAgICAgICAgICAgIDB4MDAKKworCisjZGVmaW5lIFVBX1JFU1BPTlNFICAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgU0FCTV9DT01NQU5EICAgICAgICAgICAgICAgMHgwNworCisvKiAtLS0tIGVuZCBvZiBsbGNfcGVlci5oIC0tLS0gKi8KKworCisvKioqKioqKioqKioqKioqKioKK0VudW1zIFdpdGhvdXQgVGFncyAKKyoqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bSB7CisgICAgTExDX0lOVkFMSURfUERVLAorICAgIExMQ19MM19QRFUsCisgICAgTExDX1JFU19QRFUsCisgICAgTExDX0RBVEFfSV9QRFUsCisgICAgTExDX1NBQk1fQ01ELAorICAgIExMQ19YSURfQ01ELAorICAgIExMQ19JTlFVSVJZX0NNRCwKKyAgICBMTENfRElTQ19DTUQsCisgICAgTExDX0NFTExfVVBEQVRFLAorICAgIExMQ19EQVRBX1VJX1BEVQorfSBsbGNfcGVlcl9tc2dfdHlwZV9lbnVtOworCisvKiBMTEMgcGVlciBtZXNzYWdlIG5hbWUgZm9yIHRvb2wgbG9nZ2luZyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBMTENfX1NBQk1fQ01ELAorICAgIExMQ19fRElTQ19DTUQsCisgICAgTExDX19YSURfQ01ELAorICAgIExMQ19fVUFfUlNQLAorICAgIExMQ19fRE1fUlNQLAorICAgIExMQ19fWElEX1JTUCwKKyAgICBMTENfX0ZSTVJfUlNQCit9IGxsY19wZWVyX21zZ19uYW1lX2VudW07CisKKy8qKioqKioqKioqKioqKioKK1R5cGUgRGVmaW5pdGlvbnMgCisqKioqKioqKioqKioqKioqLworCisvKioqKioqKioKK0NvbnN0YW50cyAKKyoqKioqKioqKi8KKworI2RlZmluZSBMTENfUFJFRl9OMjAxX1VJICAgICAgICAgICAgMTUwNAorCisvKioqKioqKioqKioqKioqKioqKioqCitNYWNyb3MgV2l0aCBQYXJhbWV0ZXJzIAorKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogLS0tLSBsbGNfYXJxdHguaCAtLS0tICovCisKKyNkZWZpbmUgR0VUX0NFSUwoYSxiKSAgICAoKChhKSArIChiKSAtIDEpIC8gKGIpKQorCisvKiAtLS0tIGVuZCBvZiBsbGNfYXJxdHguaCAtLS0tICovCisKKy8qIC0tLS0gIGxsY19kZWZzLmggLS0tLSAqLworI2RlZmluZSBHRVRfQURNU0FQSV9GUk9NX0lOREVYKHN0cnVjdF9ubykgXAorICAgICAgICAgICAgICAgIExMQ19HRVRfQURNX1NBUElfRlJPTV9TVFJVQ1RfQ05TVFtzdHJ1Y3Rfbm9dCisKKyNkZWZpbmUgR0VUX0FCTVNBUElfRlJPTV9JTkRFWChzdHJ1Y3Rfbm8pIFwKKyAgKChzdHJ1Y3Rfbm8pIDw9IDEgKSA/ICgoMiAqIChzdHJ1Y3Rfbm8pKSszKTogKCgyKihzdHJ1Y3Rfbm8pKSsgNSkKKworI2RlZmluZSBHRVRfSU5ERVhfRlJPTV9BQk1TQVBJKHNhcGkpIFwKKyAgICAgICAgICAgICAgICAoKChzYXBpKSAtIDEpIC8gMykKKworLy8jZGVmaW5lIEJJVE1BU0soWCkgKDFMIDw8IChYKSkKKyNkZWZpbmUgQklUTUFTSyhYKSAoMVVMIDw8IChYKSkKKworLyogLS0tLSBlbmQgb2YgbGxjX2RlZnMuaCAtLS0tICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioKK0V4cG9ydGVkIEZ1bmN0aW9uIFByb3RvdHlwZXMgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitEZWNsYXJhdGlvbnMgT2YgRXhwb3J0ZWQgR2xvYmFscyAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNlbmRpZiAvKiBfTExDX1NQRUNJRklDX0RFRklORVNfSCAqLworCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGNfdmFyc3RyLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbGxjX3ZhcnN0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YTU0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbGxjX3ZhcnN0ci5oCkBAIC0wLDAgKzEsMTA3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICBsbGNfdmFyc3RyLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX0xMQ19WQVJTVFJfSF8KKyNkZWZpbmUgX0xMQ19WQVJTVFJfSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgVEVTVF9UT09MCisjaW5jbHVkZSAidHRfZGVmcy5oIgorI2Vsc2UKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJsM19pbmMuaCIKKyNpbmNsdWRlICJsbGNfdmFyc3RyX3N0cnVjdC5oIgorI2luY2x1ZGUgImxsY192YXJzdHJfcHVuLmgiCisKKyNpZmRlZiBUT09MCisjaW5jbHVkZSAic2V0X2xsY192YXJzdHIuaCIKKyNpbmNsdWRlICJnZXRfbGxjX3ZhcnN0ci5oIgorI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0xMQ19WQVJTVFJfSF8gKi8KKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbGxjY2lwaGVyX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbGxjY2lwaGVyX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhZTNiMQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGNjaXBoZXJfZW51bXMuaApAQCAtMCwwICsxLDgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICBsbGNjaXBoZXJfZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogIFRoaXMgZmlsZSBjb250YWlucyBlbnVtIGRlZmluaXRpb24gYmV0d2VlbiBjaXBoZXJpbmcgbW9kdWxlIGFuZCBMTEMuIAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX0xMQ0NJUEhFUl9JTlRFUkZBQ0VfSAorI2RlZmluZSBfTExDQ0lQSEVSX0lOVEVSRkFDRV9ICisKKyNkZWZpbmUgTUFYX0NJUEhFUl9ERUNJUEhFUl9SRVEgMTUKKyAKKyNlbmRpZiAgICAgICAvKiBFbmQgb2YgbGxjY2lwaGVyX2ludGVyZmFjZS5oICovCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGNybGNfZW51bXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9sbGNybGNfZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzUwZDkzCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL2xsY3JsY19lbnVtcy5oCkBAIC0wLDAgKzEsMTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICBsbGNybGNfZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogIFRoaXMgZmlsZSBjb250YWlucyBlbnVtIGRlZmluaXRpb24gYmV0d2VlbiBMTEMgYW5kIFJMQy4gCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX0xMQ1JMQ19JTlRFUkZBQ0VfSAorI2RlZmluZSBfTExDUkxDX0lOVEVSRkFDRV9ICisKKy8qKiogTDMgbWVzc2FnZSB0eXBlcyAqKiovCisjZGVmaW5lIE5PVF9TSUdOQUxMSU5HX01TRyAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgU0lHTkFMTElOR19NU0cgICAgICAgICAgICAgICAgICAgMHgwMQorCisjZGVmaW5lIE5PVF9TSUdOQUxMSU5HX01TRyAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgU0lHTkFMTElOR19NU0cgICAgICAgICAgICAgICAgICAgMHgwMQorCisvKioqIExMQyBtZXNzYWdlIHR5cGVzICoqKi8KK3R5cGVkZWYgZW51bSB7CisgICAgSV9GT1JNQVRfMDAwID0gMCwKKyAgICBJX0ZPUk1BVF8wMDEgPSAxLAorICAgIElfRk9STUFUXzAxMCA9IDIsCisgICAgSV9GT1JNQVRfMDExID0gMywKKworICAgIFNfRk9STUFUXzEwMCA9IDQsCisgICAgU19GT1JNQVRfMTAxID0gNSwKKworICAgIFVJX0ZPUk1BVF8xMTAgPSA2LAorICAgIFVfRk9STUFUXzExMSA9IDcsCisKKyAgICBVTkNJUEhFUkVEX0lfRk9STUFUID0gOAorfSBsbGNfcGR1X2Zvcm1hdF9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIExMQ19TQUNLX0ZSQU1FLAorICAgIExMQ19OT05fU0FDS19GUkFNRQorfSBsbGNfcGR1X3R5cGU7CisKKworI2VuZGlmIC8qIEVuZCBvZiBGaWxlICdsbGNybGNfaW50ZXJmYWNlLmgnICovCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21hYzJybGNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbWFjMnJsY19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWEwY2ZkCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21hYzJybGNfc3RydWN0LmgKQEAgLTAsMCArMSw0ODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICoJbWFjMnJsY19zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9NQUMyUkxDX1NUUlVDVF9ICisjZGVmaW5lIF9NQUMyUkxDX1NUUlVDVF9ICisKKy8qRXZlbHluOiBSZW1vdmUgcmVkdW5kYW50IGhlYWRlciBhbmQgZmlsZSAqLworI2luY2x1ZGUgInJsY21hY19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgInJyX2NvbW1vbl9kZWYuaCIKKyNpbmNsdWRlICJncHJzX3JsY21hY19jb21tb25fc3RydWN0LmgiCisjaW5jbHVkZSAicmxjX21hY19lbnVtcy5oIgorCit0eXBlZGVmIHN0cnVjdCB0YmZfcmVsX3N0cnVjdCBtYWNfcmxjX3RiZl9yZWxfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCBjczsKKyAgICBrYWxfdWludDggKmRhdGFfcHRyOworICAgICNpZmRlZiBfX0VHUFJTX01PREVfXworICAgIGthbF91aW50OCAqZGF0YTJfcHRyOworICAgIGthbF91aW50OCBoZWFkZXJbNl07CisgICAgI2VuZGlmCisvKiBFdmVseW4gMjAwOTA0MTU6IE1lcmdlIFI2ICovCisKKyAgICAjaWZkZWYgX19HRVJBTl9GQU5SX18KKyAgICBrYWxfYm9vbCBpc19kYXRhX3ZhbGlkOworICAgIGthbF9ib29sIGlzX3Bhbl92YWxpZDsKKyAgICBrYWxfdWludDggcGFuWzRdOworICAgICNlbmRpZgorfSBkbF9ibG9ja19zdHJ1Y3Q7CisKKy8qIEV2ZWx5biAyMDA5MDQxNTogTWVyZ2UgUjYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggbWFjX21vZGU7CisgICAga2FsX3VpbnQ4IGNzOworICAgIGthbF91aW50OCB0aW1lc2xvdHNfYWxsb2NhdGlvbjsKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKyAgICAvKiBDbGFpcmUgMDQxMTE3IGNoYW5nZSA6IFJldmlzZSBHUFJTIGhlYWRlciBwYXJ0aXRpb24gYmV0d2VlbiBSTEMgYW5kIE1BQyAqLworICAgIGthbF91aW50OCB0Zmk7ICAgICAgLypTaW1vbiB1c2UgdGZpIHRvIGZpbGwgaGVhZGVyKi8KKworICAgICNpZmRlZiBfX0VHUFJTX01PREVfXworICAgIGthbF91aW50MTYgZWdwcnNfd2luZG93X3NpemU7CisgICAga2FsX3VpbnQ4IHJlc2VnbWVudDsgLyogcmVzZWdtZW50IGJpdCAqLworICAgICNlbmRpZgorICAgIGthbF91aW50OCBybGNfbW9kZTsKKyAgICAvKiBFdmVseW46IFRvIHNsb3ZlIFtNQVVJXzAxNjE5NDUzXSBLZW55YSBGVCBUMzE2OCByZXN0YXJ0IGlzc3VlICAqLworICAgIC8qIEV2ZWx5bjogVG8gc2xvdmUgdGhlIG5vbi1zeW5jIHByb2JsZW0gdGhhdCBNQUMgY2xlYW4gcmVzX3JlcSB3aGVuIHJlY2VpdmluZyBhc3NpZ25tZW50IAorICAgICAqICAgICAgICAgQnV0IFJMQyB0aGluayByZXNfcmVxIGFscmVhZHkgc2VudCBhZnRlciBSTENfTUFDX1JFU19SRVEgaW4gVUwgc3RhdGUuIAorICAgICAqICAgICAgICAgU28gdGVsbCBSTEMgcmVzX3JlcSBpcyBzZW50IG9yIG5vdC4gKi8KKyAgICBrYWxfYm9vbCByZXNfcmVxX2lzX3NlbnQ7CisKKy8qIEV2ZWx5bjogUjcgTGF0ZW5jeSBSZWR1Y2F0aW9uIERldmVsb3BtZW50ICovCisjaWZkZWYgX19HRVJBTl9SVFRJX18KKyAgICB0dGlfY29uZmlnX2VudW0gdHRpX21vZGU7CisjZW5kaWYKK30gdWxfY29uX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IG1hY19ybGNfdWxfY29uX2luZF9zdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggdGxsaV9jaGFubmVsX2NvZGluZzsKKworICAgICNpZm5kZWYgX19SRU1PVkVfRkFfXworICAgIGthbF91aW50OCBmaW5hbF9hbGxvY2F0aW9uOworICAgICNlbmRpZgorICAgICNpZm5kZWYgX19SRUw1X18KKyAgICBrYWxfdWludDE2IGJsa3NfZ3JhbnRlZDsKKyAgICAjZW5kaWYKKworICAgIGthbF91aW50OCBwaF9jb250OworCisgICAgI2lmZGVmIF9fRUdQUlNfTU9ERV9fCisgICAga2FsX3VpbnQ4IHRiZl90eXBlOworICAgICNlbmRpZgorCisgICAga2FsX3VpbnQ4IG5vX3VsX2Nvbl9pbmQ7CisgICAgdWxfY29uX2luZF9zdHJ1Y3QgbXVsdGlfdWxfY29uX2luZFtNVUxUSVBMRV9UQkZfTlVNXTsKKyAgICAjaWZkZWYgX19HRVJBTl9GQU5SX18KKyAgICBrYWxfYm9vbCBpc19mYW5yX2FjdGl2ZTsKKyAgICBrYWxfdWludDggdGFuX3R5cGU7CisgICAga2FsX3VpbnQzMiB0c2g7CisgICAga2FsX3VpbnQ4IFJlcG9ydGVkX3RpbWVzbG90OworICAgICNlbmRpZgorfSBtYWNfcmxjX3VsX2Nvbl9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggdHlwZTsKK30gbWFjX3JsY19mYWlsdXJlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBub19ibGtzOworICAgIGthbF91aW50OCBibGtzX3NlbnQ7CisgICAga2FsX3VpbnQxNiBmcmFtZV9udW1iZXI7CisvKiBFdmVseW4gMjAwOTA0MTU6IE1lcmdlIFI2ICovCisgICAga2FsX3VpbnQ4IHBmaTsKK30gbWFjX3JsY19kYXRhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAKKyAgICBrYWxfdWludDggY3M7CisgICAga2FsX3VpbnQ4IGZpbmFsX2FsbG9jYXRpb247CisgICAga2FsX3VpbnQ4IGRhdGFfYmxrc19ncmFudGVkOworICAgIGthbF91aW50MTYgZnJhbWVfbnVtYmVyOworI2lmZGVmIF9fRUdQUlNfTU9ERV9fCisgICAga2FsX3VpbnQ4ICAgICAgICAgICByZXNlZ21lbnQ7IC8qIHJlLXNlZ21lbnQgYml0ICovCisgICAga2FsX3VpbnQ4ICAgICAgICAgICBwcmVfZW1wdGl2ZV9yZXRyYW5zOyAvKiBwcmUtZW1wdGl2ZSAqLworICAgIFRCRl9UWVBFICAgICAgICAgICAgdGJmX3R5cGVfdGFnOyAgIAorICAgIHVuaW9uCisgICAgeworICAgIGFja19uYWNrX2Rlc2Nfc3RydWN0IGdwcnNfaWU7CisgICAgZWdwcnNhY2tfbmFja19kZXNjcmlwdGlvbl9zdHJ1Y3QgZWdwcnNfaWU7IC8qICAqLworICAgIH1hY2tfbmFja19zdHJ1Y3Q7CisjZWxzZQorICB1bmlvbgorICAgIHsKKyAgICAgICAgYWNrX25hY2tfZGVzY19zdHJ1Y3QgZ3Byc19pZTsKKyAgfWFja19uYWNrX3N0cnVjdDsKKyNlbmRpZgorCisjaWZkZWYgX19UQkZfRVNUX18KKyAgIGthbF91aW50OCB0YmZfZXN0OworI2VuZGlmCisgICAgCisgICAgLyogTGFuc2xvIDIwMDUwODI1OiBmb3IgQ1JUVS1HIDUyLjEuMi4xLjguMS44IAorICAgICAqIFBVQU4gd2l0aG91dCBjb250ZW50aW9uIFRMTEkgc2hvdWxkIGJlIGFjY2VwdGVkIAorICAgICAqIHRvIHByb2Nlc3MgcmVxdWVzdCBvZiByZS10eCBvZiBQUlIgKGFuZCBBUkFDKSAKKyAgICAgKiBhbmQgYWNrL25hY2sgZGVzY3JpcHRpb24gZHVyaW5nIGNvbnRlbnRpb24gKi8KKyAgICBrYWxfYm9vbCBpc19jb250ZW50aW9uX3N1Y2Nlc3M7CisgICAgLyogZW8gTGFuc2xvIDIwMDUwODI1ICovCisvKiBFdmVseW4gMjAwOTA0MTU6IE1lcmdlIFI2ICovCit9IG1hY19ybGNfYWNrX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBybGNfbW9kZTsKKyNpZmRlZiBfX0VHUFJTX01PREVfXworICAgIGthbF91aW50MTYgd2luZG93X3NpemU7CisgICAga2FsX3VpbnQ4IHRiZl90eXBlOworI2VuZGlmCit9IG1hY19ybGNfc3dpdGNoX3RvX2RsX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGFza19yZXNfcmVxOworICAgIGthbF91aW50OCBjYXVzZTsKK30gbWFjX3JsY19yZWFkeV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDE2IGJsa3NfZ3JhbnRlZDsKKy8qIEV2ZWx5biAyMDA5MDQxNTogTWVyZ2UgUjYgKi8KKyAgICBrYWxfdWludDggbm9fb2ZfdWxfdHNfYWxsb2M7Cit9IG1hY19ybGNfcGRjaF9yZWxfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG1hY19tb2RlOworICAgIGthbF91aW50OCBjczsKKyAgICBrYWxfdWludDggdGxsaV9jaGFubmVsX2NvZGluZzsKKyAgICBrYWxfdWludDggZmluYWxfYWxsb2NhdGlvbjsKKyAgICBrYWxfdWludDggcGhfY29udDsKKyAgICBrYWxfdWludDggdGltZXNsb3RzX2FsbG9jYXRpb247CisgICAga2FsX3VpbnQxNiBibGtzX2dyYW50ZWQ7CisgICAgI2lmZGVmIF9fRUdQUlNfTU9ERV9fCisgICAga2FsX3VpbnQ4ICAgcmVzZWdtZW50OyAvKiByZXNlZ21lbnQgYml0ICovCisgICAga2FsX3VpbnQ4ICAgd2luZG93X3NpemU7IC8qIHdpbmRvdyBzaXplICovCisgICAga2FsX3VpbnQ4ICAgdGJmX3R5cGU7IC8qIHRiZiB0eXBlICovCisgICAgI2VuZGlmCisKK30gbWFjX3JsY19zd2l0Y2hfdG9fdWxfc3RydWN0OworCisvKiBFdmVseW4gMjAwOTA0MTU6IE1lcmdlIFI2ICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IHJsY19tb2RlOworICAgICNpZmRlZiBfX0VHUFJTX01PREVfXworICAgIGthbF91aW50MTYgIHdpbmRvd19zaXplOyAvKiBkb3dubGluayB3aW5kb3cgc2l6ZSAqLworICAgICNlbmRpZgorLyogRXZlbHluOiBSNyBMYXRlbmN5IFJlZHVjYXRpb24gRGV2ZWxvcG1lbnQgKi8KKyNpZmRlZiBfX0dFUkFOX1JUVElfXworICAgIHR0aV9jb25maWdfZW51bSB0dGlfbW9kZTsKKyNlbmRpZgorCisjaWZkZWYgX19HRVJBTl9GQU5SX18KKyAgICBrYWxfYm9vbCBpc19mYW5yX2FjdGl2YXRlZDsKKyAgICBrYWxfYm9vbCBpc19ldmVudF9iYXNlZF9mYW5yOworI2VuZGlmCit9IGRsX2Nvbl9pbmRfc3RydWN0OworLyogRXZlbHluIDIwMDkwNDE1OiBNZXJnZSBSNiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICAjaWZkZWYgX19FR1BSU19NT0RFX18KKyAgICBrYWxfdWludDggICB0YmZfdHlwZTsKKyAgICAjZW5kaWYKKworICAgIGthbF91aW50OCBub19kbF9jb25faW5kOworICAgIGRsX2Nvbl9pbmRfc3RydWN0IG11bHRpX2RsX2Nvbl9pbmRbTVVMVElQTEVfVEJGX05VTV07Cit9IG1hY19ybGNfZGxfY29uX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBub19kbF9ibG9ja3M7CisgICAgLyogRXZlbHluIDIwMDkwOTA1OiBNb2RpZnkgZm9yIEhpZ2ggbXVsdGlzbG90IGNsYXNzICovCisgICAgZGxfYmxvY2tfc3RydWN0IGRsX2Jsb2Nrc1tNQVhfVFhfVElNRVNMT1RTXTsKKyAgICAjaWZuZGVmIF9fTVRLX1RBUkdFVF9fCisgICAga2FsX2Jvb2wgZW5hYmxlX2RsX2xvb3A7CisgICAga2FsX3VpbnQxNiBic24xOworICAgIGthbF91aW50MTYgYnNuMjsKKyAgICAjZW5kaWYKKyAgICAvKiBDbGFpcmUgMDQxMjE2IGNoYW5nZSA6IFRlbGwgUkxDIERTUCBWKFEpIGZyb20gdHJhbnNmZXJfZGF0YV9pbmQgKi8KKyAgICAjaWZkZWYgX19FR1BSU19NT0RFX18KKyAgICBrYWxfdWludDE2IGRzcF92cTsKKyAgICAjZW5kaWYKK30gbWFjX3JsY19kbF9kYXRhX2luZF9zdHJ1Y3Q7CisKKy8qIExhbnNsbyAyMDA3MDcyMDogc2hvdWxkIHJlcGxhY2UgTVRLX0tBTF9NTlQgd2l0aCBfX01US19UQVJHRVRfXyBmb3IgTU9ESVMgKi8KKyNpZm5kZWYgX19NVEtfVEFSR0VUX18KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAqcGFja2VkX1BEQU5fbXNnOworICAgIGthbF91aW50OCAqZWdwcnNfYWNrX25hY2tfaWVfcHRyOworICAgIGthbF91aW50OCBhdmFpbF9sZW47CisgICAga2FsX3VpbnQ4IHNfb3JfcDsKKyAgICBrYWxfYm9vbCAgcmVjb25zdHJ1Y3Q7CisvKiBFdmVseW4gMjAwOTA0MTU6IE1lcmdlIFI2ICovCit9IG1hY19ybGNfYWNrX3JlcV9zdHJ1Y3Q7CisjZW5kaWYKKy8qIEV4Y2UgMDMwODA2OiBBZnRlciB0aGlzIHByaW1pdGl2ZSBpcyByZWNlaXZlZCBzaG91bGQgUkVTX1JFUSBiZSBzZW50IGZyb20gUkxDICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19kbF9leGlzdDsgIC8qKiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEV4Y2UgMjAwNDA1Mjg6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOb3RpZnkgUkxDIHRoYXQgd2hldGhlciBkb3dubGluayBUQkYgKGVpdGhlciBpdCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlzIG9uZ2luZyBvciBwZW5kaW5nKSBleGlzdHMgd2hlbiBjb25maXJtaW5nIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdXBsaW5rIFRCRiBpcyByZWxlYXNlZC4gVGh1cyB0byByZXNvbHZlIHRoZSBwcm9ibGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGF0IFJMQyBkb2VzIG5vdCBzZW5kIFJFU19SRVEgd2hlbiBSRUxfQ05GCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpcyByZWNlaXZlZCBkdXJpbmcgdGhlIHRpbWUgdGhhdCBvbmdvaW5nIGRvd25saW5rIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICogVEJGIGlzIHJlbGVhc2VkIGFuZCBhbm90aGVyIG9uZSBpcyBwZW5kaW5nIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGFydC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogRXZlbHluIDIwMDkwNDE1OiBNZXJnZSBSNiAqLworfSBtYWNfcmxjX3JlbF9jbmZfc3RydWN0OworCisvKiBFdmVseW4gMjAwOTA0MTU6IE1lcmdlIFI2ICovCisKKworLy8gTWF0dCBtZXJnZSBmb3IgUjYKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAjaWZkZWYgX19FR1BSU19NT0RFX18KKyAgICBrYWxfdWludDggdGJmX3R5cGU7CisgICAga2FsX3VpbnQ4IHJlc2VnbWVudDsgLyogcmVzZWdtZW50IGJpdCAqLworICAgIGthbF91aW50MTYgZWdwcnNfd2luZG93X3NpemU7CisgICAgI2VuZGlmIAorICAgIGthbF91aW50OCBtYWNfbW9kZTsJCisgICAga2FsX3VpbnQ4IGNzOworICAgIGthbF91aW50OCB0bGxpX2NoYW5uZWxfY29kaW5nOworICAgIGthbF91aW50OCBmaW5hbF9hbGxvY2F0aW9uOworICAgIGthbF91aW50OCBwaF9jb250OworICAgIGthbF91aW50OCB0aW1lc2xvdHNfYWxsb2NhdGlvbjsKKyAgICBrYWxfdWludDE2IGJsa3NfZ3JhbnRlZDsKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKyAgICAvKiBDbGFpcmUgMDQxMTE3IGNoYW5nZSA6IFJldmlzZSBHUFJTIGhlYWRlciBwYXJ0aXRpb24gYmV0d2VlbiBSTEMgYW5kIE1BQyAqLworICAgIGthbF91aW50OCB0Zmk7ICAgICAgLypTaW1vbiB1c2UgdGZpIHRvIGZpbGwgaGVhZGVyKi8KKyAgICBybGNfbW9kZV9lbnVtIHJsY19tb2RlOworICAgIGthbF9ib29sIHJlc19yZXFfaXNfc2VudDsKK31ybGNfdWxfY29uX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggcmxjX21vZGU7CisgICAgI2lmZGVmIF9fRUdQUlNfTU9ERV9fICAgIAorICAgIGthbF91aW50MTYgIHdpbmRvd19zaXplOyAvKiBkb3dubGluayB3aW5kb3cgc2l6ZSAqLworICAgIGthbF91aW50OCB0YmZfdHlwZTsgICAgCisjZW5kaWYKKyAgICBrYWxfdWludDggcGZpOyAgIAorfXJsY19kbF9jb25faW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAga2FsX3VpbnQ4IG5vX29mX3VsX3RzX2FsbG9jOworICAgIGthbF91aW50MTYgYmxrc19ncmFudGVkOyAvLyBmb3IgZml4IGFsbG9jYXRpb24KKyAgICBrYWxfdWludDggcGZpOworfXBkY2hfcmVsX2luZF9zdHJ1Y3Q7CisKKyNpZmRlZiBfX01BQ19TSE9XX1RSQU5TX0RBVEFfXworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBrYWxfdWludDggaXNfZGF0YV92YWxpZDsKKyAgICBrYWxfdWludDggZGF0YVs3OF07CisjaWZkZWYgX19FR1BSU19NT0RFX18KKyAgICBrYWxfdWludDggZGF0YTJbNzhdOworICAgIGthbF91aW50OCBpc19kYXRhMl92YWxpZDsKKyNlbmRpZgorfSBtYWNfdHJhbnNfZGF0YV9jb250ZW50X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbm9fb2ZfZGF0YTsKKyAgICBtYWNfdHJhbnNfZGF0YV9jb250ZW50X3N0cnVjdCBkYXRhW01BWF9SWF9USU1FU0xPVFNdOworfSBtYWNfbWFjX3RyYW5zX2RhdGFfaW5kX3N0cnVjdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBtYWNfcmxjX3BzX2NvbmZfdGltZXJfdXBkYXRlX3JlcV9zdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcHNfY29uZl90aW1lcl9hY3Rpb25fZW51bSB0aW1lcl9hY3Rpb247CisKK30gbWFjX3JsY19wc19jb25mX3RpbWVyX3VwZGF0ZV9yZXFfc3RydWN0OworCisjaWZuZGVmIF9fTVRLX1RBUkdFVF9fCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB0aW1lcl9pbmRleDsKKyAgICBrYWxfdWludDggdGltZXJfYWN0aW9uOworICAgIGthbF91aW50MzIgdGltZW91dF92YWx1ZTsKKyAgICBrYWxfdWludDggc2ltX2luZGV4OworICAgIGthbF91aW50OCB0YmZfaW5kZXg7Cit9IG1hY190aW1lcl9ldmVudF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBwY2FfZ2l2ZV9pbl9jb3VudDsKKyAgICBrYWxfdWludDggcGRhbl9naXZlX2luX2NvdW50OworICAgIGthbF91aW50OCBwY2FfZ2l2ZV9pbl9tYXg7CisgICAga2FsX3VpbnQ4IHBkYW5fZ2l2ZV9pbl9tYXg7CisgICAga2FsX3VpbnQ4IHBjYV9naXZlX2luX21heF9sZWFybmVkOworICAgIGthbF91aW50OCBwZGFuX2dpdmVfaW5fbWF4X2xlYXJuZWQ7CisgICAga2FsX3VpbnQzMiBuZXh0X291dGdvaW5nX3JlYWxfcG9sbGluZ19mcmFtZTsKKyAgICBrYWxfdWludDMyIGxhc3RfcmVwb3J0ZWRfcG9sbGluZ19mcmFtZTsKKworICAgIGthbF91aW50OCBpc19wc19zdGFydmF0aW9uX3Byb3RlY3RfYWN0aXZhdGVkOworICAgIGthbF91aW50OCBwc19zdGFydmF0aW9uX3Byb3RlY3RfdWxfYmxrX2NvdW50OworICAgIGthbF91aW50OCB1bF9ibGtfc3VjY2Vzc2l2ZV9jb25mbGljdF9jb3VudDsKKyAgICBrYWxfdWludDMyIHBzX3N0YXJ2YXRpb25fcHJvdGVjdF9mcmFtZTsKKworfSBtYWNfbmV4dF9vdXRnb2luZ19ycmJwX2luZF9zdHJ1Y3Q7CisKKyNpZmRlZiBfX1BTX0wxX0RDX0FSQ0hfXwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIG1hY19uZXh0X3JyYnBfZm47CisgICAga2FsX3VpbnQzMiBtYWNfcHJvdGVjdGVkX3JyYnBfZm47CisgICAga2FsX3VpbnQzMiBtYWNfc2hhcmVfbWVtb3J5X3JyYnBfZm47CisgICAga2FsX3VpbnQzMiBtYWNfc2hhcmVfbWVtb3J5X3Byb3RlY3RlZF9ycmJwX2ZuOworfSBtYWNfbWFjX3JyYnBfZm5faW5kX3N0cnVjdDsKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmCisKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbWFjMnJtcGNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbWFjMnJtcGNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQxMTc2ZgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tYWMycm1wY19zdHJ1Y3QuaApAQCAtMCwwICsxLDI2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKgltYXgycm1wY19zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX01BQzJSTVBDX1NUUlVDVF9ICisjZGVmaW5lIF9NQUMyUk1QQ19TVFJVQ1RfSAorCisvKiBhZGQgUkhSICovCisjaW5jbHVkZSAicnJfY29tbW9uX2RlZi5oIgorI2luY2x1ZGUgInJyMm1wYWxfc3RydWN0LmgiCisvLyNpbmNsdWRlICJtYWNfY29udGV4dC5oIgorCisjaW5jbHVkZSAibWFjX2VudW1zLmgiCisKKy8qIEV2ZWx5biAyMDA5MDQxNTogTWVyZ2UgUjYgKi8KKy8vIEV2ZWx5biBNVEJGOiBDaGFuZ2UgdGhlIHBhY2tldCBhY2Nlc3Mgc3RydWN0dXJlCit0eXBlZGVmIHN0cnVjdCBtdWx0aXBsZV9yZXNfcmVxX3N0cnVjdCBtYWNfcm1wY19wa3RfYWNjZXNzX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDMyIHN0YXJ0aW5nX2ZyYW1lOworICAgIGthbF91aW50OCBtZWFzdXJlbWVudF9pbnRlcnZhbDsKKyAgICBrYWxfdWludDggbWVhc3VyZW1lbnRfYml0X21hcDsKK30gbWVhc3VyZW1lbnRfbWFwX3N0cnVjdDsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggdHlwZTsKKyAgICBrYWxfdWludDggY2F1c2U7Cit9IG1hY19ybXBjX2FjY2Vzc19yZXN1bHRfaW5kX3N0cnVjdDsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisvKiBBZGVsaW5lOiBSZWxwYWNlIGNzIHBhZ2luZywgUENDTywgUE1PLCBQQ0NDLCBQU0NELCBQTkNELCBQU0NTSSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgbWFjX3JtcGNfY3RybF9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIG1hY19zdGF0ZV9lbnVtIG1hY19zdGF0ZTsKKyAgICBrYWxfdWludDggbm9fY3RybF9ibGs7CisgICAga2FsX3VpbnQ4IGN0cmxfYmxrX3NpemU7CisgICAga2FsX3VpbnQ4ICpjdHJsX2JsazsKKyAgICBrYWxfdWludDggYml0X29mZnNldDsKK30gbWFjX3JtcGNfY3RybF9tc2dfaW5kX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICB0YmZfcmVsX3R5cGVfZW51bSByZWxfdHlwZTsKKyAgICBrYWxfdWludDggbWFjX3N0YXRlOworfSBtYWNfcm1wY19lbnRlcl9pZGxlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIG1lYXN1cmVtZW50X21hcF9zdHJ1Y3QgbWVhc3VyZW1lbnRfbWFwOworfSBtYWNfcm1wY19tZWFzX21hcF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDE2IGZuX29mZnNldDsKKyAgICBrYWxfdWludDggdHlwZTsKKyAgICBrYWxfdWludDggY2F1c2U7Cit9IG1hY19ybXBjX2RsX2Fzc2lnbl9yZXN1bHRfaW5kX3N0cnVjdDsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbWFjX3N0YXRlOworfSBtYWNfcm1wY19zdXNwZW5kX2RvbmVfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGlzX3RiZl9leGlzdDsKKyAgICBmcmVxX3BhcmFtc19zdHJ1Y3QgKmZyZXFfcGFyYW1zX3B0cjsKK30gbWFjX3JtcGNfdGJmX3N0YXR1c19pbmRfc3RydWN0OworCisKKyNpZiAwCisjaWZkZWYgX19SRUw0X18KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorI2VuZGlmCisKKworLyogRXZlbHluIDIwMDkwNDE1OiBNZXJnZSBSNiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcm1wY19tYWNfY3RybF9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIHJlc3VsdF90eXBlX2VudW0gcmVzdWx0OworICAgIGthbF91aW50OCByZXFfaWQ7Cit9IG1hY19ybXBjX2N0cmxfbXNnX2NuZl9zdHJ1Y3Q7CisKKworI2lmZGVmIF9fRVRXU19TVVBQT1JUX18KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBtYWNfbXNnX3B0cl9zaXplOworICAgIGthbF91aW50OCBiaXRfb2Zmc2V0OyAgICAKKyAgICBrYWxfdWludDgqIG1hY19tc2dfcHRyOworfSBtYWNfcm1wY19wYWNrZXRfYXBwbGljYXRpb25faW5mb19tc2dfaW5kX3N0cnVjdDsKKyNlbmRpZiAvKiBfX0VUV1NfU1VQUE9SVF9fICovCisKKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21hY19lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21hY19lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMDJiODYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbWFjX2VudW1zLmgKQEAgLTAsMCArMSw0NDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICAgIG1hY19lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIFVNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfTUFDX0VOVU1TX0gKKyNkZWZpbmUgX01BQ19FTlVNU19ICisKK3R5cGVkZWYgZW51bQoreworICAgIE1BQ19JRExFLAorICAgIE1BQ19QS1RfQUNDRVNTLAorICAgIE1BQ19VTCwKKyAgICBNQUNfREwsCisgICAgTUFDX1VMX0RMLAorICAgIE1BQ19OVU1fU1RBVEVTCit9IG1hY19zdGF0ZV9lbnVtOworCisvKiBKZWxseSBTdWJzdGF0ZSAtYmctICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBETF9OVUxMLAorICAgIERMX1NJTkdMRV9CTEtfSU5fUFJPRywKKyAgICBETF9TSU5HTEVfQkxLX0FDS19TRU5ESU5HLAorICAgIERMX1RCRl9QRU5ELAorICAgIERMX1RSQU5TRkVSLAorICAgIERMX1RSQU5TRkVSX1JFQUxMT0NfVEJGX1BFTkQsCisgICAgRExfVFJBTlNGRVJfRklOQUxfQUNLX1BBQ0tFRCwKKyAgICBETF9UUkFOU0ZFUl9GQUlfU0VOVF9UMzE5Ml9TVEFSVEVELAorICAgIERMX1RSQU5TRkVSX1RCRl9QRU5ESU5HX0ZST01fVDMxOTIsCisgICAgRExfVFJBTlNGRVJfQUJOT1JNQUxfUkVMX1BFTkQsCisgICAgRExfRElTQ09OTkVDVElORywKKyAgICBETF9TVUJTVEFURV9OVU0KK30gbWFjX2RsX3N1YnN0YXRlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIEFDU19OVUxMLAorICAgIEFDU19STENfUkVTX1JFUV9TRU5ULAorICAgIEFDU19PTkVfUEhBU0VfVEJGX1BFTkQsCisgICAgQUNTX09ORV9QSEFTRV9DT05URU5USU9OLAorICAgIEFDU19PTkVfUEhBU0VfQ09OVEVOVElPTl9SRUFMTE9DX1BFTkQsCisgICAgQUNTX1RXT19QSEFTRV9TSU5HTEVfQkxLX1BFTkQsCisgICAgQUNTX1RXT19QSEFTRV9QUlJfU0VOVCwKKyAgICBBQ1NfVFdPX1BIQVNFX1RCRl9QRU5ELAorICAgIEFDU19STVBDX1JFU19SRVFfU0VOVCwKKyAgICBBQ1NfVUxfU0lOR0xFX0JMS19JTl9QUk9HLAorICAgIEFDU19VTF9TSU5HTEVfQkxLX0RFTEVURSwKKyAgICBBQ1NfU1VCU1RBVEVfTlVNCit9IG1hY19hY3Nfc3Vic3RhdGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVUxfTlVMTCwKKyAgICBVTF9UUkFOU0ZFUiwKKyAgICBVTF9UUkFOU0ZFUl9UQkZfUEVORCwKKyAgICBVTF9UUkFOU0ZFUl9SRUxfUEVORCwKKyAgICBVTF9UUkFOU0ZFUl9BQk5PUk1BTF9SRUxfUEVORCwKKyNpZmRlZiBfX1RCRl9FU1RfXworICAgIFVMX1RCRl9FU1RfV0FJVElORywKKyAgICBVTF9UQkZfRVNUX0FEREVELAorICAgIFVMX1RCRl9FU1RfU0VOVF9BQiwKKyAgICBVTF9UQkZfRVNUX1NFTlRfTkIsCisgICAgVUxfVEJGX0VTVF9TRU5UX0FCX1BVQVNfUE9MTCwKKyAgICBVTF9UQkZfRVNUX1BFTkRfQUIsCisgICAgVUxfVEJGX0VTVF9QRU5EX05CLAorI2VuZGlmIC8qIF9fVEJGX0VTVF9fICovIAorICAgIFVMX1NVQlNUQVRFX05VTQorfSBtYWNfdWxfc3Vic3RhdGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUkVTX1JFUV9JTlZBTElELAorICAgIFJFU19SRVFfUk1QQ19JTl9SQUNIX0lETEUsCisgICAgUkVTX1JFUV9STENfSU5fUkFDSF9JRExFLAorICAgIFJFU19SRVFfUkxDX0lOX0NUUkxfTVNHX1FfQUNTLAorICAgIFJFU19SRVFfUkxDX1NFTlRfQUNTLAorICAgIFJFU19SRVFfUkxDX1BFTkRfVFJBTlNGRVIsCisgICAgUkVTX1JFUV9STENfSU5fQ1RSTF9NU0dfUV9UUkFOU0ZFUiwKKyAgICBSRVNfUkVRX1JMQ19JTl9QREFOX1RSQU5TRkVSLAorICAgIFJFU19SRVFfUkxDX1NFTlRfVFJBTlNGRVIsCisgICAgUkVTX1JFUV9STENfVEJGX0VTVF9TRU5UX0lETEUsCisgICAgUkVTX1JFUV9TVEFUVVNfTlVNCit9IG1hY19yZXNfcmVxX3N0YXR1c19lbnVtOworCisKKy8qIEplbGx5IFN1YnN0YXRlIC1lZC0gKi8KKwordHlwZWRlZiBlbnVtCit7CisgICAgSU5WQUxJRF9UQkYsICAgIC8qIFN1cHBvc2UgdGhpcyB2YWx1ZSBpcyBvbmx5IHVzZWQgYnkgUEtUIFRTIFJFQ09ORklHICovCisgICAgRExfVEJGLAorICAgIFVMX1RCRgorfSBtYWNfdGJmX2RpcmVjdGlvbl9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBDRUxMX0NIQU5HRV9GQUlMLAorICAgIC8qIExhbnNsbyAyMDA3MDcwNTogTkFDQyAqLworI2lmZGVmIF9fR0VSQU5fUjRfXworICAgIE5BQ0NfUENDTiwKKyAgICBOQUNDX1NJX1NUQVRVUywKKyNlbmRpZiAvKiBfX0dFUkFOX1I0X18gKi8gCisgICAgLyogZW8gTGFuc2xvIDIwMDcwNzA1OiBOQUNDICovCisgICAgUEtUX01PQklMRV9UQkZfU1RBVFVTLAorICAgIE1FQVNVUkVNRU5UX1JFUE9SVCwKKyAgICBQS1RfUFNJX1NUQVRVUywKKyAgICBQS1RfVUxfRFVNTVlfQ1RSTCwKKworI2lmZGVmIF9fRUdQUlNfTU9ERV9fCisgICAgUkVTT1VSQ0VfUkVRLAorICAgIEVHUFJTX1JFU19SRVEsCisgICAgRUdQUlNfQVJBQworI2Vsc2UgLyogX19FR1BSU19NT0RFX18gKi8gCisgICAgUkVTT1VSQ0VfUkVRCisjZW5kaWYgLyogX19FR1BSU19NT0RFX18gKi8gCit9IG1hY19wcmlvcml0aXplZF9jdHJsX21zZ19lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBOT1JNQUxfRVZFTlQsCisgICAgVU5TUEVDSUZJRURfU1RBVFVTLAorICAgIE5PTl9ESVNUX1BBUlRfRVJST1IsCisgICAgTVNHX0VTQ0FQRV9FUlJPUiwKKyAgICBOT05fQ09NUEFUSUJMRV9NU0cKK30gbWFjX3RiZl9jYXVzZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBGUkVRX1BBUkFNU19OT1RWQUxJRCwKKyAgICBGUkVRX1BBUkFNU19OT1RJTkJBTkQsCisgICAgRlJFUV9QQVJBTVNfTUlTTUFUQ0gsCisgICAgRlJFUV9QQVJBTVNfT0sKK30gbWFjX2ZyZXFfcGFyYW1zX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIEJMT0NLUywKKyAgICBCTE9DS19QRVJJT0RTCit9IG1hY19ibGtfb3JfYmxrX3BlcmlvZF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBETF9BU1NJR05fTk9UX1ZBTElELAorICAgIFBLVF9ETF9BU1NJR05fVkFMSUQsCisgICAgSU1NX0RMX0FTU0lHTl9WQUxJRCwKKyAgICBQRENIX0RMX0FTU0lHTl9WQUxJRCwKKyAgICBNVERBU19ETF9BU1NJR05fVkFMSUQKK30gbWFjX2RsX2Fzc2lnbl90eXBlX2VudW07CisKKy8qIEV4Y2UgMDMwNzA3OiBUbyBpZGVudGlmeSB3aGljaCBkaXJlY3Rpb24gb2YgVEJGIHRoZSBpbmNvbWluZyBDT05fSU5EIGlzIGZvciAqLwordHlwZWRlZiBlbnVtCit7CisgICAgQ09OX0lORF9VTk1BVENILAorICAgIENPTl9JTkRfRk9SX0RMLAorICAgIENPTl9JTkRfRk9SX1VMLAorICAgIENPTl9JTkRfRk9SX1RTX1JFQ09ORklHCit9IG1hY19jb25faW5kX2VudW07CisKKy8qIEV4Y2UgMDMxMTI4OiBGb3IgUEtUIFBEQ0ggUkVMRUFTRSAqLwordHlwZWRlZiBlbnVtCit7CisgICAgTUFDX1BEQ0hfUkVMX0xJTUlUX09MRCA9IDAsCisgICAgTUFDX1BEQ0hfUkVMX0xJTUlUX0FMTAorfSBwZGNoX3JlbGVhc2VfbGltaXRfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgTUFDX1BEVENIX05PUk1BTCA9IDAsCisgICAgTUFDX1BTX0hPX1NUQVJULAorICAgIE1BQ19QU19IT19SRUNPTk5fQUNUSVZFLAorICAgIE1BQ19QU19IT19SRUNPTk5fSU5BQ1RJVkUsCisgICAgTUFDX1BEVENIX0lOQUNUSVZFX0FGVEVSX1BTX0hPCit9IG1hY19wZHRjaF9jb25uZWN0X2NhdXNlX2VudW07CisKK3R5cGVkZWYgZW51bQoreyAgICAgICAgICAgICAgICAgICAgICAgLyogc2hhbGwgc3luYyB3aXRoIE1BQ19USU1FUl9OVU1fTVNHUyB2YWx1ZSAqLworICAgIE1BQ19UMzE2NF9USU1FUl9JRCA9IDAsCisgICAgTUFDX1QzMTY2X1RJTUVSX0lELCAvKjEqLworICAgIE1BQ19UMzE2OF9USU1FUl9JRCwgLyoyKi8KKyAgICBNQUNfVDMxODBfVElNRVJfSUQsIC8qMyovIAorICAgIE1BQ19UMzE4OF9USU1FUl9JRCwgLyo0Ki8KKyAgICBNQUNfVDMxOTBfVElNRVJfSUQsIC8qNSovCisgICAgTUFDX1QzMTkyX1RJTUVSX0lELCAvKjYqLworICAgIC8qIEthdGllIDIwMTMwMTA4OiBmb3IgUlJCUCB0byBQVUFOIHdpdGggRkFJIG5vdCBzZW50LCAKKyAgICAgICB3YWl0IDUgc2VjIGZvciByZXRyYW5zbWl0dGVkIFBVQU4gKi8KKyAgICBNQUNfR3VhcmRQVUFOX1RJTUVSX0lELCAvKjcqLworICAgIE1BQ19MQ0VfaHlzdF9taWxsaXNfVElNRVJfSUQsIC8qIDEyICovCisgICAgTUFDX1BBQ0NIX1BST1RFQ1RfVElNRVJfSUQsIC8qOCovICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2lmZGVmIF9fTUFDX1JBTkRPTV9QQVRURVJOX1RFU1RfXworICAgIE1BQ19GYWtlTWVzc2FnZV9USU1FUl9JRCwKKyNlbmRpZgorICAgIE1BQ19UODk4M19USU1FUl9JRCwgLyo5Ki8gICAvKiBDdXN0b20gdGltZXIgVG8gYWxsb3cgUlJCUCBUWCBmb3IgUE9MTC9QQ0EvUERBTiBmb3IgR0NGIE1NL1NNIGNvbnRyb2wgbWVzc2FnZXMsIGJlZm9yZSBUQkYgZGlzY29ubmVjdCAgKi8KKyAgICBNQUNfVE9UQUxfVElNRVJfTlVNCit9IG1hY190aW1lcl9pZF9lbnVtOyAgICAvKiBNQUNfVElNRVIgTWVzc2FnZSBUeXBlICovCisKKyNpZm5kZWYgX19NVEtfVEFSR0VUX18KK3R5cGVkZWYgZW51bQoreworICAgIE1BQ19USU1FUl9TVEFSVCwKKyAgICBNQUNfVElNRVJfU1RPUCwKKyAgICBNQUNfVElNRVJfVElNRU9VVAorfSBtYWNfdGltZXJfYWN0aW9uX2VudW07CisjZW5kaWYKKworCisKKy8qIENsYWlyZSAwNTAxMjggY2hhbmdlIDogSW1wbGVtZW50IEVHUFJTIFNSQiBtb2RlICovCisjaWZkZWYgX19FR1BSU19NT0RFX18KK3R5cGVkZWYgZW51bQoreworICAgIE1BQ19FR1BSU19TUkJfTE9PUF9OT05FLCAgICAgICAgICAgICAgICAvKiBTUkIgbW9kZSBpcyBub3QgYWN0aXZlICovCisgICAgTUFDX0VHUFJTX1NSQl9MT09QX1VMX1RCRl9FU1RBQkxJU0hJTkcsIC8qIE1BQyBpcyB3YWl0aW5nIGZvciBVTCBhc3NpZ25tZW50ICovCisgICAgTUFDX0VHUFJTX1NSQl9MT09QX1NVQk1PREVfT04sICAgICAgICAgIC8qIEVHUFJTIFNSQiBMb29wYmFjayBzdWJtb2RlIE9OICovCisgICAgTUFDX0VHUFJTX1NSQl9MT09QX1NVQk1PREVfT0ZGICAgICAgICAgIC8qIEVHUFJTIFNSQiBMb29wYmFjayBzdWJtb2RlIE9GRiAqLworfSBlZ3Byc19zcmJfc3RhdHVzX2VudW07CisjZW5kaWYgLyogX19FR1BSU19NT0RFX18gKi8gCisKKworLyogRXhjZSAwMzA4MTg6IE5ldyBleGNlcHRpb24gaGFuZGxpbmcgbWVjaGFuaXNtIGZvciBNQUMgKi8KK3R5cGVkZWYgZW51bQoreworICAgIE1BQ19NU0dfRVhfTk9fRVhDRVBUSU9OLAorCisgICAgTUFDX01TR19FWF9JTkNPTVBBVElCTEVfU1RBVEUsICAgICAgLyogMSAqLworICAgIE1BQ19NU0dfRVhfVU5LTk9XTl9NU0csICAgICAgICAgICAgIC8qIDIgKi8KKyAgICBNQUNfTVNHX0VYX0RJU1RfUEFSVF9FUlIsICAgICAgICAgICAvKiAzICovCisgICAgTUFDX01TR19FWF9BRERSRVNTX1BBUlRfRVJSLCAgICAgICAgLyogNCAqLworICAgIE1BQ19NU0dfRVhfTk9OX0RJU1RfUEFSVF9FUlIsICAgICAgIC8qIDUgKi8KKyAgICBNQUNfTVNHX0VYX01TR19FU0NfRVJSLCAgICAgICAgICAgICAvKiA2ICovCisgICAgTUFDX01TR19FWF9JR05PUkVfTEFCRUxfRVJSLCAgICAgICAgLyogNyAqLworICAgIE1BQ19NU0dfRVhfVFJVTkNBVEVEX0NPTkNBQ1RfRVJSLCAgIC8qIDggKi8KKyAgICBNQUNfTVNHX0VYX0RFQ09ERV9FUlIsICAgICAgICAgICAgICAvKiA5ICovCisKKyAgICBNQUNfTVNHX0VYX01BX0lOVkFMSUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwICovCisgICAgTUFDX01TR19FWF9TSU5HTEVfQkxPQ0tfR0FQX1RPT19TSE9SVCwgICAgICAgICAgICAgICAgICAvKiAxMSAqLworICAgIE1BQ19NU0dfRVhfU1RBUlRJTkdfVElNRV9OT1RfUFJFU0VOVF9GT1JfRklYRURfQUxMT0MsICAgLyogMTIgKi8KKyAgICBNQUNfTVNHX0VYX1RGSV9OT1RfQVNTSUdORUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEzICovCisgICAgTUFDX01TR19FWF9NVUxUSVNMT1RfQ0FQX05PVF9NRUVULCAgICAgICAgICAgICAgICAgICAgICAvKiAxNCAqLworICAgIE1BQ19NU0dfRVhfQkVGT1JFX1RJTUVfVkFMSURfRk9SX05PTl9EWU5BTUlDX0FMTE9DLCAgICAgLyogMTUgKi8KKyAgICBNQUNfTVNHX0VYX0ZSRVFfUEFSQU1fTk9UX1BSRVNFTlQsICAgICAgICAgICAgICAgICAgICAgIC8qIDE2ICovCisgICAgTUFDX01TR19FWF9GUkVRX1BBUkFNX0lOVkFMSUQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNyAqLworICAgIE1BQ19NU0dfRVhfRlJFUV9QQVJBTV9OT1RJTkJBTkQsICAgICAgICAgICAgICAgICAgICAgICAgLyogMTggKi8KKyAgICBNQUNfTVNHX0VYX0ZSRVFfUEFSQU1fTUlTTUFUQ0gsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE5ICovCisgICAgTUFDX01TR19FWF9NQUNfTU9ERV9NSVNNQVRDSCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMCAqLworICAgIE1BQ19NU0dfRVhfVEJGX01PREVfTUlTTUFUQ0gsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjEgKi8KKworICAgIC8qIEV4Y2UgMjAwNDAyMTg6IFRMTElfTUlTTUFUQ0hfSU5fT05FX1BIQVNFIH4gTk9fVUxfVFNfSU5fVUxfQVNTSUdOIGFyZSB1c2VkIGJ5IG1hY19wa3RfYWNjZXNzX2V4Y2VwdGlvbl9oZGxyKCkgb25seSAqLworICAgIE1BQ19NU0dfRVhfVExMSV9NSVNNQVRDSF9JTl9PTkVfUEhBU0UsICAgICAgICAgICAgICAgICAgLyogMjIgKi8KKyAgICBNQUNfTVNHX0VYX1RMTElfQUJTRU5UX0lOX09ORV9QSEFTRSwgICAgICAgICAgICAgICAgICAgIC8qIDIzICovCisgICAgTUFDX01TR19FWF9SRUFDSF9OMzEwNF9NQVhfSU5fT05FX1BIQVNFLCAgICAgICAgICAgICAgICAvKiAyNCAqLworICAgIE1BQ19NU0dfRVhfTk9UX1NFTlRfQVNfVDMxNjRfVElNRU9VVCwgICAgICAgICAgICAgICAgICAgLyogMjUgKi8KKyAgICBNQUNfTVNHX0VYX1NFTlRfTk9fUkVTUE9OU0VfQVNfVDMxNjZfVElNRU9VVCwgICAgICAgICAgIC8qIDI2ICovCisgICAgTUFDX01TR19FWF9UTExJX01JU01BVENIX0lOX1RXT19QSEFTRSwgICAgICAgICAgICAgICAgICAvKiAyNyAqLworICAgIE1BQ19NU0dfRVhfU0VOVF9OT19SRVNQT05TRV9BU19UMzE2OF9USU1FT1VULCAgICAgICAgICAgLyogMjggKi8KKyAgICBNQUNfTVNHX0VYX1RXT19QSEFTRV9SRVFVRVNURURfQlVUX09ORV9QSEFTRV9BU1NJR05FRCwgIC8qIDI5ICovCisgICAgTUFDX01TR19FWF9QS1RfUERDSF9SRUxfRFVSSU5HX1RXT19QSEFTRV9DT05URU5USU9OLCAgICAvKiAzMCAqLworICAgIE1BQ19NU0dfRVhfTk9fVUxfVFNfSU5fVUxfQVNTSUdOLCAgICAgICAgICAgICAgICAgICAgICAgLyogMzEgKi8KKworICAgIE1BQ19NU0dfRVhfSU5DT01QQVRJQkxFX0NUUkxfQUNLX1QzMTkyLCAgICAgLyogMzIgKi8KKyAgICBNQUNfTVNHX0VYX1JMQ19NT0RFX01JU01BVENILCAgICAgICAgICAgICAgIC8qIDMzICovCisgICAgTUFDX01TR19FWF9NQUNfTU9ERV9JTlZBTElEX0FTU0lHTkVEX0JZX05XLCAvKiAzNCAqLworCisjaWZkZWYgX19UQkZfRVNUX18KKyAgICBNQUNfTVNHX0VYX1NJTkdMRV9CTE9DS19HQVBfVE9PX1NIT1JUX1RCRl9FU1QsICAvKiAzNSAqLworI2VuZGlmIAorCisKKworI2lmIGRlZmluZWQoX19HRVJBTl9SVFRJX18pIHx8IGRlZmluZWQoX19HRVJBTl9GQU5SX18pCisgICAgTUFDX01TR19FWF9SRUw3X1BBUlRfRVJST1IsICAgICAgICAgICAgIC8qIDQxICovCisjZW5kaWYKKyAgICBUT1RBTF9NQUNfTVNHX0VYX0VORAorfSBtYWNfbXNnX2V4Y2VwdGlvbl9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBPTERfVEJGX1BPU19JTlZBTElEID0gMCwKKyAgICBCQUNLX1VQX0FMTE9DLAorICAgIEFDVElWRV9BTExPQworfSBvbGRfdGJmX3BhcmFfcG9zX2luX3BzX2hvX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIEJTSUNfU1lOQ19GQUlMID0gMCwKKyAgICBUMzIxNl9USU1FT1VULAorICAgIFQzMjE4X1RJTUVPVVQsCisgICAgRzJVX0FDVElWRV9GQUlMCit9IG1hY19wc19ob19mYWlsX2NhdXNlOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBNQUNfTk9OX1RCRl9WQUxJRCA9IDAsCisgICAgTUFDX0FDVElWRV9WQUxJRCwKKyAgICBNQUNfSU5BQ1RJVkVfVkFMSUQKK30gbWFjX2JhY2t1cF90YmZfc3RhdHVzOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBNQUNfRklORF9GSVJTVF8xX0ZST01fTVNCX1RPX0xTQiwKKyAgICBNQUNfRklORF9GSVJTVF8xX0ZST01fTFNCX1RPX01TQgorfSBtYWNfZmluZF9maXJzdF8xX2Rpcl9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBNQUNfUlhFRF9CTEtfQklUTUFQX0lOVkFMSUQsCisgICAgTUFDX1JYRURfQkxLX0JJVE1BUF9BTExfTkFDS0VELAorICAgIE1BQ19SWEVEX0JMS19CSVRNQVBfU09NRV9OQUNLRUQsCisgICAgTUFDX1JYRURfQkxLX0JJVE1BUF9BTExfQUNLRUQKK30gbWFjX3J4ZWRfYmxrX2JpdG1hcF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBNQUNfVEZJX05PVF9NQVRDSCwKKyAgICBNQUNfVEZJX05PVF9NQVRDSF9GUk9NX05PTl9QQUNDSCwKKyAgICBNQUNfVEZJX01BVENICit9IG1hY190ZmlfbWF0Y2hfc3RhdHVzX2VudW07CisKKyNpZmRlZiBfX01PREVNX0VNX01PREVfXwordHlwZWRlZiBlbnVtCit7CisgICAgTUFDX0VNX1VMX1RCRl9PTkVfUEhBU0VfQUNDRVNTX0lOX0NIQU5ORUxfUkVRVUVTVCA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjEqLworICAgIE1BQ19FTV9VTF9UQkZfU0lOR0xFX0JMT0NLX09SX1RXT19QSEFTRV9BQ0NFU1NfSU5fQ0hBTk5FTF9SRVFVRVNUID0gMiwgICAgICAgICAgICAgICAgICAgLyoyKi8gCisgICAgTUFDX0VNX1VMX1RCRl9PTkVfUEhBU0VfQUNDRVNTX0lOX1BBQ0tFVF9DSEFOTkVMX1JFUVVFU1QgPSAxMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjExKi8KKyAgICBNQUNfRU1fVUxfVEJGX1RXT19QSEFTRV9BQ0NFU1NfSU5fUEFDS0VUX0NIQU5ORUxfUkVRVUVTVCA9IDEyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qMTIqLworICAgIE1BQ19FTV9VTF9UQkZfUEFHRV9SRVNQT05TRV9JTl9QQUNLRVRfQ0hBTk5FTF9SRVFVRVNUID0gMTMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoxMyovCisgICAgTUFDX0VNX1VMX1RCRl9DRUxMX1VQREFURV9JTl9QQUNLRVRfQ0hBTk5FTF9SRVFVRVNUID0gMTQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjE0Ki8KKyAgICBNQUNfRU1fVUxfVEJGX01NX1BST0NFRFVSRV9JTl9QQUNLRVRfQ0hBTk5FTF9SRVFVRVNUID0gMTUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qMTUqLworICAgIE1BQ19FTV9VTF9UQkZfU0lOR0xFX0JMT0NLX1dJVEhPVVRfVEJGX0VTVEFCTElTSE1FTlRfSU5fUEFDS0VUX0NIQU5ORUxfUkVRVUVTVCA9IDE2LCAgICAgLyoxNiovCisgICAgTUFDX0VNX1VMX1RCRl9PTkVfUEhBU0VfQUNDRVNTX0lOX1JMQ19VTkFDS19NT0RFX0lOX1BBQ0tFVF9DSEFOTkVMX1JFUVVFU1QgPSAxNywgICAgICAgICAvKjE3Ki8KKyAgICBNQUNfRU1fVUxfVEJGX09ORV9QSEFTRV9BQ0NFU1NfSU5fRUdQUlNfUEFDS0VUX0NIQU5ORUxfUkVRVUVTVCA9IDIxLCAgICAgICAgICAgICAgICAgICAgIC8qMjEqLworICAgIE1BQ19FTV9VTF9UQkZfVFdPX1BIQVNFX0FDQ0VTU19JTl9FR1BSU19QQUNLRVRfQ0hBTk5FTF9SRVFVRVNUID0gMjIsICAgICAgICAgICAgICAgICAgICAgLyoyMiovCisgICAgTUFDX0VNX1VMX1RCRl9TSUdOQUxMSU5HX0lOX0VHUFJTX1BBQ0tFVF9DSEFOTkVMX1JFUVVFU1QgPSAyMywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjIzKi8KKyAgICBNQUNfRU1fVUxfVEJGX09ORV9QSEFTRV9BQ0NFU1NfSU5fUkxDX1VOQUNLX01PREVfSU5fRUdQUlNfUEFDS0VUX0NIQU5ORUxfUkVRVUVTVCA9IDI0LCAgIC8qMjQqLworICAgIE1BQ19FTV9VTF9UQkZfQ0hBTk5FTF9SRVFVRVNUX0lOX1BBQ0tFVF9ET1dOTElOS19BQ0tfTkFDSyA9IDMxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyozMSovCisgICAgTUFDX0VNX1VMX1RCRl9DSEFOTkVMX1JFUVVFU1RfSU5fRUdQUlNfUEFDS0VUX0RPV05MSU5LX0FDS19OQUNLID0gMzIsICAgICAgICAgICAgICAgICAgICAvKjMyKi8KKyAgICBNQUNfRU1fVUxfVEJGX1VTRVJfREFUQV9JTl9EVE1fUkVRVUVTVCA9IDUxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qNTEqLworICAgIE1BQ19FTV9VTF9UQkZfUEFHRV9SRVNQT05TRV9JTl9EVE1fUkVRVUVTVCA9IDUyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyo1MiovCisgICAgTUFDX0VNX1VMX1RCRl9DRUxMX1VQREFURV9JTl9EVE1fUkVRVUVTVCA9IDUzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjUzKi8KKyAgICBNQUNfRU1fVUxfVEJGX01NX1BST0NFRFVSRV9JTl9EVE1fUkVRVUVTVCA9IDU0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qNTQqLworfSBtYWNfZW1fdWxfdGJmX2VzdGFibGlzaG1lbnRfY2F1c2U7IAorCit0eXBlZGVmIGVudW0KK3sKKyAgICBNQUNfRU1fVUxfVEJGX09ORV9QSEFTRV9BQ0NFU1MgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qMSovCisgICAgTUFDX0VNX1VMX1RCRl9UV09fUEhBU0VfQUNDRVNTID0gMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjIqLyAKKyAgICBNQUNfRU1fVUxfVEJGX1NJTkdMRV9CTE9DS19PUl9NVUxUSV9CTE9DS19BQ0NFU1MgPSAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qMyovCisgICAgTUFDX0VNX1VMX1RCRl9HUFJTX09SX0VHUFJTX1BBQ0tFVF9ET1dOTElOS19BQ0tfTkFDS19DSEFOTkVMX1JFUVVFU1QgPSA0LCAgICAgICAgICAgICAgICAvKjQqLworICAgIE1BQ19FTV9VTF9UQkZfRFRNX1JFUVVFU1QgPSA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyo1Ki8KK30gbWFjX2VtX3VsX3RiZl9lc3RhYmxpc2htZW50X3R5cGU7CisKK3R5cGVkZWYgZW51bQoreworICAgIE1BQ19FTV9VTF9UQkZfU1VDQ0VFREVEID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoxKi8KKyAgICBNQUNfRU1fVUxfVEJGX0ZBSUxFRCA9IDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qMiovIAorICAgIE1BQ19FTV9VTF9UQkZfUkVKRUNURUQgPSAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyozKi8KKyAgICBNQUNfRU1fVUxfVEJGX0FCT1JURUQgPSA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qNCovCit9IG1hY19lbV91bF90YmZfZXN0YWJsaXNobWVudF9zdGF0dXM7CisjZW5kaWYgLyogX19NT0RFTV9FTV9NT0RFX18gKi8gCisKKyNlbmRpZiAvKiBfTUFDX0VOVU1TX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tYWNfcm1wY19lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21hY19ybXBjX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVlNWZjOQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tYWNfcm1wY19lbnVtcy5oCkBAIC0wLDAgKzEsMjA1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqCW1hY19ybXBjX2VudW1zLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRzIHRvIGRlZmluZSByZWxhdGVkIG1lc3NhZ2VzIGFuZCBwYXJhbXRlcnMgYmV0d2VlbiBNQUMKKyAqICAgYW5kIFJNUEMuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9NQUNfUk1QQ19FTlVNU19ICisjZGVmaW5lIF9NQUNfUk1QQ19FTlVNU19ICisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb25zdGFudAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUFYX1JBRElPX1BSSU9SSVRZICA0CisjZGVmaW5lIE1BWF9PQ1RFVFNfSU5fQ09OVFJPTF9CTE9DSyAgICAgICAyMgorI2RlZmluZSBNQVhfT0NURVRTX1dJVEhfSEVBREVSX0lOX0NPTlRST0xfQkxPQ0sgMjMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW51bSBWYWx1ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bSB7CisgICAgVUxfRkFJTFVSRSwKKyAgICBVTF9TVUNDRVNTLAorCVVQREFURV9QUk9URUNUX1BBQ0NICit9IHBhX3Jlc3VsdF90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bSB7CisgICAgRExfRkFJTFVSRSwKKyAgICBETF9TVUNDRVNTCit9IGRsX3Jlc3VsdF90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bSB7CisgICAgT05FX1BIQVNFX0NPTlRFTlRJT05fSU5fUFJPRywgICAgICAgICAvKiAwICovCisgICAgVFdPX1BIQVNFX0NPTlRFTlRJT05fSU5fUFJPRywgICAgICAgICAvKiAxICovCisgICAgQ09OVEVOVElPTl9QQVNTLCAgICAgICAgICAgICAgICAgICAgICAvKiAyICovCisgICAgRExfVEJGX1BFTkRJTkcsICAgICAgICAgICAgICAgICAgICAgICAvKiAzICovCisgICAgSU5WQUxJRF9GUkVRX1BBUkFNUywgICAgICAgICAgICAgICAgICAvKiA0ICovCisgICAgTk9fRlJFUV9QQVJBTVMsICAgICAgICAgICAgICAgICAgICAgICAvKiA1ICovCisgICAgTk9UX1NVUFBPUlRJTkdfTU9ERSwgICAgICAgICAgICAgICAgICAvKiA2ICovCisgICAgSU5WQUxJRF9DT0RJTkdfU0NIRU1FLCAgICAgICAgICAgICAgICAvKiA3ICovCisgICAgT05FX1BIQVNFX0NPTlRFTlRJT05fRkFJTCwgICAgICAgICAgICAvKiA4ICovCisgICAgVFdPX1BIQVNFX0NPTlRFTlRJT05fRkFJTCwgICAgICAgICAgICAvKiA5ICovCisgICAgTVVMVElfU0xPVF9SRVNUUklDVElPTl9OT1RfTUVULCAgICAgICAvKiAxMCAqLworICAgIEdPVF9BQ0NFU1NfUkVKLCAgICAgICAgICAgICAgICAgICAgICAgLyogMTEgKi8KKyAgICBVTF9URklfQUJTRU5ULCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEyICovCisgICAgRExfVEZJX0FCU0VOVCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMyAqLworICAgIE1TR19ERUNPREVfRVJSLCAgICAgICAgICAgICAgICAgICAgICAgLyogMTQgKi8KKyAgICBNU0dfV0lUSF9JTlZBTElEX1NUQVJUSU5HX1RJTUUsICAgICAgIC8qIDE1ICovCisgICAgQUNDRVNTX0ZBSUxfV0lUSF9NQVhfUkVUUlksICAgICAgICAgICAvKiAxNiAqLworCisjaWZkZWYgX19UQkZfRVNUX18KKyAgIE1TR19XSVRIX0lOVkFMSURfU1RBUlRJTkdfVElNRV9UQkZfRVNULCAgICAgICAgICAvKjE3ICovCisjZW5kaWYKKworICAgLyogTGFuc2xvIDIwMDcwNDI0OiBNT05aQSByZWNlaXZlcyBiYWQgc2luZ2xlIGJsb2NrIAorICAgICAoc2hvdWxkIGJlIFBDQ08pIGR1cmluZyBwYWNrZXQgYWNjZXNzIGluIDg5NjAgaW50ZXItUkFUIHRlc3QgKi8KKyAgIERMX1NJTkdMRV9CTEtfRVJSLAkJCSAgLyogMTggKi8KKworICAgLyogQnlyb246IEFkZCBmb3IgR0VNSU5JLCBmb3IgREwgc2luZ2xlIGJsb2NrIHRoYXQgTUFDIGFjY2VwdCBpdCwgCisgICAgICAgICAgICAgICAgICBBbm90aGVyIFJSIGFjdHVhbGx5IGNhbiBiZSByZXN1bWUuIFRoZXJlZm9yZSwgYWRkIHRoaXMgY2F1c2UKKyAgICAgICAgICAgICAgICAgIHRvIGxldCBNQUMgaW5mb3JtIFJNQyB3aGVuIGFjY2VwdCB0aGlzIERMIHNpbmdsZSBibG9jayBhc3NpZ25tZW50LgorICAgICAgICAgICAgICAgICAgVGhpcyBpbmZvcm0gcHJvY2VkdXJlIGlzIGFsc28gdGhlIG5ldyBvbmUqLworICAgLypCeXJvbjogMjAwNy8xMS8xOTogVGhpcyBpcyBuZWVkZWQgZm9yIE1PTlpBIGR1ZSB0byB0aGVyZSBpcyBhIERMIFRCRiBpbiBwcm9ncmVzcyBzdWJzdGF0ZSovCisgICBETF9TSU5HTEVfQkxLX1NVQ0MsCQkJICAvKiAxOSAqLworICAgLypFdmVseW4gMjAwODA4MjY6IEFkZCB0byBub3RpZnkgUk1QQyB0aGF0IHNlY29uZCBETF9BU1NJR05fSU5EIGlzIGRyb3BwZWQgYnkgTUFDCisgICAgICAgICAgICAgICAgICAgICAgQmVjYXVzZSBETCBUQkYgaXMgaW4gcHJvZ3Jlc3MqLworICAgRFJPUF9EVUVfVE9fRExfSU5fUFJPRywgICAgICAgICAgICAgICAvKiAyMCAqLworICAgCisgICAvKiBOYW5jeSAyMDA5MDcyNzogU2VuZCB1cGxpbmsgc2luZ2xlIGJsb2NrIHRocm91Z2ggTUFDLiAqLworICAgVUxfU0lOR0xFX0JMS19JTl9QUk9HLCAgICAgICAgICAgICAgICAgLyogMjEgKi8KKyAgIFVMX1NJTkdMRV9CTEtfU1VDQywgICAgICAgICAgICAgICAgICAgIC8qIDIyICovCisgICAvKiBOYW5jeSAyMDA5MDcyNzogSWYgdXBsaW5rIHNpbmdsZSBibG9jayBhbmQgZmFpbHVyZSBpcyBkdWUgdG8gaW52YWxpZCAgCisgICAgKiBzdGFydGluZyB0aW1lLCBhY2Nlc3MgcHJvY2VkdXJlIGlzIGFib3J0ZWQuIAorICAgICogW1RTIDA0LjE4XSAzLjUuMi4xLjMuMyBJZiB0aGUgbW9iaWxlIHN0YXRpb24gcmVjZWl2ZXMgdGhlIElNTUVESUFURSAKKyAgICAqIEFTU0lHTk1FTlQgbWVzc2FnZSBhZnRlciB0aGUgVEJGIHN0YXJ0aW5nIHRpbWUgaGFzIGV4cGlyZWQsIGEgZmFpbHVyZSBoYXMKKyAgICAqIG9jY3VycmVkLiBJZiBhIGZhaWx1cmUgb2NjdXJzIGFuZCB0aGUgcGFja2V0IGFjY2VzcyBhdHRlbXB0IHdhcyBkdWUgdG8gdGhlIAorICAgICogc2VuZGluZyBvZiBhbiBSTEMvTUFDIGNvbnRyb2wgbWVzc2FnZSwgdGhlIHBhY2tldCBhY2Nlc3MgaXMgYWJvcnRlZCwgdGhlIAorICAgICogbW9iaWxlIHN0YXRpb24gcmV0dXJucyB0byBwYWNrZXQgaWRsZSBtb2RlLiAqLworICAgTVNHX1dJVEhfSU5WQUxJRF9TVEFSVElOR19USU1FX0ZPUl9DVFJMX01TRywgICAgICAgICAvKiAyMyAqLworICAgU1RBUlRfUEFDQ0hfUFJPVEVDVF9SRVEsICAvKiAyNCAqLworICAgU1RPUF9QQUNDSF9QUk9URUNUX1JFUSwgIC8qIDI1ICovCisgICAKKyAgIFRPVEFMX0FDQ0VTU19SRVNVTFRfRU5VTSAgICAgICAgICAgICAgIC8qIDI2ICovCit9IGFjY2Vzc19yZXN1bHRfZW51bTsKKworLyogVmluY2VudCAwNDAyMDcgYWRkICovCit0eXBlZGVmIGVudW0KK3sKKyAgIEFMTF9UQkZfRU5ELAorICAgRExfVEJGX1NUQVJULAorICAgVUxfVEJGX1NUQVJUCit9IHRiZl9zdGF0dXNfY2hhbmdlX2VudW07CisKKyNpZmRlZiBfX0VHUFJTX01PREVfXwordHlwZWRlZiBlbnVtIEVHUFJTX01FQVNfUEFSQU0KK3sKKyAgIExJTktfUVVBTElUWV9NRUFTVVJFTUVOVF9NT0RFLAorICAgQkVQX1BFUklPRCwKKyAgIEJFUF9QRVJJT0QyCit9IGVncHJzX21lYXNfcGFyYW1fZW51bTsKKyNlbmRpZiAvKiBlbmQgb2YgX19FR1BSU19NT0RFX18gKi8KKworI2VuZGlmIC8qIGVuZCBvZiBfTUFDX1JNUENfRU5VTVNfSCAqLworCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tYm1zYWxfZXJyY19zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tYm1zYWxfZXJyY19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjBlNzQyCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21ibXNhbF9lcnJjX3N0cnVjdC5oCkBAIC0wLDAgKzEsMzU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTIKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgbWJtc2FsX2VycmNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVEs2MjkxCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgbWVzc2FnZSwgZW51bXMgYW5kIGNvbW1vbiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBiZXR3ZWVuIE1CTVNBTCBhbmQgRVJSQyBtb2R1bGUKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDkgMTggMjAyMCBiYXJ0LmxpYW5nCisgKiBbTU9MWTAwNTY5NTAxXSBbR2VuOTddIFRDMTAgcGF0Y2ggYmFjaworICogCU1lcmdlIGZyb20gQ0wyOTYyMTUxCisgKgorICogMDggMTcgMjAxNyBkYW5ueS5rdW8KKyAqIFtNT0xZMDAyNzA0NzVdIFtNVDY3NjNdW0JpYW5jb11bTjFdW05JT1RdW2VNQk1TXSBlTUJNUyBzZXNzaW9uIHJlY2VwdGlvbiBvbiBzY2VsbCBzdG9wcyBhdCBjb25uZWN0aW9uIHJlbGVhc2UuCisgKiAuCisgKgorICogMTAgMjQgMjAxNiBjeW50aGlhLmNoZW4KKyAqIFtNT0xZMDAyMDg3NjhdIFtNVDYyOTNdIFtCNjZdIEJhbmQ2NiBwb3J0aW5nIChFUlJDIHBhcnQpCisgKiAtIGVycmMgbWJtc2FsLGVtIHBhcnQgT0EgZG9tYWluCisgKgorICogMDMgMTYgMjAxNiBrdW4tbGluLnd1CisgKiBbTU9MWTAwMTY2OTE4XSBTUFYgZU1CTVMgcG90ZW50aWFsIGJ1ZyBmaXgKKyAqCisgKiAwMiAxNyAyMDE2IGt1bi1saW4ud3UKKyAqIFtNT0xZMDAxNjI3MzNdIFtNVDY3NTVdW0phZGUgTTZdW01QM11bTCtXXVtJbi1ob3VzZSBGVEFdW2VNQk1TXVtFRV1bQVNTRVJUXSBmaWxlOnBjb3JlL21vZGVtL2w0L21ibXNhbC9zcmMvbWJtc2FsX2hkbHIuYyBsaW5lOjYzNQorICoKKyAqIDAyIDE3IDIwMTYgdGMuY2hhbmcKKyAqIFtNT0xZMDAxNTk2MTBdIGVNQk1TIFZ6Vy9MR0UgcmVxdWlyZW1lbnQuCisgKgorICogMDIgMTUgMjAxNiBrdW4tbGluLnd1CisgKiBbTU9MWTAwMTU1MDkyXSBbTUJNUyB0YXJnZXQgSVRdIFtDTVc1MDBdIG1sXzAzNWYgbWJtcyB2aWRlbyBzdHJlYW0gQXNzZXJ0IGZhaWw6IGVycmNfc3B2X21ibXMuYyA4MTIKKyAqCisgKiAwNiAxNiAyMDE1IHlpbmd3ZWkuaHVhbmcKKyAqIFtNT0xZMDAwOTg5MTZdIFtNVDYyOTFdIE1CTVMgcmVjZXB0aW9uIG9uIFNDRUxMCisgKiAJLgorICoKKyAqIDA0IDA4IDIwMTUgbW9ydG9uLmxpbgorICogW01PTFkwMDA5NTYyM10gW2VSUkNdIEdlbWluaSB2aXJ0dWFsIG1vZGUKKyAqIGVNQk1TIEdlbWluaSAyUFMgcGhhc2UtaW46IE1CTVNBTCBJRiBwYXJ0CisgKgorICogMDEgMTkgMjAxNSBtb3J0b24ubGluCisgKiBbTU9MWTAwMDc4ODU1XSBbTVQ2MjkxX0RFVl0gZVJSQyBlTUJNUworICogWzYyOTFdW0VSUkNdW1NQVl0gZU1CTVMgcGhhc2UtaW4gKFVNT0xZKQorICoKKyAqIDEyIDEyIDIwMTQgbW9ydG9uLmxpbgorICogW01PTFkwMDA4NDY5NV0gWzYyOTFdIENvZGUgbWVyZ2VkIGZyb20gTVQ2MjkxX0RFViB0byBVTU9MWSBUUlVOSworICogTUJNUyBJRiBjaGVjay1pbiBVTU9MWQorICoKKyAqIDEwIDEzIDIwMTQgbW9ydG9uLmxpbgorICogW01PTFkwMDA3ODg1NV0gW01UNjI5MV9ERVZdIGVSUkMgZU1CTVMKKyAqIEFkZCBtY2RfbDNfaW5jX3N0cnVjdCBoZWFkZXIgaW5jbHVzaW9uCisgKgorICogMTAgMDEgMjAxNCBtb3J0b24ubGluCisgKiBbTU9MWTAwMDc4ODU1XSBbTVQ2MjkxX0RFVl0gZVJSQyBlTUJNUworICogVXNlIGFncmVlZCBUTUdJIHN0cnVjdHVyZQorICoKKyAqIDA5IDE0IDIwMTQgbW9ydG9uLmxpbgorICogW01PTFkwMDA2ODcxMF0gW1RLNjI5MV9ERVZdIFN5bmMgTU9MWSB0byBUSzYyOTFfREVWCisgKiBbRVJSQ11bTUJNU11bSUZdIFJldmlzZSB0aGUgYWRkaXRpb25hbCBpbmZvIGRhdGEgc3RydWN0dXJlIGFjY29yZGluZyB0byB0aGUgSUYgZG9jdW1lbnQKKyAqCisgKiAwOSAwNSAyMDE0IG1vcnRvbi5saW4KKyAqIFtNT0xZMDAwNjg3MTBdIFtUSzYyOTFfREVWXSBTeW5jIE1PTFkgdG8gVEs2MjkxX0RFVgorICogW01CTVNBTF1bRVJSQ11bSUZdIFJldmlzZSBkYXlsaWdodCBzYXZpbmcgdGltZSBmb3JtYXQKKyAqCisgKiAwOSAwNCAyMDE0IGNvb3Blci5saW4KKyAqIFtNT0xZMDAwNjg3MTBdIFtUSzYyOTFfREVWXSBTeW5jIE1PTFkgdG8gVEs2MjkxX0RFVgorICogbW9kaWZ5IE1CTVNBTC1TUFYgaW50ZXJmYWNlIHVzYWdlLCBhbmQgYWRkIE1CTVNBTF9FUlJDX1NBUAorICoKKyAqIDA4IDIwIDIwMTQgY29vcGVyLmxpbgorICogW01PTFkwMDA2ODcxMF0gW1RLNjI5MV9ERVZdIFN5bmMgTU9MWSB0byBUSzYyOTFfREVWCisgKiBSZXZpc2UgTUJNUyBpbnRlcmZhY2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiAgTUJNU0FMX0VSUkNfU1RSVUNUX0lOQworI2RlZmluZSAgTUJNU0FMX0VSUkNfU1RSVUNUX0lOQworCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX3N0cnVjdC5oIiAgLy9Gb3IgcGxtbl9pZF9zdHJ1Y3QKKyNpbmNsdWRlICJnbG9iYWxfdHlwZS5oIgorCisjZGVmaW5lIE1CTVNfU0VSVlNFU1NfSU5GT19FQVJGQ05fTlVNICAgICAgICAgICA1CisjZGVmaW5lIE1CTVNfU0VSVlNFU1NfSU5GT19TQUlfTlVNICAgICAgICAgICAgICA2NAorCisjZGVmaW5lIE1CTVNfU0VSVklDRV9TVEFUVVNfTUJTRk5fQVJFQV9OVU0gICAgICA4CisKKyNkZWZpbmUgTUJNU19TSUIxNV9GUkVRX1NBSV9OVU0gICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIE1CTVNfU0lCMTVfSU5URVJfRlJFUV9OVU0gICAgICAgICAgICAgICA4CisjZGVmaW5lIE1CTVNfU0lCMTVfSU5URVJfRlJFUV9NVUxUSV9CQU5EX05VTSAgICA4CisKKyNkZWZpbmUgTUJNU19DT05GSUdfSU5GT19NQ0hfTlVNICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIE1CTVNfQ09ORklHX0lORk9fU0VSVklDRV9OVU0gICAgICAgICAgICAyOQorCisjZGVmaW5lIE1CTVNfU0VSVlNFU1NfU1RBVFVTX1NFUlZJQ0VfTlVNICAgICAgICA4CisKKyNkZWZpbmUgRVJSQ19NQk1TX01BWF9DRUxMX05VTSAgICAgICAgICAgICAgICAgIDIKKworI2RlZmluZSBFUlJDX01CTVNfUENFTExfVkFMSUQgICAgICAgICAgICAgICAgICAgMFgwMSAKKyNkZWZpbmUgRVJSQ19NQk1TX1NDRUxMX1ZBTElEICAgICAgICAgICAgICAgICAgIDBYMDIKKworLyogRHVyYXRpb24gb2Ygc2VhcmNoaW5nIE1CTVMgc2Vzc2lvbiAoc2Vjb25kKSAqLworLyogRnJvbSBDSydzIGluZm9ybWF0aW9uLCAxNSBzZWMgaXMgdG9vIGxvbmcgZm9yIEV4cHdheS4gUmVjb21tZW5kIDggc2VjLiAqLworI2RlZmluZSBNQk1TQUxfU0VSVlNFU1NfU0VBUkNIX1RJTUVfREVGQVVMVCAgICAgOAorCisjZGVmaW5lIE1CTVNfSU5WQUxJRF9TRVNTSU9OX0lEICAgICAgICAgICAgICAgICAweEZGRkYKKworI2RlZmluZSBNQk1TQUxfT1VUX1NFU1NfSFlTVEVSRVNJU19QRVJJT0RfREVGQVVMVCAgIDEwICAvLyByZWZlciB0byBWWl9SRVFfTFRFRU1CTVNfNjk4NworCisjZGVmaW5lIE1CTVNfUkVQT1JUX1RNR0lfUEVSX01CU0ZOX0FSRUEgICAgICAgICAzMgorCisvKioqKiogZW51bXMgZGVmaW5pdGlvbiAqKioqKi8KK3R5cGVkZWYgZW51bSAKK3sKKyAgICBNQk1TX1NUQVRVU19DT1ZFUl9NQk1TQVJFQSwKKyAgICBNQk1TX1NUQVRVU19DT1ZFUl9OT05NQk1TQVJFQSwKKyAgICBNQk1TX1NUQVRVU19DT1ZFUl9PT1MsCisgICAgTUJNU19TVEFUVVNfQ09WRVJfTEVBVkVMVEUsCisjaWYgZGVmaW5lZChfX0dFTUlOSV9fKQorICAgIE1CTVNfU1RBVFVTX0NPVkVSX0dFTUlOSV9TVVNQRU5ELAorICAgIE1CTVNfU1RBVFVTX0NPVkVSX0dFTUlOSV9WSVJUVUFMX1NVU1BFTkQsCisjZW5kaWYKKworICAgIE1CTVNfU1RBVFVTX1NFUlZTRVNTX0FDVFNVQ0MsCisgICAgTUJNU19TVEFUVVNfU0VSVlNFU1NfQUNUU1VDQ19BTFJFQURZX0RPTkUsCisgICAgTUJNU19TVEFUVVNfU0VSVlNFU1NfQUNURkFJTCwgICAgICAgICAgICAgICAvLyBVbmtub3duIHJlYXNvbgorICAgIE1CTVNfU1RBVFVTX1NFUlZTRVNTX0FDVEZBSUxfTUFYX1NFU1NJT05TLAorICAgIE1CTVNfU1RBVFVTX1NFUlZTRVNTX0FDVEZBSUxfTUlTU19NQ0NILAorICAgIE1CTVNfU1RBVFVTX1NFUlZTRVNTX0FDVEZBSUxfTUlTU19UTUdJLAorICAgIE1CTVNfU1RBVFVTX1NFUlZTRVNTX0FDVEZBSUxfT09DLAorICAgIE1CTVNfU1RBVFVTX1NFUlZTRVNTX0FDVEZBSUxfT09TLAorICAgIE1CTVNfU1RBVFVTX1NFUlZTRVNTX0FDVEZBSUxfRlJFUVVFTkNZX0NPTkZMSUNULAorICAgIE1CTVNfU1RBVFVTX1NFUlZTRVNTX0RFQUNUU1VDQywKKyAgICBNQk1TX1NUQVRVU19TRVJWU0VTU19ERUFDVEZBSUwsCisKKyAgICAvLyBGb3IgYmVsb3cgY2F1c2VzOgorICAgIC8vIDEuIE1CTVNBTCBhc3N1bWUgU1BWIG9ubHkgcmVwb3J0IGluZGljYXRpb24gd2hlbiB0aGVyZSBpcyBhbnkgYWN0aXZlIHNlc3Npb24gYmVmb3JlIHRoZSBpbmRpY2F0aW9uLgorICAgIC8vIDIuIGNvbmZpZ19zZXJ2c2Vzc192YWxpZCBpbiBtYm1zYWxfZXJyY19tYm1zX3NlcnZzZXNzX3N0YXR1c19pbmRfc3RydWN0IG5lZWRzIHRvIGJlIEtBTF9GQUxTRS4KKyAgICBNQk1TX1NUQVRVU19TRVJWU0VTU19VUERBVEUsCisgICAgTUJNU19TVEFUVVNfU0VSVlNFU1NfREVBQ1RfTk9OTUJNU0FSRUEsCisgICAgTUJNU19TVEFUVVNfU0VSVlNFU1NfREVBQ1RfT09TLAorICAgIE1CTVNfU1RBVFVTX1NFUlZTRVNTX0RFQUNUX0xFQVZFTFRFLAorICAgIE1CTVNfU1RBVFVTX1NFUlZTRVNTX0RFQUNUX01CTVNESVNBQkxFRAorI2lmIGRlZmluZWQoX19HRU1JTklfXykKKyAgICAsIE1CTVNfU1RBVFVTX1NFUlZTRVNTX0RFQUNUX0dFTUlOSV9TVVNQRU5ECisgICAgLCBNQk1TX1NUQVRVU19TRVJWU0VTU19ERUFDVF9HRU1JTklfVklSVFVBTF9TVVNQRU5ECisjZW5kaWYKK30gbWJtc2FsX2VycmNfbWJtc19zdGF0dXNfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgREFZTElHSFRfU0FWSU5HX1RJTUVfTk9fQURKICAgICAgID0gMCwKKyAgICBEQVlMSUdIVF9TQVZJTkdfVElNRV9QTFVTX09ORV9BREogPSAxLAorICAgIERBWUxJR0hUX1NBVklOR19USU1FX1BMVVNfVFdPX0FESiA9IDIsCisgICAgREFZTElHSFRfU0FWSU5HX1RJTUVfUkVTViAgICAgICAgID0gMworfSBkYXlsaWdodF9zYXZpbmdfdGltZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBNQk1TX0NPTkZJR19ERUxFVEVfTk9ORSwKKworICAgIC8qIFZaX1JFUV9MVEVFTUJNU182OTM5OgorICAgICAqIE91dCBvZiBNQk1TIHNlcnZpY2UgYXJlYSBpbiBBUCB2aWV3LiBPbi1nb2luZyBzZXNzaW9ucyBhcmUgbm90IGFmZmVjdGVkLgorICAgICAqIFRvIHByZXZlbnQgdGhlIHNjZW5hcmlvIHRoYXQgb3V0IG9mIE1CTVMgc2VydmljZSBpcyByZXBvcnRlZCBidXQgdGhlcmUgYXJlIGFjdGl2ZSBzZXNzaW9ucywKKyAgICAgKiBNQk1TQUwvQVAgY291bGQgc2VuZCBERUxFVEVfQUxMX0FDVElWRV9TRVJWRVNTIGlmIG91dC1zZXNzaW9uLWh5c3RlcmVzaXMgaXMgY29uZmlndXJlZC4KKyAgICAgKi8KKyAgICBNQk1TX0NPTkZJR19ERUxFVEVfQUxMX0FDVElWRV9TRVJWU0VTUywKKworICAgIC8qIFZ6VzogRTkxMSBvciBoVm9MVEUgZmxvdyAoQVQrRU1FVlQpLiBEZWFjdGl2YXRlIEFMTCBzZXNzaW9ucy4gKi8KKyAgICBNQk1TX0NPTkZJR19ERUxFVEVfQUxMX0FDVElWRV9BTkRfT05HT0lOR19TRVJWU0VTUywKK30gbWJtc2FsX2VycmNfY29uZmlnX2RlbGV0ZV9zZXJ2c2Vzc19lbnVtOworCisvKioqKiogbWVzc2FnZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAqKioqKi8KK3R5cGVkZWYgc3RydWN0IAoreworICAgIHBsbW5faWRfc3RydWN0ICBwbG1uSWQ7CisgICAga2FsX3VpbnQ4ICAgICAgIHNlcnZpY2VfaWRbM107IC8vRm9ybWF0IGlzIFswXSwgWzFdLCBbMl0KK30gdG1naV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgZW5hYmxlOworICAgIGthbF9ib29sIG1ibXNfcHJpb3JpdGl6ZWQ7CisgICAga2FsX3VpbnQzMiBzZWFyY2hfdGltZTsKKyAgICBrYWxfdWludDMyIG91dF9zZXNzX2h5c3RlcmVzaXNfcGVyaW9kOworCisgICAga2FsX2Jvb2wgc2VydnNlc3NfaW5mb192YWxpZDsKKyAgICBzdHJ1Y3QgeworICAgICAgICBrYWxfYm9vbCBlbmFibGU7CisgICAgICAgIHRtZ2lfc3RydWN0IHRtZ2k7CisgICAgICAgIGthbF91aW50MTYgc2Vzc19pZDsgLyogMHhmZmZmID0gaW52YWxpZCAqLworICAgICAgICBrYWxfYm9vbCBtYnNmbl9hcmVhX2lkX3ZhbGlkOyAvKiBhY2NvcmRpbmcgdG8gQVQgU3BlYywgYWx0aG91Z2ggbm90IG9uZSBvZiB1c2QgaW5mbyAqLworICAgICAgICBrYWxfdWludDggbWJzZm5fYXJlYV9pZDsgLyogYWNjb3JkaW5nIHRvIEFUIFNwZWMsIGFsdGhvdWdoIG5vdCBvbmUgb2YgdXNkIGluZm8gKi8KKyAgICAgICAga2FsX2Jvb2wgYWRkaXRpb25hbF9pbmZvX3ZhbGlkOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAga2FsX3VpbnQ4IG51bV9vZl9lYXJmY247CisgICAgICAgICAgICBFQVJGQ04gZWFyZmNuW01CTVNfU0VSVlNFU1NfSU5GT19FQVJGQ05fTlVNXTsKKyAgICAgICAgICAgIGthbF91aW50OCBudW1fb2Zfc2FpOworICAgICAgICAgICAga2FsX3VpbnQxNiBzYWlbTUJNU19TRVJWU0VTU19JTkZPX1NBSV9OVU1dOworICAgICAgICB9IGFkZGl0aW9uYWxfaW5mbzsKKyAgICB9IHNlcnZzZXNzX2luZm87CisKKyAgICAvKiBzZXJ2c2Vzc19pbmZvX3ZhbGlkIGFuZCBkZWFjdF90eXBlIGFyZSBleGNsdWRlZCAqLworICAgIG1ibXNhbF9lcnJjX2NvbmZpZ19kZWxldGVfc2VydnNlc3NfZW51bSBkZWxldGVfdHlwZTsKK30gbWJtc2FsX2VycmNfbWJtc19jb25maWdfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggdmFsaWRpdHk7CisgICAgLy9FUlJDX01CTVNfUENFTExfVkFMSUQgPT4gdGhlIGZvbGxvd2luZyBmaWVsZHMgYXBwbHkgdG8gUGNlbGwgb25seQorICAgIC8vRVJSQ19NQk1TX1NDRUxMX1ZBTElEID0+IHRoZSBmb2xsb3dpbmcgZmllbGRzIGFwcGx5IHRvIFNjZWxsIG9ubHkKKyAgICAvL0VSUkNfTUJNU19QQ0VMTF9WQUxJRCB8IEVSUkNfTUJNU19TQ0VMTF9WQUxJRCA9PiB0aGUgZm9sbG93aW5nIGZpZWxkcyBhcHBseSB0byBib3RoIFBjZWxsIGFuZCBTY2VsbC4KKyAgICAKKyAgICBtYm1zYWxfZXJyY19tYm1zX3N0YXR1c19lbnVtIGNvdmVyYWdlX3N0YXR1czsKKyAgICBrYWxfYm9vbCBzZXJ2aW5nX2VhcmZjbl92YWxpZFtFUlJDX01CTVNfTUFYX0NFTExfTlVNXTsKKyAgICBFQVJGQ04gc2VydmluZ19lYXJmY25bRVJSQ19NQk1TX01BWF9DRUxMX05VTV07CisgICAga2FsX3VpbnQ4IG51bV9vZl9tYnNmbl9hcmVhX2lkW0VSUkNfTUJNU19NQVhfQ0VMTF9OVU1dOworICAgIGthbF91aW50OCBtYnNmbl9hcmVhX2lkW0VSUkNfTUJNU19NQVhfQ0VMTF9OVU1dW01CTVNfU0VSVklDRV9TVEFUVVNfTUJTRk5fQVJFQV9OVU1dOworfSBtYm1zYWxfZXJyY19tYm1zX3NlcnZpY2Vfc3RhdHVzX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHZhbGlkaXR5OworICAgIAorICAgIEVBUkZDTiBzZXJ2aW5nX2VhcmZjbltFUlJDX01CTVNfTUFYX0NFTExfTlVNXTsKKyAgICBrYWxfdWludDggbnVtX29mX2ludHJhX2ZyZXFfc2FpW0VSUkNfTUJNU19NQVhfQ0VMTF9OVU1dOworICAgIGthbF91aW50MTYgaW50cmFfZnJlcV9TQUlbRVJSQ19NQk1TX01BWF9DRUxMX05VTV1bTUJNU19TSUIxNV9GUkVRX1NBSV9OVU1dOworICAgIGthbF91aW50OCBudW1fb2ZfaW50ZXJfZnJlcV9zYWlfbGlzdFtFUlJDX01CTVNfTUFYX0NFTExfTlVNXTsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFQVJGQ04gZWFyZmNuOworICAgICAgICBrYWxfdWludDggbnVtX29mX3NhaTsKKyAgICAgICAga2FsX3VpbnQxNiBzYWlbTUJNU19TSUIxNV9GUkVRX1NBSV9OVU1dOworICAgICAgICBrYWxfdWludDggbnVtX29mX211bHRpX2JhbmRfaW5mbzsKKyAgICAgICAga2FsX3VpbnQxNiBtdWx0aV9iYW5kX2luZm9bTUJNU19TSUIxNV9JTlRFUl9GUkVRX01VTFRJX0JBTkRfTlVNXTsKKyAgICB9IGludGVyX2ZyZXFfU0FJX2xpc3RbRVJSQ19NQk1TX01BWF9DRUxMX05VTV1bTUJNU19TSUIxNV9JTlRFUl9GUkVRX05VTV07Cit9IG1ibXNhbF9lcnJjX21ibXNfc2liMTVfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggdmFsaWRpdHk7CisgICAgCisgICAgRUFSRkNOIHNlcnZpbmdfZWFyZmNuW0VSUkNfTUJNU19NQVhfQ0VMTF9OVU1dOworICAgIGthbF91aW50NjQgdXRjW0VSUkNfTUJNU19NQVhfQ0VMTF9OVU1dOworICAgIGthbF9ib29sIGRheWxpZ2h0X3NhdmluZ190aW1lX3ZhbGlkW0VSUkNfTUJNU19NQVhfQ0VMTF9OVU1dOyAvKiBmYWxzZSA9IGNsZWFyIGRheWxpZ2h0IHNhdmluZyB0aW1lICovCisgICAgZGF5bGlnaHRfc2F2aW5nX3RpbWVfZW51bSBkYXlsaWdodF9zYXZpbmdfdGltZVtFUlJDX01CTVNfTUFYX0NFTExfTlVNXTsKKyAgICBrYWxfaW50MTYgbGVhcF9zZWNvbmRzW0VSUkNfTUJNU19NQVhfQ0VMTF9OVU1dOyAvKiAweGZmZmYgPSBjbGVhciAqLworICAgIGthbF9pbnQ4IGxvY2FsX3RpbWVfb2Zmc2V0W0VSUkNfTUJNU19NQVhfQ0VMTF9OVU1dOyAvKiAweGZmID0gY2xlYXIgKi8KKyAgICBrYWxfdWludDMyIHJjdl9vc190aW1lW0VSUkNfTUJNU19NQVhfQ0VMTF9OVU1dOworfSBtYm1zYWxfZXJyY19tYm1zX3NpYjE2X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHZhbGlkaXR5OworICAgIAorICAgIEVBUkZDTiBzZXJ2aW5nX2VhcmZjbltFUlJDX01CTVNfTUFYX0NFTExfTlVNXTsKKyAgICBrYWxfdWludDggbWJzZm5fYXJlYV9pZFtFUlJDX01CTVNfTUFYX0NFTExfTlVNXTsKKyAgICBrYWxfdWludDggbnVtX29mX21jaF9pbmZvW0VSUkNfTUJNU19NQVhfQ0VMTF9OVU1dOworICAgIHN0cnVjdCB7CisgICAgICAgIGthbF91aW50OCBudW1fb2Zfc2VydnNlc3NfaW5mbzsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHRtZ2lfc3RydWN0IHRtZ2k7CisgICAgICAgICAgICBrYWxfdWludDE2IHNlc3NfaWQ7IC8qIDB4ZmZmZiA9IGludmFsaWQgKi8KKyAgICAgICAgfSBzZXJ2c2Vzc19pbmZvW01CTVNfQ09ORklHX0lORk9fU0VSVklDRV9OVU1dOworICAgIH0gbWNoX2luZm9bRVJSQ19NQk1TX01BWF9DRUxMX05VTV1bTUJNU19DT05GSUdfSU5GT19NQ0hfTlVNXTsKK30gbWJtc2FsX2VycmNfbWJtc19jb25maWdfaW5mb19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIEVBUkZDTiBzZXJ2aW5nX2VhcmZjbjsKKyAgICBtYm1zYWxfZXJyY19tYm1zX3N0YXR1c19lbnVtIHNlcnZzZXNzX3N0YXR1czsgLyogQ2F1dGlvbjogTUJNU0FMIGhhcyBhc3N1bXB0aW9uIGZvciBlYWNoIHN0YXR1cy4gUmVmZXIgdG8gZW51bSBkZWZpbmljYXRpb24gZm9yIGRldGFpbHMuICovCisgICAga2FsX2Jvb2wgYWN0X3NlcnZzZXNzX3ZhbGlkOyAvKiBGQUxTRSBtZWFucyBubyBhY3RpdmUgc2VydnNlc3MgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICBrYWxfYm9vbCB2YWxpZDsKKyAgICAgICAgdG1naV9zdHJ1Y3QgdG1naTsKKyAgICAgICAga2FsX3VpbnQxNiBzZXNzX2lkOyAvKiAweGZmZmYgPSBpbnZhbGlkICovCisgICAgfSBhY3Rfc2VydnNlc3NbTUJNU19TRVJWU0VTU19TVEFUVVNfU0VSVklDRV9OVU1dOworICAgIGthbF9ib29sIGNvbmZpZ19zZXJ2c2Vzc192YWxpZDsKKyAgICBzdHJ1Y3QgeworICAgICAgICB0bWdpX3N0cnVjdCB0bWdpOworICAgICAgICBrYWxfdWludDE2IHNlc3NfaWQ7IC8qIDB4ZmZmZiA9IGludmFsaWQgKi8KKyAgICB9IGNvbmZpZ19zZXJ2c2VzczsKK30gbWJtc2FsX2VycmNfbWJtc19zZXJ2c2Vzc19zdGF0dXNfaW5kX3N0cnVjdDsKKworLyoqKiBSZXF1aXJlbWVudCBvZiBUQzEwICoqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgICAgICAgbWJzZm5fYXJlYV9pZDsKKyAgICBrYWxfaW50MTYgICAgICAgICBzbnI7CisgICAga2FsX2ludDE2ICAgICAgICAgZXNucjsKKyAgICBrYWxfdWludDggICAgICAgICBudW1fdG1naTsKKyAgICB0bWdpX3N0cnVjdCAgICAgICB0bWdpW01CTVNfQ09ORklHX0lORk9fU0VSVklDRV9OVU1dOworfSBtYm1zYWxfZXJyY19tYm1zX2luZm9fZWxlbWVudF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2xpc3Q7CisgICAgbWJtc2FsX2VycmNfbWJtc19pbmZvX2VsZW1lbnRfc3RydWN0IGxpc3RbTUJNU19TRVJWSUNFX1NUQVRVU19NQlNGTl9BUkVBX05VTV07Cit9IG1ibXNhbF9lcnJjX21ibXNfaW5mb19pbmRfc3RydWN0OworLyoqKiBSZXF1aXJlbWVudCBvZiBUQzEwICoqKi8KKworI2VuZGlmICAgLyogLS0tLS0gI2lmbmRlZiBNQk1TQUxfRVJSQ19TVFJVQ1RfSU5DIC0tLS0tICovCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tY2NfcmVjb2dfdGVzdF9kYXRhLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbWNjX3JlY29nX3Rlc3RfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOWE2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbWNjX3JlY29nX3Rlc3RfZGF0YS5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgX01DQ19SRUNPR19URVNUX0RBVEFfSAorI2RlZmluZSBfTUNDX1JFQ09HX1RFU1RfREFUQV9ICisKKyNpbmNsdWRlICJtY2NfcmVjb2dfdHJhaW5fZGF0YS5oIgorCisjZGVmaW5lIE1DQ19SRUNPR19MVEVfVEVTVF9EQVRBX05VTSAxNTUwCisjZGVmaW5lIE1DQ19SRUNPR19MVEVfVEVTVF9NQVhfTUNDX0xFTiAyCisKKyNkZWZpbmUgTUNDX1JFQ09HX05SX1RFU1RfREFUQV9OVU0gNDMxCisjZGVmaW5lIE1DQ19SRUNPR19OUl9URVNUX01BWF9NQ0NfTEVOIDIKKworI2lmZGVmIF9fTUNDX1JFQ09HTklUSU9OX18KKworZXh0ZXJuIGNvbnN0IGthbF9pbnQ4IG1jY19yZWNvZ19sdGVfdGVzdF9kYXRhW01DQ19SRUNPR19MVEVfVEVTVF9EQVRBX05VTV1bTUNDX1JFQ09HX0xURV9EQVRBX0xFTl07CisKK2V4dGVybiBjb25zdCBrYWxfdWludDE2IG1jY19yZWNvZ19sdGVfdGVzdF9tY2NbTUNDX1JFQ09HX0xURV9URVNUX0RBVEFfTlVNXVtNQ0NfUkVDT0dfTFRFX1RFU1RfTUFYX01DQ19MRU5dOworCitleHRlcm4gY29uc3Qga2FsX2ludDE2IG1jY19yZWNvZ19ucl90ZXN0X2RhdGFbTUNDX1JFQ09HX05SX1RFU1RfREFUQV9OVU1dW01DQ19SRUNPR19OUl9EQVRBX0xFTl07CisKK2V4dGVybiBjb25zdCBrYWxfdWludDE2IG1jY19yZWNvZ19ucl90ZXN0X21jY1tNQ0NfUkVDT0dfTlJfVEVTVF9EQVRBX05VTV1bTUNDX1JFQ09HX05SX1RFU1RfTUFYX01DQ19MRU5dOworCisjZW5kaWYgLypfX01DQ19SRUNPR05JVElPTl9fKi8KKworI2VuZGlmIC8qX01DQ19SRUNPR19URVNUX0RBVEFfSCovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21jY19yZWNvZ190cmFpbl9kYXRhLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbWNjX3JlY29nX3RyYWluX2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmZhYmU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21jY19yZWNvZ190cmFpbl9kYXRhLmgKQEAgLTAsMCArMSw1NiBAQAorI2lmbmRlZiBfTUNDX1JFQ09HX1RSQUlOX0RBVEFfSAorI2RlZmluZSBfTUNDX1JFQ09HX1RSQUlOX0RBVEFfSAorCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKworI2RlZmluZSBNQ0NfUkVDT0dfTFRFX0JBTkRfTlVNIDE3CisjZGVmaW5lIE1DQ19SRUNPR19MVEVfREFUQV9OVU0gMjA5CisjZGVmaW5lIE1DQ19SRUNPR19MVEVfREFUQV9MRU4gMzExCisjZGVmaW5lIE1DQ19SRUNPR19MVEVfTUFYX01DQ19MRU4gMgorCisjZGVmaW5lIE1DQ19SRUNPR19OUl9CQU5EX05VTSAzCisjZGVmaW5lIE1DQ19SRUNPR19OUl9EQVRBX05VTSA5MQorI2RlZmluZSBNQ0NfUkVDT0dfTlJfREFUQV9MRU4gNjgKKyNkZWZpbmUgTUNDX1JFQ09HX05SX01BWF9NQ0NfTEVOIDIKKworI2lmZGVmIF9fTUNDX1JFQ09HTklUSU9OX18KKworLyoKKyAqICBtY2NfcmVjb2dfbHRlX2JhbmQ6IHRoZSByZW1hcmthYmxlIGJhbmRzCisgKiAgbWNjX3JlY29nX2VhcmZjbjogdGhlIGNlbnRlcmVkIGZyZXEgb2YgMXN0IGFuZCBsYXN0IHN1YmJhbmQgZm9yIGVhY2ggcmVtYXJiYWJsZSBiYW5kIGluIG1jY19yZWNvZ19sdGVfYmFuZAorICogIG1jY19yZWNvZ19sdGVfc3ViYmFuZF9udW06IHRoZSBzdWJiYW5kIG51bWJlciBvZiBlYWNoIHJlbWFyYmFibGUgYmFuZCBpbiBtY2NfcmVjb2dfbHRlX2JhbmQKKyAqICBtY2NfcmVjb2dfbHRlX21jYzogdGhlIG1lZG9pZHMgZGF0YSwgb2YgZWFjaCBpdGVtIGNvbXBvc2VkIGJ5IHJzc2koZEJtKSB2YWx1ZXMgZmxhdHRlbmVkIGJ5IGVhY2ggb3JkZXJlZCBzdWJiYW5kIGZvciBlYWNoIG9yZGVyZWQgYmFuZCBpbiBtY2NfcmVjb2dfbHRlX2JhbmQuCisgKiAgICAgICAgICAgICAgICAgICAgIFNvbWUgdmFsdWUgYXJlIG1hcmtlZCAwIGFzIGludmFsaWQgYmVjYXVzZSBzb21lIGJhbmRzIGFyZSBub3Qgc3VwcG9ydCBpbiBvcmdpbmFsIGRhdGEuCisgKi8KKworZXh0ZXJuIGNvbnN0IGthbF91aW50OCBtY2NfcmVjb2dfbHRlX2JhbmRbTUNDX1JFQ09HX0xURV9CQU5EX05VTV07CisKK2V4dGVybiBjb25zdCBrYWxfdWludDMyIG1jY19yZWNvZ19lYXJmY25bTUNDX1JFQ09HX0xURV9CQU5EX05VTV1bMl07CisKK2V4dGVybiBjb25zdCBrYWxfdWludDggbWNjX3JlY29nX2x0ZV9zdWJiYW5kX251bVtNQ0NfUkVDT0dfTFRFX0JBTkRfTlVNXTsKKworZXh0ZXJuIGNvbnN0IGthbF9pbnQ4IG1jY19yZWNvZ19sdGVfZGF0YVtNQ0NfUkVDT0dfTFRFX0RBVEFfTlVNXVtNQ0NfUkVDT0dfTFRFX0RBVEFfTEVOXTsKKworZXh0ZXJuIGNvbnN0IGthbF91aW50MTYgbWNjX3JlY29nX2x0ZV9tY2NbTUNDX1JFQ09HX0xURV9EQVRBX05VTV1bTUNDX1JFQ09HX0xURV9NQVhfTUNDX0xFTl07CisKKy8qCisgKiAgbWNjX3JlY29nX25yX2JhbmQ6IHRoZSByZW1hcmthYmxlIGJhbmRzCisgKiAgbWNjX3JlY29nX25yYXJmY246IHRoZSBmcmVxdWVuY3kgcmFuZ2Ugb2YgMXN0IGFuZCBsYXN0IHN1YmJhbmQgZm9yIGVhY2ggcmVtYXJiYWJsZSBiYW5kIGluIG1jY19yZWNvZ19ucl9iYW5kCisgKiAgbWNjX3JlY29nX25yX3N1YmJhbmRfbnVtOiB0aGUgc3ViYmFuZCBudW1iZXIgb2YgZWFjaCByZW1hcmJhYmxlIGJhbmQgaW4gbWNjX3JlY29nX25yX2JhbmQKKyAqICBtY2NfcmVjb2dfbnJfZGF0YTogdGhlIG1lZG9pZHMgZGF0YSwgb2YgZWFjaCBpdGVtIGNvbXBvc2VkIGJ5IHJzc2kocWRCbSkgdmFsdWVzIGZsYXR0ZW5lZCBieSBlYWNoIG9yZGVyZWQgc3ViYmFuZCBmb3IgZWFjaCBvcmRlcmVkIGJhbmQgaW4gbWNjX3JlY29nX25yX2JhbmQuCisgKiAgICAgICAgICAgICAgICAgICAgIFNvbWUgdmFsdWUgYXJlIG1hcmtlZCAwIGFzIGludmFsaWQgYmVjYXVzZSBzb21lIGJhbmRzIGFyZSBub3Qgc3VwcG9ydCBpbiBvcmdpbmFsIGRhdGEuCisgKi8KKworZXh0ZXJuIGNvbnN0IGthbF91aW50OCBtY2NfcmVjb2dfbnJfYmFuZFtNQ0NfUkVDT0dfTlJfQkFORF9OVU1dOworCitleHRlcm4gY29uc3Qga2FsX3VpbnQzMiBtY2NfcmVjb2dfbnJhcmZjbltNQ0NfUkVDT0dfTlJfQkFORF9OVU1dWzRdOworCitleHRlcm4gY29uc3Qga2FsX3VpbnQ4IG1jY19yZWNvZ19ucl9zdWJiYW5kX251bVtNQ0NfUkVDT0dfTlJfQkFORF9OVU1dOworCitleHRlcm4gY29uc3Qga2FsX2ludDE2IG1jY19yZWNvZ19ucl9kYXRhW01DQ19SRUNPR19OUl9EQVRBX05VTV1bTUNDX1JFQ09HX05SX0RBVEFfTEVOXTsKKworZXh0ZXJuIGNvbnN0IGthbF91aW50MTYgbWNjX3JlY29nX25yX21jY1tNQ0NfUkVDT0dfTlJfREFUQV9OVU1dW01DQ19SRUNPR19OUl9NQVhfTUNDX0xFTl07CisKKyNlbmRpZiAvKl9fTUNDX1JFQ09HTklUSU9OX18qLworCisjZW5kaWYgLypfTUNDX1JFQ09HX1RSQUlOX0RBVEFfSCovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbWxsMV9jb21tb24uaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbGwxX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMzA0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbWxsMV9jb21tb24uaApAQCAtMCwwICsxLDQ3MCBAQAorI2lmbmRlZiBfTUxMMV9DT01NT05fSAorI2RlZmluZSBfTUxMMV9DT01NT05fSAorCisjaW5jbHVkZSAiaXJhdF9jb21tb25fZW51bXNfcHVibGljLmgiCisjaW5jbHVkZSAiZ2xvYmFsX3R5cGUuaCIKKworLyogWzIwMTUwMzA5IEFsaV0gZm9yIE1EMTwtPk1EMyBpbnRlZ3JhdGlvbiwgbW92ZSB0byBtY3UvaW50ZXJmYWNlL3NhcC9jcm9zc19jb3JlL2lyYXRfY29tbW9uX2VudW1fcHVibGljLmgKK3R5cGVkZWYgZW51bQoreworICBMTDFfTU9ERV9TVEFUVVNfSU5JVCA9IDAsCisgIExMMV9HU01fTU9ERV9CRUdJTiwKKyAgTEwxX0dTTV9OVUxMX01PREUsCisgIExMMV9HU01fSURMRV9NT0RFLAorICBMTDFfR1NNX1NEQ0NIX01PREUsCisgIExMMV9HU01fRENIX01PREUsCisgIExMMV9HU01fUEtUX01PREUsCisgIExMMV9HU01fTU9ERV9FTkQsCisgIExMMV9GRERfTU9ERV9CRUdJTiwKKyAgTEwxX0ZERF9OVUxMX01PREUsCisgIExMMV9GRERfSURMRV9NT0RFLAorICBMTDFfRkREX0VGQUNIX0RSWF9NT0RFLAorICBMTDFfRkREX0ZBQ0hfTU9ERSwKKyAgTEwxX0ZERF9EQ0hfTU9ERSwKKyAgTEwxX0ZERF9NT0RFX0VORCwKKyAgTEwxX1RERF9NT0RFX0JFR0lOLAorICBMTDFfVEREX05VTExfTU9ERSwKKyAgTEwxX1RERF9JRExFX01PREUsCisgIExMMV9URERfRkFDSF9NT0RFLAorICBMTDFfVEREX0RDSF9NT0RFLAorICBMTDFfVEREX0hTUEFfTU9ERSwKKyAgTEwxX1RERF9NT0RFX0VORCwKKyAgTEwxX0xURV9NT0RFX0JFR0lOLAorICBMTDFfTFRFX05VTExfTU9ERSwKKyAgTEwxX0xURV9JRExFX01PREUsCisgIExMMV9MVEVfQ09OTkVDVF9NT0RFLAorICBMTDFfTFRFX0NPTk5FQ1RfRFJYX01PREUsCisgIExMMV9MVEVfTU9ERV9FTkQKK30gbGwxX2FjdGl2ZV9yYXRfbW9kZV9zdGF0dXNfZW51bTsKKyovCisvLyBbMjAxNTAzMzEgQWxpXSBHZW1pbmlfTF9XCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRU5VTUVSQVRJT04KKyogICBtbGwxX2N1cnJlbnRfY250eF9lbnVtCisqCisqIERFU0NSSVBUSU9OUworKiAgIFVzZWQgdG8gaWRlbnRpZnkgdGhlIGN1cnJlbnQgdXNlZCBjbnR4IChNTEwxXzEgb3IgTUxMMV8yKSwgZm9yIEdlbWluaSBMK1cgcHJvamVjdAorKiAgIGZvciAgR0VNSU5JX1BMVVNfV0NETUEgPj0gMyA6IE1MTDFfMywgZm9yICBHRU1JTklfUExVU19XQ0RNQSA+PSA0OiBNTEwxXzQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bQoreworICAgTUxMMV8xID0gMCwKKyAgIE1MTDFfMiA9IDEsCisgICBNTEwxXzMgPSAyLAorICAgTUxMMV80ID0gMworfSBtbGwxX2N1cnJlbnRfY250eF9lbnVtOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRU5VTUVSQVRJT04KKyogICBtbGwxX3RpY2tfY291bnRfdHlwZV9lbnVtCisqCisqIERFU0NSSVBUSU9OUworKiAgIFVzZWQgdG8gaWRlbnRpZnkgdGhlIHRpY2sgY291bnQgb2YgY2VydGFpbiB0eXBlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bQoreworICAgTUxMMV9USUNLX0NPVU5UX1RZUEVfUkFOSyA9IDAsCisgICBNTEwxX1RJQ0tfQ09VTlRfVFlQRV9ERVRDID0gMSwKKyAgIE1MTDFfVElDS19DT1VOVF9UWVBFX1BSSU8gPSAzCit9IG1sbDFfdGlja19jb3VudF90eXBlX2VudW07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBtbGwxX2dhcF9mc21fcGFyYV9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgeEwxLUxMMSBwYXNzIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4KKyoKKyogUEFSQU1FVEVSUworKiAgIHJhdCAgICAgICAgICAgICAgICAgLSBhbHdheXMgYmUgTUxMMV9HRVJBTl9SQVQKKyogICBnYXBfc2VydmljZV9lbmFibGUgIC0gaXMgZ3NtIHJlcXVlc3QgZ2FwIHNlcnZpY2UKKyogICB0aWNrX2JtcCAgICAgICAgICAgIC0gYml0IDAgOiByYW5raW5nIHNlYXJjaCB0aWNrLCBiaXQgMSA6IHByaW9yaXR5IHNlYXJjaCB0aWNrCisqICAgY2Fycmllcl9udW0gICAgICAgICAtIEhQUyBvbiwgTWVhcyBvZmYsIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgaGlnaGVyIHByaW9yaXR5IHNlYXJjaCBmcmVxdWVuY2llcworKiAgICAgICAgICAgICAgICAgICAgICAgICBIUFMgb24sIE1lYXMgb24sIE5vIG1lYW5pbmcKKyogICAgICAgICAgICAgICAgICAgICAgICAgSFBTIG9mZiwgTWVhcyBvbiwgaXMgZXF1YWwgdG8gdGhlIHRvdGFsIG51bWJlciBvZiBtZWFzdXJlbWVudCBmcmVxdWVuY2llcworKiAgIGNhcnJpZXJfbnVtX3JwZyAgIC0gZnJlcXVlbmN5IG51bWJlciBvZiBSUEcgKEluY01vbikKKyogICByYWNoX3JwdF9jYXJyaWVyX251bS0gSW4gaWRsZS9lRkFDSCBzdGF0ZSwgVU1UUyBGREQgbWF5IHJlcXVlc3QgdG8gbWVhcy4gc3BlY2lhbCBmcmVxcyBmb3IgcmFjaCByZXBvcnQKKyogICB0X2hwcyAgICAgICAgICAgICAgIC0gaGlnaCBwcmlvcml0eSBwZXJpb2QgPSAyNS82MC83NSAodW5pdCA6IHMpCisqICAgaXNfcGVyaW9kX3Jlc2V0X2JtcCAtIGJpdCAwIGZvciByYW5rIHBlcmlvZCwgMSBtZWFucyB0byByZXNldAorKiAgICAgICAgICAgICAgICAgICAgICAgLSBiaXQgMSBmb3IgcHJpbyBwZXJpb2QsIDAgbWVhbnMgbm90IHRvIHJlc2V0CisqICAgICAgICAgICAgICAgICAgICAgICAtIHdoZW4gZnJlcS4gbnVtIGlzIHNhbWUgYXMgYmVmb3JlLCBsbDEgd2lsbCBjaGVjayB0aGlzIGZsYWcgdG8gcmVzZXQgcGVyaW9kIG9yIG5vdAorKiAgIGF1dG9fc3VjY2VzcyAgICAgICAgLSBLQUxfVFJVRSAgLSB4TDEgd2lsbCBub3QgdXNlIFJGIGZyb20gdGhlIHN0YXJ0aW5nIHRpbWUgb2YgTEwxX3hMMV9BVVRPTk9NT0lTX0dBUF9JTkQKKyogICAgICAgICAgICAgICAgICAgICAgICAgS0FMX0ZBTFNFIC0geEwxIG1heSB1c2UgUkYgYWZ0ZXIgc3RhcnRpbmcgdGltZSBvZiBMTDFfeEwxX0FVVE9OT01PSVNfR0FQX0lORC4KKyogICB2YWxpZF9wZXJpb2QgICAgICAgIC0gVGhlIGxlbmd0aCBvZiAgYXV0b25vbW91cyBnYXAgYWxsb3dlZCBpbiBHTDEuIFRoZSB2YWx1ZSBpcyB2YWxpZCB3aGVuIEdMMSBpcyBhY3RpdmUgcmF0IGFuZCBzdWNjZXNzID0gS0FMX1RSVUUuIFVuaXQgOiBlYml0CisqIE5PVEUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF9pbnQzMiAgcmF0OworICAga2FsX2Jvb2wgICBnYXBfc2VydmljZV9lbmFibGU7CisgICBrYWxfdWludDggIHRpY2tfYm1wOworICAga2FsX3VpbnQ4ICBjYXJyaWVyX251bTsKKyAgIGthbF91aW50OCAgY2Fycmllcl9udW1fcnBnOworICAga2FsX3VpbnQ4ICByYWNoX3JwdF9jYXJyaWVyX251bTsKKyAgIGthbF91aW50MTYgdF9ocHM7CisgICBrYWxfaW50MzIgIGlzX3BlcmlvZF9yZXNldF9ibXA7CisgICBrYWxfYm9vbCAgIGF1dG9fc3VjY2VzczsKKyAgIGthbF9pbnQ2NCAgdmFsaWRfcGVyaW9kOworfW1sbDFfZ2FwX2ZzbV9wYXJhX3N0cnVjdDsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAvKl9fR1NNX1JBVF9fKi8KKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLypfX1VNVFNfRkREX01PREVfXyovCisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLypfX1VNVFNfVEREMTI4X01PREVfXyovCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmIC8qX19MVEVfUkFUX18qLworCisjZW5kaWYgLypfTUxMMV9DT01NT05fSCovCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbGwxX2V1dHJhbi5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21sbDFfZXV0cmFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTViZDY3ZAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbGwxX2V1dHJhbi5oCkBAIC0wLDAgKzEsMTI0OCBAQAorI2lmbmRlZiBfTUxMMV9FVVRSQU5fSAorI2RlZmluZSBfTUxMMV9FVVRSQU5fSAorCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiIC8qZm9yIExPQ0FMX1BBUkFfSERSKi8KKyNpbmNsdWRlICJtbGwxX2NvbW1vbi5oIgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVGSU5JVElPTlMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBFVVRSQU5fU0VTU0lPTl9JTl9QRVJJT0QgICAgIDQ4IC8qYWxpZ24gVERTIERNTyBiYXNlZCBvbiAxMG1zLCA0ODBtcy8xMG1zID0gNDgqLworCisjZGVmaW5lIEVVVFJBTl9TQ0hFRFVMRV9ERUxBWSAgICAgICAgMCAvKiB1c2VkIHRvIHBvc3Rwb25lIGF2YWlsYWJsZSBnYXAgc3RhcnQgdGltZSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlVNRVJBVElPTlMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRU5VTUVSQVRJT04KKyogICBlbDFfbGwxX3JhdF9zdGF0dXNfZW51bQorKgorKiBERVNDUklQVElPTlMKKyogICBVc2VkIHRvIGlkZW50aWZ5IHRoZSBzdGF0dXMgaW4gRVVUUkFOIFJBVC4KKyogTk9URQorKiAgIGFueSBtb2RpZmljYXRpb24gc2hvdWxkIHN5bmMuIHdpdGggbGwxX3JhdF9zdGF0dXNfZW51bQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgRUwxX0xMMV9SQVRfRkxJR0hUID0wLAorICBFTDFfTEwxX1JBVF9TVEFOREJZLAorICBFTDFfTEwxX1JBVF9BQ1RJVkUsCisgIEVMMV9MTDFfUkFUX05VTQorfSBlbDFfbGwxX3JhdF9zdGF0dXNfZW51bTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSVUNUVVJFUworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBldXRyYW5fdGltZV9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgRVVUUkFOIHN5c3RlbSB0aW1pbmcgYmFzZQorKgorKiBQQVJBTUVURVJTCisqICAgc2ZuICAgICAgICAgLSBFVVRSQU4gc3lzdGVtIGZyYW1lIG51bWJlciAoMH4wWEZGRkZGRkYpLiAtMSA9IElNTUVESUFURUxZCisqICAgc3ViX2ZyYW1lICAgLSBFVVRSQU4gc3ViLWZyYW1lIG51bWJlciAoMH45KQorKiAgIHNhbXBsZSAgICAgIC0gRVVUUkFOIGhhbGYgc2FtcGxlcyAoMH42MTQzOSkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAga2FsX3VpbnQzMiBzZm47CisgIGthbF91aW50OCAgc3ViX2ZyYW1lOworICBrYWxfdWludDE2IHNhbXBsZTsKK31ldXRyYW5fdGltZV9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBsbDFfZXV0cmFuX3N0YW5kYnlfZ2FwX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBFVVRSQU4gc3RhbmRieSBnYXAgcGF0dGVybiBzdHJ1Y3R1cmUuCisqCisqIFBBUkFNRVRFUlMKKyogICBzdGFydF90aW1lIC0gc3RhcnQgdGltZSBvZiB0aGUgZ2FwIHNlc3Npb24KKyogICBsZW5ndGggICAgIC0gbGVuZ3RoIG9mIHRoZSBnYXAgc2Vzc2lvbiAoaW4gc2FtcGxlKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgZXV0cmFuX3RpbWVfc3RydWN0IHN0YXJ0X3RpbWU7CisgICBrYWxfaW50NjQgICAgICAgICAgbGVuZ3RoOworfWxsMV9ldXRyYW5fc3RhbmRieV9nYXBfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgbGwxX2VsMV9leHBhbmRfZ2FwX3BhdHRlcm5fc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIExMMSBleHBhbmRzIGdhcCBwYXR0ZXJuIGZvciBFTDEKKyoKKyogUEFSQU1FVEVSUworKiAgIHNlc3Npb25fbnVtICAtIEluZGljYXRlIGhvdyBtYW55IGdhcCBzZXNzaW9uIAorKiAgIHNlc3Npb25bXSAgICAtIFN0YW5kYnkgZ2FwIHNlc3Npb24uCisqICAgbWVhc3VyZV90aWQgIC0gVHJhbnNpdGlvbiBpZCBmb3IgUkFOSyB0aWNrLi9WYWxpZCB3aGVuIGFjdGl2ZSBSQVQgaXMgaW4gRFJYIG1vZGUuL0FuZCBiaXQgMCBpbiB0aWNrX2JpdG1hcCBpcyAiMSIKKyogICBocHNfdGlkICAgICAgLSBUcmFuc2l0aW9uIGlkIGZvciBIUFMgdGljay4vVmFsaWQgd2hlbiBhY3RpdmUgUkFUIGlzIGluIERSWCBtb2RlLi9BbmQgYml0IDEgaW4gdGlja19iaXRtYXAgaXMgIjEiCisqICAgdGlja19iaXRtYXAgIC0gQml0IDAgOiBSYW5rIHNlYXJjaCAsIEJpdCAxIDogUHJpb3JpdHkgc2VhcmNoCisqICAgZ2FwX3NlcSAgICAgIC0gVmFsaWQgb25seSBpbiBTRENDSCBtb2RlLiAyKiAoOSBmcmFtZXMgLyAxMDIgZnJhbWVzKSBmb3Igb25lIGZyZXF1ZW5jeS4gMTogdGhlIGZpcnN0IGdhcCBwYXR0ZXJuIDsgMjogdGhlIGxhc3QgZ2FwIHBhdHRlcm4gCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX251bTsKKyAgIGxsMV9ldXRyYW5fc3RhbmRieV9nYXBfc3RydWN0IHNlc3Npb25bRVVUUkFOX1NFU1NJT05fSU5fUEVSSU9EXTsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVfdGlkOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgaHBzX3RpZDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgIHRpY2tfYml0bWFwOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgZ2FwX3NlcTsKK31sbDFfZWwxX2V4cGFuZF9nYXBfcGF0dGVybl9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBsbDFfZXV0cmFuX2dhcF9jb25maWdfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIEVVVFJBTiBnYXAgY29uZmlndXJhdGlvbiB3aGVuIEVVVFJBTiBpcyBhY3RpdmUgUkFULgorKgorKiBQQVJBTUVURVJTCisqICAgc3RhcnRfdGltZSAtIFZhbGlkIHRpbWUgb2YgZ2FwIHBhdHRlcm4gaW4gYWN0aXZlIFJBVAorKiAgIHVzZV9udW0gICAgLSBDb250aW51b3VzIGdhcCBudW1iZXIgY291bGQgYmUgdXNlZCBpbiBhY3RpdmUgUkFUKEJhc2ljIHVuaXQgPSA0ODBtcykKKyogICBza2lwX251bSAgIC0gU2tpcCBudW1iZXIgaW4gYWN0aXZlIFJBVC4gKEJhc2ljIHVuaXQgPSA0ODBtcykKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGV1dHJhbl90aW1lX3N0cnVjdCBzdGFydF90aW1lOworICAga2FsX3VpbnQ4ICAgICAgICAgIHVzZV9udW07CisgICBrYWxfdWludDggICAgICAgICAgc2tpcF9udW07Cit9bGwxX2V1dHJhbl9nYXBfY29uZmlnX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGV1dHJhbl9kcnhfZ2FwX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBFVVRSQU4gZHJ4IGdhcCBzdHJ1Y3R1cmUuCisqCisqIFBBUkFNRVRFUlMKKyogICBzdGFydF90aW1lICAtIHN0YXJ0IHRpbWUgb2YgdGhlIGdhcCBzZXNzaW9uCisqICAgbGVuZ3RoICAgICAgLSBsZW5ndGggb2YgdGhlIGdhcCBzZXNzaW9uIChpbiBzdWJfZnJhbWUpCisqICAgaXNfZHJ4X3RpY2sgICAtIEtBTF9UUlVFIDogRmlyc3QgdGljayBpbiB0aGlzIERSWCBwZXJpb2QKKyogICAgICAgICAgICAgICAgICAgS0FMX0ZBTFNFOiBOb3QgdGhlIGZpcnN0IGZyZWUgaW50ZXJ2YWwgaW4gdGhpcyBEUlggcGVyaW9kCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBldXRyYW5fdGltZV9zdHJ1Y3Qgc3RhcnRfdGltZTsKKyAgIGthbF9pbnQzMiAgICAgICAgICBsZW5ndGg7CisgICBrYWxfYm9vbCAgICAgICAgICAgaXNfZHJ4X3RpY2s7Cit9ZXV0cmFuX2RyeF9nYXBfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgZXV0cmFuX2Nvbm5lY3RfZ2FwX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBFVVRSQU4gZ2FwIHN0cnVjdHVyZSBpbiBjb25uZWN0aW9uIG1vZGUgd2l0aG91dCBEUlggLgorKgorKiBQQVJBTUVURVJTCisqICAgc3RhcnRfdGltZSAtIHN0YXJ0IHRpbWUgb2YgdGhlIGdhcCBzZXNzaW9uCisqICAgcGVyaW9kICAgICAtIElEIDAgPSA0MCBtcyA7IElEIDEgPSA4MCBtczsgCisqICAgbGVuZ3RoICAgICAtIGxlbmd0aCBvZiB0aGUgZ2FwIHNlc3Npb24gPSA2IChtcykKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGV1dHJhbl90aW1lX3N0cnVjdCBzdGFydF90aW1lOworICAga2FsX3VpbnQ4ICAgICAgICAgIHBlcmlvZDsKKyAgIGthbF91aW50OCAgICAgICAgICBsZW5ndGg7Cit9ZXV0cmFuX2Nvbm5lY3RfZ2FwX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGVsMV9sbDFfc3luY19jbmZfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIEVMMSB1c2VzIHRoaXMgcHJpbWl0aXZlIHRvIGNvbmZpcm0gTEwxIHRoYXQgY3VycmVudCBFVVRSQU4gdGltaW5nIAorKiAgIGFuZCBtaWNybyBzZWNvbmQgY291bnRlciB2YWx1ZS4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBjdXJyZW50X3RpbWUgIC0gc3luYy4gdGltZSBpbiBldXRyYW5fdGltZV9zdHJ1Y3QgCisqICAgZXV0cmFuX3VzdGltZSAtIHN5bmMuIHRpbWUgaW4gVVNDICAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBldXRyYW5fdGltZV9zdHJ1Y3QgY3VycmVudF90aW1lOworICAga2FsX3VpbnQzMiAgICAgICAgIGV1dHJhbl91c3RpbWU7Cit9ZWwxX2xsMV9zeW5jX2NuZl9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBlbDFfbGwxX3JhdF9zdGF0dXNfaW5kX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBUaGlzIG1lc3NhZ2UgaXMgc2VudCBmcm9tIEVMMSB0byBMTDEgZm9yIGluZm9ybWluZyBjdXJyZW50IEdMMSBSQVQgc3RhdHVzLiAKKyogICBUaGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNlbnQgd2hlbiBFTDEgUkFUIHN0YXR1cyBjaGFuZ2VkLgorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIHJhdF9zdGF0dXMgLSBSQVQgc3RhdHVzIGluIEVMMSAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBlbDFfbGwxX3JhdF9zdGF0dXNfZW51bSByYXRfc3RhdHVzOworfWVsMV9sbDFfcmF0X3N0YXR1c19pbmRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgZWwxX2xsMV9tb2RlX3N0YXR1c19pbmRfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFRoaXMgbWVzc2FnZSBpcyBzZW50IGZyb20gRUwxIHRvIExMMSBmb3IgaW5mb3JtaW5nIHRoYXQgR0wxIG1vZGUgc3RhdHVzIHdoZW4gR0wxIGlzIGFjdGl2ZSBSQVQuIAorKiAgIFRoaXMgbWVzc2FnZSBzaG91bGQgYmUgc2VudCB3aGVuIEVMMSBtb2RlIHN0YXR1cyBjaGFuZ2VkLgorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIGV1dHJhbl9tb2RlX3N0YXR1cyAtIGN1cnJlbnQgbW9kZSBpbiBFTDEgd2hlbiBFVVRSQU4gaXMgYWN0aXZlIFJBVAorKiAgIGlzX2NlbGxfY2hhbmdlZCAgICAtIEtBTF9UUlVFIDogQ2VsbCBjaGFuZ2VkCisqICAgICAgICAgICAgICAgICAgICAgICAgS0FMX0ZBTFNFIDogV2hlbiBvbmx5IHN0YXR1cyBvciBkcnhfY3ljbGVfbGVuZ3RoIGNoYW5nZWQuCisqICAgZHJ4X2N5Y2xlX2xlbmd0aCAgIC0gdmFsaWQgd2hlbiBldXRyYW5fbW9kZV9zdGF0dXMgPSBFTDFfTEwxX0lETEVfTU9ERQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGxsMV9hY3RpdmVfcmF0X21vZGVfc3RhdHVzX2VudW0gZXV0cmFuX21vZGVfc3RhdHVzOworICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBpc19jZWxsX2NoYW5nZWQ7CisgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgIGRyeF9jeWNsZV9sZW5ndGg7Cit9ZWwxX2xsMV9tb2RlX3N0YXR1c19pbmRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgbGwxX2VsMV9tb2RlX3N0YXR1c191cGRhdGVfaW5kX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBUaGlzIG1lc3NhZ2UgaXMgc2VudCB0byBFTDEgZm9yIGluZm9ybWluZyB0aGF0IG1vZGUgc3RhdHVzIG9mIGFjdGl2ZSBSQVQgd2hlbiBFTDEgaXMgc3RhbmRieSBSQVQuIAorKiAgIFRoaXMgbWVzc2FnZSBzaG91bGQgYmUgdXBkYXRlZCBmb3IgRUwxIGluIHN0YW5kYnkgd2hlbiBhbnkgbW9kZSBzdGF0dXMgY2hhbmdlZCBpbiBhY3RpdmUgUkFULiAKKyogICBBbHNvIHdoZW4gRUwxIGVudGVycyBpbnRvIHN0YW5kYnkgUkFUIGZyb20gRkxJR0hULCBMTDEgd2lsbCB1cGRhdGUgY3VycmVudCBtb2RlIHN0YXRlIGluIGFjdGl2ZSBSQVQgdG8gRUwxLgorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIGFjdGl2ZV9yYXRfbW9kZV9zdGF0dXMgLSBjdXJyZW50IG1vZGUgc3RhdHVzIGluIGFjdGl2ZSBSQVQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBsbDFfYWN0aXZlX3JhdF9tb2RlX3N0YXR1c19lbnVtIGFjdGl2ZV9yYXRfbW9kZV9zdGF0dXM7Cit9bGwxX2VsMV9tb2RlX3N0YXR1c191cGRhdGVfaW5kX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGVsMV9sbDFfYWN0aXZlX21lYXN1cmVfc3RhdHVzX2luZF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgRUwxIGluZm9ybXMgTEwxIHRoYXQgaG93IG1hbnkgaGlnaGVyIHByaW9yaXR5IGludGVyLWZyZXF1ZW5jaWVzIGluIEVMMSB3aGVuIGhpZ2ggcHJpb3JpdHkgc2VhcmNoIGlzIHR1cm5lZCBvbgorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIGZyZXFfbnVtICAgICAgLSBUaGUgbnVtYmVyIG9mIGhpZ2hlciBwcmlvcml0eSBpbnRlci1mcmVxLiBpbiBFTDEuKDB+MykKKyogICAgICAgICAgICAgICAgICAgV2hlbiBIUFMgb2ZmLCB0aGUgZnJlcV9udW0gaXMgZXF1YWwgdG8gemVyby4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfdWludDggICAgIGZyZXFfbnVtOworfWVsMV9sbDFfYWN0aXZlX21lYXN1cmVfc3RhdHVzX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBlbDFfbGwxX21lYXN1cmVfcmVxX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBUaGlzIG1lc3NhZ2UgaXMgc2VudCBmcm9tIEVMMSB0byBpbmZvcm0gTEwxIHRoYXQgaG93IG1hbnkgRVVUUkFOIGZyZXF1ZW5jaWVzIGFyZSByZXF1aXJlZCB0byBiZSAKKyogICBtZWFzdXJlZCBhbmQgdGhlIG1lYXN1cmVtZW50IHB1cnBvc2VzIGJvdGggaW4gRVVUUkFOIEFjdGl2ZSBhbmQgU3RhbmRieS4gVGhlIG1lc3NhZ2UgaXMgbm90IAorKiAgIGFwcGxpY2FibGUgZm9yIEVMMSB0byByZXF1ZXN0IGdhcHMgZm9yIGludGVyLWZyZXF1ZW5jeSBtZWFzdXJlbWVudCBpbiBpZGxlIG1vZGUuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgbWVhc19wdXJwb3NlX2JpdG1hcCAtIGJpdCAwIGZvciBtZWFzdXJlbWVudCwgYml0IDEgZm9yIGNlbGwgc2VhcmNoLCBiaXQgMiBmb3IgQkNDSAorKiAgIHRpZCAgICAgICAgICAgICAgICAgLSB0aWQgZm9yIGxhc3Rlc3QgbWVhc19yZXEgb24gKHNob3VsZCBvbmx5IGNoYW5nZSB3aGVuIG9mZikKKyogICB0aWNrX2JpdG1hcCAgICAgICAgIC0gYml0IDAgZm9yIHJhbmtpbmcgc2VhcmNoLCBiaXQgMSBmb3IgcHJpb3JpdHkgc2VhcmNoIAorKiAgIGZyZXFfbnVtICAgICAgICAgICAgLSBoaWdoIHByaW9yaXR5IGZyZXFlbmNpZXMgd2hlbiBIUFMgT04sIG1lYXN1cmVtZW50IGZyZXF1ZW5jaWVzIHdoZW4gSFBTIE9GRgorKiAgIHRfaHBzICAgICAgICAgICAgICAgLSBiYXNpYyBwZXJpb2Qgb2YgaGlnaCBwcmlvcml0eSBzZWFyY2ggKDI1cyw2MHMsNzBzKQorKiAgIGlzX3BlcmlvZF9yZXNldF9ibXAgLSBiaXQgMCBmb3IgcmFuayBwZXJpb2QsIDEgbWVhbnMgdG8gcmVzZXQKKyogICAgICAgICAgICAgICAgICAgICAgIC0gYml0IDEgZm9yIHByaW8gcGVyaW9kLCAwIG1lYW5zIG5vdCB0byByZXNldAorKiAgICAgICAgICAgICAgICAgICAgICAgLSB3aGVuIGZyZXEuIG51bSBpcyBzYW1lIGFzIGJlZm9yZSwgbGwxIHdpbGwgY2hlY2sgdGhpcyBmbGFnIHRvIHJlc2V0IHBlcmlvZCBvciBub3QKKyogICAgICAgICAgICAgICAgICAgICAgIC0gS0FMX1RSVUUgOiByZXNldCBocHMgcGVyaW9kLCBLQUxfRkFMU0UgOiBkb2VzbnQgcmVzZXQgaHBzIHBlcmlvZC4KKyogICBjdXJyZW50X3RpbWUgICAgICAgIC0gY3VycmVudCBpbiBFTDEKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfdWludDggICAgICAgICAgIG1lYXNfcHVycG9zZV9iaXRtYXA7CisgICBrYWxfdWludDggICAgICAgICAgIHRpZDsKKyAgIGthbF91aW50OCAgICAgICAgICAgdGlja19iaXRtYXA7CisgICBrYWxfdWludDggICAgICAgICAgIGZyZXFfbnVtOworICAga2FsX3VpbnQxNiAgICAgICAgICB0X2hwczsKKyAgIGthbF9pbnQzMiAgICAgICAgICAgaXNfcGVyaW9kX3Jlc2V0X2JtcDsKKyAgIGV1dHJhbl90aW1lX3N0cnVjdCAgY3VycmVudF90aW1lOyAKK31lbDFfbGwxX21lYXN1cmVfcmVxX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGVsMV9sbDFfc3RhbmRieV9tZWFzdXJlX2RvbmVfaW5kX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBGb3IgbG93IHBvd2VyIG9wdGltaXphdGlvbiwgRUwxIGluZm9ybXMgTEwxIHdoaWNoIG1lYXN1cmVtZW50IHB1cnBvc2UgaXMgCisqICAgbWVhc3VyZWQgZG9uZSBpbiBpdHMgcGVyaW9kLiBJZiBhbGwgbWVhc3VyZW1lbnQgcHVycG9zZXMgYXJlIG1lYXN1cmVkIGRvbmUsIAorKiAgIExMMSB3aWxsIG5vdCB0aWNrIEVMMSBhbnltb3JlIGluIHNob3J0ZXN0IG1lYXN1cmVtZW50IHBlcmlvZC4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICB0aWQgICAgICAgICAgIC0gRm9yIExMMSB0byBrbm93IHRoaXMgdGlkIGlzIG1hcHBlZCB0byB3aGljaCBnYXAgcGF0dGVybiBwZXJpb2Qgc2VudCBiZWZvcmUKKyogICB0aWNrX2JpdG1hcCAgIC0gYml0IDAgZm9yIHJhbmtpbmcgc2VhcmNoLCBiaXQgMSBmb3IgcHJpb3JpdHkgc2VhcmNoLiBPbmx5IG9uZSBiaXQgd2lsbCBiZSBzZXQgaW4gb25lIG1lc3NhZ2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfdWludDggICAgICB0aWQ7CisgICBrYWxfdWludDggICAgICB0aWNrX2JpdG1hcDsKK31lbDFfbGwxX3N0YW5kYnlfbWVhc3VyZV9kb25lX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBsbDFfZWwxX2dhcF9zZXJ2aWNlX3JlcV9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgTEwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gZW5hYmxlIChkaXNhYmxlKSBhY3RpdmUgUkFUIGdhcCBzZXJ2aWNlIHRvIGdldCAocmVsZWFzZSkgCisqICAgdGhlIGZyZWUgcmFkaW8gZnJlcXVlbmN5IHBlcmlvZCBpbiBFVVRSQU4uV2hlbiBMTDEgZGlzYWJsZXMgYWN0aXZlIFJBVCBnYXAgc2VydmljZSwgCisqICAgaXQgbWVhbnMgdGhhdCBFVVRSQU4gY291bGQgdXNlIGFsbCBSRiB0aW1lIGFscmVhZHkuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgZW5hYmxlICAgICAgICAtIEtBTF9UUlVFICA6IHJlcXVlc3QgZ2FwIHNlcnZpY2UKKyogICAgICAgICAgICAgICAgICAgS0FMX0ZBTFNFIDogc3RvcCBnYXAgc2VydmljZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGthbF9ib29sICAgICAgZW5hYmxlOworfWxsMV9lbDFfZ2FwX3NlcnZpY2VfcmVxX3N0cnVjdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgZWwxX2xsMV9nYXBfc3RvcF9jbmZfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIEVMMSB1c2VzIHRoaXMgcHJpbWl0aXZlIHRvIGNvbmZpcm0gTEwxX0VMMV9HQVBfU1RPUF9SRVEgd2hlbiB0aGVyZSBpcyBubyBnYXAgdXNhZ2UgaW4gRVVUUkFOLi4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBjdXJyZW50X3RpbWUgIC0gY3VycmVudCB0aW1lIGluIEVMMQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGV1dHJhbl90aW1lX3N0cnVjdCBjdXJyZW50X3RpbWU7Cit9ZWwxX2xsMV9nYXBfc3RvcF9jbmZfc3RydWN0OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBlbDFfbGwxX2F1dG9fZ2FwX3JlcV9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgRUwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byByZXF1ZXN0IExMMSB0aGF0IEVMMSB3YW50cyB0byB1c2UgdGhlIGF1dG8gZ2FwICBmcm9tICAoc2ZuLCBzdWJfZnJhbWUsIGhhbGZfc2FtcGxlKS4gCisqICAgRUwxIGNvdWxkIHVzZSB0aGlzIGF1dG8gZ2FwIGFmdGVyIGdldHRpbmcgdGhlIHN1Y2Nlc3NmdWwgY29uZmlybQorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIGF1dG9fdGltZSAgLSBTdGFydCB0aW1lIG9mIGF1dG8gZ2FwIGluIEVMMQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGV1dHJhbl90aW1lX3N0cnVjdCBhdXRvX3RpbWU7Cit9ZWwxX2xsMV9hdXRvX2dhcF9yZXFfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgbGwxX2VsMV9hdXRvX2dhcF9jbmZfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gY29uZmlybSBFTDEgYXV0byBnYXAgcmVxdWVzdC4gCisqICAgQWZ0ZXIgcmVjZWl2aW5nIHRoaXMgbWVzc2FnZSwgRUwxIGNvdWxkIHVzZSByZXF1aXJlZCBhdXRvIGdhcC4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBzdWNjZXNzICAgICAgIC0gS0FMX1RSVUUgOiBFTDEgY291bGQgdXNlIGF1dG8gZ2FwIHRvIHNlYXJjaAorKiAgICAgICAgICAgICAgICAgICBLQUxfRkFMU0U6IEVMMSBjb3VsZCBub3QgdXNlIGF1dG8gZ2FwIHRvIHNlYXJjaC4gCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5kIEdMMSBzaG91bGQgbm90IHJlcXVlc3QgYXV0byBnYXAgdW50aWwgQVVUT19HQVBfQVZBSUxBQkxFX0lORAorKiAgIHZhbGlkX3BlcmlvZCAgLSBUaGUgbGVuZ3RoIG9mICBhdXRvbm9tb3VzIGdhcCBhbGxvd2VkIGJ5IGFjdGl2ZSBSQVQgCisqICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBpcyB2YWxpZCB3aGVuIHN1Y2Nlc3MgPSBLQUxfVFJVRQorKiAgICAgICAgICAgICAgICAgICBVbml0IDogc2FtcGxlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX2Jvb2wgIHN1Y2Nlc3M7CisgICBrYWxfaW50NjQgdmFsaWRfcGVyaW9kOworfWxsMV9lbDFfYXV0b19nYXBfY25mX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGxsMV9lbDFfYXV0b19nYXBfaW5kX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBFTDEgc3RvcHBpbmcgdXNpbmcgUkYgaW4gdGhpcyBhdXRvIGdhcCBmcm9tIChzZm4sIHN1Yl9mcmFtZSwgaGFsZl9zYW1wbGUpLgorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIGF1dG9fdGltZSAgLSBTdGFydCB0aW1lIG9mIGF1dG8gZ2FwCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgZXV0cmFuX3RpbWVfc3RydWN0IGF1dG9fdGltZTsKK31sbDFfZWwxX2F1dG9fZ2FwX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBlbDFfbGwxX2F1dG9fZ2FwX3Jlc19zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgRUwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byByZXNwb25zZSBMTDEgdGhhdCBFTDEgd2lsbC93b24ndCB1c2UgUkYgZnJvbSAKKyogICB0aGUgc3RhcnQgdGltaW5nIG9mIGF1dG8gZ2FwIHdoaWNoIGlzIGluZm9ybWVkIGJ5IExMMV9FTDFfYXV0b19HQVBfSU5ELgorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIHN1Y2Nlc3MgICAgICAgLSBLQUxfVFJVRSA6IEVMMSB3aWxsIG5vdCB1c2UgUkYgZnJvbSB0aGUgc3RhcnRpbmcgdGltZSBvZiBMTDFfRUwxX0FVVE9fR0FQX0lORAorKiAgICAgICAgICAgICAgICAgICBLQUxfRkFMU0U6IEVMMSBtYXkgdXNlIFJGIGFmdGVyIHN0YXJ0aW5nIHRpbWUgb2YgTEwxX0VMMV9BVVRPX0dBUF9JTkQuIAorKiAgIHZhbGlkX3BlcmlvZCAgLSBUaGUgbGVuZ3RoIG9mICBhdXRvbm9tb3VzIGdhcCBhbGxvd2VkIGluIEVMMSAKKyogICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGlzIHZhbGlkIHdoZW4gRUwxIGlzIGFjdGl2ZSByYXQgYW5kIHN1Y2Nlc3MgPSBLQUxfVFJVRQorKiAgICAgICAgICAgICAgICAgICBVbml0IDogc2FtcGxlIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGthbF9ib29sICBzdWNjZXNzOworICAga2FsX2ludDY0IHZhbGlkX3BlcmlvZDsKK31lbDFfbGwxX2F1dG9fZ2FwX3Jlc19zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBsbDFfZWwxX2dhcF9ub3RpZnlfaW5kX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBFTDEgdGhhdCB0aGUgc3RhcnRpbmcgdGltZSBhbmQgbGVuZ3RoIG9mIGdhcCBwYXR0ZXJuLgorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIHN0YW5kYnlfZ2FwICAgLSBzdGFuZGJ5IGdhcCBwYXR0ZXJuCisqICAgYWN0aXZlX2dhcCAgICAtIGFjdGl2ZSBnYXAgcGF0dGVybiBjb25maWd1cmF0aW9uCisqICAgdGlkICAgICAgICAgICAtIHRpZCBmb3IgbGFzdGVzdCBtZWFzX3JlcSBvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGxsMV9lbDFfZXhwYW5kX2dhcF9wYXR0ZXJuX3N0cnVjdCBzdGFuZGJ5X2dhcDsKKyAgIGxsMV9ldXRyYW5fZ2FwX2NvbmZpZ19zdHJ1Y3QgICAgICBhY3RpdmVfZ2FwOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgIHRpZDsgICAgICAgIC8qIFRpZCBmb3IgbGFzdGVzdCBtZWFzX3JlcSBvbiwgTEwxIHdpbGwgZXhwYW5kIGdhcCBub3RpZnkgaW5kIHdpdGggdGhpcyB0aWQqLworfWxsMV9lbDFfZ2FwX25vdGlmeV9pbmRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgZWwxX2xsMV9nYXBfcGF0dGVybl9pbmRfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIEVMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIExMMSB0aGF0IHRoZSBmcmVlIFJGIHBlcmlvZCBpbiBFTDEgYXMgZ2FwIHBhdHRlcm4uIAorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIGVsMV9jdXJyZW50X3RpbWUgIC0gRUwxIGN1cnJlbnQgdGltZQorKiAgIGRyeF9nYXAgICAgICAgICAgIC0gTm8gbWF0dGVyIHRoZSBsZW5ndGggaXMgYmlnZ2VyIHRoYW4gemVybyBvciBub3QsIEVMMSBzaG91bGQgc2VuZCAgCisqICAgICAgICAgICAgICAgICAgICAgICB0aGlzIG1lc3NhZ2UgYW5kIHNldHMgaXNfZHJ4X3RpY2sgPSBLQUxfVFJVRSBpbiBvbmUgRFJYIHBlcmlvZCBvbmNlLgorKiAgIGNvbm5lY3RfZ2FwICAgICAgIC0gR1AwIG9yIEdQMQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGV1dHJhbl90aW1lX3N0cnVjdCAgICAgICAgICAgIGVsMV9jdXJyZW50X3RpbWU7CisgICBldXRyYW5fZHJ4X2dhcF9zdHJ1Y3QgICAgICAgICBkcnhfZ2FwOworICAgZXV0cmFuX2Nvbm5lY3RfZ2FwX3N0cnVjdCAgICAgY29ubmVjdF9nYXA7Cit9ZWwxX2xsMV9nYXBfcGF0dGVybl9pbmRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgbGwxX2VsMV9zeW5jX3JlcV9zdHJ1Y3QKKyogICBlbDFfbGwxX2dhcF9zdG9wX3JlcV9zdHJ1Y3QKKyogICBsbDFfZWwxX2dhcF9zdG9wX2NuZl9zdHJ1Y3QKKyogICBsbDFfZWwxX2dhcF9zdG9wX3JlcV9zdHJ1Y3QKKyogICBlbDFfbGwxX2dhcF9zdG9wX2NuZl9zdHJ1Y3QKKyogICBlbDFfbGwxX2dhcF9zdXNwZW5kX3JlcV9zdHJ1Y3QKKyogICBsbDFfZWwxX2dhcF9zdXNwZW5kX2NuZl9zdHJ1Y3QKKyogICBsbDFfZWwxX2dhcF9zdXNwZW5kX3JlcV9zdHJ1Y3QKKyogICBlbDFfbGwxX2dhcF9zdXNwZW5kX2NuZl9zdHJ1Y3QKKyogICBlbDFfbGwxX2dhcF9yZXN1bWVfaW5kX3N0cnVjdAorKiAgIGxsMV9lbDFfZ2FwX3Jlc3VtZV9pbmRfc3RydWN0CisqICAgZWwxX2xsMV9hdXRvX2dhcF9zdG9wX3JlcV9zdHJ1Y3QKKyogICBsbDFfZWwxX2F1dG9fZ2FwX3N0b3BfaW5kX3N0cnVjdAorKiAgIGVsMV9sbDFfYXV0b19nYXBfc3RvcF9yZXNfc3RydWN0CisqICAgbGwxX2VsMV9hdXRvX2dhcF9zdG9wX2NuZl9zdHJ1Y3QKKyogICBlbDFfbGwxX2F1dG9fZ2FwX2VuZF9pbmRfc3RydWN0CisqICAgbGwxX2VsMV9hdXRvX2dhcF9lbmRfaW5kX3N0cnVjdAorKiAgIGVsMV9sbDFfYXV0b19nYXBfYXZhaWxhYmxlX2luZF9zdHJ1Y3QKKyogICBsbDFfZWwxX2F1dG9fZ2FwX2F2YWlsYWJsZV9pbmRfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIGxsMV9lbDFfc3luY19yZXFfc3RydWN0CisqICAgICBMTDEgd2lsbCB1c2UgdGhpcyBwcmltaXRpdmUgdG8gZ2V0IEVMMSBjdXJyZW50IFVNVFMgdGltaW5nIGFuZCBtaWNybyAKKyogICAgIHNlY29uZCBjb3VudGVyIHZhbHVlIGluIGJvdGggRUwxIGluIGFjdGl2ZSBhbmQgc3RhbmRieSBtb2RlLgorKgorKiAgIGVsMV9sbDFfZ2FwX3N0b3BfcmVxX3N0cnVjdAorKiAgICAgRUwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gaW5mb3JtIExMMSB0byBzdG9wIGFsbCBnYXAgdXNhZ2UgaW4gc3RhbmRieSAKKyogICAgIFJBVCB3aGVuIEdFUkFOIEdTTSB3YW50cyB0byBjaGFuZ2UgY29uZmlndXJhdGlvbiBvciBvdGhlciBwdXJwb3Nlcy4KKyoKKyogICBsbDFfZWwxX2dhcF9zdG9wX2NuZl9zdHJ1Y3QKKyogICAgIExMMSB1c2VzIHRoaXMgcHJpbWl0aXZlIHRvIGNvbmZpcm0gRUwxIHRoYXQgTEwxIGhhcyBhbHJlYWR5IHN0b3BwZWQgCisqICAgICBhbGwgZ2FwIHVzYWdlcyBpbiBzdGFuZGJ5IFJBVCBhbmQgRUwxIGNvdWxkIHVzZSBhbGwgUkYgdGltZS4KKyoKKyogICBsbDFfZWwxX2dhcF9zdG9wX3JlcV9zdHJ1Y3QKKyogICAgIExMMSB1c2VzIHRoaXMgcHJpbWl0aXZlIHRvIHN0b3AgZ2FwIHVzYWdlIGluIEVVVFJBTiB3aGVuIEVVVFJBTiBpcyBzdGFuZGJ5IFJBVC4KKyogIAorKiAgIGVsMV9sbDFfZ2FwX3N0b3BfY25mX3N0cnVjdAorKiAgICAgRUwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gY29uZmlybSBMTDFfRUwxX0dBUF9TVE9QX1JFUSB3aGVuIHRoZXJlIGlzIG5vIGdhcCB1c2FnZSBpbiBFVVRSQU4uCisqCisqICAgZWwxX2xsMV9nYXBfc3VzcGVuZF9yZXFfc3RydWN0CisqICAgICBFTDEgdXNlcyB0aGlzIHByaW1pdGl2ZSB0byB0ZW1wb3JhbCBzdXNwZW5kIGdhcCB1c2FnZSBpbiBzdGFuZGJ5IFJBVCBmb3IgaGlnaGVyIHByaW9yaXR5CisqICAgICB0YXNrIGFuZCBkb2Vzbid0IG5lZWQgdG8gZ2l2ZSBuZXcgZ2FwIGNvbmZpZ3VyYXRpb24gaW4gY29ubmVjdGlvbiBtb2RlIHdoZW4gcmVzdW1lZC4KKyoKKyogICBsbDFfZWwxX2dhcF9zdXNwZW5kX2NuZl9zdHJ1Y3QKKyogICAgIExMMSBzZW5kcyB0aGlzIGNvbmZpcm0gbWVzc2FnZSB0byBFTDEgYWZ0ZXIgYWxsIHN0YW5kYnkgUkFUIGdhcCB1c2FnZSBhcmUgc3VzcGVuZGVkLgorKgorKiAgIGxsMV9lbDFfZ2FwX3N1c3BlbmRfcmVxX3N0cnVjdAorKiAgICAgTEwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBFTDEgdG8gcmVxdWVzdCB0aGF0IEVMMSBzdXNwZW5kcyBSRiB1c2FnZSBpbW1lZGlhdGVseS4KKyoKKyogICBlbDFfbGwxX2dhcF9zdXNwZW5kX2NuZl9zdHJ1Y3QKKyogICAgIEVMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gY29uZmlybSBMTDEgdGhhdCBFTDEgd2lsbCBub3QgdXNlIGdhcCBmcm9tIAorKiAgICAgbm93IHRvIHJlY2VpdmluZyByZXN1bWUgaW5kaWNhdG9yCisqCisqICAgZWwxX2xsMV9nYXBfcmVzdW1lX2luZF9zdHJ1Y3QKKyogICAgIEVMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIExMMSB0aGF0IEVMMSBoYXMgYWxyZWFkeSBmaW5pc2hlZCAKKyogICAgIGhpZ2hlciBwcmlvcml0eSB0YXNrLCBhbmQgc3RhbmRieSBSQVQgY291bGQgdXNlIGdhcCBub3JtYWxseS4KKyoKKyogICBsbDFfZWwxX2dhcF9yZXN1bWVfaW5kX3N0cnVjdAorKiAgICAgTEwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBFTDEgdG8gcmVzdW1lIEVMMSdzIGdhcCB1c2FnZS4gCisqICAgICBBZnRlciByZWNlaXZpbmcgdGhpcyBtZXNzYWdlLCBFTDEgY291bGQgIHVzZSBnYXAgcGF0dGVybiBub3JtYWxseS4KKyoKKyogICBlbDFfbGwxX2F1dG9fZ2FwX3N0b3BfcmVxX3N0cnVjdAorKiAgICAgRUwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byByZXF1ZXN0IExMMSB0aGF0IEVMMSB3YW50cyB0byAKKyogICAgIHJldHJpZXZlIGF1dG8gZ2FwIGZvciBoaWdoZXIgcHJpb3JpdHkgdGFzay4KKyoKKyogICBsbDFfZWwxX2F1dG9fZ2FwX3N0b3BfaW5kX3N0cnVjdAorKiAgICAgTEwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBpbmZvcm0gRUwxIG9mIHN0b3BwaW5nIHVzaW5nIFJGIAorKiAgICAgZHVyaW5nIGF1dG8gZ2FwIHBlcmlvZC4KKyoKKyogICBlbDFfbGwxX2F1dG9fZ2FwX3N0b3BfcmVzX3N0cnVjdAorKiAgICAgRUwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byByZXNwb25zZSBMTDEgdGhhdCBFTDEgc3RvcHMgCisqICAgICBhdXRvIGdhcCB1c2FnZS4KKyoKKyogICBsbDFfZWwxX2F1dG9fZ2FwX3N0b3BfY25mX3N0cnVjdAorKiAgICAgTEwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBjb25maXJtIHRoYXQgRUwxIGNvdWxkIHVzZSBSRiBub3cuCisqCisqICAgZWwxX2xsMV9hdXRvX2dhcF9lbmRfaW5kX3N0cnVjdAorKiAgICAgRUwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBpbmZvcm0gTEwxIHRoYXQgYXV0byBnYXAgdXNhZ2UgaXMgZmluaXNoZWQuCisqIAorKiAgIGxsMV9lbDFfYXV0b19nYXBfZW5kX2luZF9zdHJ1Y3QKKyogICAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIEVMMSB0aGF0IGF1dG8gZ2FwIHVzYWdlIGlzIGZpbmlzaGVkLgorKgorKiAgIGVsMV9sbDFfYXV0b19nYXBfYXZhaWxhYmxlX2luZF9zdHJ1Y3QKKyogICAgIEVMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIExMMSB0aGF0IGF1dG8gZ2FwIGlzIGF2YWlsYWJsZSBub3cuIFN0YW5kYnkgUkFUIAorKiAgICAgY291bGQgcmVxdWVzdCBhdXRvIGdhcCBub3cuIFN0YW5kYnkgUkFUIGNvdWxkIHJlcXVlc3QgYXV0byBnYXAgbm93CisqCisqICAgbGwxX2VsMV9hdXRvX2dhcF9hdmFpbGFibGVfaW5kX3N0cnVjdAorKiAgICAgTEwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBpbmZvcm0gRUwxIHRoYXQgYXV0byBnYXAgCisqICAgICBpcyBhdmFpbGFibGUgbm93LiBFTDEgY291bGQgcmVxdWVzdCBhdXRvIGdhcCBub3cuCisqCisqICAgZWwxX2xsMV9hdXRvX2dhcF91bmF2YWlsYWJsZV9pbmRfc3RydWN0CisqICAgICBFTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBMTDEgdGhhdCBhdXRvIGdhcCBpcyB1bmF2YWlsYWJsZSBub3cuIAorKiAgICAgU3RhbmRieSBSQVQgY291bGQgbm90IHJlcXVlc3QgYXV0byBnYXAgbm93LgorKgorKiAgIGxsMV9lbDFfYXV0b19nYXBfdW5hdmFpbGFibGVfaW5kX3N0cnVjdAorKiAgICAgTEwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBpbmZvcm0gRUwxIHRoYXQgYXV0byBnYXAgaXMgdW5hdmFpbGFibGUgbm93LiAKKyogICAgIEVMMSBjb3VsZCBub3QgcmVxdWVzdCBhdXRvIGdhcCBub3cuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorfWxsMV9lbDFfc3luY19yZXFfc3RydWN0LAorIGVsMV9sbDFfZ2FwX3N0b3BfcmVxX3N0cnVjdCwKKyBsbDFfZWwxX2dhcF9zdG9wX2NuZl9zdHJ1Y3QsCisgbGwxX2VsMV9nYXBfc3RvcF9yZXFfc3RydWN0LAorIGVsMV9sbDFfZ2FwX3N1c3BlbmRfcmVxX3N0cnVjdCwKKyBsbDFfZWwxX2dhcF9zdXNwZW5kX2NuZl9zdHJ1Y3QsCisgbGwxX2VsMV9nYXBfc3VzcGVuZF9yZXFfc3RydWN0LAorIGVsMV9sbDFfZ2FwX3N1c3BlbmRfY25mX3N0cnVjdCwKKyBlbDFfbGwxX2dhcF9yZXN1bWVfaW5kX3N0cnVjdCwKKyBsbDFfZWwxX2dhcF9yZXN1bWVfaW5kX3N0cnVjdCwKKyBlbDFfbGwxX2F1dG9fZ2FwX3N0b3BfcmVxX3N0cnVjdCwKKyBsbDFfZWwxX2F1dG9fZ2FwX3N0b3BfaW5kX3N0cnVjdCwKKyBlbDFfbGwxX2F1dG9fZ2FwX3N0b3BfcmVzX3N0cnVjdCwKKyBsbDFfZWwxX2F1dG9fZ2FwX3N0b3BfY25mX3N0cnVjdCwKKyBlbDFfbGwxX2F1dG9fZ2FwX2VuZF9pbmRfc3RydWN0LAorIGxsMV9lbDFfYXV0b19nYXBfZW5kX2luZF9zdHJ1Y3QsCisgZWwxX2xsMV9hdXRvX2dhcF9hdmFpbGFibGVfaW5kX3N0cnVjdCwKKyBsbDFfZWwxX2F1dG9fZ2FwX2F2YWlsYWJsZV9pbmRfc3RydWN0LAorIGVsMV9sbDFfYXV0b19nYXBfdW5hdmFpbGFibGVfaW5kX3N0cnVjdCwKKyBsbDFfZWwxX2F1dG9fZ2FwX3VuYXZhaWxhYmxlX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBtbGwxX2VsMV9pbmZvX2RhdGFiYXNlX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBFTDEgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorKgorKiBQQVJBTUVURVJTCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7ICAvKiBtZWFzdXJlIHJlcSovCisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrX2JtcDsgICAgICAgICAgICAvKiB1c2UgdG8gcmVjb3JkIHRpY2sgYml0bWFwKi8KKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmtfdGlja190aWQ7ICAgICAgIC8qIHRpZCBmb3IgcmFuayB0aWNrKi8KKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9fdGlja190aWQ7ICAgICAgIC8qIHRpZCBmb3IgcHJpbyB0aWNrKi8KKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXNfZG9uZV9ibXA7ICAgICAgIC8qIG1lYXN1cmVtZW50IGRvbmUgaW5kIGJpdG1hcCovCisgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19tZWFzX2RvbmVfdXNlZnVsOyAvKiBldXRyYW4gdXNlcyBtZWFzX2RvbmUgb3Igbm90IGJ5IGNoZWNraW5nIG1lYXNfcHVycG9zZV9ibXAqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc19wdXJwb3NlX2JpdG1hcDsgLyogcmVjb3JkIHRoZSBtZWFzdXJlIHB1cnBvc2UgYml0bWFwKi8KKyAgIGV1dHJhbl90aW1lX3N0cnVjdCAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdGltZTsgICAgICAgIC8qIGV1dHJhbiBjdXJyZW50IHRpbWUgd2hlbiByZXF1ZXN0IGdhcCBzZXJ2aWNlKi8KKyAgIC8qIFBhZ2luZyBwZXJpb2QgaW4gYWN0aXZlIFJBVCAqLworICAga2FsX2ludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJ4X2N5Y2xlOyAgICAgICAgICAgLyogODAsMTYwLDM1MCw2NDAsMTI4MCwyNTYwLDUxMjAgVW5pdCA6IG1zKi8KKyAgIC8qIFN0b3JlIGdhcCBpbmZvcm1hdGlvbiovCisgICBlbDFfbGwxX2dhcF9wYXR0ZXJuX2luZF9zdHJ1Y3QgICAgICBnYXBfcGF0dGVybjsgICAgICAgICAvKiBzdG9yZSBnYXAgcGF0dGVybiBpbG0qLyAgIAorICAgLyogYXV0byBnYXAgcGFyYSovCisgICBldXRyYW5fdGltZV9zdHJ1Y3QgICAgICAgICAgICAgICAgICBhdXRvX3RpbWU7ICAgICAgICAgICAvKiBhdXRvIGdhcCB0aW1lKi8gCisgICAvKiBNb2RlIHN0YXR1cyovCisgICBsbDFfYWN0aXZlX3JhdF9tb2RlX3N0YXR1c19lbnVtICAgICBtb2RlX3N0YXR1czsgICAgICAgICAvKiBtb2RlIHN0YXR1cyovICAgCisgICAvKiBHYXAgcmVxdWVzdCBmcm9tIHN0YW5kYnkgcmF0IHNob3VsZCBkbyBzeW5jIGluIGNvbm5lY3Rpb24qLworICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRfdGltaW5nOyAgICAgICAgLyogS0FMX1RSVUUgIDogc3luYyBub3QgZmluaXNoIGFmdGVyIHJlcXVlc3QqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogS0FMX0ZBTFNFIDogc3luYyBkb25lKi8KKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXNfcmVxX3RpZDsgICAgICAgIC8qIFRpZCBmb3IgbGFzdGVzdCBtZWFzX3JlcSBvbiwgTEwxIHdpbGwgZXhwYW5kIGdhcCBub3RpZnkgaW5kIHdpdGggdGhpcyB0aWQqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorfW1sbDFfZWwxX2luZm9fZGF0YWJhc2Vfc3RydWN0OworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAvKl9fUE9QX0ZTTV9fKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xPQkFMIEZVTkNUSU9OUworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgbWxsMV9lbDFfYXV0b19nYXBfYXZhaWxhYmxlX2luZAorKiBERVNDUklQVElPTgorKiAgbGwxIHNlbmRzIGF1dG8gZ2FwIGF2YWlsYWJsZSBpbmQgdG8gRVVUUkFOIG5vdworKgorKiBQQVJBTUVURVJTCisqICBrYWxfYm9vbCBhdmFpbGFibGUKKyogUkVUVVJOUworKiAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZWwxX2F1dG9fZ2FwX2F2YWlsYWJsZV9pbmQoa2FsX2Jvb2wgYXZhaWxhYmxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV9lbDFfYXV0b19nYXBfY25mCisqIERFU0NSSVBUSU9OCisqICAgbGwxIHNlbmRzIGF1dG8gZ2FwIGNuZiB0byBFVVRSQU4gbm93CisqCisqIFBBUkFNRVRFUlMKKyogICBzdWNjZXNzIC0gc3VjY2VzcyBvciBub3QKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2VsMV9hdXRvX2dhcF9jbmYoa2FsX2Jvb2wgc3VjY2Vzcywga2FsX2ludDY0IHZhbGlkX3BlcmlvZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfZWwxX2F1dG9fZ2FwX2VuZF9pbmQKKyogREVTQ1JJUFRJT04KKyogICBsbDEgc2VuZHMgYXV0byBnYXAgZW5kIGluZCB0byBFVVRSQU4gbm93CisqCisqIFBBUkFNRVRFUlMKKyogICBub25lCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9lbDFfYXV0b19nYXBfZW5kX2luZCh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV9lbDFfYXV0b19nYXBfaW5kCisqIERFU0NSSVBUSU9OCisqICAgbGwxIHNlbmRzIGF1dG8gZ2FwIGluZCB0byBFVVRSQU4gbm93CisqCisqIFBBUkFNRVRFUlMKKyogICBldXRyYW5fdGltZSAtIGF1dG8gdGltZQorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZWwxX2F1dG9fZ2FwX2luZChldXRyYW5fdGltZV9zdHJ1Y3QgZXV0cmFuX3RpbWUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2VsMV9hdXRvX2dhcF9zdG9wX2NuZgorKiBERVNDUklQVElPTgorKiAgIGxsMSBzZW5kcyBhdXRvIGdhcCBzdG9wIGNuZiB0byBFVVRSQU4gbm93CisqCisqIFBBUkFNRVRFUlMKKyogICBOb25lCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9lbDFfYXV0b19nYXBfc3RvcF9jbmYodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfZWwxX2F1dG9fZ2FwX3N0b3BfaW5kCisqIERFU0NSSVBUSU9OCisqICAgbGwxIHNlbmRzIGF1dG8gZ2FwIHN0b3AgaW5kIHRvIEVVVFJBTiBub3cKKyoKKyogUEFSQU1FVEVSUworKiAgIE5vbmUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2VsMV9hdXRvX2dhcF9zdG9wX2luZCh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX2VsMV9hdXRvX3RpbWVfbWludXMKKyogREVTQ1JJUFRJT04KKyogIEFkZCBtb3JlIHJmIG1hcmdpbiBmb3IgYW55IHN0YW5kYnkgcmF0IHdoaWNoIHdpbGwgZW50ZXIgc2xlZXAgZHVyaW5nIGF1dG9ub21vdXMgc2VyY2ggcHJvY2VkdXJlCisqICBBc3N1bWUgbWFyZ2luIGlzIHNtYWxsZXIgdGhhbiBvbmUgc2ZuCisqIFBBUkFNRVRFUlMKKyogICBldXRyYW5fdGltZV9zdHJ1Y3QqCisqICAga2FsX2ludDY0ICAgICAgICAgICAgICAtIG1vcmUgUkYgbWFyZ2luIChyZWNvdmVyeSBmcm9tIHNsZWVwKS4KKyogUkVUVVJOUworKiAgdm9pZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZWwxX2F1dG9fdGltZV9taW51cyhldXRyYW5fdGltZV9zdHJ1Y3QqIHRpbWUsIGthbF9pbnQ2NCBzYW1wbGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2VsMV9leHBhbmRfYWN0aXZlX2dhcF9wYXR0ZXJuX2luZAorKiBERVNDUklQVElPTgorKiAgIGxsMSBzZW5kcyBhY3RpdmUgZ2FwIHBhdHRlcm4gaW5kIHRvIEVVVFJBTiBub3cKKyoKKyogUEFSQU1FVEVSUworKiAgIHN0YXJ0X3RpbWUgLSB0aGUgZmlyc3QgZ2FwIHN0YXJ0IHRpbWUKKyogICB1c2VfbnVtICAgIC0gaG93IG1hbnkgNDgwbXMgcGVyaW9kIGVsMSBjb3VsZCB1c2UKKyogICBza2lwX251bSAgIC0gaG93IG1hbnkgNDgwbXMgcGVyaW9kIGVsMSBzaG91bGQgc2tpcCBhZnRlciB1c2UgdXNlX2NudCA0ODBtcyBwZXJpb2QuCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9lbDFfZXhwYW5kX2FjdGl2ZV9nYXBfcGF0dGVybl9pbmQoZXV0cmFuX3RpbWVfc3RydWN0KiBzdGFydF90aW1lLGthbF91aW50OCB1c2VfbnVtLGthbF91aW50OCBza2lwX251bSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfZWwxX2V4cGFuZF9nYXBfcGF0dGVybl9pbmQKKyogREVTQ1JJUFRJT04KKyogICBsbDEgc2VuZHMgYXV0byBnYXAgYXZhaWxhYmxlIGluZCB0byBFVVRSQU4gbm93CisqCisqIFBBUkFNRVRFUlMKKyogICBub25lCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9lbDFfZXhwYW5kX2dhcF9wYXR0ZXJuX2luZChsbDFfZWwxX2V4cGFuZF9nYXBfcGF0dGVybl9zdHJ1Y3QqIHN0YW5kYnlfZ2FwKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV9lbDFfZ2FwX3Jlc3VtZV9pbmQKKyogREVTQ1JJUFRJT04KKyogICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIEVMMSB0byByZXN1bWUgRUwxIGdhcCB1c2FnZS4gCisqICAgQWZ0ZXIgcmVjZWl2aW5nIHRoaXMgbWVzc2FnZSwgRUwxIGNvdWxkIHVzZSBnYXAgcGF0dGVybiBub3JtYWxseS4KKyoKKyogUEFSQU1FVEVSUworKiAgIG5vbmUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2VsMV9nYXBfcmVzdW1lX2luZCh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV9lbDFfZ2FwX3NlcnZpY2VfcmVxdWVzdAorKiBERVNDUklQVElPTgorKiAgIGxsMSBzZW5kcyBnYXAgc2VydmljZSByZXEgdG8gRVVUUkFOIG5vdworKgorKiBQQVJBTUVURVJTCisqICAgZW5hYmxlICAgLSBLQUxfVFJVRSAgOiB0dXJuIG9uIGdhcCBzZXJ2aWNlIAorKiAgICAgICAgICAgIC0gS0FMX0ZBTFNFIDogdHVybiBvZmYgZ2FwIHNlcnZpY2UKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2VsMV9nYXBfc2VydmljZV9yZXEoa2FsX2Jvb2wgZW5hYmxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV9lbDFfZ2FwX3N0b3BfY25mCisqIERFU0NSSVBUSU9OCisqICAgTEwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gY29uZmlybSBFTDEgdGhhdCBMTDEgaGFzIGFscmVhZHkgc3RvcHBlZCAKKyogICBhbGwgZ2FwIHVzYWdlcyBpbiBzdGFuZGJ5IFJBVCBhbmQgRUwxIGNvdWxkIHVzZSBhbGwgUkYgdGltZS4KKyoKKyogUEFSQU1FVEVSUworKiAgIE5PTkUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2VsMV9nYXBfc3RvcF9jbmYodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfZWwxX2dhcF9zdG9wX3JlcQorKiBERVNDUklQVElPTgorKiAgIExMMSB1c2VzIHRoaXMgcHJpbWl0aXZlIHRvIHN0b3AgZ2FwIHVzYWdlIGluIEVVVFJBTiB3aGVuIEVVVFJBTiBpcyBzdGFuZGJ5IFJBVC4KKyoKKyogUEFSQU1FVEVSUworKiAgIE5PTkUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2VsMV9nYXBfc3RvcF9yZXEodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfZWwxX2dhcF9zdXNwZW5kX2NuZgorKiBERVNDUklQVElPTgorKiAgIExMMSBzZW5kcyB0aGlzIGNvbmZpcm0gbWVzc2FnZSB0byBFTDEgYWZ0ZXIgZ2FwIHVzYWdlIGluIHN0YW5kYnkgUkFUIGlzIHN1c3BlbmRlZC4KKyogICBFTDEgY291bGQgdXNlIFJGIG9ubHkgYWZ0ZXIgZ2V0dGluZyB0aGlzIG1lc3NhZ2UuCisqCisqIFBBUkFNRVRFUlMKKyogICBOT05FCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9lbDFfZ2FwX3N1c3BlbmRfY25mKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2VsMV9nYXBfc3VzcGVuZF9yZXEKKyogREVTQ1JJUFRJT04KKyogICBMTDEgdXNlcyB0aGlzIHByaW1pdGl2ZSB0byBzdXNwZW5kIGdhcCB1c2FnZSBpbiBFVVRSQU4gd2hlbiBFVVRSQU4gaXMgc3RhbmRieSBSQVQuCisqCisqIFBBUkFNRVRFUlMKKyogICBOT05FCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9lbDFfZ2FwX3N1c3BlbmRfcmVxKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfZWwxX2dldF9hdXRvX3RpbWUKKyogREVTQ1JJUFRJT04KKyogICByZXR1cm4gYXV0byB0aW1lIGZyb20gRUwxCisqCisqIFBBUkFNRVRFUlMKKyogICBOb25lCisqIFJFVFVSTlMKKyogIGV1dHJhbl90aW1lX3N0cnVjdCBhdXRvX3RpbWUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXV0cmFuX3RpbWVfc3RydWN0IG1sbDFfZWwxX2dldF9hdXRvX3RpbWUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfZWwxX2dldF9jdXJyZW50X3RpbWUKKyogREVTQ1JJUFRJT04KKyogICBsbDEgZ2V0cyBjdXJyZW50IHRpbWUgKyBhaGVhZCBtYXJnaW4gdG8gZXhwYW5kIGdhcAorKgorKiBQQVJBTUVURVJTCisqICAgZXV0cmFuX3RpbWUgLSBzdGFydCB0aW1lIG9mIGV4cGFuc2lvbiBwZXJpb2QKKyogICBrYWxfYm9vbCBpc19haGVhZF90aW1lCisqICAgICAgICAgVFJVRSA6IGFkdmFuY2UgZXV0cmFuX3RpbWUgd2l0aCB0aGUgcHJlZGVmaW5lZCBhaGVhZF90aW1lCisqICAgICAgICAgRkFMU0U6IGRvbid0IGFkdmFuY2UgZXV0cmFuX3RpbWUgd2l0aCB0aGUgcHJlZGVmaW5lZCBhaGVhZF90aW1lCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiB2b2lkIG1sbDFfZWwxX2dldF9jdXJyZW50X3RpbWUoZXV0cmFuX3RpbWVfc3RydWN0KiBldXRyYW5fdGltZSwga2FsX2Jvb2wgaXNfYWhlYWRfdGltZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgbWxsMV9lbDFfZ2V0X2VsMV9yZl9tYXJnaW4KKyogREVTQ1JJUFRJT04KKyogIEVMMSBnZXRzIFJGIG1hcmdpbiBpbiBjdXJyZW50IHN0YXRlCisqCisqIFBBUkFNRVRFUlMKKyogIGhlYWQgICAgICAtIGhlYWRlcl9tYXJnaW4KKyogIHRhaWwgICAgICAgICAtIHRhaWxfbWFyZ2luCisqIFJFVFVSTlMKKyogIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2VsMV9nZXRfZWwxX3JmX21hcmdpbihrYWxfaW50MzIqIGhlYWQsa2FsX2ludDMyKiB0YWlsKTsKKyNpZmRlZiBfX0dTTV9SQVRfXworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX2VsMV9nZXRfZ2wxX3JmX21hcmdpbgorKiBERVNDUklQVElPTgorKiAgRUwxIGdldHMgR0wxIFJGIG1hcmdpbiBpbiBjdXJyZW50IHN0YXRlCisqCisqIFBBUkFNRVRFUlMKKyogIGhlYWQgICAgICAtIGhlYWRlcl9tYXJnaW4KKyogIHRhaWwgICAgICAgICAtIHRhaWxfbWFyZ2luCisqIFJFVFVSTlMKKyogIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2VsMV9nZXRfZ2wxX3JmX21hcmdpbihrYWxfaW50MzIqIGhlYWQsa2FsX2ludDMyKiB0YWlsKTsKKyNlbmRpZiAvKl9fR1NNX1JBVF9fKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfZWwxX2dldF90aW1pbmdfc3RhdHVzCisqIERFU0NSSVBUSU9OCisqCisqIFBBUkFNRVRFUlMKKyogUkVUVVJOUworKiAgIGthbF9ib29sICAtIHZhbGlkX3RpbWluZyAgS0FMX1RSVUUgIDogbWVhbnMgc3RpbGwgc3luYy4gY2FudCBiZSBleHBhbmRlZAorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0FMX0ZBTFNFIDogbWVhbnMgc3luYy4gZG9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfYm9vbCBtbGwxX2VsMV9nZXRfdGltaW5nX3N0YXR1cyh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX2VsMV9nZXRfbW9kZV9zdGF0dXMKKyogREVTQ1JJUFRJT04KKyogICByZXR1cm4gbW9kZSBzdGF0dXMgZnJvbSBFTDEKKyoKKyogUEFSQU1FVEVSUworKiAgIE5vbmUKKyogUkVUVVJOUworKiAgbGwxX2FjdGl2ZV9yYXRfbW9kZV9zdGF0dXNfZW51bSBtb2RlX3N0YXR1cworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitsbDFfYWN0aXZlX3JhdF9tb2RlX3N0YXR1c19lbnVtIG1sbDFfZWwxX2dldF9tb2RlX3N0YXR1cyh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX2VsMV9nZXRfdF9hYm9ydAorKiBERVNDUklQVElPTgorKiAgIFRpZGVudGlmeSxnc20gLyBUcmVjb25maXJtLGdzbSB1aW50OiBtcworKgorKiBQQVJBTUVURVJTCisqICAgY2FycmllcnNfb3RoZXJfdGhhbl9nc20gLSBOdW1iZXIgb2YgY2FycmllcnMgb3RoZXIgdGhhbiBHU00KKyogICAKKyogUkVUVVJOUworKiAga2FsX3VpbnQzMiB0X2Fib3J0OworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfdWludDMyIG1sbDFfZWwxX2dldF90X2Fib3J0KGthbF91aW50OCBjYXJyaWVyc19vdGhlcl90aGFuX2dzbSwga2FsX2Jvb2wgaXNfaWRlbnRpZnkpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfZWwxX2dldF90aWNrX2NvdW50CisqIERFU0NSSVBUSU9OCisqICAgRUwxIHRpY2sgbnVtYmVyCisqCisqIFBBUkFNRVRFUlMKKyogICBpc19wcmlvX3NlYXJjaCAtIEtBTF9GQUxTRSA6IGxsMV9tYWluIHdhbnRzIHRvIGdldCBtZWFzLiB0aWNrCisqICAgICAgICAgICAgICAgICAgICBLQUxfVFJVRSAgOiBsbDFfbWFpbiB3YW50cyB0byBnZXQgcHJpby4gdGljaworKiAgIHRfaHBzICAgICAgICAgIC0gNjAgKHVpbnQgOiBzZWNvbmQpCisqICAgCisqIFJFVFVSTlMKKyogIGthbF91aW50MzIgY291bnQ7CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF91aW50MzIgbWxsMV9lbDFfZ2V0X3RpY2tfY291bnQoa2FsX2Jvb2wgaXNfcHJpb19zZWFyY2gsIGthbF91aW50MTYgdF9ocHMpOworCisjaWZkZWYgX19VTVRTX1JBVF9fCisjaWZkZWYgX19VTVRTX1RERDEyOF9NT0RFX18KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgbWxsMV9lbDFfZ2V0X3RsMV9yZl9tYXJnaW4KKyogREVTQ1JJUFRJT04KKyogIEVMMSBnZXRzIFRMMSBSRiBtYXJnaW4gaW4gY3VycmVudCBzdGF0ZQorKgorKiBQQVJBTUVURVJTCisqICBoZWFkICAgICAgLSBoZWFkZXJfbWFyZ2luCisqICB0YWlsICAgICAgLSB0YWlsX21hcmdpbgorKiBSRVRVUk5TCisqICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9lbDFfZ2V0X3RsMV9yZl9tYXJnaW4oa2FsX2ludDMyKiBoZWFkLGthbF9pbnQzMiogdGFpbCk7CisjZW5kaWYgLypfX1VNVFNfVEREMTI4X01PREVfXyovCisjaWZkZWYgX19VTVRTX0ZERF9NT0RFX18KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgbWxsMV9lbDFfZ2V0X3VsMV9yZl9tYXJnaW4KKyogREVTQ1JJUFRJT04KKyogIEVMMSBnZXRzIFVMMSBSRiBtYXJnaW4gaW4gY3VycmVudCBzdGF0ZQorKgorKiBQQVJBTUVURVJTCisqICBoZWFkICAgICAgLSBoZWFkZXJfbWFyZ2luCisqICB0YWlsICAgICAgLSB0YWlsX21hcmdpbgorKiBSRVRVUk5TCisqICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9lbDFfZ2V0X3VsMV9yZl9tYXJnaW4oa2FsX2ludDMyKiBoZWFkLGthbF9pbnQzMiogdGFpbCk7CisjZW5kaWYgLypfX1VNVFNfRkREX01PREVfXyovCisjZW5kaWYgLypfX1VNVFNfUkFUX18qLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV9lbDFfaGFuZGxlX2dhcF9tYXJnaW5faW5fY29ubmVjdAorKiBERVNDUklQVElPTgorKiAgIEVMMSBoYW5kbGUgZ2FwIG1hcmdpbiBpbiBjb25uZWN0aW9uIG1vZGUKKyoKKyogUEFSQU1FVEVSUworKiAgICpzdCAgICAgICAtIGdhcCBzdGFydGluZyB0aW1lCisqICAgKmxlbmd0aCAgIC0gZ2FwIGxlbmd0aCBpbiBzYW1wbGUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2VsMV9oYW5kbGVfZ2FwX21hcmdpbl9pbl9jb25uZWN0KGV1dHJhbl90aW1lX3N0cnVjdCogc3QsIGthbF9pbnQzMiogbGVuZ3RoKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV9lbDFfaXNfYmVmb3JlX2Rlc3RfdGltZQorKiBERVNDUklQVElPTgorKiAgIGNoZWNrIGlmIGdhcCBzdGFydCB0aW1lIGlzIGJlZm9yZSBkZXN0IHRpbWUsCisqCisqIFBBUkFNRVRFUlMKKyogICBzcmMgICAgICAtIGdhcCBzdGFydCB0aW1lCisqICAgZGVzdCAgICAgLSBleHBhbmQgc3RhcnQgdGltZQorKiBSRVRVUk5TCisqICAga2FsX2Jvb2wgLSBLQUxfVFJVRSAgOiBtZWFucyB0aGF0IHNyYyBpcyBiZWZvcmUgZGVzdCB0aW1lCisqICAgICAgICAgICAgICBLQUxfRkFMU0UgOiBtZWFucyB0aGF0IGRlc3QgaXMgYmVmb3JlIHNyYyB0aW1lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIG1sbDFfZWwxX2lzX2JlZm9yZV9kZXN0X3RpbWUoZXV0cmFuX3RpbWVfc3RydWN0KiBzcmMsZXV0cmFuX3RpbWVfc3RydWN0KiBkZXN0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX2VsMV9pc19pbl9jb25uZWN0X2dwMQorKiBERVNDUklQVElPTgorKiAgIHVzZSB0byBjaGVjayBpZiBlbDEgaXMgaW4gY29ubmVjdCBncDEgY29uZmlndXJhdGlvbgorKgorKiBQQVJBTUVURVJTCisqICAgCisqIFJFVFVSTlMKKyogIGthbF9ib29sIC0gS0FMX1RSVUUgIDogd2l0aCBHUDEgY29uZmlndXJhdGlvbgorKiAgICAgICAgICAgICBLQUxfRkFMU0UgOiB3aXRob3V0IEdQMSBjb25maWd1cmF0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIG1sbDFfZWwxX2lzX2luX2Nvbm5lY3RfZ3AxKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfZWwxX2lzX2xvd2VyX3B3cl9vbgorKiBERVNDUklQVElPTgorKiAgIENoZWNrIGlmIGVsMSBpcyBsb3cgcHdyIG9uCisqCisqIFBBUkFNRVRFUlMKKyogICAKKyogUkVUVVJOUworKiAga2FsX2Jvb2wgLSBLQUxfRkFMU0UgOiBtZWFzdXJlbWVudCBpcyBub3QgZmluaXNoZWQgYW5kIG5lZWQgZ2FwIGluIHRoaXMgcGVyaW9kIAorKiAgICAgICAgICAgICBLQUxfVFJVRSAgOiBtZWFzdXJlbWVudCBpcyBmaW5pc2hlZCBhbmQgZG9lc250IG5lZWQgZ2FwIGluIHRoaXMgcGVyaW9kCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIG1sbDFfZWwxX2lzX2xvd2VyX3B3cl9vbih2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV9lbDFfbW9kZV9zdGF0dXNfdXBkYXRlX2luZAorKiBERVNDUklQVElPTgorKiAgIFRoaXMgbWVzc2FnZSBpcyBzZW50IHRvIEVMMSBmb3IgaW5mb3JtaW5nIHRoYXQgbW9kZSBzdGF0dXMgb2YgYWN0aXZlIFJBVCB3aGVuIEVMMSBpcyBzdGFuZGJ5IFJBVC4gCisqICAgVGhpcyBtZXNzYWdlIHNob3VsZCBiZSB1cGRhdGVkIGZvciBFTDEgaW4gc3RhbmRieSB3aGVuIGFueSBtb2RlIHN0YXR1cyBjaGFuZ2VkIGluIGFjdGl2ZSBSQVQuCisqCisqIFBBUkFNRVRFUlMKKyogICBzdGF0dXMgLSBtb2RlIHN0YXR1cyBpbiBhY3RpdmUgUkFUIAorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZWwxX21vZGVfc3RhdHVzX3VwZGF0ZV9pbmQobGwxX2FjdGl2ZV9yYXRfbW9kZV9zdGF0dXNfZW51bSBzdGF0dXMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2VsMV9zZXRfdGltaW5nX3N0YXR1cworKiBERVNDUklQVElPTgorKgorKiBQQVJBTUVURVJTCisqICAgZmxhZyAgICAgLSBzZXQgdmFsaWRfdGltaW5nID0gZmxhZworKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZWwxX3NldF90aW1pbmdfc3RhdHVzKGthbF9ib29sIGZsYWcpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2VsMV9zeW5jX3RpbWVfcmVxCisqIERFU0NSSVBUSU9OCisqICAgV2hlbiB0aW1pbmcgc3luY2hyb25pemF0aW9uIHByb2NlZHVyZSBpcyB0cmlnZ2VyZWQsIG1sbDEgd2lsbCBkZWNpZGUgd2hpY2ggcmF0IHNob3VsZCBkbyAKKyogICB0aW1pbmcgc3luY2hyb25pemF0aW9uIGJhc2VkIG9uIHRoZSByZXN1bHQgb2YgZ19sbDFfZmxpZ2h0X3JhdHx8IGdfbGwxX3N0YW5kYnlfcmF0IHx8IGdfbGwxX2FjdGl2ZV9yYXQuCisqCisqIFBBUkFNRVRFUlMKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2VsMV9zeW5jX3RpbWVfcmVxKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfZWwxX3RpbWVfYWRkCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gYWRkIHNhbXBsZXMgdG8gdGltZQorKgorKiBQQVJBTUVURVJTCisqICAgdGltZSAgICAgICAgICAtIGJhc2ljIHRpbWUKKyogICBzYW1wbGVzICAgIC0gc2FtcGxlcworKiBSRVRVUk5TCisqICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9lbDFfdGltZV9hZGQoIGV1dHJhbl90aW1lX3N0cnVjdCogdGltZSwga2FsX2ludDMyIHNhbXBsZXMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2VsMV91cGRhdGVfY3VycmVudF90aW1lCisqIERFU0NSSVBUSU9OCisqICAgbGwxIHVwZGF0ZXMgY3VycmVudCBhZnRlciB0aW1pbmcgc3luYyBkb25lCisqCisqIFBBUkFNRVRFUlMKKyogICBldXRyYW5fdGltZSAtIGN1cnJlbnQgdGltZQorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZWwxX3VwZGF0ZV9jdXJyZW50X3RpbWUoZXV0cmFuX3RpbWVfc3RydWN0KiBldXRyYW5fdGltZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDQUxMIEZVTkNUSU9OIFBST1RPVFlQRQorKiAgIG1sbDFfZXV0cmFuX2hhbmRsZXIoKQorKgorKiBERVNDUklQVElPTgorKiAgIEZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgcHJpbWl0aXZlIGZyb20gRUwxLgorKgorKiBQQVJBTUVURVJTCisqICAgY3VycmVudF9pbG0gLSBwcmltaXRpdmUgZnJvbSBFTDEuCisqCisqIFJFVFVSTgorKiAgIE5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2V1dHJhbl9oYW5kbGVyKHZvaWQgKnB0cl9pbG0pOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3RpY2tfZWwxX2dhcF9leHBhbnNpb24KKyogREVTQ1JJUFRJT04KKyogICB0aWNrIGVsMSB0byBleHBhbmQgZ2FwIHdoZW4gc3luYyBkb25lCisqCisqIFBBUkFNRVRFUlMKKyogICBub25lCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV90aWNrX2VsMV9nYXBfZXhwYW5zaW9uKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2VsMV9pbmZvX2luaXQKKyogREVTQ1JJUFRJT04KKyogICBJbml0aWFsaXplIGVsMSBpbnRlcm5hbCBnbG9iYWwgdmFyaWFibGUKKyoKKyogUEFSQU1FVEVSUworKiAgIG5vbmUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2VsMV9pbmZvX2luaXQodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdGwxX2dhcF9wYXR0ZXJuX3RpbWluZ19jaGVja2luZworKiBERVNDUklQVElPTgorKiAgIGNoZWNrIGlmIHRoZSBwZW5kaW5nIGdhcCBpcyBvdXQgb2YgZGF0ZSBvciBub3QKKyoKKyogUEFSQU1FVEVSUworKiAgIGV1dHJhbl90aW1lICAgLSBlbDEgdGltaW5nIGNvcnJlc3BvbmQgdG8gc29tZSBzdGFuZGJ5IHJhdCdzIHRpbWluZyBpbmRpY2F0ZWQgaW4gbWVhc3VyZSByZXF1ZXN0CisqIFJFVFVSTlMKKyogICBUUlVFICAgLSB0aGUgcGVuZGluZyBnYXAgaGFzIG5vdCBiZWVuIG91dCBvZiBkYXRlCisqICAgRkFMU0UgICAtIHRoZSBwZW5kaW5nIGdhcCBoYXMgYmVlbiBvdXQgb2YgZGF0ZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfYm9vbCBtbGwxX2VsMV9nYXBfcGF0dGVybl90aW1pbmdfY2hlY2tpbmcoZXV0cmFuX3RpbWVfc3RydWN0IGV1dHJhbl90aW1lKTsKKworI2VuZGlmIC8qX01MTDFfRVVUUkFOX0gqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21sbDFfZ3NtLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbWxsMV9nc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDJmYzA2Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21sbDFfZ3NtLmgKQEAgLTAsMCArMSwxMTgwIEBACisjaWZuZGVmIF9NTEwxX0dTTV9ICisjZGVmaW5lIF9NTEwxX0dTTV9ICisKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIgLypmb3IgTE9DQUxfUEFSQV9IRFIqLworI2luY2x1ZGUgIm1sbDFfY29tbW9uLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRklOSVRJT05TCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBfX1VNVFNfUkFUX18KKyNpZmRlZiBfX1VNVFNfRkREX01PREVfXworI2RlZmluZSBHU01fU0VTU0lPTl9JTl9QRVJJT0QgIDQ4IC8qIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgMiBnYXBzIGluIDMgZnJhbWVzLiA0OC8zKjI9IDMgLCBIb3dldmVyLCA4OTYwIGNhbiBoYXZlIHRoZSBzZXQgd2l0aCA0OCBnYXAuKi8KKyNlbmRpZiAvKl9fVU1UU19GRERfTU9ERV9fKi8KKworI2lmZGVmIF9fVU1UU19UREQxMjhfTU9ERV9fCisjZGVmaW5lIEdTTV9TRVNTSU9OX0lOX1BFUklPRCAgMzEyIC8qRE1PIGluIHR3byBmcmFtZXMgd2lsbCBnaXZlIGF0IG1vc3QgMTMgc3BhcmUgc2xvdHMgKDQrMyszKzMpLCA0ODAvMjAgKjEzID0gMzEyKi8KKyNlbmRpZiAvKl9fVU1UU19UREQxMjhfTU9ERV9fKi8KKyNlbHNlIC8qIExURS9HU00gZHVhbCBtb2RlKi8KKyNkZWZpbmUgR1NNX1NFU1NJT05fSU5fUEVSSU9EICA2IC8qIExURSBHUDAgL0dQMSA9IDYgZ2FwKi8KKyNlbmRpZiAvKl9fVU1UU19SQVRfXyovCisKKworLyogc2hvdWxkIHN5bmMuIHdpdGggbWxsMV9jb25zdC5oLCBhbmQgbW9kaWZ5IExMMV9UR1BTX0dTTV9QVVJQT1NFX0JJVE1BUF9NQUdJQ19OVU0gaW4gbWxsMV9wcml2YXRlLmggKi8KKyNkZWZpbmUgTUxMMV9HQVBfR1NNX01FQVNfQklUICAgICAgICAgICAgICAoMHgwMDAyKSAvKiBiaXQgIDEqLworI2RlZmluZSBNTEwxX0dBUF9HU01fQlNJQ19JREVOVElUWV9CSVQgICAgICgweDAwMDQpIC8qIGJpdCAgMiovCisjZGVmaW5lIE1MTDFfR0FQX0dTTV9CU0lDX1JFQ09ORklSTV9CSVQgICAgKDB4MDAwOCkgLyogYml0ICAzKi8KKyNkZWZpbmUgTUxMMV9HQVBfUkVTRVJWRURfR1NNX0JTSUNfQklUICAgICAoMHgwMDQwKSAvKiBiaXQgIDYqLworI2RlZmluZSBNTEwxX0dBUF9EUk9QX1REU19GT1JfR1NNX0JTSUNfQklUICgweDAwNDApIC8qIGJpdCAgNiovCisjZGVmaW5lIE1MTDFfR0FQX0dTTV9GTU8gICAgICAgICAgICAgICAgICAgKDB4MDEwMCkgLyogYml0ICA4Ki8KKyNkZWZpbmUgTUxMMV9HQVBfUkVTRVJWRURfRk9SX0dTTV9CU0lDX0JJVCAoMHgwODAwKSAvKiBiaXQgMTEqLworI2RlZmluZSBNTEwxX0dBUF9HU01fVU5ERUZJTkVEX0JJVCAgICAgICAgICgweDEwMDApIC8qIGJpdCAxMiovCisjZGVmaW5lIE1MTDFfR0FQX0xURV9MRUZUX1RPX0dTTV9CSVQgICAgICAgKDB4MjAwMCkgLyogYml0IDEzKi8KKyNkZWZpbmUgR0VSQU5fU0NIRURVTEVfREVMQVkgICAgICAgICAgICAgICAwIC8qIHVzZWQgdG8gcG9zdHBvbmUgYXZhaWxhYmxlIGdhcCBzdGFydCB0aW1lICovICAgICAgICAgCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlVNRVJBVElPTlMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEVOVU1FUkFUSU9OCisqICAgZ2wxX2xsMV9yYXRfc3RhdHVzX2VudW0KKyoKKyogREVTQ1JJUFRJT05TCisqICAgVXNlZCB0byBpZGVudGlmeSB0aGUgc3RhdHVzIGluIEdTTSBSQVQuCisqIE5PVEUKKyogICBhbnkgbW9kaWZpY2F0aW9uIHNob3VsZCBzeW5jLiB3aXRoIGxsMV9yYXRfc3RhdHVzX2VudW0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtCit7CisgIEdMMV9MTDFfUkFUX0ZMSUdIVCA9MCwKKyAgR0wxX0xMMV9SQVRfU1RBTkRCWSwKKyAgR0wxX0xMMV9SQVRfQUNUSVZFLAorICBHTDFfTEwxX1JBVF9OVU0KK30gZ2wxX2xsMV9yYXRfc3RhdHVzX2VudW07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBFTlVNRVJBVElPTgorKiAgIGdzbV90Z21wX2VudW0KKyoKKyogREVTQ1JJUFRJT05TCisqICAgdGdtcCBmb3IgZ3NtIC4KKyogTm90ZQorKiAgIGFueSBtb2RpZmljYXRpb24gc2hvdWxkIHN5bmMuIHdpdGggdW10c19mZGRfdGdtcF9lbnVtCisqICAgR1NNX1BVUlBPU0VfQlNJQ19DTkZfT05MWSwgb25seSB1c2VkIGZvciBURFMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtCit7CisgICBHU01fUFVSUE9TRV9SU1NJID0gMSwKKyAgIEdTTV9QVVJQT1NFX0JTSUNfSU5JVCwKKyAgIEdTTV9QVVJQT1NFX0JTSUNfQ05GLAorICAgR1NNX1BVUlBPU0VfQlNJQ19DTkZfT05MWSwKKyAgIEdTTV9QVVJQT1NFX1VOREVGSU5FRAorfSBnc21fdGdtcF9lbnVtOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJVQ1RVUkVTCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBnc21fdGltZV9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgR1NNIHN5c3RlbSB0aW1pbmcgYmFzZQorKgorKiBQQVJBTUVURVJTCisqICAgZm4gICAgICAtIEdTTSBGcmFtZSBOdW1iZXIgKDB+MjcxNTY0NyksIDEgRk4gPSAxMDAwMCBFYml0cy4KKyogICBlYml0ICAgIC0gR1NNIEViaXQgKDB+OTk5OSkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAga2FsX2ludDMyICAgICAgICBmbjsKKyAga2FsX2ludDMyICAgICAgICBlYml0OworfWdlcmFuX2dzbV90aW1lX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGxsMV9nc21fc3RhbmRieV9nYXBfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIEdTTSBzdGFuZGJ5IGdhcCBwYXR0ZXJuIHN0cnVjdHVyZS4KKyoKKyogUEFSQU1FVEVSUworKiAgIHN0YXJ0X3RpbWUgICAgIC0gc3RhcnQgdGltZSBvZiB0aGUgZ2FwIHNlc3Npb24KKyogICBsZW5ndGggICAgICAgICAtIGxlbmd0aCBvZiB0aGUgZ2FwIHNlc3Npb24gKGluIGViaXQpCisqICAgcHVycG9zZSAgICAgICAgLSBQdXJwb3NlIGZvciB0aGlzIGdhcCBzZXNzaW9uCisqICAgcHVycG9zZV9iaXRtYXAgLSBQdXJwb3NlIGJpdG1hcCBmb3IgdGhpcyBnYXAgc2Vzc2lvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgZ2VyYW5fZ3NtX3RpbWVfc3RydWN0IHN0YXJ0X3RpbWU7CisgICBrYWxfaW50MzIgICAgICAgICAgICAgbGVuZ3RoOworICAgZ3NtX3RnbXBfZW51bSAgICAgICAgIHB1cnBvc2U7CisgICBrYWxfaW50MzIgICAgICAgICAgICAgcHVycG9zZV9iaXRtYXA7Cit9bGwxX2dzbV9zdGFuZGJ5X2dhcF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBsbDFfZ2wxX2V4cGFuZF9nYXBfcGF0dGVybl9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgTEwxIGV4cGFuZHMgZ2FwIHBhdHRlcm4gZm9yIEdMMQorKgorKiBQQVJBTUVURVJTCisqICAgc2Vzc2lvbl9udW0gICAgICAgICAgLSBJbmRpY2F0ZSBob3cgbWFueSBnYXAgc2Vzc2lvbiAKKyogICBzZXNzaW9uW10gICAgICAgICAgICAtIFN0YW5kYnkgZ2FwIHNlc3Npb24uCisqICAgbWVhc3VyZV90aWQgICAgICAgICAgLSBUcmFuc2l0aW9uIGlkIGZvciBSQU5LIHRpY2suL1ZhbGlkIHdoZW4gYWN0aXZlIFJBVCBpcyBpbiBEUlggbW9kZS4vQW5kIGJpdCAwIGluIHRpY2tfYml0bWFwIGlzICIxIgorKiAgIGhwc190aWQgICAgICAgICAgICAgIC0gVHJhbnNpdGlvbiBpZCBmb3IgSFBTIHRpY2suL1ZhbGlkIHdoZW4gYWN0aXZlIFJBVCBpcyBpbiBEUlggbW9kZS4vQW5kIGJpdCAxIGluIHRpY2tfYml0bWFwIGlzICIxIgorKiAgIHRpY2tfYml0bWFwICAgICAgICAgIC0gQml0IDAgOiBSYW5rIHNlYXJjaCAsIEJpdCAxIDogUHJpb3JpdHkgc2VhcmNoCisqICAgdF9pZGVudGlmeV9hYm9ydCAgICAgLSAweEZGRkZGRkZGIG1lYW5zIG5vIHJlcXVpcmVtZW50LCBVbml0IDogbXMsIFZhbGlkIHdoZW4gYWN0aXZlIHJhdCBpcyBpbiBjb25uZWN0aW9uIG1vZGUKKyogICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0IHRoZSBic2ljIGlkZW50aWZpY2F0aW9uIGlmIGl0IGhhcyBub3Qgc3VjY2Vzc2Z1bGx5IGRlY29kZWQgaXQgd2l0aCB0aGUgcGVyaW9kCisqICAgdF9yZWNvbmZpcm1fYWJvcnQgICAgLSAweEZGRkZGRkZGIG1lYW5zIG5vIHJlcXVpcmVtZW50LCBVbml0IDogbXMsIFZhbGlkIHdoZW4gYWN0aXZlIHJhdCBpcyBpbiBjb25uZWN0aW9uIG1vZGUsICBhYm9ydCB0aGUgYnNpYyByZS1jb21maXJtYXRpb24KKyogICAgICAgICAgICAgICAgICAgICAgICAgIElmIGZhaWxzIHRvIGRlY29kZSBic2ljIGFmdGVyIHR3byBzdWNjZXNzaXZlIGF0dGVtcHRzIG9yIGlmIGhhcyBub3QgYmVlbiBhYmxlIHRvIHJlY29uZmlybSB0aGUgYnNpYyBmb3IgYSBjZWxsIHdpdGggdGhlIHBlcmlvZCAKKyogICBnYXBfZXhwYW5kX3BlcmlvZCAgICAtIG9ubHkgdmFsaWQgd2hlbiBtb2RlIHN0YXR1cyBpbiBhY3RpdmUgcmF0IGlzIExMMV9HTDFfRVVUUkFOX0NPTk5FQ1QKKyogICAgICAgICAgICAgICAgICAgICAgICAtIHZhbHVlID0gMjQwLzQ4MCBtcworKiAgIG5fZnJlcV93aXRob3V0X21fZ3NtIC0gb25seSB2YWxpZCB3aGVuIG1vZGUgc3RhdHVzIGluIGFjdGl2ZSByYXQgaXMgTEwxX0dMMV9FVVRSQU5fQ09OTkVDVAorKiAgICAgICAgICAgICAgICAgICAgICAgIC0gZXF1YWxzIHRvIE5mcmVxLEUtVVRSQSArIE5mcmVxLFVUUkEuCisqICAgZG1vX2x0ZV9wZXJpb2QgICAgICAgLSB0aGUgcGVyaW9kIGluIERNTyBmb3IgbHRlLiBHU00gdXNlcyByZW1haW5lZCBETU8gd2l0aCBsdGUgcHVycG9zZSBmb3IgZ3NtIHVzYWdlIHdoZW4gdGRzIGlzIGFjdGl2ZSByYXQKKyogICAgICAgICAgICAgICAgICAgICAgICAtIFZhbGlkIHdoZW4gOiBwdXJwb3NlX2JpdG1hcCAmIE1MTDFfR0FQX0xURV9MRUZUX1RPX0dTTV9CSVQgIT0gMAorKiAgIGRtb19sdGVfbGVuZ3RoICAgICAgIC0gdGhlIGxlbmd0aCBpbiBETU8gZm9yIGx0ZS4gR1NNIHVzZXMgcmVtYWluZWQgRE1PIHdpdGggbHRlIHB1cnBvc2UgZm9yIGdzbSB1c2FnZSB3aGVuIHRkcyBpcyBhY3RpdmUgcmF0CisqICAgICAgICAgICAgICAgICAgICAgICAgLSBWYWxpZCB3aGVuIDogcHVycG9zZV9iaXRtYXAgJiBNTEwxX0dBUF9MVEVfTEVGVF9UT19HU01fQklUICE9IDAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgIHNlc3Npb25fbnVtOworICAgbGwxX2dzbV9zdGFuZGJ5X2dhcF9zdHJ1Y3Qgc2Vzc2lvbltHU01fU0VTU0lPTl9JTl9QRVJJT0RdOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgbWVhc3VyZV90aWQ7CisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICBocHNfdGlkOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgdGlja19iaXRtYXA7CisgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICB0X2lkZW50aWZ5X2Fib3J0OworICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgdF9yZWNvbmZpcm1fYWJvcnQ7CisgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICBnYXBfZXhwYW5kX3BlcmlvZDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgIG5fZnJlcV93aXRob3V0X21fZ3NtOworICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgZG1vX2x0ZV9wZXJpb2Q7CisgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICBkbW9fbHRlX2xlbmd0aDsKK31sbDFfZ2wxX2V4cGFuZF9nYXBfcGF0dGVybl9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBnbDFfbGwxX3N5bmNfY25mX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBHTDEgdXNlcyB0aGlzIHByaW1pdGl2ZSB0byBjb25maXJtIExMMSB0aGF0IGN1cnJlbnQgR0VSQU4gR1NNIHRpbWluZyAKKyogICBhbmQgbWljcm8gc2Vjb25kIGNvdW50ZXIgdmFsdWUuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgY3VycmVudF90aW1lIC0gc3luYy4gdGltZSBpbiBnZXJhbl9nc21fdGltZV9zdHJ1Y3QgCisqICAgZ3NtX3VzdGltZSAgIC0gc3luYy4gdGltZSBpbiBVU0MgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGdlcmFuX2dzbV90aW1lX3N0cnVjdCBjdXJyZW50X3RpbWU7CisgICBrYWxfdWludDMyICAgICAgICAgICAgZ3NtX3VzdGltZTsKK31nbDFfbGwxX3N5bmNfY25mX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGdsMV9sbDFfcmF0X3N0YXR1c19pbmRfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFRoaXMgbWVzc2FnZSBpcyBzZW50IGZyb20gR0wxIHRvIExMMSBmb3IgaW5mb3JtaW5nIGN1cnJlbnQgR0wxIFJBVCBzdGF0dXMuIAorKiAgIFRoaXMgbWVzc2FnZSBzaG91bGQgYmUgc2VudCB3aGVuIEdMMSBSQVQgc3RhdHVzIGNoYW5nZWQuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgcmF0X3N0YXR1cyAtIFJBVCBzdGF0dXMgaW4gR0wxIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGdsMV9sbDFfcmF0X3N0YXR1c19lbnVtIHJhdF9zdGF0dXM7Cit9Z2wxX2xsMV9yYXRfc3RhdHVzX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBnbDFfbGwxX21vZGVfc3RhdHVzX2luZF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgVGhpcyBtZXNzYWdlIGlzIHNlbnQgZnJvbSBHTDEgdG8gTEwxIGZvciBpbmZvcm1pbmcgdGhhdCBHTDEgbW9kZSBzdGF0dXMgd2hlbiBHTDEgaXMgYWN0aXZlIFJBVC4gCisqICAgVGhpcyBtZXNzYWdlIHNob3VsZCBiZSBzZW50IHdoZW4gR0wxIG1vZGUgc3RhdHVzIGNoYW5nZWQuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgZ3NtX21vZGVfc3RhdHVzIC0gY3VycmVudCBtb2RlIGluIEdMMSB3aGVuIEdTTSBpcyBhY3RpdmUgUkFUCisqICAgcGFnaW5nX3BlcmlvZCAgIC0gdmFsaWQgd2hlbiBnc21fbW9kZV9zdGF0dXMgPSBHTDFfTEwxX0lETEVfTU9ERQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGxsMV9hY3RpdmVfcmF0X21vZGVfc3RhdHVzX2VudW0gZ3NtX21vZGVfc3RhdHVzOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBwYWdpbmdfcGVyaW9kOworfWdsMV9sbDFfbW9kZV9zdGF0dXNfaW5kX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGxsMV9nbDFfbW9kZV9zdGF0dXNfdXBkYXRlX2luZF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgVGhpcyBtZXNzYWdlIGlzIHNlbnQgdG8gR0wxIGZvciBpbmZvcm1pbmcgdGhhdCBtb2RlIHN0YXR1cyBvZiBhY3RpdmUgUkFUIHdoZW4gR0wxIGlzIHN0YW5kYnkgUkFULiAKKyogICBUaGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIHVwZGF0ZWQgZm9yIEdMMSBpbiBzdGFuZGJ5IHdoZW4gYW55IG1vZGUgc3RhdHVzIGNoYW5nZWQgaW4gYWN0aXZlIFJBVC4gCisqICAgQWxzbyB3aGVuIEdMMSBlbnRlcnMgaW50byBzdGFuZGJ5IFJBVCBmcm9tIEZMSUdIVCwgTEwxIHdpbGwgdXBkYXRlIGN1cnJlbnQgbW9kZSBzdGF0ZSBpbiBhY3RpdmUgUkFUIHRvIEdMMS4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBhY3RpdmVfcmF0X21vZGVfc3RhdHVzIC0gY3VycmVudCBtb2RlIHN0YXR1cyBpbiBhY3RpdmUgUkFUCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgbGwxX2FjdGl2ZV9yYXRfbW9kZV9zdGF0dXNfZW51bSBhY3RpdmVfcmF0X21vZGVfc3RhdHVzOworfWxsMV9nbDFfbW9kZV9zdGF0dXNfdXBkYXRlX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBnbDFfbGwxX21lYXN1cmVfcmVxX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBUaGlzIG1lc3NhZ2UgaXMgc2VudCBmcm9tIEdMMSB0byBpbmZvcm0gTEwxIHRoYXQgaG93IG1hbnkgR0VSQU4gR1NNIGZyZXF1ZW5jaWVzIAorKiAgIGFyZSByZXF1aXJlZCB0byBiZSBtZWFzdXJlZCBhbmQgdGhlIG1lYXN1cmVtZW50IHB1cnBvc2VzIGluIEdFUkFOIEdTTSBTdGFuZGJ5LiAKKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBtZWFzX3B1cnBvc2VfYml0bWFwIC0gYml0IDAgZm9yIG1lYXN1cmVtZW50LCBiaXQgMSBmb3IgY2VsbCBzZWFyY2gKKyogICB0aWQgICAgICAgICAgICAgICAgIC0gdGlkIGZvciBsYXN0ZXN0IG1lYXNfcmVxIG9uIChzaG91bGQgb25seSBjaGFuZ2Ugd2hlbiBvZmYpCisqICAgdGlja19iaXRtYXAgICAgICAgICAtIGJpdCAwIGZvciByYW5raW5nIHNlYXJjaCwgYml0IDEgZm9yIHByaW9yaXR5IHNlYXJjaCAKKyogICBjYXJyaWVyX251bSAgICAgICAgIC0gaGlnaCBwcmlvcml0eSBmcmVxZW5jaWVzIHdoZW4gSFBTIE9OLCBtZWFzdXJlbWVudCBmcmVxdWVuY2llcyB3aGVuIEhQUyBPRkYKKyogICB0X2hwcyAgICAgICAgICAgICAgIC0gYmFzaWMgcGVyaW9kIG9mIGhpZ2ggcHJpb3JpdHkgc2VhcmNoICg2MHMpCisqICAgaXNfcGVyaW9kX3Jlc2V0X2JtcCAtIGJpdCAwIGZvciByYW5rIHBlcmlvZCwgMSBtZWFucyB0byByZXNldAorKiAgICAgICAgICAgICAgICAgICAgICAgLSBiaXQgMSBmb3IgcHJpbyBwZXJpb2QsIDAgbWVhbnMgbm90IHRvIHJlc2V0CisqICAgICAgICAgICAgICAgICAgICAgICAtIHdoZW4gZnJlcS4gbnVtIGlzIHNhbWUgYXMgYmVmb3JlLCBsbDEgd2lsbCBjaGVjayB0aGlzIGZsYWcgdG8gcmVzZXQgcGVyaW9kIG9yIG5vdAorKiAgICAgICAgICAgICAgICAgICAgICAgLSBLQUxfVFJVRSA6IHJlc2V0IGhwcyBwZXJpb2QsIEtBTF9GQUxTRSA6IGRvZXNudCByZXNldCBocHMgcGVyaW9kLgorKiAgIGN1cnJlbnRfdGltZSAgICAgICAgLSBjdXJyZW50IGluIEdMMQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGthbF91aW50OCAgICAgICAgICAgICBtZWFzX3B1cnBvc2VfYml0bWFwOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgIHRpZDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICB0aWNrX2JpdG1hcDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICBjYXJyaWVyX251bTsKKyAgIGthbF91aW50MTYgICAgICAgICAgICB0X2hwczsKKyAgIGthbF9pbnQzMiAgICAgICAgICAgICBpc19wZXJpb2RfcmVzZXRfYm1wOworICAgZ2VyYW5fZ3NtX3RpbWVfc3RydWN0IGN1cnJlbnRfdGltZTsgCit9Z2wxX2xsMV9tZWFzdXJlX3JlcV9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBnbDFfbGwxX3N0YW5kYnlfbWVhc3VyZV9kb25lX2luZF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgRm9yIGxvdyBwb3dlciBvcHRpbWl6YXRpb24sIEdMMSBpbmZvcm1zIExMMSB3aGljaCBtZWFzdXJlbWVudCBwdXJwb3NlIGlzIAorKiAgIG1lYXN1cmVkIGRvbmUgaW4gaXRzIHBlcmlvZC4gSWYgYWxsIG1lYXN1cmVtZW50IHB1cnBvc2VzIGFyZSBtZWFzdXJlZCBkb25lLCAKKyogICBMTDEgd2lsbCBub3QgdGljayBHTDEgYW55bW9yZSBpbiBzaG9ydGVzdCBtZWFzdXJlbWVudCBwZXJpb2QuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgdGlkICAgICAgICAgICAtIEZvciBMTDEgdG8ga25vdyB0aGlzIHRpZCBpcyBtYXBwZWQgdG8gd2hpY2ggZ2FwIHBhdHRlcm4gcGVyaW9kIHNlbnQgYmVmb3JlCisqICAgdGlja19iaXRtYXAgICAtIGJpdCAwIGZvciByYW5raW5nIHNlYXJjaCwgYml0IDEgZm9yIHByaW9yaXR5IHNlYXJjaC4gT25seSBvbmUgYml0IHdpbGwgYmUgc2V0IGluIG9uZSBtZXNzYWdlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX3VpbnQ4ICAgICAgdGlkOworICAga2FsX3VpbnQ4ICAgICAgdGlja19iaXRtYXA7Cit9Z2wxX2xsMV9zdGFuZGJ5X21lYXN1cmVfZG9uZV9pbmRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgbGwxX2dsMV9nYXBfc2VydmljZV9yZXFfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIExMMSB1c2VzIHRoaXMgcHJpbWl0aXZlIHRvIGVuYWJsZSAoZGlzYWJsZSkgYWN0aXZlIFJBVCBnYXAgc2VydmljZSB0byBnZXQgKHJlbGVhc2UpIAorKiAgIHRoZSBmcmVlIHJhZGlvIGZyZXF1ZW5jeSBwZXJpb2QgaW4gR0VSQU4gR1NNLldoZW4gTEwxIGRpc2FibGVzIGFjdGl2ZSBSQVQgZ2FwIHNlcnZpY2UsIAorKiAgIGl0IG1lYW5zIHRoYXQgR0VSQU4gR1NNIGNvdWxkIHVzZSBhbGwgUkYgdGltZSBhbHJlYWR5LgorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIGVuYWJsZSAgICAgICAgLSBLQUxfVFJVRSAgOiByZXF1ZXN0IGdhcCBzZXJ2aWNlCisqICAgICAgICAgICAgICAgICAgIEtBTF9GQUxTRSA6IHN0b3AgZ2FwIHNlcnZpY2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfYm9vbCAgICAgIGVuYWJsZTsKK31sbDFfZ2wxX2dhcF9zZXJ2aWNlX3JlcV9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBsbDFfZ2wxX2dhcF9zdG9wX3JlcV9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgTEwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gc3RvcCBnYXAgdXNhZ2UgaW4gR0VSQU4gR1NNIHdoZW4gR0VSQU4gR1NNIGlzIHN0YW5kYnkgUkFULgorKiAgIFN0b3AgYWxsIHB1cnBvc2VzIGluIGdzbSwgY29uZmlybWVkIHdpdGggU1kgWWVoL0FsYmVydCBMZWUgU0UyL0NTMworKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKK31sbDFfZ2wxX2dhcF9zdG9wX3JlcV9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBnbDFfbGwxX2dhcF9zdG9wX2NuZl9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgR0wxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gY29uZmlybSBMTDFfR0wxX0dBUF9TVE9QX1JFUSB3aGVuIHRoZXJlIGlzIG5vIGdhcCB1c2FnZSBpbiBHRVJBTiBHU00uLgorKiAgIFN0b3AgYWxsIHB1cnBvc2VzIGluIGdzbSwgY29uZmlybWVkIHdpdGggU1kgWWVoL0FsYmVydCBMZWUgU0UyL0NTMworKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIGN1cnJlbnRfdGltZSAgLSBjdXJyZW50IHRpbWUgaW4gR0wxCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgZ2VyYW5fZ3NtX3RpbWVfc3RydWN0IGN1cnJlbnRfdGltZTsKK31nbDFfbGwxX2dhcF9zdG9wX2NuZl9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBnbDFfbGwxX2F1dG9fZ2FwX3JlcV9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgR0wxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byByZXF1ZXN0IExMMSB0aGF0IEdMMSB3YW50cyB0byB1c2UgdGhlIGF1dG8gZ2FwICBmcm9tICAoZm4sIGViaXRzKS4gCisqICAgR0wxIGNvdWxkIHVzZSB0aGlzIGF1dG8gZ2FwIGFmdGVyIGdldHRpbmcgdGhlIHN1Y2Nlc3NmdWwgY29uZmlybQorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIGF1dG9fdGltZSAgLSBTdGFydCB0aW1lIG9mIGF1dG8gZ2FwIGluIEdMMQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGdlcmFuX2dzbV90aW1lX3N0cnVjdCBhdXRvX3RpbWU7Cit9Z2wxX2xsMV9hdXRvX2dhcF9yZXFfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgbGwxX2dsMV9hdXRvX2dhcF9jbmZfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gY29uZmlybSBHTDEgYXV0byBnYXAgcmVxdWVzdC4gCisqICAgQWZ0ZXIgcmVjZWl2aW5nIHRoaXMgbWVzc2FnZSwgR0wxIGNvdWxkIHVzZSByZXF1aXJlZCBhdXRvIGdhcC4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBzdWNjZXNzICAgICAgIC0gS0FMX1RSVUUgOiBHTDEgY291bGQgdXNlIGF1dG8gZ2FwIHRvIHNlYXJjaAorKiAgICAgICAgICAgICAgICAgICBLQUxfRkFMU0U6IEdMMSBjb3VsZCBub3QgdXNlIGF1dG8gZ2FwIHRvIHNlYXJjaC4gCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5kIEdMMSBzaG91bGQgbm90IHJlcXVlc3QgYXV0byBnYXAgdW50aWwgQVVUT19HQVBfQVZBSUxBQkxFX0lORAorKiAgIHZhbGlkX3BlcmlvZCAgLSBUaGUgbGVuZ3RoIG9mIGF1dG9ub21vdXMgZ2FwIGFsbG93ZWQgYnkgYWN0aXZlIFJBVC4KKyogICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGlzIHZhbGlkIHdoZW4gc3VjY2VzcyA9IEtBTF9UUlVFLCAKKyogICAgICAgICAgICAgICAgICAgVW5pdCA6IGViaXQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfYm9vbCAgc3VjY2VzczsKKyAgIGthbF9pbnQzMiB2YWxpZF9wZXJpb2Q7Cit9bGwxX2dsMV9hdXRvX2dhcF9jbmZfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgbGwxX2dsMV9hdXRvX2dhcF9pbmRfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIEdMMSBzdG9wcGluZyB1c2luZyBSRiBpbiB0aGlzIGF1dG8gZ2FwIGZyb20gICAoZm4sIGViaXRzKS4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBhdXRvX3RpbWUgIC0gU3RhcnQgdGltZSBvZiBhdXRvIGdhcAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGdlcmFuX2dzbV90aW1lX3N0cnVjdCBhdXRvX3RpbWU7Cit9bGwxX2dsMV9hdXRvX2dhcF9pbmRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgZ2wxX2xsMV9hdXRvX2dhcF9yZXNfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIEdMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gcmVzcG9uc2UgTEwxIHRoYXQgR0wxIHdpbGwvd29uJ3QgdXNlIFJGIGZyb20gCisqICAgdGhlIHN0YXJ0IHRpbWluZyBvZiBhdXRvIGdhcCB3aGljaCBpcyBpbmZvcm1lZCBieSBMTDFfR0wxX2F1dG9fR0FQX0lORC4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBzdWNjZXNzICAgICAgIC0gS0FMX1RSVUUgOiBHTDEgd2lsbCBub3QgdXNlIFJGIGZyb20gdGhlIHN0YXJ0aW5nIHRpbWUgb2YgTEwxX0dMMV9BVVRPX0dBUF9JTkQKKyogICAgICAgICAgICAgICAgICAgS0FMX0ZBTFNFOiBHTDEgbWF5IHVzZSBSRiBhZnRlciBzdGFydGluZyB0aW1lIG9mIExMMV9HTDFfQVVUT19HQVBfSU5ELiAKKyogICB2YWxpZF9wZXJpb2QgIC0gVGhlIGxlbmd0aCBvZiAgYXV0b25vbW91cyBnYXAgYWxsb3dlZCBpbiBHTDEKKyogICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGlzIHZhbGlkIHdoZW4gR0wxIGlzIGFjdGl2ZSByYXQgYW5kIHN1Y2Nlc3MgPSBLQUxfVFJVRQorKiAgICAgICAgICAgICAgICAgICBVbml0IDogZWJpdCAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfYm9vbCAgc3VjY2VzczsKKyAgIGthbF9pbnQzMiB2YWxpZF9wZXJpb2Q7Cit9Z2wxX2xsMV9hdXRvX2dhcF9yZXNfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgbGwxX2dsMV9nYXBfbm90aWZ5X2luZF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgTEwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBpbmZvcm0gR0wxIHRoYXQgdGhlIHN0YXJ0aW5nIHRpbWUgYW5kIGxlbmd0aCBvZiBnYXAgcGF0dGVybi4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBzdGFuZGJ5X2dhcCAgIC0gc3RhbmRieSBnYXAgcGF0dGVybgorKiAgIHRpZCAgICAgICAgICAgLSB0aWQgZm9yIGxhc3Rlc3QgbWVhc19yZXEgb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBsbDFfZ2wxX2V4cGFuZF9nYXBfcGF0dGVybl9zdHJ1Y3Qgc3RhbmRieV9nYXA7CisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgdGlkOyAgICAgICAgLyogVGlkIGZvciBsYXN0ZXN0IG1lYXNfcmVxIG9uLCBMTDEgd2lsbCBleHBhbmQgZ2FwIG5vdGlmeSBpbmQgd2l0aCB0aGlzIHRpZCovCit9bGwxX2dsMV9nYXBfbm90aWZ5X2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBnbDFfbGwxX2dhcF9wYXR0ZXJuX2luZF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgR0wxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBpbmZvcm0gTEwxIHRoYXQgdGhlIGZyZWUgUkYgcGVyaW9kIGluIEdMMSBhcyBnYXAgcGF0dGVybi4gCisqICAgTm8gbWF0dGVyIHRoZSBsZW5ndGggaXMgYmlnZ2VyIHRoYW4gemVybyBvciBub3QsIEdMMSBzaG91bGQgc2VuZCB0aGlzIG1lc3NhZ2UgCisqICAgYW5kIHNldHMgaXNfZHJ4X3RpY2sgPSBLQUxfVFJVRSBpbiBvbmUgRFJYIHBlcmlvZCBvbmNlLgorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIHJlcGVhdF9jb3VudCAgLSAoMSkgOiBHU00gaW4gTlVMTC9JRExFIC9TRENDSCBtb2RlICAoOCkgOiBHU00gaW4gVENIL1BLVCBtb2RlLgorKiAgIHN0YXJ0X3RpbWUgICAgLSBzdGFydGluZyB0aW1lIG9mIHRoZSBmaXJzdCBnYXAgCisqICAgbGVuZ3RoICAgICAgICAtIGdhcCBsZW5ndGgKKyogICBpc19kcnhfdGljayAgIC0gS0FMX1RSVUUgOiBGaXJzdCB0aWNrIGluIHRoaXMgRFJYIHBlcmlvZAorKiAgICAgICAgICAgICAgICAgICBLQUxfRkFMU0U6IE5vdCB0aGUgZmlyc3QgZnJlZSBpbnRlcnZhbCBpbiB0aGlzIERSWCBwZXJpb2QKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfdWludDggICAgICAgICAgICAgcmVwZWF0X2NvdW50OworICAgZ2VyYW5fZ3NtX3RpbWVfc3RydWN0IHN0YXJ0X3RpbWU7CisgICBrYWxfaW50MzIgICAgICAgICAgICAgbGVuZ3RoOworICAga2FsX2Jvb2wgICAgICAgICAgICAgIGlzX2RyeF90aWNrOworfWdsMV9sbDFfZ2FwX3BhdHRlcm5faW5kX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGxsMV9nbDFfc3luY19yZXFfc3RydWN0CisqICAgZ2wxX2xsMV9hY3RpdmVfbWVhc3VyZV9zdGF0dXNfaW5kX3N0cnVjdAorKiAgIGdsMV9sbDFfZ2FwX3N0b3BfcmVxX3N0cnVjdAorKiAgIGxsMV9nbDFfZ2FwX3N0b3BfY25mX3N0cnVjdAorKiAgIGdsMV9sbDFfZ2FwX3N1c3BlbmRfcmVxX3N0cnVjdAorKiAgIGxsMV9nbDFfZ2FwX3N1c3BlbmRfY25mX3N0cnVjdAorKiAgIGxsMV9nbDFfZ2FwX3N1c3BlbmRfcmVxX3N0cnVjdAorKiAgIGdsMV9sbDFfZ2FwX3N1c3BlbmRfY25mX3N0cnVjdAorKiAgIGdsMV9sbDFfZ2FwX3Jlc3VtZV9pbmRfc3RydWN0CisqICAgbGwxX2dsMV9nYXBfcmVzdW1lX2luZF9zdHJ1Y3QKKyogICBnbDFfbGwxX2F1dG9fZ2FwX3N0b3BfcmVxX3N0cnVjdAorKiAgIGxsMV9nbDFfYXV0b19nYXBfc3RvcF9pbmRfc3RydWN0CisqICAgZ2wxX2xsMV9hdXRvX2dhcF9zdG9wX3Jlc19zdHJ1Y3QKKyogICBsbDFfZ2wxX2F1dG9fZ2FwX3N0b3BfY25mX3N0cnVjdAorKiAgIGdsMV9sbDFfYXV0b19nYXBfZW5kX2luZF9zdHJ1Y3QKKyogICBsbDFfZ2wxX2F1dG9fZ2FwX2VuZF9pbmRfc3RydWN0CisqICAgZ2wxX2xsMV9hdXRvX2dhcF9hdmFpbGFibGVfaW5kX3N0cnVjdAorKiAgIGxsMV9nbDFfYXV0b19nYXBfYXZhaWxhYmxlX2luZF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgbGwxX2dsMV9zeW5jX3JlcV9zdHJ1Y3QKKyogICAgIExMMSB3aWxsIHVzZSB0aGlzIHByaW1pdGl2ZSB0byBnZXQgR0wxIGN1cnJlbnQgVU1UUyB0aW1pbmcgYW5kIG1pY3JvIAorKiAgICAgc2Vjb25kIGNvdW50ZXIgdmFsdWUgaW4gYm90aCBHTDEgaW4gYWN0aXZlIGFuZCBzdGFuZGJ5IG1vZGUuCisqCisqICAgZ2wxX2xsMV9hY3RpdmVfbWVhc3VyZV9zdGF0dXNfaW5kX3N0cnVjdCAoVXNlbGVzcyBOb3cpCisqICAgICBHTDEgaW5mb3JtcyBMTDEgdGhhdCBob3cgbWFueSBjb25maWd1cmVkIGludGVyLVJBVCBmcmVxdWVuY2llcyBpbiBHTDEgCisqICAgICB3aGVuIHByaW9yaXR5IHNlYXJjaCBpcyB0dXJuZWQgb24uCisqCisqICAgZ2wxX2xsMV9nYXBfc3RvcF9yZXFfc3RydWN0CisqICAgICBHTDEgdXNlcyB0aGlzIHByaW1pdGl2ZSB0byBpbmZvcm0gTEwxIHRvIHN0b3AgYWxsIGdhcCB1c2FnZSBpbiBzdGFuZGJ5IAorKiAgICAgUkFUIHdoZW4gR0VSQU4gR1NNIHdhbnRzIHRvIGNoYW5nZSBjb25maWd1cmF0aW9uIG9yIG90aGVyIHB1cnBvc2VzLgorKgorKiAgIGxsMV9nbDFfZ2FwX3N0b3BfY25mX3N0cnVjdAorKiAgICAgTEwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gY29uZmlybSBHTDEgdGhhdCBMTDEgaGFzIGFscmVhZHkgc3RvcHBlZCAKKyogICAgIGFsbCBnYXAgdXNhZ2VzIGluIHN0YW5kYnkgUkFUIGFuZCBHTDEgY291bGQgdXNlIGFsbCBSRiB0aW1lLgorKgorKiAgIGdsMV9sbDFfZ2FwX3N1c3BlbmRfcmVxX3N0cnVjdAorKiAgICAgR0wxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gdGVtcG9yYWwgc3VzcGVuZCBnYXAgdXNhZ2UgaW4gc3RhbmRieSBSQVQgZm9yIGhpZ2hlciBwcmlvcml0eQorKiAgICAgdGFzayBhbmQgZG9lc24ndCBuZWVkIHRvIGdpdmUgbmV3IGdhcCBjb25maWd1cmF0aW9uIGluIGNvbm5lY3Rpb24gbW9kZSB3aGVuIHJlc3VtZWQuCisqCisqICAgbGwxX2dsMV9nYXBfc3VzcGVuZF9jbmZfc3RydWN0CisqICAgICBMTDEgc2VuZHMgdGhpcyBjb25maXJtIG1lc3NhZ2UgdG8gR0wxIGFmdGVyIGFsbCBzdGFuZGJ5IFJBVCBnYXAgdXNhZ2UgYXJlIHN1c3BlbmRlZC4KKyoKKyogICBsbDFfZ2wxX2dhcF9zdXNwZW5kX3JlcV9zdHJ1Y3QKKyogICAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gR0wxIHRvIHJlcXVlc3QgdGhhdCBHTDEgc3VzcGVuZHMgUkYgdXNhZ2UgaW1tZWRpYXRlbHkuCisqCisqICAgZ2wxX2xsMV9nYXBfc3VzcGVuZF9jbmZfc3RydWN0CisqICAgICBHTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGNvbmZpcm0gTEwxIHRoYXQgR0wxIHdpbGwgbm90IHVzZSBnYXAgZnJvbSAKKyogICAgIG5vdyB0byByZWNlaXZpbmcgcmVzdW1lIGluZGljYXRvcgorKgorKiAgIGdsMV9sbDFfZ2FwX3Jlc3VtZV9pbmRfc3RydWN0CisqICAgICBHTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBMTDEgdGhhdCBHTDEgaGFzIGFscmVhZHkgZmluaXNoZWQgCisqICAgICBoaWdoZXIgcHJpb3JpdHkgdGFzaywgYW5kIHN0YW5kYnkgUkFUIGNvdWxkIHVzZSBnYXAgbm9ybWFsbHkuCisqCisqICAgbGwxX2dsMV9nYXBfcmVzdW1lX2luZF9zdHJ1Y3QKKyogICAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gR0wxIHRvIHJlc3VtZSBHTDEncyBnYXAgdXNhZ2UuIAorKiAgICAgQWZ0ZXIgcmVjZWl2aW5nIHRoaXMgbWVzc2FnZSwgR0wxIGNvdWxkICB1c2UgZ2FwIHBhdHRlcm4gbm9ybWFsbHkuCisqCisqICAgZ2wxX2xsMV9hdXRvX2dhcF9zdG9wX3JlcV9zdHJ1Y3QKKyogICAgIEdMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gcmVxdWVzdCBMTDEgdGhhdCBHTDEgd2FudHMgdG8gCisqICAgICByZXRyaWV2ZSBhdXRvIGdhcCBmb3IgaGlnaGVyIHByaW9yaXR5IHRhc2suCisqCisqICAgbGwxX2dsMV9hdXRvX2dhcF9zdG9wX2luZF9zdHJ1Y3QKKyogICAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIEdMMSBvZiBzdG9wcGluZyB1c2luZyBSRiAKKyogICAgIGR1cmluZyBhdXRvIGdhcCBwZXJpb2QuCisqCisqICAgZ2wxX2xsMV9hdXRvX2dhcF9zdG9wX3Jlc19zdHJ1Y3QKKyogICAgIEdMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gcmVzcG9uc2UgTEwxIHRoYXQgR0wxIHN0b3BzIAorKiAgICAgYXV0byBnYXAgdXNhZ2UuCisqCisqICAgbGwxX2dsMV9hdXRvX2dhcF9zdG9wX2NuZl9zdHJ1Y3QKKyogICAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gY29uZmlybSB0aGF0IEdMMSBjb3VsZCB1c2UgUkYgbm93LgorKgorKiAgIGdsMV9sbDFfYXV0b19nYXBfZW5kX2luZF9zdHJ1Y3QKKyogICAgIEdMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIExMMSB0aGF0IGF1dG8gZ2FwIHVzYWdlIGlzIGZpbmlzaGVkLgorKiAKKyogICBsbDFfZ2wxX2F1dG9fZ2FwX2VuZF9pbmRfc3RydWN0CisqICAgICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBHTDEgdGhhdCBhdXRvIGdhcCB1c2FnZSBpcyBmaW5pc2hlZC4KKyoKKyogICBnbDFfbGwxX2F1dG9fZ2FwX2F2YWlsYWJsZV9pbmRfc3RydWN0CisqICAgICBHTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBMTDEgdGhhdCBhdXRvIGdhcCBpcyBhdmFpbGFibGUgbm93LiBTdGFuZGJ5IFJBVCAKKyogICAgIGNvdWxkIHJlcXVlc3QgYXV0byBnYXAgbm93LiBTdGFuZGJ5IFJBVCBjb3VsZCByZXF1ZXN0IGF1dG8gZ2FwIG5vdworKgorKiAgIGxsMV9nbDFfYXV0b19nYXBfYXZhaWxhYmxlX2luZF9zdHJ1Y3QKKyogICAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIEdMMSB0aGF0IGF1dG8gZ2FwIAorKiAgICAgaXMgYXZhaWxhYmxlIG5vdy4gR0wxIGNvdWxkIHJlcXVlc3QgYXV0byBnYXAgbm93LgorKgorKiAgIGdsMV9sbDFfYXV0b19nYXBfdW5hdmFpbGFibGVfaW5kX3N0cnVjdAorKiAgICAgR0wxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBpbmZvcm0gTEwxIHRoYXQgYXV0byBnYXAgaXMgdW5hdmFpbGFibGUgbm93LiAKKyogICAgIFN0YW5kYnkgUkFUIGNvdWxkIG5vdCByZXF1ZXN0IGF1dG8gZ2FwIG5vdy4KKyoKKyogICBsbDFfZ2wxX2F1dG9fZ2FwX3VuYXZhaWxhYmxlX2luZF9zdHJ1Y3QKKyogICAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIEdMMSB0aGF0IGF1dG8gZ2FwIGlzIHVuYXZhaWxhYmxlIG5vdy4gCisqICAgICBHTDEgY291bGQgbm90IHJlcXVlc3QgYXV0byBnYXAgbm93LgorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKK31sbDFfZ2wxX3N5bmNfcmVxX3N0cnVjdCwKKyBnbDFfbGwxX2FjdGl2ZV9tZWFzdXJlX3N0YXR1c19pbmRfc3RydWN0LAorIGdsMV9sbDFfZ2FwX3N0b3BfcmVxX3N0cnVjdCwKKyBsbDFfZ2wxX2dhcF9zdG9wX2NuZl9zdHJ1Y3QsCisgZ2wxX2xsMV9nYXBfc3VzcGVuZF9yZXFfc3RydWN0LAorIGxsMV9nbDFfZ2FwX3N1c3BlbmRfY25mX3N0cnVjdCwKKyBsbDFfZ2wxX2dhcF9zdXNwZW5kX3JlcV9zdHJ1Y3QsCisgZ2wxX2xsMV9nYXBfc3VzcGVuZF9jbmZfc3RydWN0LAorIGdsMV9sbDFfZ2FwX3Jlc3VtZV9pbmRfc3RydWN0LAorIGxsMV9nbDFfZ2FwX3Jlc3VtZV9pbmRfc3RydWN0LAorIGdsMV9sbDFfYXV0b19nYXBfc3RvcF9yZXFfc3RydWN0LAorIGxsMV9nbDFfYXV0b19nYXBfc3RvcF9pbmRfc3RydWN0LAorIGdsMV9sbDFfYXV0b19nYXBfc3RvcF9yZXNfc3RydWN0LAorIGxsMV9nbDFfYXV0b19nYXBfc3RvcF9jbmZfc3RydWN0LAorIGdsMV9sbDFfYXV0b19nYXBfZW5kX2luZF9zdHJ1Y3QsCisgbGwxX2dsMV9hdXRvX2dhcF9lbmRfaW5kX3N0cnVjdCwKKyBnbDFfbGwxX2F1dG9fZ2FwX2F2YWlsYWJsZV9pbmRfc3RydWN0LAorIGxsMV9nbDFfYXV0b19nYXBfYXZhaWxhYmxlX2luZF9zdHJ1Y3QsCisgZ2wxX2xsMV9hdXRvX2dhcF91bmF2YWlsYWJsZV9pbmRfc3RydWN0LAorIGxsMV9nbDFfYXV0b19nYXBfdW5hdmFpbGFibGVfaW5kX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIG1sbDFfZ2wxX2luZm9fZGF0YWJhc2Vfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIEdMMSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCisqCisqIFBBUkFNRVRFUlMKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sgIC8qIE1lYXN1cmUgcmVxKi8KKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tfYm1wOyAgICAgICAgICAgIC8qIHVzZSB0byByZWNvcmQgdGljayBiaXRtYXAqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFua190aWNrX3RpZDsgICAgICAgLyogdGlkIGZvciByYW5rIHRpY2sqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb190aWNrX3RpZDsgICAgICAgLyogdGlkIGZvciBwcmlvIHRpY2sqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc19kb25lX2JtcDsgICAgICAgLyogbWVhc3VyZW1lbnQgZG9uZSBpbmQgYml0bWFwKi8KKyAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX21lYXNfZG9uZV91c2VmdWw7IC8qIGdzbSB1c2VzIG1lYXNfZG9uZSBvciBub3QgYnkgY2hlY2tpbmcgbWVhc19wdXJwb3NlX2JtcCovCisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzX3B1cnBvc2VfYml0bWFwOyAvKiByZWNvcmQgdGhlIG1lYXN1cmUgcHVycG9zZSBiaXRtYXAqLworICAgZ2VyYW5fZ3NtX3RpbWVfc3RydWN0ICAgICAgICAgICAgICAgY3VycmVudF90aW1lOyAgICAgICAgLyogZ3NtIGN1cnJlbnQgdGltZSB3aGVuIHJlcXVlc3QgZ2FwIHNlcnZpY2UqLworICAgLyogUGFnaW5nIHBlcmlvZCBpbiBhY3RpdmUgUkFUICovCisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdpbmdfcGVyaW9kOyAgICAgICAvKiBSYW5nZSA6IDJ+OSBVbml0IDogNTEgZnJhbWVzKi8KKyAgIC8qIFVzZWQgZm9yIE1nc20gaW4gTEVUIEdQMSAqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FycmllcjsgICAgICAgICAgICAgLyogaW4gTFRFIEdQMSBNZ3NtID0gKGNlaWwoY2Fycmllci8yMCkpKi8KKyAgIC8qIFN0b3JlIGdhcCBpbmZvcm1hdGlvbiovCisgICBnbDFfbGwxX2dhcF9wYXR0ZXJuX2luZF9zdHJ1Y3QgICAgICBnYXBfcGF0dGVybjsgICAgICAgICAvKiBzdG9yZSBnYXAgcGF0dGVybiBpbG0qLworICAgLyogYXV0byBnYXAgcGFyYSovCisgICBnZXJhbl9nc21fdGltZV9zdHJ1Y3QgICAgICAgICAgICAgICBhdXRvX3RpbWU7ICAgICAgICAgICAvKiBhdXRvIGdhcCB0aW1lKi8gCisgICAvKiBNb2RlIHN0YXR1cyovCisgICBsbDFfYWN0aXZlX3JhdF9tb2RlX3N0YXR1c19lbnVtICAgICBtb2RlX3N0YXR1czsgICAgICAgICAvKiBtb2RlIHN0YXR1cyovCisgICAvKiBHYXAgcmVxdWVzdCBmcm9tIHN0YW5kYnkgcmF0IHNob3VsZCBkbyBzeW5jIGluIGNvbm5lY3Rpb24qLworICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRfdGltaW5nOyAgICAgICAgLyogS0FMX1RSVUUgIDogd2l0aCB2YWxpZCB0aW1pbmcqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogS0FMX0ZBTFNFIDogd2l0aCBpbnZhbGlkIHRpbWluZyAqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc19yZXFfdGlkOyAgICAgICAgLyogVGlkIGZvciBsYXN0ZXN0IG1lYXNfcmVxIG9uLCBMTDEgd2lsbCBleHBhbmQgZ2FwIG5vdGlmeSBpbmQgd2l0aCB0aGlzIHRpZCovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCit9bWxsMV9nbDFfaW5mb19kYXRhYmFzZV9zdHJ1Y3Q7CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLypfX1BPUF9GU01fXyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMT0JBTCBGVU5DVElPTlMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV9nbDFfYXV0b19nYXBfYXZhaWxhYmxlX2luZAorKiBERVNDUklQVElPTgorKiAgIGxsMSBzZW5kcyBhdXRvIGdhcCBhdmFpbGFibGUgaW5kIHRvIEdFUkFOIG5vdworKgorKiBQQVJBTUVURVJTCisqICAga2FsX2Jvb2wgYXZhaWxhYmxlCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9nbDFfYXV0b19nYXBfYXZhaWxhYmxlX2luZChrYWxfYm9vbCBhdmFpbGFibGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2dsMV9hdXRvX2dhcF9jbmYKKyogREVTQ1JJUFRJT04KKyogICBsbDEgc2VuZHMgYXV0byBnYXAgY25mIHRvIEdFUkFOIG5vdworKgorKiBQQVJBTUVURVJTCisqICAgc3VjY2VzcyAgICAgIC0gc3VjY2VzcyBvciBub3QKKyogICB2YWxpZF9wZXJpb2QgLSBhdXRvbm9tb3VzIGdhcCBsZW5ndGggd2hpY2ggaXMgYWxsb3dlZCBieSBhY3RpdmUgcmF0CisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9nbDFfYXV0b19nYXBfY25mKGthbF9ib29sIHN1Y2Nlc3Msa2FsX2ludDMyIHZhbGlkX3BlcmlvZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfZ2wxX2F1dG9fZ2FwX2VuZF9pbmQKKyogREVTQ1JJUFRJT04KKyogICBsbDEgc2VuZHMgYXV0byBnYXAgZW5kIGluZCB0byBHRVJBTiBub3cKKyoKKyogUEFSQU1FVEVSUworKiAgIG5vbmUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2dsMV9hdXRvX2dhcF9lbmRfaW5kKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2dsMV9hdXRvX2dhcF9pbmQKKyogREVTQ1JJUFRJT04KKyogICBsbDEgc2VuZHMgYXV0byBnYXAgaW5kIHRvIEdFUkFOIG5vdworKgorKiBQQVJBTUVURVJTCisqICAgZ3NtX3RpbWUgLSBhdXRvIHRpbWUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2dsMV9hdXRvX2dhcF9pbmQoZ2VyYW5fZ3NtX3RpbWVfc3RydWN0IGdzbV90aW1lKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV9nbDFfYXV0b19nYXBfc3RvcF9jbmYKKyogREVTQ1JJUFRJT04KKyogICBsbDEgc2VuZHMgYXV0byBnYXAgc3RvcCBjbmYgdG8gR0VSQU4gbm93CisqCisqIFBBUkFNRVRFUlMKKyogICBOb25lCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9nbDFfYXV0b19nYXBfc3RvcF9jbmYodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfZ2wxX2F1dG9fZ2FwX3N0b3BfaW5kCisqIERFU0NSSVBUSU9OCisqICAgbGwxIHNlbmRzIGF1dG8gZ2FwIHN0b3AgaW5kIHRvIEdFUkFOIG5vdworKgorKiBQQVJBTUVURVJTCisqICAgTm9uZQorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZ2wxX2F1dG9fZ2FwX3N0b3BfaW5kKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfZ2wxX2F1dG9fdGltZV9taW51cworKiBERVNDUklQVElPTgorKiAgYWRkIG1vcmUgcmYgbWFyZ2luIGZvciBhbnkgc3RhbmRieSByYXQgd2hpY2ggd2lsbCBlbnRlciBzbGVlcCBkdXJpbmcgYXV0b25vbW91cyBzZXJjaCBwcm9jZWR1cmUKKyoKKyogUEFSQU1FVEVSUworKiAgIGdlcmFuX2dzbV90aW1lX3N0cnVjdCoKKyogICBrYWxfaW50MzIgICAgICAgICAgICAgIC0gbW9yZSBSRiBtYXJnaW4gKHJlY292ZXJ5IGZyb20gc2xlZXApLgorKiBSRVRVUk5TCisqICB2b2lkCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9nbDFfYXV0b190aW1lX21pbnVzKGdlcmFuX2dzbV90aW1lX3N0cnVjdCogdGltZSwga2FsX2ludDMyIGViaXRzKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV9nbDFfZXhwYW5kX2dhcF9wYXR0ZXJuX2luZAorKiBERVNDUklQVElPTgorKiAgIGxsMSBzZW5kcyBnYXAgcGF0dGVybiBpbmQgdG8gR0VSQU4gbm93CisqCisqIFBBUkFNRVRFUlMKKyogICBzdGFuZGJ5X2dhcCAtIGdhcCBwYXR0ZXJuIGZvciBnZXJhbgorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZ2wxX2V4cGFuZF9nYXBfcGF0dGVybl9pbmQobGwxX2dsMV9leHBhbmRfZ2FwX3BhdHRlcm5fc3RydWN0KiBzdGFuZGJ5X2dhcCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfZ2wxX2dhcF9yZXN1bWVfaW5kCisqIERFU0NSSVBUSU9OCisqICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIEdMMSB0byByZXN1bWUgR0wxJ3MgZ2FwIHVzYWdlLiAKKyogIEFmdGVyIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2UsIEdMMSBjb3VsZCAgdXNlIGdhcCBwYXR0ZXJuIG5vcm1hbGx5LgorKgorKiBQQVJBTUVURVJTCisqICAgbm9uZQorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZ2wxX2dhcF9yZXN1bWVfaW5kKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2dsMV9nYXBfc2VydmljZV9yZXF1ZXN0CisqIERFU0NSSVBUSU9OCisqICAgbGwxIHNlbmRzIGdhcCBzZXJ2aWNlIHJlcSB0byBHRVJBTiBub3cKKyoKKyogUEFSQU1FVEVSUworKiAgIGVuYWJsZSAgIC0gS0FMX1RSVUUgIDogdHVybiBvbiBnYXAgc2VydmljZSAKKyogICAgICAgICAgICAtIEtBTF9GQUxTRSA6IHR1cm4gb2ZmIGdhcCBzZXJ2aWNlCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9nbDFfZ2FwX3NlcnZpY2VfcmVxKGthbF9ib29sIGVuYWJsZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfZ2wxX2dhcF9zdG9wX2NuZgorKiBERVNDUklQVElPTgorKiAgIExMMSB1c2VzIHRoaXMgcHJpbWl0aXZlIHRvIGNvbmZpcm0gR0wxIHRoYXQgTEwxIGhhcyBhbHJlYWR5IHN0b3BwZWQgCisqICAgYWxsIGdhcCB1c2FnZXMgaW4gc3RhbmRieSBSQVQgYW5kIEdMMSBjb3VsZCB1c2UgYWxsIFJGIHRpbWUuCisqCisqIFBBUkFNRVRFUlMKKyogICBOT05FCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9nbDFfZ2FwX3N0b3BfY25mKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2dsMV9nYXBfc3RvcF9yZXEKKyogREVTQ1JJUFRJT04KKyogICBMTDEgdXNlcyB0aGlzIHByaW1pdGl2ZSB0byBzdG9wIGdhcCB1c2FnZSBpbiBHRVJBTiBHU00gd2hlbiBHRVJBTiBHU00gaXMgc3RhbmRieSBSQVQuCisqICAgU3RvcCBhbGwgcHVycG9zZXMgaW4gZ3NtLCBjb25maXJtZWQgd2l0aCBTWSBZZWgvQWxiZXJ0IExlZSBTRTIvQ1MzCisqIFBBUkFNRVRFUlMKKyogICBOb25lCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9nbDFfZ2FwX3N0b3BfcmVxKHZvaWQpOworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAvKiBjdXJyZW50bHkgR0wxIHdpbGwgbm90IHVzZSBzdXNwZW5kIHByb2NlZHVyZSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2dsMV9nYXBfc3VzcGVuZF9yZXEKKyogREVTQ1JJUFRJT04KKyogICBMTDEgdXNlcyB0aGlzIHByaW1pdGl2ZSB0byBzdXNwZW5kIGdhcCB1c2FnZSBpbiBHRVJBTiBHU00gd2hlbiBHRVJBTiBHU00gaXMgc3RhbmRieSBSQVQuCisqCisqIFBBUkFNRVRFUlMKKyogICBOb25lCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9nbDFfZ2FwX3N1c3BlbmRfcmVxKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2dsMV9nZXRfY3VycmVudF90aW1lCisqIERFU0NSSVBUSU9OCisqICAgbGwxIGdldHMgY3VycmVudCB0aW1lCisqCisqIFBBUkFNRVRFUlMKKyogICBnZXJhbl90aW1lIC0gZ2wxIGN1cnJlbnQgdGltZQorKgorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZ2wxX2dldF9jdXJyZW50X3RpbWUoZ2VyYW5fZ3NtX3RpbWVfc3RydWN0KiBnZXJhbl90aW1lKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX2dsMV9nZXRfYXV0b190aW1lCisqIERFU0NSSVBUSU9OCisqICAgcmV0dXJuIGF1dG8gdGltZSBmcm9tIEdMMQorKgorKiBQQVJBTUVURVJTCisqICAgTm9uZQorKiBSRVRVUk5TCisqICBnZXJhbl9nc21fdGltZV9zdHJ1Y3QgYXV0b190aW1lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2dlcmFuX2dzbV90aW1lX3N0cnVjdCBtbGwxX2dsMV9nZXRfYXV0b190aW1lKHZvaWQpOworCisjaWZkZWYgX19MVEVfUkFUX18KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgbWxsMV9nbDFfZ2V0X2VsMV9yZl9tYXJnaW4KKyogREVTQ1JJUFRJT04KKyogIEdMMSBnZXRzIEVMMSBSRiBtYXJnaW4gaW4gY3VycmVudCBzdGF0ZQorKiAgbWFyZ2luIHNob3VsZCBiZSBzbWFsbCwgc28gdXNlIGthbF9pbnQzMgorKiBQQVJBTUVURVJTCisqICBoZWFkICAgICAgLSBoZWFkZXJfbWFyZ2luCisqICB0YWlsICAgICAgLSB0YWlsX21hcmdpbgorKiBSRVRVUk5TCisqICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9nbDFfZ2V0X2VsMV9yZl9tYXJnaW4oa2FsX2ludDMyKiBoZWFkLGthbF9pbnQzMiogdGFpbCk7CisjZW5kaWYgLypfX0xURV9SQVRfXyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgbWxsMV9nbDFfZ2V0X2dsMV9yZl9tYXJnaW4KKyogREVTQ1JJUFRJT04KKyogIEdMMSBnZXRzIEdMMSBSRiBtYXJnaW4gaW4gY3VycmVudCBzdGF0ZQorKgorKiBQQVJBTUVURVJTCisqICBoZWFkICAgICAgLSBoZWFkZXJfbWFyZ2luCisqICB0YWlsICAgICAgLSB0YWlsX21hcmdpbgorKiBSRVRVUk5TCisqICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9nbDFfZ2V0X2dsMV9yZl9tYXJnaW4oa2FsX2ludDMyKiBoZWFkLGthbF9pbnQzMiogdGFpbCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfZ2wxX2dldF90aW1pbmdfc3RhdHVzCisqIERFU0NSSVBUSU9OCisqCisqIFBBUkFNRVRFUlMKKyogUkVUVVJOUworKiAgIGthbF9ib29sICAtIHZhbGlkX3RpbWluZyAgS0FMX1RSVUUgIDogd2l0aCB2YWxpZCB0aW1pbmcKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtBTF9GQUxTRSA6IHdpdGggaW52YWxpZCB0aW1pbmcKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgbWxsMV9nbDFfZ2V0X3RpbWluZ19zdGF0dXModm9pZCk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX2dsMV9nZXRfbV9nc20KKyogREVTQ1JJUFRJT04KKyogICByZXR1cm4gTV9HU00gaW4gR0wxCisqCisqIFBBUkFNRVRFUlMKKyogICBOb25lCisqIFJFVFVSTlMKKyogIGthbF91aW50OCBtX2dzbQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfdWludDggbWxsMV9nbDFfZ2V0X21fZ3NtKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfZ2wxX2dldF9tb2RlX3N0YXR1cworKiBERVNDUklQVElPTgorKiAgIHJldHVybiBtb2RlIHN0YXR1cyBmcm9tIEdMMQorKgorKiBQQVJBTUVURVJTCisqICAgTm9uZQorKiBSRVRVUk5TCisqICBsbDFfYWN0aXZlX3JhdF9tb2RlX3N0YXR1c19lbnVtIG1vZGVfc3RhdHVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2xsMV9hY3RpdmVfcmF0X21vZGVfc3RhdHVzX2VudW0gbWxsMV9nbDFfZ2V0X21vZGVfc3RhdHVzKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfZ2wxX2dldF90aWNrX2NvdW50CisqIERFU0NSSVBUSU9OCisqICAgR0wxIHRpY2sgbnVtYmVyCisqCisqIFBBUkFNRVRFUlMKKyogICBpc19wcmlvX3NlYXJjaCAtIEtBTF9UUlVFICA6IGxsMV9tYWluIHdhbnRzIHRvIGdldCBwcmlvLiB0aWNrCisqICAgICAgICAgICAgICAgICAgICBLQUxfRkFMU0UgOiBsbDFfbWFpbiB3YW50cyB0byBnZXQgcmFuayB0aWNrCisqICAgaHBzICAgICAgICAgICAgLSAyNSBvciA3MCAodWludCA6IHNlY29uZCkKKyogICAKKyogUkVUVVJOUworKiAga2FsX3VpbnQzMiBjb3VudDsKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX3VpbnQzMiBtbGwxX2dsMV9nZXRfdGlja19jb3VudChrYWxfYm9vbCBpc19wcmlvX3NlYXJjaCwga2FsX3VpbnQxNiBocHMpOworCisjaWZkZWYgX19VTVRTX1JBVF9fCisjaWZkZWYgX19VTVRTX0ZERF9NT0RFX18KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgbWxsMV9nbDFfZ2V0X3VsMV9yZl9tYXJnaW4KKyogREVTQ1JJUFRJT04KKyogIEdMMSBnZXRzIFVMMSBSRiBtYXJnaW4gaW4gY3VycmVudCBzdGF0ZQorKgorKiBQQVJBTUVURVJTCisqICBoZWFkICAgICAgLSBoZWFkZXJfbWFyZ2luCisqICB0YWlsICAgICAgLSB0YWlsX21hcmdpbgorKiBSRVRVUk5TCisqICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9nbDFfZ2V0X3VsMV9yZl9tYXJnaW4oa2FsX2ludDMyKiBoZWFkLGthbF9pbnQzMiogdGFpbCk7CisjZW5kaWYgLypfX1VNVFNfRkREX01PREVfXyovCisKKyNpZmRlZiBfX1VNVFNfVEREMTI4X01PREVfXworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX2dsMV9nZXRfdGwxX3JmX21hcmdpbgorKiBERVNDUklQVElPTgorKiAgR0wxIGdldHMgVEwxIFJGIG1hcmdpbiBpbiBjdXJyZW50IHN0YXRlCisqCisqIFBBUkFNRVRFUlMKKyogIGhlYWQgICAgICAtIGhlYWRlcl9tYXJnaW4KKyogIHRhaWwgICAgICAtIHRhaWxfbWFyZ2luCisqIFJFVFVSTlMKKyogIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX2dsMV9nZXRfdGwxX3JmX21hcmdpbihrYWxfaW50MzIqIGhlYWQsa2FsX2ludDMyKiB0YWlsKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX2dsMV9pc19mYl9zYl9zZWFyY2hfb24KKyogREVTQ1JJUFRJT04KKyogICBDaGVjayBpZiBnbDEgdHVybnMgb24gZmIvc2Igc2VhcmNoCisqCisqIFBBUkFNRVRFUlMKKyogICAKKyogUkVUVVJOUworKiAga2FsX2Jvb2wgLSBLQUxfRkFMU0UgOiB0dXJucyBvZmYgZmIvc2Igc2VhcmNoCisqICAgICAgICAgICAgIEtBTF9UUlVFICA6IHR1cm5zIG9uIGZiL3NiIHNlYXJjaAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfYm9vbCBtbGwxX2dsMV9pc19mYl9zYl9zZWFyY2hfb24odm9pZCk7CisKKyNlbmRpZiAvKl9fVU1UU19UREQxMjhfTU9ERV9fKi8KKyNlbmRpZiAvKl9fVU1UU19SQVRfXyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfZ2wxX2lzX2xvd2VyX3B3cl9vbgorKiBERVNDUklQVElPTgorKiAgIENoZWNrIGlmIGdsMSBpcyBsb3cgcHdyIG9uCisqCisqIFBBUkFNRVRFUlMKKyogICAKKyogUkVUVVJOUworKiAga2FsX2Jvb2wgLSBLQUxfRkFMU0UgOiBtZWFzdXJlbWVudCBpcyBub3QgZmluaXNoZWQgYW5kIG5lZWQgZ2FwIGluIHRoaXMgcGVyaW9kIAorKiAgICAgICAgICAgICBLQUxfVFJVRSAgOiBtZWFzdXJlbWVudCBpcyBmaW5pc2hlZCBhbmQgZG9lc250IG5lZWQgZ2FwIGluIHRoaXMgcGVyaW9kCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIG1sbDFfZ2wxX2lzX2xvd2VyX3B3cl9vbih2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV9nbDFfbW9kZV9zdGF0dXNfdXBkYXRlX2luZAorKiBERVNDUklQVElPTgorKiAgIFRoaXMgbWVzc2FnZSBpcyBzZW50IHRvIEdMMSBmb3IgaW5mb3JtaW5nIHRoYXQgbW9kZSBzdGF0dXMgb2YgYWN0aXZlIFJBVCB3aGVuIEdMMSBpcyBzdGFuZGJ5IFJBVC4gCisqICAgVGhpcyBtZXNzYWdlIHNob3VsZCBiZSB1cGRhdGVkIGZvciBHTDEgaW4gc3RhbmRieSB3aGVuIGFueSBtb2RlIHN0YXR1cyBjaGFuZ2VkIGluIGFjdGl2ZSBSQVQuCisqCisqIFBBUkFNRVRFUlMKKyogICBzdGF0dXMgLSBtb2RlIHN0YXR1cyBpbiBhY3RpdmUgUkFUIAorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZ2wxX21vZGVfc3RhdHVzX3VwZGF0ZV9pbmQobGwxX2FjdGl2ZV9yYXRfbW9kZV9zdGF0dXNfZW51bSBzdGF0dXMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2dsMV9zZXRfdGltaW5nX3N0YXR1cworKiBERVNDUklQVElPTgorKgorKiBQQVJBTUVURVJTCisqICAgZmxhZyAgICAgLSBzZXQgdmFsaWRfdGltaW5nID0gZmxhZworKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZ2wxX3NldF90aW1pbmdfc3RhdHVzKGthbF9ib29sIGZsYWcpOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfZ2wxX3N5bmNfdGltZV9yZXEKKyogREVTQ1JJUFRJT04KKyogICBXaGVuIHRpbWluZyBzeW5jaHJvbml6YXRpb24gcHJvY2VkdXJlIGlzIHRyaWdnZXJlZCwgbWxsMSB3aWxsIGRlY2lkZSB3aGljaCByYXQgc2hvdWxkIGRvIAorKiAgIHRpbWluZyBzeW5jaHJvbml6YXRpb24gYmFzZWQgb24gdGhlIHJlc3VsdCBvZiBnX2xsMV9mbGlnaHRfcmF0fHwgZ19sbDFfc3RhbmRieV9yYXQgfHwgZ19sbDFfYWN0aXZlX3JhdC4KKyoKKyogUEFSQU1FVEVSUworKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZ2wxX3N5bmNfdGltZV9yZXEodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgbWxsMV9nbDFfdGltZV9hZGQKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBhZGQgZWJpdHMgdG8gdGltZSAsIGZvciByZiBtYXJnaW4sIHNob3VsZCBzbWFsbGVyIHRoYW4ga2FsX2ludDMyCisqCisqIFBBUkFNRVRFUlMKKyogICB0aW1lICAgICAgICAgIC0gYmFzaWMgdGltZQorKiAgIGViaXRzICAgICAgICAgLSBhZGQgZWJpdHMKKyogUkVUVVJOUworKiAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZ2wxX3RpbWVfYWRkKCBnZXJhbl9nc21fdGltZV9zdHJ1Y3QqIHRpbWUsIGthbF9pbnQzMiBlYml0cyApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ0FMTCBGVU5DVElPTiBQUk9UT1RZUEUKKyogICBtbGwxX2dzbV9oYW5kbGVyKCkKKyoKKyogREVTQ1JJUFRJT04KKyogICBGdW5jdGlvbiB0byBoYW5kbGUgdGhlIHByaW1pdGl2ZSBmcm9tIEdMMS4KKyoKKyogUEFSQU1FVEVSUworKiAgIGN1cnJlbnRfaWxtIC0gcHJpbWl0aXZlIGZyb20gR0wxLgorKgorKiBSRVRVUk4KKyogICBOb25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9nc21faGFuZGxlcih2b2lkICpwdHJfaWxtKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV90aWNrX2dsMV9nYXBfZXhwYW5zaW9uCisqIERFU0NSSVBUSU9OCisqICAgdGljayBnbDEgdG8gZXhwYW5kIGdhcCB3aGVuIHN5bmMgZG9uZQorKgorKiBQQVJBTUVURVJTCisqICAgbm9uZQorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdGlja19nbDFfZ2FwX2V4cGFuc2lvbih2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV9nbDFfaW5mb19pbml0CisqIERFU0NSSVBUSU9OCisqICAgSW5pdGlhbGl6ZSBnbDEgaW50ZXJuYWwgZ2xvYmFsIHZhcmlhYmxlCisqCisqIFBBUkFNRVRFUlMKKyogICBub25lCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV9nbDFfaW5mb19pbml0KHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX2dsMV9nYXBfcGF0dGVybl90aW1pbmdfY2hlY2tpbmcKKyogREVTQ1JJUFRJT04KKyogICBjaGVjayBpZiB0aGUgcGVuZGluZyBnYXAgaXMgb3V0IG9mIGRhdGUgb3Igbm90CisqCisqIFBBUkFNRVRFUlMKKyogICBnc21fdGltZSAgIC0gZ2wxIHRpbWluZyBjb3JyZXNwb25kIHRvIHNvbWUgc3RhbmRieSByYXQncyB0aW1pbmcgaW5kaWNhdGVkIGluIG1lYXN1cmUgcmVxdWVzdAorKiBSRVRVUk5TCisqICAgVFJVRSAgIC0gdGhlIHBlbmRpbmcgZ2FwIGhhcyBub3QgYmVlbiBvdXQgb2YgZGF0ZQorKiAgIEZBTFNFICAgLSB0aGUgcGVuZGluZyBnYXAgaGFzIGJlZW4gb3V0IG9mIGRhdGUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgbWxsMV9nbDFfZ2FwX3BhdHRlcm5fdGltaW5nX2NoZWNraW5nKGdlcmFuX2dzbV90aW1lX3N0cnVjdCBnc21fdGltZSk7CisKKyNlbmRpZiAvKl9NTEwxX0dTTV9IKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21sbDFfdW10c19mZGQuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbGwxX3VtdHNfZmRkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNkZDE3YwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbGwxX3VtdHNfZmRkLmgKQEAgLTAsMCArMSwxMzUyIEBACisjaWZuZGVmIF9NTEwxX1VNVFNfRkREX0gKKyNkZWZpbmUgX01MTDFfVU1UU19GRERfSAorCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiIC8qZm9yIExPQ0FMX1BBUkFfSERSKi8KKyNpbmNsdWRlICJtbGwxX2NvbW1vbi5oIgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVGSU5JVElPTlMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBVTVRTX0ZERF9TRVNTSU9OX0lOX1BFUklPRCAgICAgOCAvKiBhbGlnbiBnc20sIExURSBvbmx5IG5lZWQgNiBmb3IgZ3AwL2dwMSAqLworCisjZGVmaW5lIFVNVFNfRkREX01BWF9EQ0hfR0FQX1BBUkFNX05VTSA2IC8qMiBQb3AgdGVtcCBtb2RpZmljYXRpb24gZm9yIFVMMSdzIFRHUFMgZnJlZSBidWZmZXIgaXNzdWUqLworI2RlZmluZSBVTVRTX0ZERF9NQVhfVEdQU19OVU0gICAgICAgICAgNgorI2RlZmluZSBVTVRTX0ZERF9TQ0hFRFVMRV9ERUxBWSAgICAgICAgMCAvKiB1c2VkIHRvIHBvc3Rwb25lIGF2YWlsYWJsZSBnYXAgc3RhcnQgdGltZSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5VTUVSQVRJT05TCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEVOVU1FUkFUSU9OCisqICAgdWwxX2xsMV9yYXRfc3RhdHVzX2VudW0KKyoKKyogREVTQ1JJUFRJT05TCisqICAgVXNlZCB0byBpZGVudGlmeSB0aGUgc3RhdHVzIGluIFVNVFMgRkREIFJBVC4KKyogTk9URQorKiAgIGFueSBtb2RpZmljYXRpb24gc2hvdWxkIHN5bmMuIHdpdGggbGwxX3JhdF9zdGF0dXNfZW51bQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgVUwxX0xMMV9SQVRfRkxJR0hUID0wLAorICBVTDFfTEwxX1JBVF9TVEFOREJZLAorICBVTDFfTEwxX1JBVF9BQ1RJVkUsCisgIFVMMV9MTDFfUkFUX05VTQorfSB1bDFfbGwxX3JhdF9zdGF0dXNfZW51bTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEVOVU1FUkFUSU9OCisqICAgdW10c19mZGRfdGdwc19zdGF0dXNfZW51bQorKgorKiBERVNDUklQVElPTlMKKyogICBBQ1RJVkVfR0FQOiB0aGUgdGdwcyBpcyB1c2VkIGluIHN0YW5kYnkgTDEuCisqICAgSU5BQ1RJVkVfR0FQOiB0aGUgdGdwcyBpcyBub3QgdXNlZCBpbiBzdGFuZGJ5IEwxLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgIFVMMV9BQ1RJVkFURV9HQVA9MCwgLyogMCAqLworICAgVUwxX0RFQUNUSVZBVEVfR0FQICAvKiAxICovCit9dW10c19mZGRfdGdwc19zdGF0dXNfZW51bTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEVOVU1FUkFUSU9OCisqICAgdW10c19mZGRfdGdtcF9lbnVtCisqCisqIERFU0NSSVBUSU9OUworKiAgIFRoZSBlbnVtIHR5cGUgb2YgVEdQUyBwdXJwb3NlCisqIE5PVEUKKyogICBhbnkgY2hhbmdlIHNob3VsZCBub3RlIHhfdGdtcF9lbnVtCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bQoreworICAgVUwxX0xMMV9GRERfTUVBU1VSRSwgICAgICAvKiBJbnRlci1mcmVxdWVuY3kgbWVhc3VyZW1lbnQgKi8KKyAgIFVMMV9MTDFfR1NNX1JTU0ksICAgICAgICAgLyogR1NNIFJTU0kgbWVhc3VyZW1lbnQgKi8KKyAgIFVMMV9MTDFfR1NNX0JTSUNfSU5JVCwgICAgLyogR1NNIGluaXRpYWwgQlNJQyAqLworICAgVUwxX0xMMV9HU01fQlNJQ19DTkYsICAgICAvKiBHU00gQlNJQyBjb25maXJtICovCisgICBVTDFfTEwxX0VVVFJBTiwgICAgICAgICAgIC8qIEludGVyLVJBVCBMVEUgbWVhc3VyZW1lbnQqLyAgCisgICBVTDFfTEwxX1VNVFNfVERELCAgICAgICAgIC8qIEludGVyLVJBVCBVTVRTX1RERCBtZWFzdXJlbWVudCovCisgICBVTDFfTEwxX1BVUlBPU0VfVU5ERUZJTkVECit9IHVtdHNfZmRkX3RnbXBfZW51bTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSVUNUVVJFUworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICB1bXRzX2ZkZF90aW1lX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBVTVRTIEZERCBzeXN0ZW0gdGltaW5nIGJhc2UKKyoKKyogUEFSQU1FVEVSUworKiAgIHNmbiAgICAgIC0gVU1UUyBGREQgc3lzdGVtIGZyYW1lIG51bWJlciAoMH40MDk1KSwgMSBzZm4gPSAzODQwMCo4LgorKiAgIGVjaGlwICAgIC0gVU1UUyBGREQgRWNoaXAgKDB+MzA3MTk5KQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICBrYWxfaW50MzIgICAgICAgIHNmbjsKKyAga2FsX2ludDMyICAgICAgICBlY2hpcDsKK311bXRzX2ZkZF90aW1lX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGxsMV91bXRzX2ZkZF9zdGFuZGJ5X2dhcF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgVU1UUyBGREQgc3RhbmRieSBnYXAgcGF0dGVybiBzdHJ1Y3R1cmUuCisqCisqIFBBUkFNRVRFUlMKKyogICBzdGFydF90aW1lIC0gc3RhcnQgdGltZSBvZiB0aGUgZ2FwIHNlc3Npb24KKyogICBsZW5ndGggICAgIC0gbGVuZ3RoIG9mIHRoZSBnYXAgc2Vzc2lvbiAoaW4gZWNoaXApCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICB1bXRzX2ZkZF90aW1lX3N0cnVjdCBzdGFydF90aW1lOworICAga2FsX2ludDMyICAgICAgICAgICAgbGVuZ3RoOworfWxsMV91bXRzX2ZkZF9zdGFuZGJ5X2dhcF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBsbDFfdWwxX2V4cGFuZF9nYXBfcGF0dGVybl9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgTEwxIGV4cGFuZHMgZ2FwIHBhdHRlcm4gZm9yIFVMMQorKgorKiBQQVJBTUVURVJTCisqICAgc2Vzc2lvbl9udW0gIC0gSW5kaWNhdGUgaG93IG1hbnkgZ2FwIHNlc3Npb24gCisqICAgc2Vzc2lvbltdICAgIC0gU3RhbmRieSBnYXAgc2Vzc2lvbi4KKyogICBtZWFzdXJlX3RpZCAgLSBUcmFuc2l0aW9uIGlkIGZvciBSQU5LIHRpY2suL1ZhbGlkIHdoZW4gYWN0aXZlIFJBVCBpcyBpbiBEUlggbW9kZS4vQW5kIGJpdCAwIGluIHRpY2tfYml0bWFwIGlzICIxIgorKiAgIGhwc190aWQgICAgICAtIFRyYW5zaXRpb24gaWQgZm9yIEhQUyB0aWNrLi9WYWxpZCB3aGVuIGFjdGl2ZSBSQVQgaXMgaW4gRFJYIG1vZGUuL0FuZCBiaXQgMSBpbiB0aWNrX2JpdG1hcCBpcyAiMSIKKyogICB0aWNrX2JpdG1hcCAgLSBCaXQgMCA6IFJhbmsgc2VhcmNoICwgQml0IDEgOiBQcmlvcml0eSBzZWFyY2gKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9udW07CisgICBsbDFfdW10c19mZGRfc3RhbmRieV9nYXBfc3RydWN0IHNlc3Npb25bVU1UU19GRERfU0VTU0lPTl9JTl9QRVJJT0RdOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlX3RpZDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgaHBzX3RpZDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgdGlja19iaXRtYXA7Cit9bGwxX3VsMV9leHBhbmRfZ2FwX3BhdHRlcm5fc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgbGwxX3VtdHNfZmRkX2dhcF9jb25maWdfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFVNVFMgRkREIGdhcCBjb25maWd1cmF0aW9uIHdoZW4gVU1UUyBGREQgaXMgYWN0aXZlIFJBVC4KKyoKKyogUEFSQU1FVEVSUworKiAgIHN0YXJ0X3RpbWUgLSBWYWxpZCB0aW1lIG9mIGdhcCBwYXR0ZXJuIGluIGFjdGl2ZSBSQVQKKyogICB1c2VfbnVtICAgIC0gQ29udGludW91cyBnYXAgbnVtYmVyIGNvdWxkIGJlIHVzZWQgaW4gYWN0aXZlIFJBVChFYWNoIEZNTyBjeWNsZSA9IDEwKk1fUkVQKk5UVEkgYXMgYSB1bml0KQorKiAgIHNraXBfbnVtICAgLSBTa2lwIG51bWJlciBpbiBhY3RpdmUgUkFUIChFYWNoIEZNTyBjeWNsZSA9IDEwKk1fUkVQKk5UVEkgYXMgYSB1bml0KQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgdW10c19mZGRfdGltZV9zdHJ1Y3Qgc3RhcnRfdGltZTsKKyAgIGthbF91aW50OCAgICAgICAgICAgIHVzZV9udW07CisgICBrYWxfdWludDggICAgICAgICAgICBza2lwX251bTsKK31sbDFfdW10c19mZGRfZ2FwX2NvbmZpZ19zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICB1bXRzX2ZkZF9pZGxlX2dhcF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgVU1UUyBGREQgaWRsZSBnYXAgc3RydWN0dXJlLgorKgorKiBQQVJBTUVURVJTCisqICAgc3RhcnRfdGltZSAgLSBzdGFydCB0aW1lIG9mIHRoZSBnYXAgc2Vzc2lvbgorKiAgIGxlbmd0aCAgICAgIC0gbGVuZ3RoIG9mIHRoZSBnYXAgc2Vzc2lvbiAoaW4gZWNoaXApCisqICAgaXNfZHJ4X3RpY2sgLSBLQUxfVFJVRSA6IEZpcnN0IHRpY2sgaW4gdGhpcyBEUlggcGVyaW9kCisqICAgICAgICAgICAgICAgICBLQUxfRkFMU0U6IE5vdCB0aGUgZmlyc3QgZnJlZSBpbnRlcnZhbCBpbiB0aGlzIERSWCBwZXJpb2QKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIHVtdHNfZmRkX3RpbWVfc3RydWN0IHN0YXJ0X3RpbWU7CisgICBrYWxfaW50MzIgICAgICAgICAgICBsZW5ndGg7CisgICBrYWxfYm9vbCAgICAgICAgICAgICBpc19kcnhfdGljazsKK311bXRzX2ZkZF9pZGxlX2dhcF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICB1bXRzX2ZkZF9mYWNoX2dhcF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgVU1UUyBGREQgRkFDSCBnYXAgc3RydWN0dXJlLihGTU8pCisqCisqIFBBUkFNRVRFUlMKKyogICBhY3RpdmVfdGltZV9zZm0gIC0gVGhlIGZpcnN0IFNGTiBmb3Igc3RhcnRpbmcgRk1PLgorKiAgIGZtb19vZmZzZXQgICAgICAgLSBUaGUgRk1PIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBGTU8gY3ljbGUgaW4gVU1UUyBGREQgZnJhbWVzLgorKiAgIGZtb19kdXJhdGlvbiAgICAgLSBUaGUgRk1PIGR1cmF0aW9uIGZvciBtZWFzdXJlbWVudHMgd2l0aGluIGVhY2ggRk1PIGN5Y2xlIGluIFVNVFMgRkREIGZyYW1lcworKiAgIHBlcmlvZF9sZW5ndGggICAgLSBFcXVhbCB0byAxMCpNX1JFUCpOVFRJCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDMyIGFjdGl2ZV90aW1lX3NmbjsKKyAgIGthbF91aW50MzIgZm1vX29mZnNldDsKKyAgIGthbF91aW50MzIgZm1vX2R1cmF0aW9uOworICAga2FsX3VpbnQzMiBwZXJpb2RfbGVuZ3RoOworfXVtdHNfZmRkX2ZhY2hfZ2FwX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIHVtdHNfZmRkX2RjaF9nYXBfaW5mb19zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgVU1UUyBGREQgZ2FwIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gKFRHUFNpIGNvbmZpZ3VyYXRpb24pICAKKyoKKyogUEFSQU1FVEVSUworKiAgIHJlZmVyIHRvIHNwZWMuIDM2LjMzMQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICB0Z3BzaTsKKyAgIHVtdHNfZmRkX3RncHNfc3RhdHVzX2VudW0gc3RhdHVzOworICAga2FsX2ludDE2ICAgICAgICAgICAgICAgICB0Z3NmbjsKKyAgIHVtdHNfZmRkX3RnbXBfZW51bSAgICAgICAgcHVycG9zZTsKKyAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgb3JpZ2luYWxfdGdwcmM7CisgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgIHJlbWFpbl90Z3ByYzsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgdGdzbjsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgdGdsMTsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgdGdsMjsKKyAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgdGdkOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICB0Z3BsMTsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgdGdwbDI7CisgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgIHRfcmVjb25maXJtX2RjaDsKKyAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgdF9pZGVudGlmeV9kY2g7Cit9dW10c19mZGRfZGNoX2dhcF9pbmZvX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIHVtdHNfZmRkX2RjaF9nYXBfcGFyYW1fc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFVNVFMgRkREIERDSCBnYXAgaW5mbyBzdHJ1Y3R1cmUuIChnYXBfaW5mb19sZW50aGcgVEdQU2kgaW4gb25lIFRHUFMgY29uZmlndXJhdGlvbiApCisqCisqIFBBUkFNRVRFUlMKKyogICBnYXBfaW5mb19sZW5ndGggICAtIFRoZSBEQ0ggZ2FwIHBhdHRlcm4gc2VxdWVuY2UgbnVtYmVyCisqICAgcmVjb25maWdfdGltZV9zZm4gLSB2YWxpZCB0aW1lIG9mIHRoaXMgY29uZmlndXJhdGlvbgorKiAgIGRjaF9nYXBfaW5mb1tdICAgIC0gCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggZ2FwX2luZm9fbGVuZ3RoOworICAga2FsX2ludDE2IHJlY29uZmlnX3RpbWVfc2ZuOworICAgdW10c19mZGRfZGNoX2dhcF9pbmZvX3N0cnVjdCBkY2hfZ2FwX2luZm9bVU1UU19GRERfTUFYX1RHUFNfTlVNXTsKK311bXRzX2ZkZF9kY2hfZ2FwX3BhcmFtX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIHVtdHNfZmRkX2RjaF9nYXBfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFVNVFMgRkREIERDSCBnYXAgc3RydWN0dXJlLiAoIG1hbnkgVEdQUyBjb25maWd1cmF0aW9ucykKKyoKKyogUEFSQU1FVEVSUworKiAgIGdhcF9wYXJhbV9udW0gICAgICAgICAgICAtIEluZGljYXRlIHRoYXQgd2hldGhlciB0aGUgcGF0dGVybnMgbmVlZCB0byBiZSBhcHBsaWVkCisqICAgdW10c19mZGRfZGNoX2dhcF9wYXJhbVtdIC0gRENIIGdhcCBjb25maWd1cmF0aW9ucworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4IGdhcF9wYXJhbV9udW07CisgICB1bXRzX2ZkZF9kY2hfZ2FwX3BhcmFtX3N0cnVjdCB1bXRzX2ZkZF9kY2hfZ2FwX3BhcmFtW1VNVFNfRkREX01BWF9EQ0hfR0FQX1BBUkFNX05VTV07Cit9dW10c19mZGRfZGNoX2dhcF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICB1bDFfbGwxX3N5bmNfY25mX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBVTDEgdXNlcyB0aGlzIHByaW1pdGl2ZSB0byBjb25maXJtIExMMSB0aGF0IGN1cnJlbnQgVU1UUyBGREQgdGltaW5nIAorKiAgIGFuZCBtaWNybyBzZWNvbmQgY291bnRlciB2YWx1ZS4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBjdXJyZW50X3RpbWUgICAgICAtIHN5bmMuIHRpbWUgaW4gdW10c19mZGRfdGltZV9zdHJ1Y3QgCisqICAgdW10c19mZGRfdXN0aW1lICAgLSBzeW5jLiB0aW1lIGluIFVTQyAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgdW10c19mZGRfdGltZV9zdHJ1Y3QgY3VycmVudF90aW1lOworICAga2FsX3VpbnQzMiAgICAgICAgICAgdW10c19mZGRfdXN0aW1lOworfXVsMV9sbDFfc3luY19jbmZfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgdWwxX2xsMV9yYXRfc3RhdHVzX2luZF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgVGhpcyBtZXNzYWdlIGlzIHNlbnQgZnJvbSBVTDEgdG8gTEwxIGZvciBpbmZvcm1pbmcgY3VycmVudCBVTDEgUkFUIHN0YXR1cy4gCisqICAgVGhpcyBtZXNzYWdlIHNob3VsZCBiZSBzZW50IHdoZW4gVUwxIFJBVCBzdGF0dXMgY2hhbmdlZC4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICByYXRfc3RhdHVzIC0gUkFUIHN0YXR1cyBpbiBVTDEgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgdWwxX2xsMV9yYXRfc3RhdHVzX2VudW0gcmF0X3N0YXR1czsKK311bDFfbGwxX3JhdF9zdGF0dXNfaW5kX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIHVsMV9sbDFfbW9kZV9zdGF0dXNfaW5kX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBUaGlzIG1lc3NhZ2UgaXMgc2VudCBmcm9tIFVMMSB0byBMTDEgZm9yIGluZm9ybWluZyB0aGF0IFVMMSBtb2RlIHN0YXR1cyB3aGVuIFVMMSBpcyBhY3RpdmUgUkFULiAKKyogICBUaGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNlbnQgd2hlbiBVTDEgbW9kZSBzdGF0dXMgY2hhbmdlZC4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBmZGRfbW9kZV9zdGF0dXMgIC0gY3VycmVudCBtb2RlIGluIFVMMSB3aGVuIFVNVFMgRkREIGlzIGFjdGl2ZSBSQVQKKyogICBkcnhfY3ljbGVfbGVuZ3RoIC0gdmFsaWQgd2hlbiBnc21fbW9kZV9zdGF0dXMgPSBVTDFfTEwxX0lETEVfTU9ERSB8fCAgIExMMV9GRERfRUZBQ0hfRFJYX01PREUKKyogICBidXJzdF9sZW5ndGggICAgIC0gdmFsaWQgd2hlbiBnc21fbW9kZV9zdGF0dXMgPSBMTDFfRkREX0VGQUNIX0RSWF9NT0RFLCBhbmQgc2hvdWxkIGJlIHNtYWxsZXIgdGhhbiBkcnhfY3ljbGVfbGVuZ3RoCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgbGwxX2FjdGl2ZV9yYXRfbW9kZV9zdGF0dXNfZW51bSBmZGRfbW9kZV9zdGF0dXM7CisgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgIGRyeF9jeWNsZV9sZW5ndGg7CisgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgIGJ1cnN0X2xlbmd0aDsKK311bDFfbGwxX21vZGVfc3RhdHVzX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBsbDFfdWwxX21vZGVfc3RhdHVzX3VwZGF0ZV9pbmRfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFRoaXMgbWVzc2FnZSBpcyBzZW50IHRvIFVMMSBmb3IgaW5mb3JtaW5nIHRoYXQgbW9kZSBzdGF0dXMgb2YgYWN0aXZlIFJBVCB3aGVuIFVMMSBpcyBzdGFuZGJ5IFJBVC4gCisqICAgVGhpcyBtZXNzYWdlIHNob3VsZCBiZSB1cGRhdGVkIGZvciBVTDEgaW4gc3RhbmRieSB3aGVuIGFueSBtb2RlIHN0YXR1cyBjaGFuZ2VkIGluIGFjdGl2ZSBSQVQuIAorKiAgIEFsc28gd2hlbiBVTDEgZW50ZXJzIGludG8gc3RhbmRieSBSQVQgZnJvbSBGTElHSFQsIExMMSB3aWxsIHVwZGF0ZSBjdXJyZW50IG1vZGUgc3RhdGUgaW4gYWN0aXZlIFJBVCB0byBVTDEuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgYWN0aXZlX3JhdF9tb2RlX3N0YXR1cyAtIGN1cnJlbnQgbW9kZSBzdGF0dXMgaW4gYWN0aXZlIFJBVAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGxsMV9hY3RpdmVfcmF0X21vZGVfc3RhdHVzX2VudW0gYWN0aXZlX3JhdF9tb2RlX3N0YXR1czsKK31sbDFfdWwxX21vZGVfc3RhdHVzX3VwZGF0ZV9pbmRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgdWwxX2xsMV9hY3RpdmVfbWVhc3VyZV9zdGF0dXNfaW5kX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBVTDEgaW5mb3JtcyBMTDEgdGhhdCBob3cgbWFueSBoaWdoZXIgcHJpb3JpdHkgaW50ZXItZnJlcXVlbmNpZXMgaW4gVUwxIHdoZW4gaGlnaCBwcmlvcml0eSBzZWFyY2ggaXMgdHVybmVkIG9uCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgZnJlcV9udW0gICAgICAtIFRoZSBudW1iZXIgb2YgaGlnaGVyIHByaW9yaXR5IGludGVyLWZyZXEuIGluIFVMMS4oMH4zKQorKiAgICAgICAgICAgICAgICAgICBXaGVuIEhQUyBvZmYsIHRoZSBmcmVxX251bSBpcyBlcXVhbCB0byB6ZXJvLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGthbF91aW50OCAgICAgZnJlcV9udW07Cit9dWwxX2xsMV9hY3RpdmVfbWVhc3VyZV9zdGF0dXNfaW5kX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIHVsMV9sbDFfbWVhc3VyZV9yZXFfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFRoaXMgbWVzc2FnZSBpcyBzZW50IGZyb20gVUwxIHRvIGluZm9ybSBMTDEgdGhhdCBob3cgbWFueSBVTVRTIEZERCBmcmVxdWVuY2llcyBhcmUgcmVxdWlyZWQgdG8gYmUgCisqICAgbWVhc3VyZWQgYW5kIHRoZSBtZWFzdXJlbWVudCBwdXJwb3NlcyBib3RoIGluIFVNVFMgRkREIEFjdGl2ZSBhbmQgU3RhbmRieS4gVGhlIG1lc3NhZ2UgaXMgbm90IAorKiAgIGFwcGxpY2FibGUgZm9yIFVMMSB0byByZXF1ZXN0IGdhcHMgZm9yIGludGVyLWZyZXF1ZW5jeSBtZWFzdXJlbWVudCBpbiBpZGxlIG1vZGUuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgbWVhc19wdXJwb3NlX2JpdG1hcCAtIGJpdCAwIGZvciBtZWFzdXJlbWVudCwgYml0IDEgZm9yIGNlbGwgc2VhcmNoCisqICAgdGlkICAgICAgICAgICAgICAgICAtIHRpZCBmb3IgbGFzdGVzdCBtZWFzX3JlcSBvbiAoc2hvdWxkIG9ubHkgY2hhbmdlIHdoZW4gb2ZmKQorKiAgIHRpY2tfYml0bWFwICAgICAgICAgLSBiaXQgMCBmb3IgcmFua2luZyBzZWFyY2gsIGJpdCAxIGZvciBwcmlvcml0eSBzZWFyY2ggCisqICAgZnJlcV9udW0gICAgICAgICAgICAtIGhpZ2ggcHJpb3JpdHkgZnJlcWVuY2llcyB3aGVuIEhQUyBPTiwgbWVhc3VyZW1lbnQgZnJlcXVlbmNpZXMgd2hlbiBIUFMgT0ZGCisqICAgdF9ocHMgICAgICAgICAgICAgICAtIGJhc2ljIHBlcmlvZCBvZiBoaWdoIHByaW9yaXR5IHNlYXJjaCAoMjVzLDYwcyw3MHMpCisqICAgaXNfcGVyaW9kX3Jlc2V0X2JtcCAtIGJpdCAwIGZvciByYW5rIHBlcmlvZCwgMSBtZWFucyB0byByZXNldAorKiAgICAgICAgICAgICAgICAgICAgICAgLSBiaXQgMSBmb3IgcHJpbyBwZXJpb2QsIDAgbWVhbnMgbm90IHRvIHJlc2V0CisqICAgICAgICAgICAgICAgICAgICAgICAtIHdoZW4gZnJlcS4gbnVtIGlzIHNhbWUgYXMgYmVmb3JlLCBsbDEgd2lsbCBjaGVjayB0aGlzIGZsYWcgdG8gcmVzZXQgcGVyaW9kIG9yIG5vdAorKiAgICAgICAgICAgICAgICAgICAgICAgLSBiaXQgMiBmb3IgVG1lYXMgcHJvaGliaXQgbl9sYWVyLCAwIG1lYW5zIG5vdCB0byBhcHBseSBuX2xheWVyCisqICAgICAgICAgICAgICAgICAgICAgICAtIHdoZW4gZnJlcS4gbnVtIGlzIHNhbWUgYXMgYmVmb3JlLCBsbDEgd2lsbCBjaGVjayB0aGlzIGZsYWcgdG8gYXBwbHkgbl9sYXllciBvciBub3QKKyogICBjdXJyZW50X3RpbWUgICAgICAgIC0gY3VycmVudCBpbiBVTDEKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfdWludDggICAgICAgICAgICAgbWVhc19wdXJwb3NlX2JpdG1hcDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICB0aWQ7ICAgCisgICBrYWxfdWludDggICAgICAgICAgICAgdGlja19iaXRtYXA7CisgICBrYWxfdWludDggICAgICAgICAgICAgZnJlcV9udW07CisgICBrYWxfdWludDE2ICAgICAgICAgICAgdF9ocHM7CisgICBrYWxfaW50MzIgICAgICAgICAgICAgaXNfcGVyaW9kX3Jlc2V0X2JtcDsKKyAgIHVtdHNfZmRkX3RpbWVfc3RydWN0ICBjdXJyZW50X3RpbWU7IAorfXVsMV9sbDFfbWVhc3VyZV9yZXFfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgdWwxX2xsMV9zdGFuZGJ5X21lYXN1cmVfZG9uZV9pbmRfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIEZvciBsb3cgcG93ZXIgb3B0aW1pemF0aW9uLCBVTDEgaW5mb3JtcyBMTDEgd2hpY2ggbWVhc3VyZW1lbnQgcHVycG9zZSBpcyAKKyogICBtZWFzdXJlZCBkb25lIGluIGl0cyBwZXJpb2QuIElmIGFsbCBtZWFzdXJlbWVudCBwdXJwb3NlcyBhcmUgbWVhc3VyZWQgZG9uZSwgCisqICAgTEwxIHdpbGwgbm90IHRpY2sgVUwxIGFueW1vcmUgaW4gc2hvcnRlc3QgbWVhc3VyZW1lbnQgcGVyaW9kLgorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIHRpZCAgICAgICAgICAgLSBGb3IgTEwxIHRvIGtub3cgdGhpcyB0aWQgaXMgbWFwcGVkIHRvIHdoaWNoIGdhcCBwYXR0ZXJuIHBlcmlvZCBzZW50IGJlZm9yZQorKiAgIHRpY2tfYml0bWFwICAgLSBiaXQgMCBmb3IgcmFua2luZyBzZWFyY2gsIGJpdCAxIGZvciBwcmlvcml0eSBzZWFyY2guIE9ubHkgb25lIGJpdCB3aWxsIGJlIHNldCBpbiBvbmUgbWVzc2FnZS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfdWludDggICAgICB0aWQ7CisgICBrYWxfdWludDggICAgICB0aWNrX2JpdG1hcDsKK311bDFfbGwxX3N0YW5kYnlfbWVhc3VyZV9kb25lX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBsbDFfdWwxX2dhcF9zZXJ2aWNlX3JlcV9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgTEwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gZW5hYmxlIChkaXNhYmxlKSBhY3RpdmUgUkFUIGdhcCBzZXJ2aWNlIHRvIGdldCAocmVsZWFzZSkgCisqICAgdGhlIGZyZWUgcmFkaW8gZnJlcXVlbmN5IHBlcmlvZCBpbiBVTVRTIEZERC5XaGVuIExMMSBkaXNhYmxlcyBhY3RpdmUgUkFUIGdhcCBzZXJ2aWNlLCAKKyogICBpdCBtZWFucyB0aGF0IFVNVFMgRkREIGNvdWxkIHVzZSBhbGwgUkYgdGltZSBhbHJlYWR5LgorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIGVuYWJsZSAgICAgICAgLSBLQUxfVFJVRSAgOiByZXF1ZXN0IGdhcCBzZXJ2aWNlCisqICAgICAgICAgICAgICAgICAgIEtBTF9GQUxTRSA6IHN0b3AgZ2FwIHNlcnZpY2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfYm9vbCAgICAgIGVuYWJsZTsKK31sbDFfdWwxX2dhcF9zZXJ2aWNlX3JlcV9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICB1bDFfbGwxX2dhcF9zdG9wX2NuZl9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgVUwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gY29uZmlybSBMTDFfVUwxX0dBUF9TVE9QX1JFUSB3aGVuIHRoZXJlIGlzIG5vIGdhcCB1c2FnZSBpbiBVTVRTX0ZERC4uCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgY3VycmVudF90aW1lICAtIGN1cnJlbnQgdGltZSBpbiBVTDEKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICB1bXRzX2ZkZF90aW1lX3N0cnVjdCBjdXJyZW50X3RpbWU7Cit9dWwxX2xsMV9nYXBfc3RvcF9jbmZfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgdWwxX2xsMV9hdXRvX2dhcF9yZXFfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFVMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gcmVxdWVzdCBMTDEgdGhhdCBVTDEgd2FudHMgdG8gdXNlIHRoZSBhdXRvIGdhcCAgZnJvbSAgKHNmbiwgZWNoaXApLiAKKyogICBVTDEgY291bGQgdXNlIHRoaXMgYXV0byBnYXAgYWZ0ZXIgZ2V0dGluZyB0aGUgc3VjY2Vzc2Z1bCBjb25maXJtCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgYXV0b190aW1lICAtIFN0YXJ0IHRpbWUgb2YgYXV0byBnYXAgaW4gVUwxCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgdW10c19mZGRfdGltZV9zdHJ1Y3QgYXV0b190aW1lOworfXVsMV9sbDFfYXV0b19nYXBfcmVxX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGxsMV91bDFfYXV0b19nYXBfY25mX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGNvbmZpcm0gVUwxIGF1dG8gZ2FwIHJlcXVlc3QuIAorKiAgIEFmdGVyIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2UsIFVMMSBjb3VsZCB1c2UgcmVxdWlyZWQgYXV0byBnYXAuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgc3VjY2VzcyAgICAgICAtIEtBTF9UUlVFIDogVUwxIGNvdWxkIHVzZSBhdXRvIGdhcCB0byBzZWFyY2gKKyogICAgICAgICAgICAgICAgICAgS0FMX0ZBTFNFOiBVTDEgY291bGQgbm90IHVzZSBhdXRvIGdhcCB0byBzZWFyY2guIAorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuZCBVTDEgc2hvdWxkIG5vdCByZXF1ZXN0IGF1dG8gZ2FwIHVudGlsIEFVVE9fR0FQX0FWQUlMQUJMRV9JTkQKKyogICB2YWxpZF9wZXJpb2QgIC0gVGhlIGxlbmd0aCBvZiAgYXV0b25vbW91cyBnYXAgYWxsb3dlZCBieSBhY3RpdmUgUkFUIAorKiAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgaXMgdmFsaWQgd2hlbiBzdWNjZXNzID0gS0FMX1RSVUUKKyogICAgICAgICAgICAgICAgICAgVW5pdCA6IGVjaGlwIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGthbF9ib29sICBzdWNjZXNzOworICAga2FsX2ludDMyIHZhbGlkX3BlcmlvZDsKK31sbDFfdWwxX2F1dG9fZ2FwX2NuZl9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBsbDFfdWwxX2F1dG9fZ2FwX2luZF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgTEwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBpbmZvcm0gVUwxIHN0b3BwaW5nIHVzaW5nIFJGIGluIHRoaXMgYXV0byBnYXAgZnJvbSAgIChzZm4sIGVjaGlwKS4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBhdXRvX3RpbWUgIC0gU3RhcnQgdGltZSBvZiBhdXRvIGdhcAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIHVtdHNfZmRkX3RpbWVfc3RydWN0IGF1dG9fdGltZTsKK31sbDFfdWwxX2F1dG9fZ2FwX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICB1bDFfbGwxX2F1dG9fZ2FwX3Jlc19zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgVUwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byByZXNwb25zZSBMTDEgdGhhdCBVTDEgd2lsbC93b24ndCB1c2UgUkYgZnJvbSAKKyogICB0aGUgc3RhcnQgdGltaW5nIG9mIGF1dG8gZ2FwIHdoaWNoIGlzIGluZm9ybWVkIGJ5IExMMV9VTDFfQVVUT19HQVBfSU5ELgorKgorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIHN1Y2Nlc3MgICAgICAgLSBLQUxfVFJVRSA6IFVMMSB3aWxsIG5vdCB1c2UgUkYgZnJvbSB0aGUgc3RhcnRpbmcgdGltZSBvZiBMTDFfVUwxX0FVVE9OT01PSVNfR0FQX0lORAorKiAgICAgICAgICAgICAgICAgICBLQUxfRkFMU0U6IFVMMSBtYXkgdXNlIFJGIGFmdGVyIHN0YXJ0aW5nIHRpbWUgb2YgTEwxX1VMMV9BVVRPTk9NT0lTX0dBUF9JTkQuIAorKiAgIHZhbGlkX3BlcmlvZCAgLSBUaGUgbGVuZ3RoIG9mICBhdXRvbm9tb3VzIGdhcCBhbGxvd2VkIGluIFVMMSAKKyogICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGlzIHZhbGlkIHdoZW4gVUwxIGlzIGFjdGl2ZSByYXQgYW5kIHN1Y2Nlc3MgPSBLQUxfVFJVRQorKiAgICAgICAgICAgICAgICAgICBVbml0IDogZWNoaXAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfYm9vbCAgc3VjY2VzczsKKyAgIGthbF9pbnQzMiB2YWxpZF9wZXJpb2Q7Cit9dWwxX2xsMV9hdXRvX2dhcF9yZXNfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgbGwxX3VsMV9nYXBfbm90aWZ5X2luZF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgTEwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBpbmZvcm0gVUwxIHRoYXQgdGhlIHN0YXJ0aW5nIHRpbWUgYW5kIGxlbmd0aCBvZiBnYXAgcGF0dGVybiB3aGVuIFVMMSBpcyBzdGFuZGJ5IFJBVC4KKyogICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBVTDEgdGhlIGdhcCBwYXR0ZXJuIGNvbmZpZ3VyYXRpb24gd2hlbiBVTDEgaXMgYWN0aXZlIFJBVC4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBzdGFuZGJ5X2dhcCAgIC0gc3RhbmRieSBnYXAgcGF0dGVybgorKiAgIGFjdGl2ZV9nYXAgICAgLSBhY3RpdmUgZ2FwIHBhdHRlcm4gY29uZmlndXJhdGlvbgorKiAgIHRpZCAgICAgICAgICAgLSB0aWQgZm9yIGxhc3Rlc3QgbWVhc19yZXEgb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBsbDFfdWwxX2V4cGFuZF9nYXBfcGF0dGVybl9zdHJ1Y3Qgc3RhbmRieV9nYXA7CisgICBsbDFfdW10c19mZGRfZ2FwX2NvbmZpZ19zdHJ1Y3QgICAgYWN0aXZlX2dhcDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ7ICAgICAgICAvKiBUaWQgZm9yIGxhc3Rlc3QgbWVhc19yZXEgb24sIExMMSB3aWxsIGV4cGFuZCBnYXAgbm90aWZ5IGluZCB3aXRoIHRoaXMgdGlkKi8KK31sbDFfdWwxX2dhcF9ub3RpZnlfaW5kX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIHVsMV9sbDFfZ2FwX3BhdHRlcm5faW5kX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBVTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBMTDEgdGhhdCB0aGUgZnJlZSBSRiBwZXJpb2QgaW4gVUwxIGFzIGdhcCBwYXR0ZXJuLiAKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICB1bDFfY3VycmVudF90aW1lIC0gVWwxIGN1cnJlbnQgdGltZQorKiAgIGlkbGVfZ2FwICAgICAgICAgLSBObyBtYXR0ZXIgdGhlIGxlbmd0aCBpcyBiaWdnZXIgdGhhbiB6ZXJvIG9yIG5vdCwgCisqICAgICAgICAgICAgICAgICAgICAgIFVMMSBzaG91bGQgc2VuZCB0aGlzIG1lc3NhZ2UgYW5kIHNldHMgaXNfZHJ4X3RpY2sgPSBLQUxfVFJVRSBpbiBvbmUgRFJYIHBlcmlvZCBvbmNlLgorKiAgIGZhY2hfZ2FwICAgICAgICAgLSBmYWNoIGdhcCBwYXR0ZXJuCisqICAgZGNoX2dhcCAgICAgICAgICAtIHRncHMgZ2FwIHBhdHRlcm4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICB1bXRzX2ZkZF90aW1lX3N0cnVjdCAgICAgdWwxX2N1cnJlbnRfdGltZTsKKyAgIHVtdHNfZmRkX2lkbGVfZ2FwX3N0cnVjdCBpZGxlX2dhcDsKKyAgIHVtdHNfZmRkX2ZhY2hfZ2FwX3N0cnVjdCBmYWNoX2dhcDsKKyAgIHVtdHNfZmRkX2RjaF9nYXBfc3RydWN0ICBkY2hfZ2FwOworfXVsMV9sbDFfZ2FwX3BhdHRlcm5faW5kX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGxsMV91bDFfc3luY19yZXFfc3RydWN0CisqICAgdWwxX2xsMV9nYXBfc3RvcF9yZXFfc3RydWN0CisqICAgbGwxX3VsMV9nYXBfc3RvcF9jbmZfc3RydWN0CisqICAgbGwxX3VsMV9nYXBfc3RvcF9yZXFfc3RydWN0CisqICAgdWwxX2xsMV9nYXBfc3VzcGVuZF9yZXFfc3RydWN0CisqICAgbGwxX3VsMV9nYXBfc3VzcGVuZF9jbmZfc3RydWN0CisqICAgbGwxX3VsMV9nYXBfc3VzcGVuZF9yZXFfc3RydWN0CisqICAgdWwxX2xsMV9nYXBfc3VzcGVuZF9jbmZfc3RydWN0CisqICAgdWwxX2xsMV9nYXBfcmVzdW1lX2luZF9zdHJ1Y3QKKyogICBsbDFfdWwxX2dhcF9yZXN1bWVfaW5kX3N0cnVjdAorKiAgIHVsMV9sbDFfYXV0b19nYXBfc3RvcF9yZXFfc3RydWN0CisqICAgbGwxX3VsMV9hdXRvX2dhcF9zdG9wX2luZF9zdHJ1Y3QKKyogICB1bDFfbGwxX2F1dG9fZ2FwX3N0b3BfcmVzX3N0cnVjdAorKiAgIGxsMV91bDFfYXV0b19nYXBfc3RvcF9jbmZfc3RydWN0CisqICAgdWwxX2xsMV9hdXRvX2dhcF9lbmRfaW5kX3N0cnVjdAorKiAgIGxsMV91bDFfYXV0b19nYXBfZW5kX2luZF9zdHJ1Y3QKKyogICB1bDFfbGwxX2F1dG9fZ2FwX2F2YWlsYWJsZV9pbmRfc3RydWN0CisqICAgbGwxX3VsMV9hdXRvX2dhcF9hdmFpbGFibGVfaW5kX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBsbDFfdWwxX3N5bmNfcmVxX3N0cnVjdAorKiAgICAgTEwxIHdpbGwgdXNlIHRoaXMgcHJpbWl0aXZlIHRvIGdldCBVTDEgY3VycmVudCBVTVRTIHRpbWluZyBhbmQgbWljcm8gCisqICAgICBzZWNvbmQgY291bnRlciB2YWx1ZSBpbiBib3RoIFVMMSBpbiBhY3RpdmUgYW5kIHN0YW5kYnkgbW9kZS4KKyoKKyogICB1bDFfbGwxX2dhcF9zdG9wX3JlcV9zdHJ1Y3QKKyogICAgIFVMMSB1c2VzIHRoaXMgcHJpbWl0aXZlIHRvIGluZm9ybSBMTDEgdG8gc3RvcCBhbGwgZ2FwIHVzYWdlIGluIHN0YW5kYnkgCisqICAgICBSQVQgd2hlbiBHRVJBTiBHU00gd2FudHMgdG8gY2hhbmdlIGNvbmZpZ3VyYXRpb24gb3Igb3RoZXIgcHVycG9zZXMuCisqCisqICAgbGwxX3VsMV9nYXBfc3RvcF9jbmZfc3RydWN0CisqICAgICBMTDEgdXNlcyB0aGlzIHByaW1pdGl2ZSB0byBjb25maXJtIFVMMSB0aGF0IExMMSBoYXMgYWxyZWFkeSBzdG9wcGVkIAorKiAgICAgYWxsIGdhcCB1c2FnZXMgaW4gc3RhbmRieSBSQVQgYW5kIFVMMSBjb3VsZCB1c2UgYWxsIFJGIHRpbWUuCisqCisqICAgbGwxX3VsMV9nYXBfc3RvcF9yZXFfc3RydWN0CisqICAgICBMTDEgdXNlcyB0aGlzIHByaW1pdGl2ZSB0byBzdG9wIGdhcCB1c2FnZSBpbiBVTVRTIEZERCB3aGVuIFVNVFMgRkREIGlzIHN0YW5kYnkgUkFULgorKgorKiAgIHVsMV9sbDFfZ2FwX3N1c3BlbmRfcmVxX3N0cnVjdAorKiAgICAgVUwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gdGVtcG9yYWwgc3VzcGVuZCBnYXAgdXNhZ2UgaW4gc3RhbmRieSBSQVQgZm9yIGhpZ2hlciBwcmlvcml0eQorKiAgICAgdGFzayBhbmQgZG9lc24ndCBuZWVkIHRvIGdpdmUgbmV3IGdhcCBjb25maWd1cmF0aW9uIGluIGNvbm5lY3Rpb24gbW9kZSB3aGVuIHJlc3VtZWQuCisqCisqICAgbGwxX3VsMV9nYXBfc3VzcGVuZF9jbmZfc3RydWN0CisqICAgICBMTDEgc2VuZHMgdGhpcyBjb25maXJtIG1lc3NhZ2UgdG8gVUwxIGFmdGVyIGFsbCBzdGFuZGJ5IFJBVCBnYXAgdXNhZ2UgYXJlIHN1c3BlbmRlZC4KKyoKKyogICBsbDFfdWwxX2dhcF9zdXNwZW5kX3JlcV9zdHJ1Y3QKKyogICAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gVUwxIHRvIHJlcXVlc3QgdGhhdCBVTDEgc3VzcGVuZHMgUkYgdXNhZ2UgaW1tZWRpYXRlbHkuCisqCisqICAgdWwxX2xsMV9nYXBfc3VzcGVuZF9jbmZfc3RydWN0CisqICAgICBVTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGNvbmZpcm0gTEwxIHRoYXQgVUwxIHdpbGwgbm90IHVzZSBnYXAgZnJvbSAKKyogICAgIG5vdyB0byByZWNlaXZpbmcgcmVzdW1lIGluZGljYXRvcgorKgorKiAgIHVsMV9sbDFfZ2FwX3Jlc3VtZV9pbmRfc3RydWN0CisqICAgICBVTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBMTDEgdGhhdCBVTDEgaGFzIGFscmVhZHkgZmluaXNoZWQgCisqICAgICBoaWdoZXIgcHJpb3JpdHkgdGFzaywgYW5kIHN0YW5kYnkgUkFUIGNvdWxkIHVzZSBnYXAgbm9ybWFsbHkuCisqCisqICAgbGwxX3VsMV9nYXBfcmVzdW1lX2luZF9zdHJ1Y3QKKyogICAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gVUwxIHRvIHJlc3VtZSBVTDEncyBnYXAgdXNhZ2UuIAorKiAgICAgQWZ0ZXIgcmVjZWl2aW5nIHRoaXMgbWVzc2FnZSwgVUwxIGNvdWxkICB1c2UgZ2FwIHBhdHRlcm4gbm9ybWFsbHkuCisqCisqICAgdWwxX2xsMV9hdXRvX2dhcF9zdG9wX3JlcV9zdHJ1Y3QKKyogICAgIFVMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gcmVxdWVzdCBMTDEgdGhhdCBVTDEgd2FudHMgdG8gCisqICAgICByZXRyaWV2ZSBhdXRvIGdhcCBmb3IgaGlnaGVyIHByaW9yaXR5IHRhc2suCisqCisqICAgbGwxX3VsMV9hdXRvX2dhcF9zdG9wX2luZF9zdHJ1Y3QKKyogICAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIFVMMSBvZiBzdG9wcGluZyB1c2luZyBSRiAKKyogICAgIGR1cmluZyBhdXRvIGdhcCBwZXJpb2QuCisqCisqICAgdWwxX2xsMV9hdXRvX2dhcF9zdG9wX3Jlc19zdHJ1Y3QKKyogICAgIFVMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gcmVzcG9uc2UgTEwxIHRoYXQgVUwxIHN0b3BzIAorKiAgICAgYXV0byBnYXAgdXNhZ2UuCisqCisqICAgbGwxX3VsMV9hdXRvX2dhcF9zdG9wX2NuZl9zdHJ1Y3QKKyogICAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gY29uZmlybSB0aGF0IFVMMSBjb3VsZCB1c2UgUkYgbm93LgorKgorKiAgIHVsMV9sbDFfYXV0b19nYXBfZW5kX2luZF9zdHJ1Y3QKKyogICAgIFVMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIExMMSB0aGF0IGF1dG8gZ2FwIHVzYWdlIGlzIGZpbmlzaGVkLgorKiAKKyogICBsbDFfdWwxX2F1dG9fZ2FwX2VuZF9pbmRfc3RydWN0CisqICAgICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBVTDEgdGhhdCBhdXRvIGdhcCB1c2FnZSBpcyBmaW5pc2hlZC4KKyoKKyogICB1bDFfbGwxX2F1dG9fZ2FwX2F2YWlsYWJsZV9pbmRfc3RydWN0CisqICAgICBVTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBMTDEgdGhhdCBhdXRvIGdhcCBpcyBhdmFpbGFibGUgbm93LiBTdGFuZGJ5IFJBVCAKKyogICAgIGNvdWxkIHJlcXVlc3QgYXV0byBnYXAgbm93LiBTdGFuZGJ5IFJBVCBjb3VsZCByZXF1ZXN0IGF1dG8gZ2FwIG5vdworKgorKiAgIGxsMV91bDFfYXV0b19nYXBfYXZhaWxhYmxlX2luZF9zdHJ1Y3QKKyogICAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIFVMMSB0aGF0IGF1dG8gZ2FwIAorKiAgICAgaXMgYXZhaWxhYmxlIG5vdy4gVUwxIGNvdWxkIHJlcXVlc3QgYXV0byBnYXAgbm93LgorKgorKiAgIHVsMV9sbDFfYXV0b19nYXBfdW5hdmFpbGFibGVfaW5kX3N0cnVjdAorKiAgICAgVUwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBpbmZvcm0gTEwxIHRoYXQgYXV0byBnYXAgaXMgdW5hdmFpbGFibGUgbm93LiAKKyogICAgIFN0YW5kYnkgUkFUIGNvdWxkIG5vdCByZXF1ZXN0IGF1dG8gZ2FwIG5vdy4KKyoKKyogICBsbDFfdWwxX2F1dG9fZ2FwX3VuYXZhaWxhYmxlX2luZF9zdHJ1Y3QKKyogICAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIFVMMSB0aGF0IGF1dG8gZ2FwIGlzIHVuYXZhaWxhYmxlIG5vdy4gCisqICAgICBVTDEgY291bGQgbm90IHJlcXVlc3QgYXV0byBnYXAgbm93LgorKgorCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorfWxsMV91bDFfc3luY19yZXFfc3RydWN0LAorIHVsMV9sbDFfZ2FwX3N0b3BfcmVxX3N0cnVjdCwKKyBsbDFfdWwxX2dhcF9zdG9wX2NuZl9zdHJ1Y3QsCisgbGwxX3VsMV9nYXBfc3RvcF9yZXFfc3RydWN0LAorIHVsMV9sbDFfZ2FwX3N1c3BlbmRfcmVxX3N0cnVjdCwKKyBsbDFfdWwxX2dhcF9zdXNwZW5kX2NuZl9zdHJ1Y3QsCisgbGwxX3VsMV9nYXBfc3VzcGVuZF9yZXFfc3RydWN0LAorIHVsMV9sbDFfZ2FwX3N1c3BlbmRfY25mX3N0cnVjdCwKKyB1bDFfbGwxX2dhcF9yZXN1bWVfaW5kX3N0cnVjdCwKKyBsbDFfdWwxX2dhcF9yZXN1bWVfaW5kX3N0cnVjdCwKKyB1bDFfbGwxX2F1dG9fZ2FwX3N0b3BfcmVxX3N0cnVjdCwKKyBsbDFfdWwxX2F1dG9fZ2FwX3N0b3BfaW5kX3N0cnVjdCwKKyB1bDFfbGwxX2F1dG9fZ2FwX3N0b3BfcmVzX3N0cnVjdCwKKyBsbDFfdWwxX2F1dG9fZ2FwX3N0b3BfY25mX3N0cnVjdCwKKyB1bDFfbGwxX2F1dG9fZ2FwX2VuZF9pbmRfc3RydWN0LAorIGxsMV91bDFfYXV0b19nYXBfZW5kX2luZF9zdHJ1Y3QsCisgdWwxX2xsMV9hdXRvX2dhcF9hdmFpbGFibGVfaW5kX3N0cnVjdCwKKyBsbDFfdWwxX2F1dG9fZ2FwX2F2YWlsYWJsZV9pbmRfc3RydWN0LAorIHVsMV9sbDFfYXV0b19nYXBfdW5hdmFpbGFibGVfaW5kX3N0cnVjdCwKKyBsbDFfdWwxX2F1dG9fZ2FwX3VuYXZhaWxhYmxlX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBtbGwxX3VsMV9pbmZvX2RhdGFiYXNlX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBVTDEgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorKgorKiBQQVJBTUVURVJTCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7ICAvKiBtZWFzdXJlIHJlcSovCisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrX2JtcDsgICAgICAgICAgICAvKiB1c2UgdG8gcmVjb3JkIHRpY2sgYml0bWFwKi8KKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmtfdGlja190aWQ7ICAgICAgIC8qIHRpZCBmb3IgcmFuayB0aWNrKi8KKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9fdGlja190aWQ7ICAgICAgIC8qIHRpZCBmb3IgcHJpbyB0aWNrKi8KKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXNfZG9uZV9ibXA7ICAgICAgIC8qIG1lYXN1cmVtZW50IGRvbmUgaW5kIGJpdG1hcCovCisgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19tZWFzX2RvbmVfdXNlZnVsOyAvKiB1bXRzIGZkZCB1c2VzIG1lYXNfZG9uZSBvciBub3QgYnkgY2hlY2tpbmcgbWVhc19wdXJwb3NlX2JtcCovCisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzX3B1cnBvc2VfYml0bWFwOyAvKiByZWNvcmQgdGhlIG1lYXN1cmUgcHVycG9zZSBiaXRtYXAqLworICAgdW10c19mZGRfdGltZV9zdHJ1Y3QgICAgICAgICAgICAgICAgY3VycmVudF90aW1lOyAgICAgICAgLyogdW10cyBmZGQgY3VycmVudCB0aW1lIHdoZW4gcmVxdWVzdCBnYXAgc2VydmljZSovCisgICB1bXRzX2ZkZF90aW1lX3N0cnVjdCAgICAgICAgICAgICAgICBjdXJyZW50X3RpbWVfZnJvbV91bDE7IC8qIFJlY29yZCB0aGUgVUwxIGN1cnJlbnQgdGltZSBjYXJyaWVkIGluIHRoZSBnYXAgcGF0dGVybiBpbmQgKi8KKyAgIC8qIFBhZ2luZyBwZXJpb2QgaW4gYWN0aXZlIFJBVCAqLworICAga2FsX2ludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJ4X2N5Y2xlOyAgICAgICAgICAgLyogODAsMTYwLDMyMCw2NDAsMTI4MCwyNTYwLDUxMjAgVW5pdCA6IG1zKi8KKyAgIC8qIEJ1cnN0IGxlbmd0aCBmb3IgZUZBQ0ggRFJYKi8KKyAgIGthbF9pbnQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cnN0X2xlbmd0aDsgICAgICAgIC8qIDEwLDIwLDQwLDgwLDE2MCBVbml0IDogbXMqLworICAgLyogYXV0byBnYXAgcGFyYSovCisgICB1bXRzX2ZkZF90aW1lX3N0cnVjdCAgICAgICAgICAgICAgICBhdXRvX3RpbWU7ICAgICAgICAgICAvKiBhdXRvIGdhcCB0aW1lKi8gCisgICAvKiBNb2RlIHN0YXR1cyovCisgICBsbDFfYWN0aXZlX3JhdF9tb2RlX3N0YXR1c19lbnVtICAgICBtb2RlX3N0YXR1czsgICAgICAgICAvKiBtb2RlIHN0YXR1cyovICAgCisgICAvKiBHQVAgcGF0dGVybiovCisgICB1bDFfbGwxX2dhcF9wYXR0ZXJuX2luZF9zdHJ1Y3QgICAgICBnYXBfcGF0dGVybjsgICAgICAgICAvKiBHYXAgcGF0dGVybiAqLworICAgLyogR2FwIHJlcXVlc3QgZnJvbSBzdGFuZGJ5IHJhdCBzaG91bGQgZG8gc3luYyBpbiBjb25uZWN0aW9uKi8KKyAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkX3RpbWluZzsgICAgICAgIC8qIEtBTF9UUlVFICA6IHdpdGggdmFsaWQgdGltaW5nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBLQUxfRkFMU0UgOiB3aXRoIGludmFsaWQgdGltaW5nICovCisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzX3JlcV90aWQ7ICAgICAgICAvKiBUaWQgZm9yIGxhc3Rlc3QgbWVhc19yZXEgb24sIExMMSB3aWxsIGV4cGFuZCBnYXAgbm90aWZ5IGluZCB3aXRoIHRoaXMgdGlkKi8KK31tbGwxX3VsMV9pbmZvX2RhdGFiYXNlX3N0cnVjdDsKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLypfX1BPUF9GU01fXyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xPQkFMIEZVTkNUSU9OUworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdGlja191bDFfZ2FwX2V4cGFuc2lvbgorKiBERVNDUklQVElPTgorKiAgIHRpY2sgdWwxIHRvIGV4cGFuZCBnYXAgd2hlbiBzeW5jIGRvbmUKKyoKKyogUEFSQU1FVEVSUworKiAgIG5vbmUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RpY2tfdWwxX2dhcF9leHBhbnNpb24odm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdWwxX2F1dG9fZ2FwX2F2YWlsYWJsZV9pbmQKKyogREVTQ1JJUFRJT04KKyogICBsbDEgc2VuZHMgYXV0byBnYXAgYXZhaWxhYmxlIGluZCB0byBVTVRTIEZERCBub3cKKyoKKyogUEFSQU1FVEVSUworKiAgIGthbF9ib29sIGF2YWlsYWJsZQorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdWwxX2F1dG9fZ2FwX2F2YWlsYWJsZV9pbmQoa2FsX2Jvb2wgYXZhaWxhYmxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV91bDFfYXV0b19nYXBfY25mCisqIERFU0NSSVBUSU9OCisqICAgbGwxIHNlbmRzIGF1dG8gZ2FwIGNuZiB0byBVTVRTX0ZERCBub3cKKyoKKyogUEFSQU1FVEVSUworKiAgIHN1Y2Nlc3MgLSBzdWNjZXNzIG9yIG5vdAorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdWwxX2F1dG9fZ2FwX2NuZihrYWxfYm9vbCBzdWNjZXNzLGthbF9pbnQzMiB2YWxpZF9wZXJpb2QpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3VsMV9hdXRvX2dhcF9lbmRfaW5kCisqIERFU0NSSVBUSU9OCisqICAgbGwxIHNlbmRzIGF1dG8gZ2FwIGVuZCBpbmQgdG8gVU1UUyBGREQgbm93CisqCisqIFBBUkFNRVRFUlMKKyogICBub25lCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV91bDFfYXV0b19nYXBfZW5kX2luZCh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV91bDFfYXV0b19nYXBfaW5kCisqIERFU0NSSVBUSU9OCisqICAgbGwxIHNlbmRzIGF1dG8gZ2FwIGVuZCBpbmQgdG8gVU1UUyBGREQgbm93CisqCisqIFBBUkFNRVRFUlMKKyogICBmZGRfdGltZSAtIGF1dG8gdGltZQorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdWwxX2F1dG9fZ2FwX2luZCh1bXRzX2ZkZF90aW1lX3N0cnVjdCBmZGRfdGltZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdWwxX2F1dG9fZ2FwX3N0b3BfY25mCisqIERFU0NSSVBUSU9OCisqICAgbGwxIHNlbmRzIGF1dG8gZ2FwIHN0b3AgY25mIHRvIFVNVFNfRkREIG5vdworKgorKiBQQVJBTUVURVJTCisqICAgTm9uZQorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdWwxX2F1dG9fZ2FwX3N0b3BfY25mKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3VsMV9hdXRvX2dhcF9zdG9wX2luZAorKiBERVNDUklQVElPTgorKiAgIGxsMSBzZW5kcyBhdXRvIGdhcCBzdG9wIGluZCB0byBVTVRTX0ZERCBub3cKKyoKKyogUEFSQU1FVEVSUworKiAgIE5vbmUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3VsMV9hdXRvX2dhcF9zdG9wX2luZCh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX3VsMV9hdXRvX3RpbWVfbWludXMKKyogREVTQ1JJUFRJT04KKyogIEFkZCBtb3JlIHJmIG1hcmdpbiBmb3IgYW55IHN0YW5kYnkgcmF0IHdoaWNoIHdpbGwgZW50ZXIgc2xlZXAgZHVyaW5nIGF1dG9ub21vdXMgc2VyY2ggcHJvY2VkdXJlCisqICBBc3N1bWUgbWFyZ2luIGlzIHNtYWxsZXIgdGhhbiBvbmUgc2ZuCisqIFBBUkFNRVRFUlMKKyogICB1bXRzX2ZkZF90aW1lX3N0cnVjdCoKKyogICBrYWxfaW50MzIgICAgICAgICAgICAgIC0gbW9yZSBSRiBtYXJnaW4gKHJlY292ZXJ5IGZyb20gc2xlZXApLgorKiBSRVRVUk5TCisqICB2b2lkCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV91bDFfYXV0b190aW1lX21pbnVzKHVtdHNfZmRkX3RpbWVfc3RydWN0KiB0aW1lLCBrYWxfaW50MzIgZWNoaXApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3VsMV9leHBhbmRfYWN0aXZlX2dhcF9wYXR0ZXJuX2luZAorKiBERVNDUklQVElPTgorKiAgIGxsMSBzZW5kcyBhY3RpdmUgZ2FwIHBhdHRlcm4gaW5kIHRvIFVNVFNfRkREIG5vdworKgorKiBQQVJBTUVURVJTCisqICAgc3RhcnRfdGltZSAtIFZhbGlkIHRpbWUgb2YgZ2FwIHBhdHRlcm4gaW4gYWN0aXZlIFJBVAorKiAgIHVzZV9udW0gICAgLSBDb250aW51b3VzIGdhcCBudW1iZXIgY291bGQgYmUgdXNlZCBpbiBhY3RpdmUgUkFUKEVhY2ggRk1PIGN5Y2xlID0gMTAqTV9SRVAqTlRUSSBhcyBhIHVuaXQpCisqICAgc2tpcF9udW0gICAtIFNraXAgbnVtYmVyIGluIGFjdGl2ZSBSQVQgKEVhY2ggRk1PIGN5Y2xlID0gMTAqTV9SRVAqTlRUSSBhcyBhIHVuaXQpCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV91bDFfZXhwYW5kX2FjdGl2ZV9nYXBfcGF0dGVybl9pbmQodW10c19mZGRfdGltZV9zdHJ1Y3QqIHN0YXJ0X3RpbWUsa2FsX3VpbnQ4IHVzZV9udW0sa2FsX3VpbnQ4IHNraXBfbnVtKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV91bDFfZXhwYW5kX2dhcF9wYXR0ZXJuX2luZAorKiBERVNDUklQVElPTgorKiAgIGxsMSBzZW5kcyBhdXRvIGdhcCBhdmFpbGFibGUgaW5kIHRvIFVNVFMgRkREIG5vdworKgorKiBQQVJBTUVURVJTCisqICAgc3RhbmRieV9nYXAgLSBnYXAgcGF0dGVybiBmb3IgdW10cyBmZGQKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3VsMV9leHBhbmRfZ2FwX3BhdHRlcm5faW5kKGxsMV91bDFfZXhwYW5kX2dhcF9wYXR0ZXJuX3N0cnVjdCogc3RhbmRieV9nYXApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3VsMV9nYXBfcmVzdW1lX2luZAorKiBERVNDUklQVElPTgorKiAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gVUwxIHRvIHJlc3VtZSBVTDEncyBnYXAgdXNhZ2UuIAorKiAgIEFmdGVyIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2UsIFVMMSBjb3VsZCAgdXNlIGdhcCBwYXR0ZXJuIG5vcm1hbGx5LgorKgorKiBQQVJBTUVURVJTCisqICAgbm9uZQorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdWwxX2dhcF9yZXN1bWVfaW5kKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3VsMV9nYXBfc2VydmljZV9yZXEKKyogREVTQ1JJUFRJT04KKyogICBsbDEgc2VuZHMgZ2FwIHNlcnZpY2UgcmVxIHRvIFVNVFNfRkREIG5vdworKgorKiBQQVJBTUVURVJTCisqICAgZW5hYmxlICAgLSBLQUxfVFJVRSAgOiB0dXJuIG9uIGdhcCBzZXJ2aWNlIAorKiAgICAgICAgICAgIC0gS0FMX0ZBTFNFIDogdHVybiBvZmYgZ2FwIHNlcnZpY2UKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3VsMV9nYXBfc2VydmljZV9yZXEoa2FsX2Jvb2wgZW5hYmxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV91bDFfZ2FwX3N0b3BfY25mCisqIERFU0NSSVBUSU9OCisqICAgTEwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gY29uZmlybSBVTDEgdGhhdCBMTDEgaGFzIGFscmVhZHkgc3RvcHBlZCAKKyogICBhbGwgZ2FwIHVzYWdlcyBpbiBzdGFuZGJ5IFJBVCBhbmQgVUwxIGNvdWxkIHVzZSBhbGwgUkYgdGltZS4KKyoKKyogUEFSQU1FVEVSUworKiAgIE5PTkUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3VsMV9nYXBfc3RvcF9jbmYodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdWwxX2dhcF9zdG9wX3JlcQorKiBERVNDUklQVElPTgorKiAgIExMMSB1c2VzIHRoaXMgcHJpbWl0aXZlIHRvIHN0b3AgZ2FwIHVzYWdlIGluIFVNVFMgRkREIHdoZW4gVU1UUyBGREQgaXMgc3RhbmRieSBSQVQuCisqCisqIFBBUkFNRVRFUlMKKyogICBOT05FCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV91bDFfZ2FwX3N0b3BfcmVxKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3VsMV9nYXBfc3VzcGVuZF9jbmYKKyogREVTQ1JJUFRJT04KKyogICBMTDEgc2VuZHMgdGhpcyBjb25maXJtIG1lc3NhZ2UgdG8gVUwxIGFmdGVyIGdhcCB1c2FnZSBpbiBzdGFuZGJ5IFJBVCBpcyBzdXNwZW5kZWQuCisqICAgVUwxIGNvdWxkIHVzZSBSRiBvbmx5IGFmdGVyIGdldHRpbmcgdGhpcyBtZXNzYWdlLgorKgorKiBQQVJBTUVURVJTCisqICAgTk9ORQorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdWwxX2dhcF9zdXNwZW5kX2NuZih2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV91bDFfZ2FwX3N1c3BlbmRfcmVxCisqIERFU0NSSVBUSU9OCisqICAgTEwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gc3VzcGVuZCBnYXAgdXNhZ2UgaW4gVU1UUyBGREQgd2hlbiBVTVRTIEZERCBpcyBzdGFuZGJ5IFJBVC4KKyoKKyogUEFSQU1FVEVSUworKiAgIE5PTkUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3VsMV9nYXBfc3VzcGVuZF9yZXEodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgbWxsMV91bDFfZ2V0X2F1dG9fdGltZQorKiBERVNDUklQVElPTgorKiAgIHJldHVybiBhdXRvIHRpbWUgZnJvbSBVTDEKKyoKKyogUEFSQU1FVEVSUworKiAgIE5vbmUKKyogUkVUVVJOUworKiAgdW10c19mZGRfdGltZV9zdHJ1Y3QgYXV0b190aW1lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VtdHNfZmRkX3RpbWVfc3RydWN0IG1sbDFfdWwxX2dldF9hdXRvX3RpbWUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdWwxX2dldF9jdXJyZW50X3RpbWUKKyogREVTQ1JJUFRJT04KKyogICBsbDEgZ2V0cyBjdXJyZW50IHRpbWUgKyBhaGVhZCBtYXJnaW4gdG8gZXhwYW5kIGdhcAorKgorKiBQQVJBTUVURVJTCisqICAgdW10c19mZGRfdGltZSAtIHN0YXJ0IHRpbWUgb2YgZXhwYW5zaW9uIHBlcmlvZAorKiAgIGthbF9ib29sIGlzX2FoZWFkX3RpbWUKKyogICAgICAgICBUUlVFIDogYWR2YW5jZSBldXRyYW5fdGltZSB3aXRoIHRoZSBwcmVkZWZpbmVkIGFoZWFkX3RpbWUKKyogICAgICAgICBGQUxTRTogZG9uJ3QgYWR2YW5jZSBldXRyYW5fdGltZSB3aXRoIHRoZSBwcmVkZWZpbmVkIGFoZWFkX3RpbWUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3VsMV9nZXRfY3VycmVudF90aW1lKHVtdHNfZmRkX3RpbWVfc3RydWN0KiBmZGRfdGltZSwga2FsX2Jvb2wgaXNfYWhlYWRfdGltZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdWwxX2dldF9lZmFjaF9kcnhfdGlja19jb3VudAorKiBERVNDUklQVElPTgorKiAgIGxsMSBnZXRzIHJhbmsgdGljayBiYXNlIHdoZW4gdW10cyBmZGQgaW4gZWZhY2ggZHJ4IG1vZGUKKyoKKyogUEFSQU1FVEVSUworKiAgIG5vbmUKKyogUkVUVVJOUworKiAgIGthbF91aW50MzIgY291bnQKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX3VpbnQzMiBtbGwxX3VsMV9nZXRfZWZhY2hfZHJ4X3RpY2tfY291bnQodm9pZCk7CisKKyNpZmRlZiBfX0xURV9SQVRfXworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX3VsMV9nZXRfZWwxX3JmX21hcmdpbgorKiBERVNDUklQVElPTgorKiAgVUwxIGdldHMgRUwxIFJGIG1hcmdpbiBpbiBjdXJyZW50IHN0YXRlCisqCisqIFBBUkFNRVRFUlMKKyogIGhlYWQgICAgICAtIGhlYWRlcl9tYXJnaW4KKyogIHRhaWwgICAgICAtIHRhaWxfbWFyZ2luCisqIFJFVFVSTlMKKyogIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3VsMV9nZXRfZWwxX3JmX21hcmdpbihrYWxfaW50MzIqIGhlYWQsa2FsX2ludDMyKiB0YWlsKTsKKyNlbmRpZiAvKl9fTFRFX1JBVF9fKi8KKworI2lmZGVmIF9fR1NNX1JBVF9fCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfdWwxX2dldF9nbDFfcmZfbWFyZ2luCisqIERFU0NSSVBUSU9OCisqICBVTDEgZ2V0cyBHTDEgUkYgbWFyZ2luIGluIGN1cnJlbnQgc3RhdGUKKyoKKyogUEFSQU1FVEVSUworKiAgaGVhZCAgICAgIC0gaGVhZGVyX21hcmdpbgorKiAgdGFpbCAgICAgIC0gdGFpbF9tYXJnaW4KKyogUkVUVVJOUworKiAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdWwxX2dldF9nbDFfcmZfbWFyZ2luKGthbF9pbnQzMiogaGVhZCxrYWxfaW50MzIqIHRhaWwpOworI2VuZGlmIC8qX19HU01fUkFUX18qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfdWwxX2dldF9tb2RlX3N0YXR1cworKiBERVNDUklQVElPTgorKiAgIHJldHVybiBtb2RlIHN0YXR1cyBmcm9tIFVMMQorKgorKiBQQVJBTUVURVJTCisqICAgTm9uZQorKiBSRVRVUk5TCisqICBsbDFfYWN0aXZlX3JhdF9tb2RlX3N0YXR1c19lbnVtIG1vZGVfc3RhdHVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2xsMV9hY3RpdmVfcmF0X21vZGVfc3RhdHVzX2VudW0gbWxsMV91bDFfZ2V0X21vZGVfc3RhdHVzKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfdWwxX2dldF90X2Fib3J0CisqIERFU0NSSVBUSU9OCisqICAgVGlkZW50aWZ5LGdzbSAvIFRyZWNvbmZpcm0sZ3NtIHVpbnQ6IG1zCisqCisqIFBBUkFNRVRFUlMKKyogICB0dGkgICAgLSBpbiBtcworKiAgIHRfbWVhcyAtIGluIG1zCisqICAgCisqIFJFVFVSTlMKKyogIGthbF91aW50MzIgdF9hYm9ydDsKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX3VpbnQzMiBtbGwxX3VsMV9nZXRfdF9hYm9ydChrYWxfdWludDMyIHR0aSwga2FsX3VpbnQzMiB0X21lYXMsIGthbF9ib29sIGlzX2lkZW50aWZ5KTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfdWwxX2dldF90X2Fib3J0X2Zvcl9lZmFjaF9kcngKKyogREVTQ1JJUFRJT04KKyogICBUaWRlbnRpZnksZ3NtIC8gVHJlY29uZmlybSxnc20gdWludDogbXMKKyoKKyogUEFSQU1FVEVSUworKiAga2FsX2Jvb2wgaXNfaWRlbnRpZnkKKyogICAKKyogUkVUVVJOUworKiAga2FsX3VpbnQzMiB0X2Fib3J0OworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfdWludDMyIG1sbDFfdWwxX2dldF90X2Fib3J0X2Zvcl9lZmFjaF9kcngoa2FsX2Jvb2wgaXNfaWRlbnRpZnkpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfdWwxX2dldF90aWNrX2NvdW50CisqIERFU0NSSVBUSU9OCisqICAgVUwxIHRpY2sgbnVtYmVyCisqCisqIFBBUkFNRVRFUlMKKyogICBpc19wcmlvX3NlYXJjaCAtIEtBTF9GQUxTRSA6IGxsMV9tYWluIHdhbnRzIHRvIGdldCBtZWFzLiB0aWNrCisqICAgICAgICAgICAgICAgICAgICBLQUxfVFJVRSAgOiBsbDFfbWFpbiB3YW50cyB0byBnZXQgcHJpby4gdGljaworKiAgIHRfaHBzICAgICAgICAgIC0gNjAgKHVpbnQgOiBzZWNvbmQpCisqICAgCisqIFJFVFVSTlMKKyogIGthbF91aW50MzIgY291bnQ7CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF91aW50MzIgbWxsMV91bDFfZ2V0X3RpY2tfY291bnQoa2FsX2Jvb2wgaXNfcHJpb19zZWFyY2gsIGthbF91aW50MTYgdF9ocHMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3VsMV9nZXRfdGltaW5nX3N0YXR1cworKiBERVNDUklQVElPTgorKgorKiBQQVJBTUVURVJTCisqIFJFVFVSTlMKKyogICBrYWxfYm9vbCAgLSB2YWxpZF90aW1pbmcgS0FMX1RSVUUgIDogd2l0aCB2YWxpZCB0aW1pbmcgCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtBTF9GQUxTRSA6IHdpdGggaW52YWxpZCB0aW1pbmcgCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIG1sbDFfdWwxX2dldF90aW1pbmdfc3RhdHVzKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfdWwxX2dldF91bDFfcmZfbWFyZ2luCisqIERFU0NSSVBUSU9OCisqICBVTDEgZ2V0cyBSRiBtYXJnaW4gaW4gY3VycmVudCBzdGF0ZQorKgorKiBQQVJBTUVURVJTCisqICBoZWFkICAgICAgLSBoZWFkZXJfbWFyZ2luCisqICB0YWlsICAgICAgICAgLSB0YWlsX21hcmdpbgorKiBSRVRVUk5TCisqICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV91bDFfZ2V0X3VsMV9yZl9tYXJnaW4oa2FsX2ludDMyKiBoZWFkLGthbF9pbnQzMiogdGFpbCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdWwxX2lzX2JlZm9yZV9kZXN0X3RpbWUKKyogREVTQ1JJUFRJT04KKyogICBjaGVjayBpZiBnYXAgc3RhcnQgdGltZSBpcyBiZWZvcmUgZGVzdCB0aW1lLAorKgorKiBQQVJBTUVURVJTCisqICAgc3JjICAgICAgLSBnYXAgc3RhcnQgdGltZSBzZm4KKyogICBkZXN0ICAgICAtIGV4cGFuZCBzdGFydCB0aW1lIHNmbgorKiBSRVRVUk5TCisqICAga2FsX2Jvb2wgLSBLQUxfVFJVRSAgOiBtZWFucyB0aGF0IHNyYyBpcyBiZWZvcmUgZGVzdCB0aW1lCisqICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGUgc3JjX3RpbWUgaXMgYmVmb3JlIHRoZSBkZXN0X3RpbWUuIFJldHVybiBmYWxzZSBpZiB0aGV5IGFyZSBlcXVhbC4KKyogICAgICAgICAgICAgIEtBTF9GQUxTRSA6IG1lYW5zIHRoYXQgZGVzdCBpcyBiZWZvcmUgc3JjIHRpbWUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgbWxsMV91bDFfaXNfYmVmb3JlX2Rlc3RfdGltZShrYWxfaW50MzIgc3JjLGthbF9pbnQzMiBkZXN0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV91bDFfb2Zmc2V0X3RvX2Ztb19hY3RfdGltZQorKiBERVNDUklQVElPTgorKiAgIGNhbGN1bGF0ZSB0aGUgdGltaW5nIG9mZnNldCBiZXR3ZWVuIEZNTyBhY3RpdmF0aW9uIHRpbWUgYW5kIGV4cGFuZCBzdGFydCB0aW1lLgorKgorKiBQQVJBTUVURVJTCisqICAgc3JjICAgICAgLSBnYXAgc3RhcnQgdGltZSBzZm4KKyogICBkZXN0ICAgICAtIGV4cGFuZCBzdGFydCB0aW1lIHNmbgorKiBSRVRVUk5TCisqICAga2FsX2ludDMyIC0gICgtMSkgOiBGTU8gYWN0aXZhdGlvbiB0aW1lIGZhbGwgaW4gdGhlIGR1cmF0aW9uIG9mIDQ4MG1zIGV4cGFuZCBwZXJpb2QuCisqICAgICAgICAgICAgICAgICAgICAgb3RoZXIgcG9zaXRpdmUgdmFsdWU6ICB0aGUgb2Zmc2V0IGJldHdlZW4gTU8gYWN0aXZhdGlvbiB0aW1lIGFuZCBleHBhbmQgc3RhcnQgdGltZS4KKyoKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2ludDMyIG1sbDFfdWwxX29mZnNldF90b19mbW9fYWN0X3RpbWUoa2FsX2ludDMyIHNyYywgdW10c19mZGRfdGltZV9zdHJ1Y3QqIGRlc3QpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfdWwxX2lzX2xvd2VyX3B3cl9vbgorKiBERVNDUklQVElPTgorKiAgIENoZWNrIGlmIHVsMSBpcyBsb3cgcHdyIG9uCisqCisqIFBBUkFNRVRFUlMKKyogICAKKyogUkVUVVJOUworKiAga2FsX2Jvb2wgLSBLQUxfRkFMU0UgOiBtZWFzdXJlbWVudCBpcyBub3QgZmluaXNoZWQgYW5kIG5lZWQgZ2FwIGluIHRoaXMgcGVyaW9kIAorKiAgICAgICAgICAgICBLQUxfVFJVRSAgOiBtZWFzdXJlbWVudCBpcyBmaW5pc2hlZCBhbmQgZG9lc250IG5lZWQgZ2FwIGluIHRoaXMgcGVyaW9kCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIG1sbDFfdWwxX2lzX2xvd2VyX3B3cl9vbih2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV91bDFfbW9kZV9zdGF0dXNfdXBkYXRlX2luZAorKiBERVNDUklQVElPTgorKiAgIFRoaXMgbWVzc2FnZSBpcyBzZW50IHRvIFVMMSBmb3IgaW5mb3JtaW5nIHRoYXQgbW9kZSBzdGF0dXMgb2YgYWN0aXZlIFJBVCB3aGVuIFVMMSBpcyBzdGFuZGJ5IFJBVC4gCisqICAgVGhpcyBtZXNzYWdlIHNob3VsZCBiZSB1cGRhdGVkIGZvciBVTDEgaW4gc3RhbmRieSB3aGVuIGFueSBtb2RlIHN0YXR1cyBjaGFuZ2VkIGluIGFjdGl2ZSBSQVQuCisqCisqIFBBUkFNRVRFUlMKKyogICBzdGF0dXMgLSBtb2RlIHN0YXR1cyBpbiBhY3RpdmUgUkFUIAorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdWwxX21vZGVfc3RhdHVzX3VwZGF0ZV9pbmQobGwxX2FjdGl2ZV9yYXRfbW9kZV9zdGF0dXNfZW51bSBzdGF0dXMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3VsMV9zZXRfdGltaW5nX3N0YXR1cworKiBERVNDUklQVElPTgorKgorKiBQQVJBTUVURVJTCisqICAgZmxhZyAgICAgLSBzZXQgdmFsaWRfdGltaW5nID0gZmxhZworKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdWwxX3NldF90aW1pbmdfc3RhdHVzKGthbF9ib29sIGZsYWcpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3VsMV9zeW5jX3RpbWVfcmVxCisqIERFU0NSSVBUSU9OCisqICAgV2hlbiB0aW1pbmcgc3luY2hyb25pemF0aW9uIHByb2NlZHVyZSBpcyB0cmlnZ2VyZWQsIG1sbDEgd2lsbCBkZWNpZGUgd2hpY2ggcmF0IHNob3VsZCBkbyAKKyogICB0aW1pbmcgc3luY2hyb25pemF0aW9uIGJhc2VkIG9uIHRoZSByZXN1bHQgb2YgZ19sbDFfZmxpZ2h0X3JhdHx8IGdfbGwxX3N0YW5kYnlfcmF0IHx8IGdfbGwxX2FjdGl2ZV9yYXQuCisqCisqIFBBUkFNRVRFUlMKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3VsMV9zeW5jX3RpbWVfcmVxKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfdWwxX3RpbWVfYWRkCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gYWRkIGVjaGlwcyB0byB0aW1lCisqCisqIFBBUkFNRVRFUlMKKyogICB0aW1lICAgICAgIC0gYmFzaWMgdGltZQorKiAgIGVjaGlwcyAgICAgLSBlY2hpcHMKKyogUkVUVVJOUworKiAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdWwxX3RpbWVfYWRkKCB1bXRzX2ZkZF90aW1lX3N0cnVjdCogdGltZSwga2FsX2ludDMyIGVjaGlwcyk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV91bDFfdXBkYXRlX2N1cnJlbnRfdGltZQorKiBERVNDUklQVElPTgorKiAgIGxsMSB1cGRhdGVzIGN1cnJlbnQgdGltZSBhZnRlciB0aW1pbmcgc3luYy4gZG9uZQorKgorKiBQQVJBTUVURVJTCisqICAgdW10c19mZGRfdGltZSAtIGN1cnJlbnQgdGltZQorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdWwxX3VwZGF0ZV9jdXJyZW50X3RpbWUodW10c19mZGRfdGltZV9zdHJ1Y3QqIGZkZF90aW1lKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENBTEwgRlVOQ1RJT04gUFJPVE9UWVBFCisqICAgbWxsMV91bXRzX2ZkZF9oYW5kbGVyKCkKKyoKKyogREVTQ1JJUFRJT04KKyogICBGdW5jdGlvbiB0byBoYW5kbGUgdGhlIHByaW1pdGl2ZSBmcm9tIFVMMS4KKyoKKyogUEFSQU1FVEVSUworKiAgIGN1cnJlbnRfaWxtIC0gcHJpbWl0aXZlIGZyb20gVUwxLgorKgorKiBSRVRVUk4KKyogICBOb25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV91bXRzX2ZkZF9oYW5kbGVyKHZvaWQgKnB0cl9pbG0pOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfdWwxX2luZm9faW5pdAorKiBERVNDUklQVElPTgorKiAgSW5pdGlhbGl6ZSB1bDEgaW50ZXJuYWwgZ2xvYmFsIHZhcmlhYmxlCisqCisqIFBBUkFNRVRFUlMKKyogIG5vbmUKKyogUkVUVVJOUworKiAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfZmRkX2luZm9faW5pdCh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV91bDFfZ2FwX3BhdHRlcm5fdGltaW5nX2NoZWNraW5nCisqIERFU0NSSVBUSU9OCisqICAgY2hlY2sgaWYgdGhlIHBlbmRpbmcgZ2FwIGlzIG91dCBvZiBkYXRlIG9yIG5vdAorKgorKiBQQVJBTUVURVJTCisqICAgdW10c19mZGRfdGltZSAgIC0gdWwxIHRpbWluZyBjb3JyZXNwb25kIHRvIHNvbWUgc3RhbmRieSByYXQncyB0aW1pbmcgaW5kaWNhdGVkIGluIG1lYXN1cmUgcmVxdWVzdAorKiBSRVRVUk5TCisqICAgVFJVRSAgIC0gdGhlIHBlbmRpbmcgZ2FwIGhhcyBub3QgYmVlbiBvdXQgb2YgZGF0ZQorKiAgIEZBTFNFICAgLSB0aGUgcGVuZGluZyBnYXAgaGFzIGJlZW4gb3V0IG9mIGRhdGUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgbWxsMV91bDFfZ2FwX3BhdHRlcm5fdGltaW5nX2NoZWNraW5nKHVtdHNfZmRkX3RpbWVfc3RydWN0IHVtdHNfZmRkX3RpbWUpOworCisjZW5kaWYgLypfTUxMMV9VTVRTX0ZERF9IKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21sbDFfdW10c190ZGQuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbGwxX3VtdHNfdGRkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiZDNhNgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbGwxX3VtdHNfdGRkLmgKQEAgLTAsMCArMSwxMjA5IEBACisjaWZuZGVmIF9NTEwxX1VNVFNfVEREX0gKKyNkZWZpbmUgX01MTDFfVU1UU19URERfSAorCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiIC8qZm9yIExPQ0FMX1BBUkFfSERSKi8KKyNpbmNsdWRlICJtbGwxX2NvbW1vbi5oIgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVGSU5JVElPTlMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNT19QVVJQT1NFX05VTSAgICAgICAgICAgICAxMiAvKiBVbmRlZmluZWQgKi8KKyNkZWZpbmUgVU1UU19URERfU0VTU0lPTl9JTl9QRVJJT0QgOCAgLyogYWxpZ24gZ3NtLCBMVEUgb25seSBuZWVkIDYgZm9yIGdwMC9ncDEgKi8KKyNkZWZpbmUgVU1UU19URERfU0NIRURVTEVfREVMQVkgICAgMCAvKiB1c2VkIHRvIHBvc3Rwb25lIGF2YWlsYWJsZSBnYXAgc3RhcnQgdGltZSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5VTUVSQVRJT05TCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBFTlVNRVJBVElPTgorKiAgICB0bDFfbGwxX3JhdF9zdGF0dXNfZW51bQorKiBERVNDUklQVElPTlMKKyogICAgVXNlZCB0byBpZGVudGlmeSB0aGUgc3RhdHVzIGluIFVNVFMgVEREIFJBVC4KKyogTk9URQorKiAgICBhbnkgbW9kaWZpY2F0aW9uIHNob3VsZCBzeW5jLiB3aXRoIGxsMV9yYXRfc3RhdHVzX2VudW0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtCit7CisgIFRMMV9MTDFfUkFUX0ZMSUdIVCA9MCwKKyAgVEwxX0xMMV9SQVRfU1RBTkRCWSwKKyAgVEwxX0xMMV9SQVRfQUNUSVZFLAorICBUTDFfTEwxX1JBVF9OVU0KK30gdGwxX2xsMV9yYXRfc3RhdHVzX2VudW07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUlVDVFVSRVMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIHVtdHNfdGRkX3RpbWVfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFVNVFMgVEREIHN5c3RlbSB0aW1pbmcgYmFzZQorKgorKiBQQVJBTUVURVJTCisqICAgc3ViX3NmbiAgIC0gVU1UUyBUREQgc3ViLXN5c3RlbSBmcmFtZSBudW1iZXIgKDB+ODE5MSksIDEgc3ViX3NmbiA9IDY0MDAqOC4KKyogICBlY2hpcHMgICAgLSBVTVRTIFRERCBFY2hpcCAoMH41MTE5OSkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAga2FsX2ludDMyICAgICAgICBzdWJfc2ZuOworICBrYWxfaW50MzIgICAgICAgIGVjaGlwczsKK311bXRzX3RkZF90aW1lX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIHVtdHNfdGRkX21vX2FsbG9jYXRpb25fc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFVNVFMgVEREIG1lYXN1cmVtZW50IG9jY2FzaW9uIGFsbG9jYXRpb24gc3RydWN0dXJlIGluIHN1YmZyYW1lLgorKgorKiBQQVJBTUVURVJTCisqICAgcGVyaW9kICAgICAgLSBNZWFzdXJlbWVudCBvY2Nhc2lvbiBwZXJpb2QKKyogICBsZW5ndGggICAgICAtIFRoZSBtZWFzdXJlbWVudCBvY2Nhc2lvbiBsZW5ndGggc3RhcnRpbmcgZnJvbSB0aGUgT2Zmc2V0CisqICAgb2Zmc2V0ICAgICAgLSBUaGUgbWVhc3VyZW1lbnQgb2NjYXNpb24gcG9zaXRpb24gaW4gdGhlIG1lYXN1cmVtZW50IHBlcmlvZC4KKyogICBzbG90X2JtcCAgICAtIEJpdCAwIGlzIGZvciB0aW1lc2xvdCAwL0R3UFRTL0dQIChMTDEgd2lsbCBub3QgZXhwYW5kIFVwUFRTIGZvciBUQSBvZiBzbG90IDEpLgorKiAgICAgICAgICAgICAgICAgQml0IDEgaXMgZm9yIHRpbWVzbG90IDEvVXBQVFMuCisqICAgICAgICAgICAgICAgICBCaXQgMiBpcyBmb3IgdGltZXNsb3QgMiChSyBCaXQgNiBpcyBmb3IgdGltZXNsb3QgNi4KKyogICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSAxIG9mIGEgYml0IG1lYW5zIHRoZSBjb3JyZXNwb25kaW5nIHRpbWVzbG90IGlzIHVzZWQgZm9yIG1lYXN1cmVtZW50LgorKiAgICAgICAgICAgICAgICAgQml0IDAgaXMgdGhlIGZpcnN0L3JpZ2h0IG1vc3QgYml0IG9mIHRoZSBiaXQgc3RyaW5nLgorKiAgIHB1cnBvc2VfYm1wIC0gTWVhc3VyZW1lbnQgUHVycG9zZS4gCisqICAgICAgICAgICAgICAgICBCaXQgMCBpcyBmb3IgRS1VVFJBIG1lYXN1cmVtZW50LgorKiAgICAgICAgICAgICAgICAgQml0IDEgaXMgZm9yIEludGVyLWZyZXF1ZW5jeSBtZWFzdXJlbWVudC4KKyogICAgICAgICAgICAgICAgIEJpdCAyIGlzIGZvciBCU0lDIHJlLWNvbmZpcm1hdGlvbi4KKyogICAgICAgICAgICAgICAgIEJpdCAzIGlzIGZvciBJbml0aWFsIEJTSUMgaWRlbnRpZmljYXRpb24uCisqICAgICAgICAgICAgICAgICBCaXQgNCBpcyBmb3IgR1NNIGNhcnJpZXIgUlNTSSBtZWFzdXJlbWVudC4KKyogICAgICAgICAgICAgICAgIEJpdCA1IGlzIGZvciBEcm9wIGZyYW1lIGZvciBFTDEtTWVhcy4gIAorKiAgICAgICAgICAgICAgICAgQml0IDYgaXMgZm9yIFJlc2VydmVkIGZvciBGQi9TQiBzZWFyY2gKKyogICAgICAgICAgICAgICAgIEJpdCA3IGlzIGZvciBJU0NQLgorKiAgICAgICAgICAgICAgICAgQml0IDggaXMgZm9yIEZNTy4KKyogICAgICAgICAgICAgICAgIEJpdCA5IGlzIGZvciBETC4KKyogICAgICAgICAgICAgICAgIEJpdCAxMCBpcyBmb3IgVUwuCisqICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgMSBvZiBhIGJpdCBtZWFucyB0aGF0IHRoZSBtZWFzdXJlbWVudCBvY2Nhc2lvbiBwYXR0ZXJuIHNlcXVlbmNlIGlzIGFwcGxpY2FibGUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUgb2YgbWVhc3VyZW1lbnQuCisqICAgICAgICAgICAgICAgICBCaXQgMCBpcyB0aGUgZmlyc3QvcmlnaHRtb3N0IGJpdCBvZiB0aGUgYml0IHN0cmluZy4KKyogICAgICAgICAgICAgICAgIE9ubHkgb25lIGJpdCB3aWxsIGJlIHNldCB0byAxLCB0aGUgb3RoZXJzIGFyZSBzZXQgdG8gemVyby4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MTYgcGVyaW9kOworICAga2FsX3VpbnQxNiBsZW5ndGg7CisgICBrYWxfdWludDE2IG9mZnNldDsKKyAgIGthbF91aW50OCAgc2xvdF9ibXA7CisgICBrYWxfdWludDMyIHB1cnBvc2VfYm1wOworfXVtdHNfdGRkX21vX2FsbG9jYXRpb25fc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgdW10c190ZGRfaWRsZV9nYXBfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIElkbGUgZ2FwIHN0cnVjdHVyZSBvZiBVTVRTIFRERC4KKyoKKyogUEFSQU1FVEVSUworKiAgIHN0YXJ0X3RpbWUgIC0gc3RhcnQgdGltZSBvZiB0aGUgZ2FwCisqICAgbGVuZ3RoICAgICAgLSBsZW5ndGggb2YgdGhlIGdhcCBzZXNzaW9uIChpbiBlY2hpcCkKKyogICBpc19kcnhfdGljayAtIEtBTF9UUlVFIDogRmlyc3QgdGljayBpbiB0aGlzIERSWCBwZXJpb2QKKyogICAgICAgICAgICAgICAgIEtBTF9GQUxTRTogTm90IHRoZSBmaXJzdCBmcmVlIGludGVydmFsIGluIHRoaXMgRFJYIHBlcmlvZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgdW10c190ZGRfdGltZV9zdHJ1Y3Qgc3RhcnRfdGltZTsKKyAgIGthbF9pbnQzMiAgICAgICAgICAgIGxlbmd0aDsKKyAgIGthbF9ib29sICAgICAgICAgICAgIGlzX2RyeF90aWNrOworfXVtdHNfdGRkX2lkbGVfZ2FwX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIHVtdHNfdGRkX2Nvbm5lY3RlZF9nYXBfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFVNVFMgVEREIGdhcCBzdHJ1Y3R1cmUgaW4gQ0VMTF9GQUNIL0NFTExfRENILgorKgorKiBQQVJBTUVURVJTCisqICAgbW9fbnVtICAgICAgICAgICAgIC0gVGhlIG51bWJlciBvZiBtbyBwYXR0ZXJuCisqICAgbWVhc3VyZV9vY2Nhc2lvbltdIC0gT25lIG1lYXN1cmVfb2NjYXNpb25bXSBzdGFuZHMgZm9yIG9uZSBtZWFzdXJlbWVudCBvY2Nhc2lvbi4gCisqICAgICAgICAgICAgICAgICAgICAgICAgcHVycG9zZV9ibXAgaW4gdW10c190ZGRfbW9fYWxsb2NhdGlvbl9zdHJ1Y3QgbWF5IHNldCBtb3JlIHRoYW4gb25lIGJpdCB0byAxIGR1ZSB0byBETU8gY29uZmlndXJhdGlvbi4KKyogICAgICAgICAgICAgICAgICAgICAgICBNT19QVVJQT1NFX05VTSA9IHRvdGFsIG51bWJlciBvZiBtZWFzdXJlbWVudCBwdXJwb3NlcyA9IDEyLgorKiAgIGxhc3RfdHhfc2xvdCAgICAgICAtIFRoZSBsYXN0IFRYIHNsb3QgVUUgdXNlZCBiZWZvcmUgdGhlIHNlY29uZCBzd2l0Y2ggcG9pbnQgaW4gb25lIHN1Yi1mcmFtZS4KKyogICBkb2ZmICAgICAgICAgICAgICAgLSB0byBhbGlnbiBDRk4gaW4gc3ViLWZyYW1lLAorKiAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgdXNlZCB3aGVuIHVtdHNfdGRkX21vX2FsbG9jYXRpb25fc3RydWN0LnB1cnBvc2VfYm1wCisqICAgICAgICAgICAgICAgICAgICAgICAgQml0IDkgb3IgMTAgaXMgc2V0IHRvIDEuCisqICAgICAgICAgICAgICAgICAgICAgICAgQml0IDkgaXMgZm9yIERMLgorKiAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAxMCBpcyBmb3IgVUwuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICBtb19udW07CisgICB1bXRzX3RkZF9tb19hbGxvY2F0aW9uX3N0cnVjdCBtZWFzdXJlX29jY2FzaW9uW01PX1BVUlBPU0VfTlVNXTsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgIGxhc3RfdHhfc2xvdDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgIGRvZmY7Cit9dW10c190ZGRfY29ubmVjdGVkX2dhcF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBsbDFfdW10c190ZGRfc3RhbmRieV9nYXBfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFVNVFMgVEREIHN0YW5kYnkgZ2FwIHBhdHRlcm4gc3RydWN0dXJlLgorKgorKiBQQVJBTUVURVJTCisqICAgc3RhcnRfdGltZSAtIHN0YXJ0IHRpbWUgb2YgdGhlIGdhcCBzZXNzaW9uCisqICAgbGVuZ3RoICAgICAtIGxlbmd0aCBvZiB0aGUgZ2FwIHNlc3Npb24gKGluIGVjaGlwKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgdW10c190ZGRfdGltZV9zdHJ1Y3Qgc3RhcnRfdGltZTsKKyAgIGthbF9pbnQzMiAgICAgICAgICAgIGxlbmd0aDsKK31sbDFfdW10c190ZGRfc3RhbmRieV9nYXBfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgbGwxX3RsMV9leHBhbmRfZ2FwX3BhdHRlcm5fc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIExMMSBleHBhbmRzIGdhcCBwYXR0ZXJuIGZvciBUTDEKKyoKKyogUEFSQU1FVEVSUworKiAgIHNlc3Npb25fbnVtICAtIEluZGljYXRlIGhvdyBtYW55IGdhcCBzZXNzaW9uIAorKiAgIHNlc3Npb25bXSAgICAtIFN0YW5kYnkgZ2FwIHNlc3Npb24uCisqICAgbWVhc3VyZV90aWQgIC0gVHJhbnNpdGlvbiBpZCBmb3IgUkFOSyB0aWNrLi9WYWxpZCB3aGVuIGFjdGl2ZSBSQVQgaXMgaW4gRFJYIG1vZGUuL0FuZCBiaXQgMCBpbiB0aWNrX2JpdG1hcCBpcyAiMSIKKyogICBocHNfdGlkICAgICAgLSBUcmFuc2l0aW9uIGlkIGZvciBIUFMgdGljay4vVmFsaWQgd2hlbiBhY3RpdmUgUkFUIGlzIGluIERSWCBtb2RlLi9BbmQgYml0IDEgaW4gdGlja19iaXRtYXAgaXMgIjEiCisqICAgdGlja19iaXRtYXAgIC0gQml0IDAgOiBSYW5rIHNlYXJjaCAsIEJpdCAxIDogUHJpb3JpdHkgc2VhcmNoIHdoZW4gYWN0aXZlIHJhdCBpbiBpZGxlIG1vZGUsIAorKiAgICAgICAgICAgICAgICAgIEJpdCAwIDogaXNfZmlyc3QgZ2FwIGluIE5mcmVxKmV4cGFuc2lvbl9wZXJpb2Qgd2hlbiBhY3RpdmUgcmF0IGluIGNvbm5lY3QgbW9kZS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9udW07CisgICBsbDFfdW10c190ZGRfc3RhbmRieV9nYXBfc3RydWN0IHNlc3Npb25bVU1UU19URERfU0VTU0lPTl9JTl9QRVJJT0RdOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlX3RpZDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgaHBzX3RpZDsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgdGlja19iaXRtYXA7Cit9bGwxX3RsMV9leHBhbmRfZ2FwX3BhdHRlcm5fc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgdGwxX2xsMV9zeW5jX2NuZl9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgVEwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gY29uZmlybSBMTDEgdGhhdCBjdXJyZW50IFVNVFMgVEREIHRpbWluZyAKKyogICBhbmQgbWljcm8gc2Vjb25kIGNvdW50ZXIgdmFsdWUuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgY3VycmVudF90aW1lICAgICAgLSBzeW5jLiB0aW1lIGluIHVtdHNfdGRkX3RpbWVfc3RydWN0IAorKiAgIHVtdHNfdGRkX3VzdGltZSAgIC0gc3luYy4gdGltZSBpbiBVU0MgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIHVtdHNfdGRkX3RpbWVfc3RydWN0IGN1cnJlbnRfdGltZTsKKyAgIGthbF91aW50MzIgICAgICAgICAgIHVtdHNfdGRkX3VzdGltZTsKK310bDFfbGwxX3N5bmNfY25mX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIHRsMV9sbDFfcmF0X3N0YXR1c19pbmRfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFRoaXMgbWVzc2FnZSBpcyBzZW50IGZyb20gVEwxIHRvIExMMSBmb3IgaW5mb3JtaW5nIGN1cnJlbnQgVEwxIFJBVCBzdGF0dXMuIAorKiAgIFRoaXMgbWVzc2FnZSBzaG91bGQgYmUgc2VudCB3aGVuIFRMMSBSQVQgc3RhdHVzIGNoYW5nZWQuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgcmF0X3N0YXR1cyAtIFJBVCBzdGF0dXMgaW4gVEwxIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIHRsMV9sbDFfcmF0X3N0YXR1c19lbnVtIHJhdF9zdGF0dXM7Cit9dGwxX2xsMV9yYXRfc3RhdHVzX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICB0bDFfbGwxX21vZGVfc3RhdHVzX2luZF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgVGhpcyBtZXNzYWdlIGlzIHNlbnQgZnJvbSBUTDEgdG8gTEwxIGZvciBpbmZvcm1pbmcgdGhhdCBUTDEgbW9kZSBzdGF0dXMgd2hlbiBUTDEgaXMgYWN0aXZlIFJBVC4gCisqICAgVGhpcyBtZXNzYWdlIHNob3VsZCBiZSBzZW50IHdoZW4gVEwxIG1vZGUgc3RhdHVzIGNoYW5nZWQuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgdGRkX21vZGVfc3RhdHVzICAtIGN1cnJlbnQgbW9kZSBpbiBUTDEgd2hlbiBVTVRTIFRERCBpcyBhY3RpdmUgUkFUCisqICAgZHJ4X2N5Y2xlX2xlbmd0aCAtIHZhbGlkIHdoZW4gZ3NtX21vZGVfc3RhdHVzID0gVEwxX0xMMV9QQ0hfTU9ERQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGxsMV9hY3RpdmVfcmF0X21vZGVfc3RhdHVzX2VudW0gdGRkX21vZGVfc3RhdHVzOworICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgICAgICBkcnhfY3ljbGVfbGVuZ3RoOworfXRsMV9sbDFfbW9kZV9zdGF0dXNfaW5kX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGxsMV90bDFfbW9kZV9zdGF0dXNfdXBkYXRlX2luZF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgVGhpcyBtZXNzYWdlIGlzIHNlbnQgdG8gVEwxIGZvciBpbmZvcm1pbmcgdGhhdCBtb2RlIHN0YXR1cyBvZiBhY3RpdmUgUkFUIHdoZW4gVEwxIGlzIHN0YW5kYnkgUkFULiAKKyogICBUaGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIHVwZGF0ZWQgZm9yIFRMMSBpbiBzdGFuZGJ5IHdoZW4gYW55IG1vZGUgc3RhdHVzIGNoYW5nZWQgaW4gYWN0aXZlIFJBVC4gCisqICAgQWxzbyB3aGVuIFRMMSBlbnRlcnMgaW50byBzdGFuZGJ5IFJBVCBmcm9tIEZMSUdIVCwgTEwxIHdpbGwgdXBkYXRlIGN1cnJlbnQgbW9kZSBzdGF0ZSBpbiBhY3RpdmUgUkFUIHRvIFRMMS4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBhY3RpdmVfcmF0X21vZGVfc3RhdHVzIC0gY3VycmVudCBtb2RlIHN0YXR1cyBpbiBhY3RpdmUgUkFUCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgbGwxX2FjdGl2ZV9yYXRfbW9kZV9zdGF0dXNfZW51bSBhY3RpdmVfcmF0X21vZGVfc3RhdHVzOworfWxsMV90bDFfbW9kZV9zdGF0dXNfdXBkYXRlX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICB0bDFfbGwxX2FjdGl2ZV9tZWFzdXJlX3N0YXR1c19pbmRfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFRMMSBpbmZvcm1zIExMMSB0aGF0IGhvdyBtYW55IGhpZ2hlciBwcmlvcml0eSBpbnRlci1mcmVxdWVuY2llcyBpbiBUTDEgd2hlbiBoaWdoIHByaW9yaXR5IHNlYXJjaCBpcyB0dXJuZWQgb24KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBmcmVxX251bSAgICAgIC0gVGhlIG51bWJlciBvZiBoaWdoZXIgcHJpb3JpdHkgaW50ZXItZnJlcS4gaW4gVEwxLigwfjMpCisqICAgICAgICAgICAgICAgICAgIFdoZW4gSFBTIG9mZiwgdGhlIGZyZXFfbnVtIGlzIGVxdWFsIHRvIHplcm8uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX3VpbnQ4ICAgICBmcmVxX251bTsKK310bDFfbGwxX2FjdGl2ZV9tZWFzdXJlX3N0YXR1c19pbmRfc3RydWN0OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICB0bDFfbGwxX21lYXN1cmVfcmVxX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBUaGlzIG1lc3NhZ2UgaXMgc2VudCBmcm9tIFRMMSB0byBpbmZvcm0gTEwxIHRoYXQgaG93IG1hbnkgVU1UUyBUREQgZnJlcXVlbmNpZXMgYXJlIHJlcXVpcmVkIHRvIGJlIG1lYXN1cmVkIGFuZCB0aGUgbWVhc3VyZW1lbnQgcHVycG9zZXMgaW4gVU1UUyBUREQgU3RhbmRieS4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBtZWFzX3B1cnBvc2VfYml0bWFwIC0gYml0IDAgZm9yIG1lYXN1cmVtZW50LCBiaXQgMSBmb3IgY2VsbCBzZWFyY2gKKyogICB0aWQgICAgICAgICAgICAgICAgIC0gdGlkIGZvciBsYXN0ZXN0IG1lYXNfcmVxIG9uIChzaG91bGQgb25seSBjaGFuZ2Ugd2hlbiBvZmYpCisqICAgdGlja19iaXRtYXAgICAgICAgICAtIGJpdCAwIGZvciByYW5raW5nIHNlYXJjaCwgYml0IDEgZm9yIHByaW9yaXR5IHNlYXJjaCAKKyogICBmcmVxX251bSAgICAgICAgICAgIC0gaGlnaCBwcmlvcml0eSBmcmVxZW5jaWVzIHdoZW4gSFBTIE9OLCBtZWFzdXJlbWVudCBmcmVxdWVuY2llcyB3aGVuIEhQUyBPRkYKKyogICB0X2hwcyAgICAgICAgICAgICAgIC0gYmFzaWMgcGVyaW9kIG9mIGhpZ2ggcHJpb3JpdHkgc2VhcmNoICgyNXMsNjBzLDcwcykKKyogICBpc19wZXJpb2RfcmVzZXRfYm1wIC0gYml0IDAgZm9yIHJhbmsgcGVyaW9kLCAxIG1lYW5zIHRvIHJlc2V0CisqICAgICAgICAgICAgICAgICAgICAgICAtIGJpdCAxIGZvciBwcmlvIHBlcmlvZCwgMCBtZWFucyBub3QgdG8gcmVzZXQKKyogICAgICAgICAgICAgICAgICAgICAgIC0gd2hlbiBmcmVxLiBudW0gaXMgc2FtZSBhcyBiZWZvcmUsIGxsMSB3aWxsIGNoZWNrIHRoaXMgZmxhZyB0byByZXNldCBwZXJpb2Qgb3Igbm90CisqICAgY3VycmVudF90aW1lICAgICAgICAtIGN1cnJlbnQgaW4gVEwxCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX3VpbnQ4ICAgICAgICAgICAgIG1lYXNfcHVycG9zZV9iaXRtYXA7CisgICBrYWxfdWludDggICAgICAgICAgICAgdGlkOyAgICAgIAorICAga2FsX3VpbnQ4ICAgICAgICAgICAgIHRpY2tfYml0bWFwOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgIGZyZXFfbnVtOworICAga2FsX3VpbnQxNiAgICAgICAgICAgIHRfaHBzOworICAga2FsX2ludDMyICAgICAgICAgICAgIGlzX3BlcmlvZF9yZXNldF9ibXA7CisgICB1bXRzX3RkZF90aW1lX3N0cnVjdCAgY3VycmVudF90aW1lOyAKK310bDFfbGwxX21lYXN1cmVfcmVxX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIHRsMV9sbDFfc3RhbmRieV9tZWFzdXJlX2RvbmVfaW5kX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBGb3IgbG93IHBvd2VyIG9wdGltaXphdGlvbiwgVEwxIGluZm9ybXMgTEwxIHdoaWNoIG1lYXN1cmVtZW50IHB1cnBvc2UgaXMgCisqICAgbWVhc3VyZWQgZG9uZSBpbiBpdHMgcGVyaW9kLiBJZiBhbGwgbWVhc3VyZW1lbnQgcHVycG9zZXMgYXJlIG1lYXN1cmVkIGRvbmUsIAorKiAgIExMMSB3aWxsIG5vdCB0aWNrIFRMMSBhbnltb3JlIGluIHNob3J0ZXN0IG1lYXN1cmVtZW50IHBlcmlvZC4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICB0aWQgICAgICAgICAgIC0gRm9yIExMMSB0byBrbm93IHRoaXMgdGlkIGlzIG1hcHBlZCB0byB3aGljaCBnYXAgcGF0dGVybiBwZXJpb2Qgc2VudCBiZWZvcmUKKyogICB0aWNrX2JpdG1hcCAgIC0gYml0IDAgZm9yIHJhbmtpbmcgc2VhcmNoLCBiaXQgMSBmb3IgcHJpb3JpdHkgc2VhcmNoLiBPbmx5IG9uZSBiaXQgd2lsbCBiZSBzZXQgaW4gb25lIG1lc3NhZ2UuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX3VpbnQ4ICAgICAgdGlkOworICAga2FsX3VpbnQ4ICAgICAgdGlja19iaXRtYXA7Cit9dGwxX2xsMV9zdGFuZGJ5X21lYXN1cmVfZG9uZV9pbmRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgbGwxX3RsMV9nYXBfc2VydmljZV9yZXFfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIExMMSB1c2VzIHRoaXMgcHJpbWl0aXZlIHRvIGVuYWJsZSAoZGlzYWJsZSkgYWN0aXZlIFJBVCBnYXAgc2VydmljZSB0byBnZXQgKHJlbGVhc2UpIAorKiAgIHRoZSBmcmVlIHJhZGlvIGZyZXF1ZW5jeSBwZXJpb2QgaW4gVU1UUyBUREQuV2hlbiBMTDEgZGlzYWJsZXMgYWN0aXZlIFJBVCBnYXAgc2VydmljZSwgCisqICAgaXQgbWVhbnMgdGhhdCBVTVRTIFRERCBjb3VsZCB1c2UgYWxsIFJGIHRpbWUgYWxyZWFkeS4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBlbmFibGUgICAgICAgICAgIC0gS0FMX1RSVUUgIDogcmVxdWVzdCBnYXAgc2VydmljZQorKiAgICAgICAgICAgICAgICAgICAgICBLQUxfRkFMU0UgOiBzdG9wIGdhcCBzZXJ2aWNlCisqICAgc2VydmljZV90eXBlX2JtcCAtIEJpdCAwIGZvciBGQi9TQiBzZWFyY2ggaW4gR1NNCisqICAgICAgICAgICAgICAgICAgICAgIEJpdCAxIGZvciBMVEUgbWVhcy4KKyogICAgICAgICAgICAgICAgICAgICAgVGhlICB2YWx1ZSAxIG9mIGEgYml0IG1lYW5zIHRoYXQgVEwxIHNob3VsZCBwcm92aWRlIHN1aXRhYmxlIGdhcCBwYXR0ZXJuICBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdHlwZSBvZiBtZWFzdXJlbWVudC4KKyogICAgICAgICAgICAgICAgICAgICAgQml0IDAgaXMgdGhlIGZpcnN0L3JpZ2h0bW9zdCBiaXQgb2YgdGhlIGJpdCBzdHJpbmcuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX2Jvb2wgICAgICBlbmFibGU7CisgICBrYWxfdWludDggICAgIHNlcnZpY2VfdHlwZV9ibXA7Cit9bGwxX3RsMV9nYXBfc2VydmljZV9yZXFfc3RydWN0OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICB0bDFfbGwxX2dhcF9zdG9wX2NuZl9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgVEwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gY29uZmlybSBMTDFfVEwxX0dBUF9TVE9QX1JFUSB3aGVuIHRoZXJlIGlzIG5vIGdhcCB1c2FnZSBpbiBVTVRTX1RERC4uCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgY3VycmVudF90aW1lICAtIGN1cnJlbnQgdGltZSBpbiBUTDEKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICB1bXRzX3RkZF90aW1lX3N0cnVjdCBjdXJyZW50X3RpbWU7Cit9dGwxX2xsMV9nYXBfc3RvcF9jbmZfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgdGwxX2xsMV9hdXRvX2dhcF9yZXFfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFRMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gcmVxdWVzdCBMTDEgdGhhdCBUTDEgd2FudHMgdG8gdXNlIHRoZSBhdXRvIGdhcCAgZnJvbSAgKHN1Yl9zZm4sIGVjaGlwcykuIAorKiAgIFRMMSBjb3VsZCB1c2UgdGhpcyBhdXRvIGdhcCBhZnRlciBnZXR0aW5nIHRoZSBzdWNjZXNzZnVsIGNvbmZpcm0KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBhdXRvX3RpbWUgIC0gU3RhcnQgdGltZSBvZiBhdXRvIGdhcCBpbiBUTDEKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICB1bXRzX3RkZF90aW1lX3N0cnVjdCBhdXRvX3RpbWU7Cit9dGwxX2xsMV9hdXRvX2dhcF9yZXFfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgbGwxX3RsMV9hdXRvX2dhcF9jbmZfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gY29uZmlybSBUTDEgYXV0byBnYXAgcmVxdWVzdC4gCisqICAgQWZ0ZXIgcmVjZWl2aW5nIHRoaXMgbWVzc2FnZSwgVEwxIGNvdWxkIHVzZSByZXF1aXJlZCBhdXRvIGdhcC4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBzdWNjZXNzICAgICAgIC0gS0FMX1RSVUUgOiBUTDEgY291bGQgdXNlIGF1dG8gZ2FwIHRvIHNlYXJjaAorKiAgICAgICAgICAgICAgICAgICBLQUxfRkFMU0U6IFRMMSBjb3VsZCBub3QgdXNlIGF1dG8gZ2FwIHRvIHNlYXJjaC4gCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5kIFRMMSBzaG91bGQgbm90IHJlcXVlc3QgYXV0byBnYXAgdW50aWwgQVVUT19HQVBfQVZBSUxBQkxFX0lORAorKiAgIHZhbGlkX3BlcmlvZCAgLSBUaGUgbGVuZ3RoIG9mICBhdXRvbm9tb3VzIGdhcCBhbGxvd2VkIGJ5IGFjdGl2ZSBSQVQgCisqICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBpcyB2YWxpZCB3aGVuIHN1Y2Nlc3MgPSBLQUxfVFJVRQorKiAgICAgICAgICAgICAgICAgICBVbml0IDogZWNoaXAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX2Jvb2wgIHN1Y2Nlc3M7CisgICBrYWxfaW50MzIgdmFsaWRfcGVyaW9kOworfWxsMV90bDFfYXV0b19nYXBfY25mX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGxsMV90bDFfYXV0b19nYXBfaW5kX3N0cnVjdAorKgorKiBERVNDUklQVElPTlMKKyogICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBUTDEgc3RvcHBpbmcgdXNpbmcgUkYgaW4gdGhpcyBhdXRvIGdhcCBmcm9tICAgKHN1Yl9zZm4sIGVjaGlwcykuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgYXV0b190aW1lICAtIFN0YXJ0IHRpbWUgb2YgYXV0byBnYXAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICB1bXRzX3RkZF90aW1lX3N0cnVjdCBhdXRvX3RpbWU7Cit9bGwxX3RsMV9hdXRvX2dhcF9pbmRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgdGwxX2xsMV9hdXRvX2dhcF9yZXNfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFRMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gcmVzcG9uc2UgTEwxIHRoYXQgVEwxIHdpbGwvd29uJ3QgdXNlIFJGIGZyb20gCisqICAgdGhlIHN0YXJ0IHRpbWluZyBvZiBhdXRvIGdhcCB3aGljaCBpcyBpbmZvcm1lZCBieSBMTDFfVEwxX0FVVE9fR0FQX0lORC4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyogICBzdWNjZXNzICAgICAgIC0gS0FMX1RSVUUgOiBUTDEgd2lsbCBub3QgdXNlIFJGIGZyb20gdGhlIHN0YXJ0aW5nIHRpbWUgb2YgTEwxX1RMMV9BVVRPTk9NT0lTX0dBUF9JTkQKKyogICAgICAgICAgICAgICAgICAgS0FMX0ZBTFNFOiBUTDEgbWF5IHVzZSBSRiBhZnRlciBzdGFydGluZyB0aW1lIG9mIExMMV9UTDFfQVVUT05PTU9JU19HQVBfSU5ELiAKKyogICB2YWxpZF9wZXJpb2QgIC0gVGhlIGxlbmd0aCBvZiAgYXV0b25vbW91cyBnYXAgYWxsb3dlZCBpbiBUTDEgCisqICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBpcyB2YWxpZCB3aGVuIFRMMSBpcyBhY3RpdmUgcmF0IGFuZCBzdWNjZXNzID0gS0FMX1RSVUUKKyogICAgICAgICAgICAgICAgICAgVW5pdCA6IGVjaGlwCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX2Jvb2wgIHN1Y2Nlc3M7CisgICBrYWxfaW50MzIgdmFsaWRfcGVyaW9kOworfXRsMV9sbDFfYXV0b19nYXBfcmVzX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNUUlVDVAorKiAgIGxsMV90bDFfZ2FwX25vdGlmeV9pbmRfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIExMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIFRMMSB0aGF0IHRoZSBzdGFydGluZyB0aW1lIGFuZCBsZW5ndGggb2YgZ2FwIHBhdHRlcm4gd2hlbiBUTDEgaXMgc3RhbmRieSBSQVQuCisqCisqIFBBUkFNRVRFUlMKKyogICBMT0NBTF9QQVJBX0hEUiAgCisqICAgc3RhbmRieV9nYXAgICAtIHN0YW5kYnkgZ2FwIHBhdHRlcm4KKyogICB0aWQgICAgICAgICAgIC0gdGlkIGZvciBsYXN0ZXN0IG1lYXNfcmVxIG9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgbGwxX3RsMV9leHBhbmRfZ2FwX3BhdHRlcm5fc3RydWN0IHN0YW5kYnlfZ2FwOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgIHRpZDsgICAgICAgIC8qIFRpZCBmb3IgbGFzdGVzdCBtZWFzX3JlcSBvbiwgTEwxIHdpbGwgZXhwYW5kIGdhcCBub3RpZnkgaW5kIHdpdGggdGhpcyB0aWQqLyAgIAorfWxsMV90bDFfZ2FwX25vdGlmeV9pbmRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgdGwxX2xsMV9nYXBfcGF0dGVybl9pbmRfc3RydWN0CisqCisqIERFU0NSSVBUSU9OUworKiAgIFRMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIExMMSB0aGF0IHRoZSBmcmVlIFJGIHBlcmlvZCBpbiBUTDEgYXMgZ2FwIHBhdHRlcm4uIAorKiBQQVJBTUVURVJTCisqICAgTE9DQUxfUEFSQV9IRFIgIAorKiAgIHRsMV9jdXJyZW50X3RpbWUgLSBUTDEgY3VycmVudCB0aW1lCisqICAgaWRsZV9nYXAgICAgICAgICAtIE5vIG1hdHRlciB0aGUgbGVuZ3RoIGlzIGJpZ2dlciB0aGFuIHplcm8gb3Igbm90LCAKKyogICAgICAgICAgICAgICAgICAgICAgVEwxIHNob3VsZCBzZW5kIHRoaXMgbWVzc2FnZSBhbmQgc2V0cyBpc19kcnhfdGljayA9IEtBTF9UUlVFIGluIG9uZSBEUlggcGVyaW9kIG9uY2UuCisqICAgZGNoX2dhcCAgICAgICAgICAtIEdhcCBwYXR0ZXJuIHByb3ZpZGVkIGJ5IFRMMSBpbiBDRUxMX0ZBQ0gvQ0VMTF9EQ0gKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICB1bXRzX3RkZF90aW1lX3N0cnVjdCAgICAgICAgICAgdGwxX2N1cnJlbnRfdGltZTsKKyAgIHVtdHNfdGRkX2lkbGVfZ2FwX3N0cnVjdCAgICAgICBpZGxlX2dhcDsKKyAgIHVtdHNfdGRkX2Nvbm5lY3RlZF9nYXBfc3RydWN0ICBjb25uZWN0X2dhcDsKK310bDFfbGwxX2dhcF9wYXR0ZXJuX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBTVFJVQ1QKKyogICBsbDFfdGwxX3N5bmNfcmVxX3N0cnVjdAorKiAgIHRsMV9sbDFfZ2FwX3N0b3BfcmVxX3N0cnVjdAorKiAgIGxsMV90bDFfZ2FwX3N0b3BfY25mX3N0cnVjdAorKiAgIGxsMV90bDFfZ2FwX3N0b3BfcmVxX3N0cnVjdAorKiAgIHRsMV9sbDFfZ2FwX3N1c3BlbmRfcmVxX3N0cnVjdAorKiAgIGxsMV90bDFfZ2FwX3N1c3BlbmRfY25mX3N0cnVjdAorKiAgIGxsMV90bDFfZ2FwX3N1c3BlbmRfcmVxX3N0cnVjdAorKiAgIHRsMV9sbDFfZ2FwX3N1c3BlbmRfY25mX3N0cnVjdAorKiAgIHRsMV9sbDFfZ2FwX3Jlc3VtZV9pbmRfc3RydWN0CisqICAgbGwxX3RsMV9nYXBfcmVzdW1lX2luZF9zdHJ1Y3QKKyogICB0bDFfbGwxX2F1dG9fZ2FwX3N0b3BfcmVxX3N0cnVjdAorKiAgIGxsMV90bDFfYXV0b19nYXBfc3RvcF9pbmRfc3RydWN0CisqICAgdGwxX2xsMV9hdXRvX2dhcF9zdG9wX3Jlc19zdHJ1Y3QKKyogICBsbDFfdGwxX2F1dG9fZ2FwX3N0b3BfY25mX3N0cnVjdAorKiAgIHRsMV9sbDFfYXV0b19nYXBfZW5kX2luZF9zdHJ1Y3QKKyogICBsbDFfdGwxX2F1dG9fZ2FwX2VuZF9pbmRfc3RydWN0CisqICAgdGwxX2xsMV9hdXRvX2dhcF9hdmFpbGFibGVfaW5kX3N0cnVjdAorKiAgIGxsMV90bDFfYXV0b19nYXBfYXZhaWxhYmxlX2luZF9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgbGwxX3RsMV9zeW5jX3JlcV9zdHJ1Y3QKKyogICAgIExMMSB3aWxsIHVzZSB0aGlzIHByaW1pdGl2ZSB0byBnZXQgVEwxIGN1cnJlbnQgVU1UUyB0aW1pbmcgYW5kIG1pY3JvIAorKiAgICAgc2Vjb25kIGNvdW50ZXIgdmFsdWUgaW4gYm90aCBUTDEgaW4gYWN0aXZlIGFuZCBzdGFuZGJ5IG1vZGUuCisqCisqICAgdGwxX2xsMV9nYXBfc3RvcF9yZXFfc3RydWN0CisqICAgICBUTDEgdXNlcyB0aGlzIHByaW1pdGl2ZSB0byBpbmZvcm0gTEwxIHRvIHN0b3AgYWxsIGdhcCB1c2FnZSBpbiBzdGFuZGJ5IAorKiAgICAgUkFUIHdoZW4gR0VSQU4gR1NNIHdhbnRzIHRvIGNoYW5nZSBjb25maWd1cmF0aW9uIG9yIG90aGVyIHB1cnBvc2VzLgorKgorKiAgIGxsMV90bDFfZ2FwX3N0b3BfY25mX3N0cnVjdAorKiAgICAgTEwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gY29uZmlybSBUTDEgdGhhdCBMTDEgaGFzIGFscmVhZHkgc3RvcHBlZCAKKyogICAgIGFsbCBnYXAgdXNhZ2VzIGluIHN0YW5kYnkgUkFUIGFuZCBUTDEgY291bGQgdXNlIGFsbCBSRiB0aW1lLgorKgorKiAgIGxsMV90bDFfZ2FwX3N0b3BfcmVxX3N0cnVjdAorKiAgICAgTEwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gc3RvcCBnYXAgdXNhZ2UgaW4gVU1UUyBUREQgd2hlbiBVTVRTIFRERCBpcyBzdGFuZGJ5IFJBVC4KKyoKKyogICB0bDFfbGwxX2dhcF9zdXNwZW5kX3JlcV9zdHJ1Y3QKKyogICAgIFRMMSB1c2VzIHRoaXMgcHJpbWl0aXZlIHRvIHRlbXBvcmFsIHN1c3BlbmQgZ2FwIHVzYWdlIGluIHN0YW5kYnkgUkFUIGZvciBoaWdoZXIgcHJpb3JpdHkKKyogICAgIHRhc2sgYW5kIGRvZXNuJ3QgbmVlZCB0byBnaXZlIG5ldyBnYXAgY29uZmlndXJhdGlvbiBpbiBjb25uZWN0aW9uIG1vZGUgd2hlbiByZXN1bWVkLgorKgorKiAgIGxsMV90bDFfZ2FwX3N1c3BlbmRfY25mX3N0cnVjdAorKiAgICAgTEwxIHNlbmRzIHRoaXMgY29uZmlybSBtZXNzYWdlIHRvIFRMMSBhZnRlciBhbGwgc3RhbmRieSBSQVQgZ2FwIHVzYWdlIGFyZSBzdXNwZW5kZWQuCisqCisqICAgbGwxX3RsMV9nYXBfc3VzcGVuZF9yZXFfc3RydWN0CisqICAgICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIFRMMSB0byByZXF1ZXN0IHRoYXQgVEwxIHN1c3BlbmRzIFJGIHVzYWdlIGltbWVkaWF0ZWx5LgorKgorKiAgIHRsMV9sbDFfZ2FwX3N1c3BlbmRfY25mX3N0cnVjdAorKiAgICAgVEwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBjb25maXJtIExMMSB0aGF0IFRMMSB3aWxsIG5vdCB1c2UgZ2FwIGZyb20gCisqICAgICBub3cgdG8gcmVjZWl2aW5nIHJlc3VtZSBpbmRpY2F0b3IKKyoKKyogICB0bDFfbGwxX2dhcF9yZXN1bWVfaW5kX3N0cnVjdAorKiAgICAgVEwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBpbmZvcm0gTEwxIHRoYXQgVEwxIGhhcyBhbHJlYWR5IGZpbmlzaGVkIAorKiAgICAgaGlnaGVyIHByaW9yaXR5IHRhc2ssIGFuZCBzdGFuZGJ5IFJBVCBjb3VsZCB1c2UgZ2FwIG5vcm1hbGx5LgorKgorKiAgIGxsMV90bDFfZ2FwX3Jlc3VtZV9pbmRfc3RydWN0CisqICAgICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIFRMMSB0byByZXN1bWUgVEwxJ3MgZ2FwIHVzYWdlLiAKKyogICAgIEFmdGVyIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2UsIFRMMSBjb3VsZCAgdXNlIGdhcCBwYXR0ZXJuIG5vcm1hbGx5LgorKgorKiAgIHRsMV9sbDFfYXV0b19nYXBfc3RvcF9yZXFfc3RydWN0CisqICAgICBUTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIHJlcXVlc3QgTEwxIHRoYXQgVEwxIHdhbnRzIHRvIAorKiAgICAgcmV0cmlldmUgYXV0b25vbW91cyBnYXAgZm9yIGhpZ2hlciBwcmlvcml0eSB0YXNrLgorKgorKiAgIGxsMV90bDFfYXV0b19nYXBfc3RvcF9pbmRfc3RydWN0CisqICAgICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBUTDEgb2Ygc3RvcHBpbmcgdXNpbmcgUkYgCisqICAgICBkdXJpbmcgYXV0b25vbW91cyBnYXAgcGVyaW9kLgorKgorKiAgIHRsMV9sbDFfYXV0b19nYXBfc3RvcF9yZXNfc3RydWN0CisqICAgICBUTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIHJlc3BvbnNlIExMMSB0aGF0IFRMMSBzdG9wcyAKKyogICAgIGF1dG9ub21vdXMgZ2FwIHVzYWdlLgorKgorKiAgIGxsMV90bDFfYXV0b19nYXBfc3RvcF9jbmZfc3RydWN0CisqICAgICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGNvbmZpcm0gdGhhdCBUTDEgY291bGQgdXNlIFJGIG5vdy4KKyoKKyogICB0bDFfbGwxX2F1dG9fZ2FwX2VuZF9pbmRfc3RydWN0CisqICAgICBUTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBMTDEgdGhhdCBhdXRvbm9tb3VzIGdhcCB1c2FnZSBpcyBmaW5pc2hlZC4KKyogCisqICAgbGwxX3RsMV9hdXRvX2dhcF9lbmRfaW5kX3N0cnVjdAorKiAgICAgTEwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBpbmZvcm0gVEwxIHRoYXQgYXV0b25vbW91cyBnYXAgdXNhZ2UgaXMgZmluaXNoZWQuCisqCisqICAgdGwxX2xsMV9hdXRvX2dhcF9hdmFpbGFibGVfaW5kX3N0cnVjdAorKiAgICAgVEwxIHNlbmRzIHRoaXMgbWVzc2FnZSB0byBpbmZvcm0gTEwxIHRoYXQgYXV0b25vbW91cyBnYXAgaXMgYXZhaWxhYmxlIG5vdy4gU3RhbmRieSBSQVQgCisqICAgICBjb3VsZCByZXF1ZXN0IGF1dG9ub21vdXMgZ2FwIG5vdy4gU3RhbmRieSBSQVQgY291bGQgcmVxdWVzdCBhdXRvbm9tb3VzIGdhcCBub3cKKyoKKyogICBsbDFfdGwxX2F1dG9fZ2FwX2F2YWlsYWJsZV9pbmRfc3RydWN0CisqICAgICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBUTDEgdGhhdCBhdXRvbm9tb3VzIGdhcCAKKyogICAgIGlzIGF2YWlsYWJsZSBub3cuIFRMMSBjb3VsZCByZXF1ZXN0IGF1dG9ub21vdXMgZ2FwIG5vdy4KKyoKKyogICB0bDFfbGwxX2F1dG9fZ2FwX3VuYXZhaWxhYmxlX2luZF9zdHJ1Y3QKKyogICAgIFRMMSBzZW5kcyB0aGlzIG1lc3NhZ2UgdG8gaW5mb3JtIExMMSB0aGF0IGF1dG8gZ2FwIGlzIHVuYXZhaWxhYmxlIG5vdy4gCisqICAgICBTdGFuZGJ5IFJBVCBjb3VsZCBub3QgcmVxdWVzdCBhdXRvIGdhcCBub3cuCisqCisqICAgbGwxX3RsMV9hdXRvX2dhcF91bmF2YWlsYWJsZV9pbmRfc3RydWN0CisqICAgICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIGluZm9ybSBUTDEgdGhhdCBhdXRvIGdhcCBpcyB1bmF2YWlsYWJsZSBub3cuIAorKiAgICAgVEwxIGNvdWxkIG5vdCByZXF1ZXN0IGF1dG8gZ2FwIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKiAgIExPQ0FMX1BBUkFfSERSICAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCit9bGwxX3RsMV9zeW5jX3JlcV9zdHJ1Y3QsCisgdGwxX2xsMV9nYXBfc3RvcF9yZXFfc3RydWN0LAorIGxsMV90bDFfZ2FwX3N0b3BfY25mX3N0cnVjdCwKKyBsbDFfdGwxX2dhcF9zdG9wX3JlcV9zdHJ1Y3QsCisgdGwxX2xsMV9nYXBfc3VzcGVuZF9yZXFfc3RydWN0LAorIGxsMV90bDFfZ2FwX3N1c3BlbmRfY25mX3N0cnVjdCwKKyBsbDFfdGwxX2dhcF9zdXNwZW5kX3JlcV9zdHJ1Y3QsCisgdGwxX2xsMV9nYXBfc3VzcGVuZF9jbmZfc3RydWN0LAorIHRsMV9sbDFfZ2FwX3Jlc3VtZV9pbmRfc3RydWN0LAorIGxsMV90bDFfZ2FwX3Jlc3VtZV9pbmRfc3RydWN0LAorIHRsMV9sbDFfYXV0b19nYXBfc3RvcF9yZXFfc3RydWN0LAorIGxsMV90bDFfYXV0b19nYXBfc3RvcF9pbmRfc3RydWN0LAorIHRsMV9sbDFfYXV0b19nYXBfc3RvcF9yZXNfc3RydWN0LAorIGxsMV90bDFfYXV0b19nYXBfc3RvcF9jbmZfc3RydWN0LAorIHRsMV9sbDFfYXV0b19nYXBfZW5kX2luZF9zdHJ1Y3QsCisgbGwxX3RsMV9hdXRvX2dhcF9lbmRfaW5kX3N0cnVjdCwKKyB0bDFfbGwxX2F1dG9fZ2FwX2F2YWlsYWJsZV9pbmRfc3RydWN0LAorIGxsMV90bDFfYXV0b19nYXBfYXZhaWxhYmxlX2luZF9zdHJ1Y3QsCisgdGwxX2xsMV9hdXRvX2dhcF91bmF2YWlsYWJsZV9pbmRfc3RydWN0LAorIGxsMV90bDFfYXV0b19nYXBfdW5hdmFpbGFibGVfaW5kX3N0cnVjdDsKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLypfX1BPUF9GU01fXyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1RSVUNUCisqICAgbWxsMV90bDFfaW5mb19kYXRhYmFzZV9zdHJ1Y3QKKyoKKyogREVTQ1JJUFRJT05TCisqICAgVEwxIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4KKyoKKyogUEFSQU1FVEVSUworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreyAgLyogbWVhc3VyZSByZXEqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja19ibXA7ICAgICAgICAgICAgLyogdXNlIHRvIHJlY29yZCB0aWNrIGJpdG1hcCovCisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICByYW5rX3RpY2tfdGlkOyAgICAgICAvKiB0aWQgZm9yIHJhbmsgdGljayovCisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvX3RpY2tfdGlkOyAgICAgICAvKiB0aWQgZm9yIHByaW8gdGljayovCisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzX2RvbmVfYm1wOyAgICAgICAvKiBtZWFzdXJlbWVudCBkb25lIGluZCBiaXRtYXAqLworICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbWVhc19kb25lX3VzZWZ1bDsgLyogdW10cyB0ZGQgdXNlcyBtZWFzX2RvbmUgb3Igbm90IGJ5IGNoZWNraW5nIG1lYXNfcHVycG9zZV9ibXAqLworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc19wdXJwb3NlX2JpdG1hcDsgLyogcmVjb3JkIHRoZSBtZWFzdXJlIHB1cnBvc2UgYml0bWFwKi8KKyAgIHVtdHNfdGRkX3RpbWVfc3RydWN0ICAgICAgICAgICAgICAgIGN1cnJlbnRfdGltZTsgICAgICAgIC8qIHVtdHMgdGRkIGN1cnJlbnQgdGltZSB3aGVuIHJlcXVlc3QgZ2FwIHNlcnZpY2UqLworICAgLyogUGFnaW5nIHBlcmlvZCBpbiBhY3RpdmUgUkFUICovCisgICBrYWxfaW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICBkcnhfY3ljbGU7ICAgICAgICAgICAvKiA4MCwxNjAsMzIwLDY0MCwxMjgwLDI1NjAsNTEyMCBVbml0IDogbXMqLworICAgLyogYXV0byBnYXAgcGFyYSovCisgICB1bXRzX3RkZF90aW1lX3N0cnVjdCAgICAgICAgICAgICAgICBhdXRvX3RpbWU7ICAgICAgICAgICAvKiBhdXRvIGdhcCB0aW1lKi8gCisgICAvKiBNb2RlIHN0YXR1cyovCisgICBsbDFfYWN0aXZlX3JhdF9tb2RlX3N0YXR1c19lbnVtICAgICBtb2RlX3N0YXR1czsgICAgICAgICAvKiBtb2RlIHN0YXR1cyovICAgCisgICAvKiBHQVAgcGF0dGVybiovCisgICB0bDFfbGwxX2dhcF9wYXR0ZXJuX2luZF9zdHJ1Y3QgICAgICBnYXBfcGF0dGVybjsgICAgICAgICAvKiBHYXAgcGF0dGVybiAqLworICAgLyogR2FwIHJlcXVlc3QgZnJvbSBzdGFuZGJ5IHJhdCBzaG91bGQgZG8gc3luYyBpbiBjb25uZWN0aW9uKi8KKyAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkX3RpbWluZzsgICAgICAgIC8qIEtBTF9UUlVFICA6IHdpdGggdmFsaWQgdGltaW5nKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtBTF9GQUxTRSA6IHdpdGggaW52YWxpZCB0aW1pbmcqLworICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgZG1vX2x0ZV9sZW47ICAgICAgICAgLyogbGVuZ3RoIG9mIGRtbyBmb3IgbHRlKi8KKyAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgICAgICAgICAgIGRtb19sdGVfcGVyaW9kOyAgICAgIC8qIHBlcmlvZCBvZiBkbW8gZm9yIGx0ZSovCisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzX3JlcV90aWQ7ICAgICAgICAvKiBUaWQgZm9yIGxhc3Rlc3QgbWVhc19yZXEgb24sIExMMSB3aWxsIGV4cGFuZCBnYXAgbm90aWZ5IGluZCB3aXRoIHRoaXMgdGlkKi8KK31tbGwxX3RsMV9pbmZvX2RhdGFiYXNlX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTE9CQUwgRlVOQ1RJT05TCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3RpY2tfdGwxX2dhcF9leHBhbnNpb24KKyogREVTQ1JJUFRJT04KKyogICB0aWNrIHRsMSB0byBleHBhbmQgZ2FwIHdoZW4gc3luYyBkb25lCisqCisqIFBBUkFNRVRFUlMKKyogICBub25lCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV90aWNrX3RsMV9nYXBfZXhwYW5zaW9uKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3RsMV9hdXRvX2dhcF9hdmFpbGFibGVfaW5kCisqIERFU0NSSVBUSU9OCisqICAgbGwxIHNlbmRzIGF1dG8gZ2FwIGF2YWlsYWJsZSBpbmQgdG8gVU1UUyBUREQgbm93CisqCisqIFBBUkFNRVRFUlMKKyogICBrYWxfYm9vbCBhdmFpbGFibGUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RsMV9hdXRvX2dhcF9hdmFpbGFibGVfaW5kKGthbF9ib29sIGF2YWlsYWJsZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdGwxX2F1dG9fZ2FwX2NuZgorKiBERVNDUklQVElPTgorKiAgIGxsMSBzZW5kcyBhdXRvIGdhcCBjbmYgdG8gVU1UU19UREQgbm93CisqCisqIFBBUkFNRVRFUlMKKyogICBzdWNjZXNzIC0gc3VjY2VzcyBvciBub3QKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RsMV9hdXRvX2dhcF9jbmYoa2FsX2Jvb2wgc3VjY2VzcyxrYWxfaW50MzIgdmFsaWRfcGVyaW9kKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV90bDFfYXV0b19nYXBfZW5kX2luZAorKiBERVNDUklQVElPTgorKiAgIGxsMSBzZW5kcyBhdXRvIGdhcCBlbmQgaW5kIHRvIFVNVFMgVEREIG5vdworKgorKiBQQVJBTUVURVJTCisqICAgbm9uZQorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdGwxX2F1dG9fZ2FwX2VuZF9pbmQodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdGwxX2F1dG9fZ2FwX2luZAorKiBERVNDUklQVElPTgorKiAgIGxsMSBzZW5kcyBhdXRvIGdhcCBlbmQgaW5kIHRvIFVNVFMgVEREIG5vdworKgorKiBQQVJBTUVURVJTCisqICAgdGRkX3RpbWUgLSBhdXRvIHRpbWUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RsMV9hdXRvX2dhcF9pbmQodW10c190ZGRfdGltZV9zdHJ1Y3QgdGRkX3RpbWUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3RsMV9hdXRvX2dhcF9zdG9wX2NuZgorKiBERVNDUklQVElPTgorKiAgIGxsMSBzZW5kcyBhdXRvIGdhcCBzdG9wIGNuZiB0byBVTVRTX1RERCBub3cKKyoKKyogUEFSQU1FVEVSUworKiAgIE5vbmUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RsMV9hdXRvX2dhcF9zdG9wX2NuZih2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV90bDFfYXV0b19nYXBfc3RvcF9pbmQKKyogREVTQ1JJUFRJT04KKyogICBsbDEgc2VuZHMgYXV0byBnYXAgc3RvcCBpbmQgdG8gVU1UU19UREQgbm93CisqCisqIFBBUkFNRVRFUlMKKyogICBOb25lCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV90bDFfYXV0b19nYXBfc3RvcF9pbmQodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgbWxsMV90bDFfYXV0b190aW1lX21pbnVzCisqIERFU0NSSVBUSU9OCisqICBBZGQgbW9yZSByZiBtYXJnaW4gZm9yIGFueSBzdGFuZGJ5IHJhdCB3aGljaCB3aWxsIGVudGVyIHNsZWVwIGR1cmluZyBhdXRvbm9tb3VzIHNlcmNoIHByb2NlZHVyZQorKiAgQXNzdW1lIG1hcmdpbiBpcyBzbWFsbGVyIHRoYW4gb25lIHN1Yl9zZm4KKyogUEFSQU1FVEVSUworKiAgIHVtdHNfdGRkX3RpbWVfc3RydWN0KgorKiAgIGthbF9pbnQzMiAgICAgICAgICAgICAgLSBtb3JlIFJGIG1hcmdpbiAocmVjb3ZlcnkgZnJvbSBzbGVlcCkuCisqIFJFVFVSTlMKKyogIHZvaWQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RsMV9hdXRvX3RpbWVfbWludXModW10c190ZGRfdGltZV9zdHJ1Y3QqIHRpbWUsIGthbF9pbnQzMiBlY2hpcCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdGwxX2V4cGFuZF9nYXBfcGF0dGVybl9pbmQKKyogREVTQ1JJUFRJT04KKyogICBsbDEgc2VuZHMgYXV0byBnYXAgYXZhaWxhYmxlIGluZCB0byBVTVRTIFRERCBub3cKKyoKKyogUEFSQU1FVEVSUworKiAgIHN0YW5kYnlfZ2FwIC0gZ2FwIHBhdHRlcm4gZm9yIHVtdHMgdGRkCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV90bDFfZXhwYW5kX2dhcF9wYXR0ZXJuX2luZChsbDFfdGwxX2V4cGFuZF9nYXBfcGF0dGVybl9zdHJ1Y3QqIHN0YW5kYnlfZ2FwKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV90bDFfZ2FwX3Jlc3VtZV9pbmQKKyogREVTQ1JJUFRJT04KKyogICBMTDEgc2VuZHMgdGhpcyBtZXNzYWdlIHRvIFRMMSB0byByZXN1bWUgVEwxJ3MgZ2FwIHVzYWdlLiAKKyogICBBZnRlciByZWNlaXZpbmcgdGhpcyBtZXNzYWdlLCBUTDEgY291bGQgIHVzZSBnYXAgcGF0dGVybiBub3JtYWxseS4KKyoKKyogUEFSQU1FVEVSUworKiAgIG5vbmUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RsMV9nYXBfcmVzdW1lX2luZCh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV90bDFfZ2FwX3NlcnZpY2VfcmVxCisqIERFU0NSSVBUSU9OCisqICAgbGwxIHNlbmRzIGdhcCBzZXJ2aWNlIHJlcSB0byBVTVRTX1RERCBub3cKKyoKKyogUEFSQU1FVEVSUworKiAgIGVuYWJsZSAgIC0gS0FMX1RSVUUgIDogdHVybiBvbiBnYXAgc2VydmljZSAKKyogICAgICAgICAgICAtIEtBTF9GQUxTRSA6IHR1cm4gb2ZmIGdhcCBzZXJ2aWNlCisqICAgc2VydmljZV90eXBlX2JtcCAtIEJpdCAwIGZvciBGQi9TQiBzZWFyY2ggaW4gR1NNCisqICAgICAgICAgICAgICAgICAgICAgIEJpdCAxIGZvciBMVEUgbWVhcy4KKyogICAgICAgICAgICAgICAgICAgICAgVGhlICB2YWx1ZSAxIG9mIGEgYml0IG1lYW5zIHRoYXQgVEwxIHNob3VsZCBwcm92aWRlIHN1aXRhYmxlIGdhcCBwYXR0ZXJuICBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdHlwZSBvZiBtZWFzdXJlbWVudC4KKyogICAgICAgICAgICAgICAgICAgICAgQml0IDAgaXMgdGhlIGZpcnN0L3JpZ2h0bW9zdCBiaXQgb2YgdGhlIGJpdCBzdHJpbmcuCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV90bDFfZ2FwX3NlcnZpY2VfcmVxKGthbF9ib29sIGVuYWJsZSwga2FsX3VpbnQ4IHNlcnZpY2VfdHlwZV9ibXApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3RsMV9nYXBfc3RvcF9jbmYKKyogREVTQ1JJUFRJT04KKyogICBMTDEgdXNlcyB0aGlzIHByaW1pdGl2ZSB0byBjb25maXJtIFRMMSB0aGF0IExMMSBoYXMgYWxyZWFkeSBzdG9wcGVkIAorKiAgIGFsbCBnYXAgdXNhZ2VzIGluIHN0YW5kYnkgUkFUIGFuZCBUTDEgY291bGQgdXNlIGFsbCBSRiB0aW1lLgorKgorKiBQQVJBTUVURVJTCisqICAgTk9ORQorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdGwxX2dhcF9zdG9wX2NuZih2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV90bDFfZ2FwX3N0b3BfcmVxCisqIERFU0NSSVBUSU9OCisqICAgTEwxIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gc3RvcCBnYXAgdXNhZ2UgaW4gVU1UUyBUREQgd2hlbiBVTVRTIFRERCBpcyBzdGFuZGJ5IFJBVC4KKyoKKyogUEFSQU1FVEVSUworKiAgIE5PTkUKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RsMV9nYXBfc3RvcF9yZXEodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdGwxX2dhcF9zdXNwZW5kX2NuZgorKiBERVNDUklQVElPTgorKiAgIExMMSBzZW5kcyB0aGlzIGNvbmZpcm0gbWVzc2FnZSB0byBUTDEgYWZ0ZXIgZ2FwIHVzYWdlIGluIHN0YW5kYnkgUkFUIGlzIHN1c3BlbmRlZC4KKyogICBUTDEgY291bGQgdXNlIFJGIG9ubHkgYWZ0ZXIgZ2V0dGluZyB0aGlzIG1lc3NhZ2UuCisqCisqIFBBUkFNRVRFUlMKKyogICBOT05FCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV90bDFfZ2FwX3N1c3BlbmRfY25mKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3RsMV9nYXBfc3VzcGVuZF9yZXEKKyogREVTQ1JJUFRJT04KKyogICBMTDEgdXNlcyB0aGlzIHByaW1pdGl2ZSB0byBzdXNwZW5kIGdhcCB1c2FnZSBpbiBVTVRTIFRERCB3aGVuIFVNVFMgVEREIGlzIHN0YW5kYnkgUkFULgorKgorKiBQQVJBTUVURVJTCisqICAgTk9ORQorKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdGwxX2dhcF9zdXNwZW5kX3JlcSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX3RsMV9nZXRfYXV0b190aW1lCisqIERFU0NSSVBUSU9OCisqICAgcmV0dXJuIGF1dG8gdGltZSBmcm9tIFRMMQorKgorKiBQQVJBTUVURVJTCisqICAgTm9uZQorKiBSRVRVUk5TCisqICB1bXRzX3RkZF90aW1lX3N0cnVjdCBhdXRvX3RpbWUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordW10c190ZGRfdGltZV9zdHJ1Y3QgbWxsMV90bDFfZ2V0X2F1dG9fdGltZSh2b2lkKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3RsMV9nZXRfY3VycmVudF90aW1lCisqIERFU0NSSVBUSU9OCisqICAgbGwxIGdldHMgY3VycmVudCB0aW1lICsgYWhlYWQgbWFyZ2luIHRvIGV4cGFuZCBnYXAKKyoKKyogUEFSQU1FVEVSUworKiAgIHVtdHNfdGRkX3RpbWUgLSBzdGFydCB0aW1lIG9mIGV4cGFuc2lvbiBwZXJpb2QKKyogICBrYWxfYm9vbCBpc19haGVhZF90aW1lCisqICAgICAgICAgVFJVRSA6IGFkdmFuY2UgZXV0cmFuX3RpbWUgd2l0aCB0aGUgcHJlZGVmaW5lZCBhaGVhZF90aW1lCisqICAgICAgICAgRkFMU0U6IGRvbid0IGFkdmFuY2UgZXV0cmFuX3RpbWUgd2l0aCB0aGUgcHJlZGVmaW5lZCBhaGVhZF90aW1lCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV90bDFfZ2V0X2N1cnJlbnRfdGltZSh1bXRzX3RkZF90aW1lX3N0cnVjdCogdGRkX3RpbWUsIGthbF9ib29sIGlzX2FoZWFkX3RpbWUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfdGwxX2dldF9kbW9fcGFyYQorKiBERVNDUklQVElPTgorKiAgIHJldHVybiBsZW5ndGggLCBwZXJpb2Qgb2YgZG1vIGZvciBsdGUgZnJvbSBUTDEKKyoKKyogUEFSQU1FVEVSUworKiAgICpsZW5ndGgKKyogICAqcGVyaW9kCisqIFJFVFVSTlMKKyogIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RsMV9nZXRfZG1vX3BhcmEoa2FsX3VpbnQxNiogbGVuZ3RoLGthbF91aW50MTYqIHBlcmlvZCk7CisKKyNpZmRlZiBfX0xURV9SQVRfXworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX3RsMV9nZXRfZWwxX3JmX21hcmdpbgorKiBERVNDUklQVElPTgorKiAgVEwxIGdldHMgRUwxIFJGIG1hcmdpbiBpbiBjdXJyZW50IHN0YXRlCisqCisqIFBBUkFNRVRFUlMKKyogIGhlYWQgICAgICAtIGhlYWRlcl9tYXJnaW4KKyogIHRhaWwgICAgICAtIHRhaWxfbWFyZ2luCisqIFJFVFVSTlMKKyogIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RsMV9nZXRfZWwxX3JmX21hcmdpbihrYWxfaW50MzIqIGhlYWQsa2FsX2ludDMyKiB0YWlsKTsKKyNlbmRpZiAvKl9fTFRFX1JBVF9fKi8KKworI2lmZGVmIF9fR1NNX1JBVF9fCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIG1sbDFfdGwxX2dldF9nbDFfcmZfbWFyZ2luCisqIERFU0NSSVBUSU9OCisqICBUTDEgZ2V0cyBHTDEgUkYgbWFyZ2luIGluIGN1cnJlbnQgc3RhdGUKKyoKKyogUEFSQU1FVEVSUworKiAgaGVhZCAgICAgIC0gaGVhZGVyX21hcmdpbgorKiAgdGFpbCAgICAgIC0gdGFpbF9tYXJnaW4KKyogIHN0X3Nsb3QgICAtIGdhcCBzdGFydCBzbG90IGluIERDSAorKiAgbGVuICAgICAgIC0gZ2FwIGxlbiBpbiBEQ0gKKyogUkVUVVJOUworKiAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdGwxX2dldF9nbDFfcmZfbWFyZ2luKGthbF9pbnQzMiogaGVhZCxrYWxfaW50MzIqIHRhaWwsIGthbF9pbnQzMiBzdF9zbG90LCBrYWxfaW50MzIgbGVuKTsKKyNlbmRpZiAvKl9fR1NNX1JBVF9fKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX3RsMV9nZXRfbW9kZV9zdGF0dXMKKyogREVTQ1JJUFRJT04KKyogICByZXR1cm4gbW9kZSBzdGF0dXMgZnJvbSBUTDEKKyoKKyogUEFSQU1FVEVSUworKiAgIE5vbmUKKyogUkVUVVJOUworKiAgbGwxX2FjdGl2ZV9yYXRfbW9kZV9zdGF0dXNfZW51bSBtb2RlX3N0YXR1cworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitsbDFfYWN0aXZlX3JhdF9tb2RlX3N0YXR1c19lbnVtIG1sbDFfdGwxX2dldF9tb2RlX3N0YXR1cyh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX3RsMV9nZXRfdGlja19jb3VudAorKiBERVNDUklQVElPTgorKiAgIFRMMSB0aWNrIG51bWJlcgorKgorKiBQQVJBTUVURVJTCisqICAgaXNfcHJpb19zZWFyY2ggLSBLQUxfRkFMU0UgOiBsbDFfbWFpbiB3YW50cyB0byBnZXQgbWVhcy4gdGljaworKiAgICAgICAgICAgICAgICAgICAgS0FMX1RSVUUgIDogbGwxX21haW4gd2FudHMgdG8gZ2V0IHByaW8uIHRpY2sKKyogICB0X2hwcyAgICAgICAgICAtIDYwICh1aW50IDogc2Vjb25kKQorKiAgIAorKiBSRVRVUk5TCisqICBrYWxfdWludDMyIGNvdW50OworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfdWludDMyIG1sbDFfdGwxX2dldF90aWNrX2NvdW50KGthbF9ib29sIGlzX3ByaW9fc2VhcmNoLCBrYWxfdWludDE2IHRfaHBzKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV90bDFfZ2V0X3RpbWluZ19zdGF0dXMKKyogREVTQ1JJUFRJT04KKyoKKyogUEFSQU1FVEVSUworKiBSRVRVUk5TCisqICAga2FsX2Jvb2wgIC0gdmFsaWRfdGltaW5nIEtBTF9UUlVFICA6IHdpdGggdmFsaWQgdGltaW5nCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtBTF9GQUxTRSA6IHdpdGggaW52YWxpZCB0aW1pbmcKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgbWxsMV90bDFfZ2V0X3RpbWluZ19zdGF0dXModm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgbWxsMV90bDFfZ2V0X3RsMV9yZl9tYXJnaW4KKyogREVTQ1JJUFRJT04KKyogIFRMMSBnZXRzIFJGIG1hcmdpbiBpbiBjdXJyZW50IHN0YXRlCisqCisqIFBBUkFNRVRFUlMKKyogIGhlYWQgICAgICAtIGhlYWRlcl9tYXJnaW4KKyogIHRhaWwgICAgICAtIHRhaWxfbWFyZ2luCisqIFJFVFVSTlMKKyogIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RsMV9nZXRfdGwxX3JmX21hcmdpbihrYWxfaW50MzIqIGhlYWQsa2FsX2ludDMyKiB0YWlsKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX3RsMV9pc19sb3dlcl9wd3Jfb24KKyogREVTQ1JJUFRJT04KKyogICBDaGVjayBpZiB0bDEgaXMgbG93IHB3ciBvbgorKgorKiBQQVJBTUVURVJTCisqICAgCisqIFJFVFVSTlMKKyogIGthbF9ib29sIC0gS0FMX0ZBTFNFIDogbWVhc3VyZW1lbnQgaXMgbm90IGZpbmlzaGVkIGFuZCBuZWVkIGdhcCBpbiB0aGlzIHBlcmlvZCAKKyogICAgICAgICAgICAgS0FMX1RSVUUgIDogbWVhc3VyZW1lbnQgaXMgZmluaXNoZWQgYW5kIGRvZXNudCBuZWVkIGdhcCBpbiB0aGlzIHBlcmlvZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfYm9vbCBtbGwxX3RsMV9pc19sb3dlcl9wd3Jfb24odm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdGwxX21vZGVfc3RhdHVzX3VwZGF0ZV9pbmQKKyogREVTQ1JJUFRJT04KKyogICBUaGlzIG1lc3NhZ2UgaXMgc2VudCB0byBUTDEgZm9yIGluZm9ybWluZyB0aGF0IG1vZGUgc3RhdHVzIG9mIGFjdGl2ZSBSQVQgd2hlbiBUTDEgaXMgc3RhbmRieSBSQVQuIAorKiAgIFRoaXMgbWVzc2FnZSBzaG91bGQgYmUgdXBkYXRlZCBmb3IgVEwxIGluIHN0YW5kYnkgd2hlbiBhbnkgbW9kZSBzdGF0dXMgY2hhbmdlZCBpbiBhY3RpdmUgUkFULgorKgorKiBQQVJBTUVURVJTCisqICAgc3RhdHVzIC0gbW9kZSBzdGF0dXMgaW4gYWN0aXZlIFJBVCAKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RsMV9tb2RlX3N0YXR1c191cGRhdGVfaW5kKGxsMV9hY3RpdmVfcmF0X21vZGVfc3RhdHVzX2VudW0gc3RhdHVzKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogICBtbGwxX3RsMV9zZXRfcHVycG9zZV9mb3JfZXhwYW5zaW9uX3BlcmlvZAorKiBERVNDUklQVElPTgorKgorKiBQQVJBTUVURVJTCisqICAga2FsX3VpbnQzMioqIG0gLSB0d28gZGltZW5zaW9uIGFycmF5IG9mIGdhcCBwdXJwb3NlcworKiAgIGthbF9pbnQzMiBzdF9zdWJzZm4gLSBzdGFydGluZyB0aW1lIG9mIGV4cGFuc2lvbiBwZXJpb2QKKyogUkVUVVJOUworKiAgIG5vbmUKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RsMV9zZXRfcHVycG9zZV9mb3JfZXhwYW5zaW9uX3BlcmlvZChrYWxfdWludDMyKiogbSwga2FsX2ludDMyIHN0X3N1YnNmbik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdGwxX3NldF90aW1pbmdfc3RhdHVzCisqIERFU0NSSVBUSU9OCisqCisqIFBBUkFNRVRFUlMKKyogICBmbGFnICAgICAtIHNldCB2YWxpZF90aW1pbmcgPSBmbGFnCisqIFJFVFVSTlMKKyogICBub25lCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV90bDFfc2V0X3RpbWluZ19zdGF0dXMoa2FsX2Jvb2wgZmxhZyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdGwxX3N5bmNfdGltZV9yZXEKKyogREVTQ1JJUFRJT04KKyogICBXaGVuIHRpbWluZyBzeW5jaHJvbml6YXRpb24gcHJvY2VkdXJlIGlzIHRyaWdnZXJlZCwgbWxsMSB3aWxsIGRlY2lkZSB3aGljaCByYXQgc2hvdWxkIGRvIAorKiAgIHRpbWluZyBzeW5jaHJvbml6YXRpb24gYmFzZWQgb24gdGhlIHJlc3VsdCBvZiBnX2xsMV9mbGlnaHRfcmF0fHwgZ19sbDFfc3RhbmRieV9yYXQgfHwgZ19sbDFfYWN0aXZlX3JhdC4KKyoKKyogUEFSQU1FVEVSUworKiBSRVRVUk5TCisqICAgbm9uZQorKiBHTE9CQUxTIEFGRkVDVEVECisqICAgbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdGwxX3N5bmNfdGltZV9yZXEodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgbWxsMV90bDFfdGltZV9hZGQKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBhZGQgZWNoaXBzIHRvIHRpbWUKKyoKKyogUEFSQU1FVEVSUworKiAgIHRpbWUgICAgICAgLSBiYXNpYyB0aW1lCisqICAgZWNoaXBzICAgICAtIGVjaGlwcworKiBSRVRVUk5TCisqICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbWxsMV90bDFfdGltZV9hZGQoIHVtdHNfdGRkX3RpbWVfc3RydWN0KiB0aW1lLCBrYWxfaW50MzIgZWNoaXBzKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICAgbWxsMV90bDFfdXBkYXRlX2N1cnJlbnRfdGltZQorKiBERVNDUklQVElPTgorKiAgIGxsMSB1cGRhdGVzIGN1cnJlbnQgdGltZSBhZnRlciB0aW1pbmcgc3luYy4gZG9uZQorKgorKiBQQVJBTUVURVJTCisqICAgdW10c190ZGRfdGltZSAtIGN1cnJlbnQgdGltZQorKiBSRVRVUk5TCisqICAgbm9uZSAKKyogR0xPQkFMUyBBRkZFQ1RFRAorKiAgIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RsMV91cGRhdGVfY3VycmVudF90aW1lKHVtdHNfdGRkX3RpbWVfc3RydWN0KiB0ZGRfdGltZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDQUxMIEZVTkNUSU9OIFBST1RPVFlQRQorKiAgIG1sbDFfdW10c190ZGRfaGFuZGxlcigpCisqCisqIERFU0NSSVBUSU9OCisqICAgRnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBwcmltaXRpdmUgZnJvbSBUTDEuCisqCisqIFBBUkFNRVRFUlMKKyogICBjdXJyZW50X2lsbSAtIHByaW1pdGl2ZSBmcm9tIFRMMS4KKyoKKyogUkVUVVJOCisqICAgTm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1sbDFfdW10c190ZGRfaGFuZGxlcih2b2lkICpwdHJfaWxtKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBtbGwxX3RsMV9pbmZvX2luaXQKKyogREVTQ1JJUFRJT04KKyogIEluaXRpYWxpemUgdGwxIGludGVybmFsIGdsb2JhbCB2YXJpYWJsZQorKgorKiBQQVJBTUVURVJTCisqICBub25lCisqIFJFVFVSTlMKKyogIG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtbGwxX3RkZF9pbmZvX2luaXQodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgIG1sbDFfdGwxX2dhcF9wYXR0ZXJuX3RpbWluZ19jaGVja2luZworKiBERVNDUklQVElPTgorKiAgIGNoZWNrIGlmIHRoZSBwZW5kaW5nIGdhcCBpcyBvdXQgb2YgZGF0ZSBvciBub3QKKyoKKyogUEFSQU1FVEVSUworKiAgIHVtdHNfdGRkX3RpbWUgICAtIHRsMSB0aW1pbmcgY29ycmVzcG9uZCB0byBzb21lIHN0YW5kYnkgcmF0J3MgdGltaW5nIGluZGljYXRlZCBpbiBtZWFzdXJlIHJlcXVlc3QKKyogUkVUVVJOUworKiAgIFRSVUUgICAtIHRoZSBwZW5kaW5nIGdhcCBoYXMgbm90IGJlZW4gb3V0IG9mIGRhdGUKKyogICBGQUxTRSAgIC0gdGhlIHBlbmRpbmcgZ2FwIGhhcyBiZWVuIG91dCBvZiBkYXRlCisqIEdMT0JBTFMgQUZGRUNURUQKKyogICBub25lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIG1sbDFfdGwxX2dhcF9wYXR0ZXJuX3RpbWluZ19jaGVja2luZyh1bXRzX3RkZF90aW1lX3N0cnVjdCB1bXRzX3RkZF90aW1lKTsKKworI2VuZGlmIC8qX01MTDFfVU1UU19URERfSCovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW0yY21fc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW0yY21fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI3OTY5OQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbTJjbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDI0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICoJbW0yY21fc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRzIGZvciBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBiZXR3ZWVuIE1NIGFuZCBDbSBsYXllcnMuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAJCQkJSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9NTTJDTV9TVFJVQ1RfSAorI2RlZmluZSBfTU0yQ01fU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAibWNkX2wzX2luY19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHRpOworfSBtbWNtX2VzdF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggdGk7Cit9IG1tY21fZXN0X2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB0aTsKK30gbW1jbV9kYXRhX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHBzX2NhdXNlX2VudW0gY2F1c2U7Cit9IG1tY21fcmVsX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHBzX2NhdXNlX2VudW0gY2F1c2U7CisgICAga2FsX2Jvb2wgcmVtYWluX2VjYzsgLyogMTogZW1lcmdlbmN5IGNhbGwgaXMga2VwdCAqLworfSBtbWNjX3JlbF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19zdWNjZXNzZnVsOworfSBtbWNjX3NydmNjX2hvX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB0aTsKK30gbW1jbV9lc3RfaW50cl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB0aTsKKyAgICBwc19jYXVzZV9lbnVtIGNhdXNlOworfSBtbWNtX2VzdF9yZWpfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBzeW5jX2luZF9jYXVzZV9lbnVtIGNhdXNlOworICAgIGNoYW5uZWxfdHlwZV9lbnVtIGNoYW5uZWxfdHlwZTsKKyAgICBjaGFubmVsX21vZGVfZW51bSBjaGFubmVsX21vZGU7Cit9IG1tY21fc3luY19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByYXRfZW51bSByYXQ7ICAgICAgLyogUkFUQ01fUkFUX0VOVU0gKi8KK30gbW1jbV9yYXRfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8vIFdoZW4gNEcyMyBpcmF0X3R5cGU9PUlSX1RZUEVfU0VBUkNILCBTTSBuZWVkIHRvIHF1ZXVlIEVTTSB0cmFuc2ZlcnJlZCBjb250ZXh0IHVudGlsIHJlY2VpdmluZyBNU0dfSURfR01NU01fUkFUX0lORC4gCisgICAgLy8gU00gb25seSBuZWVkIHRvIHByb2Nlc3MgdGhpcyBtZXNzYWdlIHdoZW4gX19MVEVfUkFUX18gaXMgb24gYmVjYXVzZSB0aGlzIG1lc3NhZ2UgaXMgb25seSB1c2VkIHdoZW4gNEcyMyBJUl9UWVBFX1NFQVJDSCBpbnRlclJBVAorICAgIC8vIGluIDJHIHNpbmdsZSBtb2RlIHByb2plY3Qgb3IgMjNHIGR1YWwgbW9kZSBwcm9qZWN0LCBTTSB3aWxsIGRyb3AgdGhpcyBtZXNzYWdlCisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByYXRfZW51bSByYXQ7ICAgICAgLyogUkFUQ01fUkFUX0VOVU0gKi8KKyAgICBrYWxfYm9vbCBpc19zdWl0YWJsZV9jZWxsOworICAgIGthbF9ib29sIGlzX2luX25vX3NlcnZpY2U7Cit9IGdtbXNtX3JhdF9pbmRfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHBsbW5faWRfc3RydWN0IHBsbW5faWQ7IAorfSBtbWNtX3BsbW5faW5mb19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKK30gbW1jbV9kdW1teV9sb2NhbF9wYXJhX3N0cnVjdDsKKwordHlwZWRlZiBtbWNtX2VzdF9pbmRfc3RydWN0IG1tY2NfZXN0X2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIG1tY21fZXN0X2NuZl9zdHJ1Y3QgbW1jY19lc3RfY25mX3N0cnVjdDsKK3R5cGVkZWYgbW1jbV9kYXRhX2luZF9zdHJ1Y3QgbW1jY19kYXRhX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIG1tY21fZXN0X2ludHJfc3RydWN0IG1tY2NfZXN0X2ludHJfc3RydWN0OwordHlwZWRlZiBtbWNtX2VzdF9yZWpfc3RydWN0IG1tY2NfZXN0X3Jlal9zdHJ1Y3Q7Cit0eXBlZGVmIG1tY21fc3luY19pbmRfc3RydWN0IG1tY2Nfc3luY19pbmRfc3RydWN0OworCit0eXBlZGVmIG1tY21fcmF0X2luZF9zdHJ1Y3QgbW1jY19yYXRfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBtbWNtX3BsbW5faW5mb19pbmRfc3RydWN0IG1tY2NfcGxtbl9pbmZvX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgbW1jbV9lc3RfaW5kX3N0cnVjdCBtbXNzX2VzdF9pbmRfc3RydWN0OwordHlwZWRlZiBtbWNtX2VzdF9jbmZfc3RydWN0IG1tc3NfZXN0X2NuZl9zdHJ1Y3Q7Cit0eXBlZGVmIG1tY21fZGF0YV9pbmRfc3RydWN0IG1tc3NfZGF0YV9pbmRfc3RydWN0OwordHlwZWRlZiBtbWNtX3JlbF9pbmRfc3RydWN0IG1tc3NfcmVsX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIG1tY21fZXN0X2ludHJfc3RydWN0IG1tc3NfZXN0X2ludHJfc3RydWN0OwordHlwZWRlZiBtbWNtX2VzdF9yZWpfc3RydWN0IG1tc3NfZXN0X3Jlal9zdHJ1Y3Q7Cit0eXBlZGVmIG1tY21fcmF0X2luZF9zdHJ1Y3QgbW1zc19yYXRfaW5kX3N0cnVjdDsKKworCit0eXBlZGVmIG1tY21fZXN0X2luZF9zdHJ1Y3QgbW1zbXNfZXN0X2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIG1tY21fZXN0X2NuZl9zdHJ1Y3QgbW1zbXNfZXN0X2NuZl9zdHJ1Y3Q7Cit0eXBlZGVmIG1tY21fZGF0YV9pbmRfc3RydWN0IG1tc21zX2RhdGFfaW5kX3N0cnVjdDsKK3R5cGVkZWYgbW1jbV9yZWxfaW5kX3N0cnVjdCBtbXNtc19yZWxfaW5kX3N0cnVjdDsKK3R5cGVkZWYgbW1jbV9lc3RfaW50cl9zdHJ1Y3QgbW1zbXNfZXN0X2ludHJfc3RydWN0OwordHlwZWRlZiBtbWNtX2VzdF9yZWpfc3RydWN0IG1tc21zX2VzdF9yZWpfc3RydWN0OwordHlwZWRlZiBtbWNtX3JhdF9pbmRfc3RydWN0IG1tc21zX3JhdF9pbmRfc3RydWN0OworCisjZW5kaWYgCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21tMmxsY19zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbTJsbGNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRlNTAxOQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbTJsbGNfc3RydWN0LmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICBtbTJsbGNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBjb21tb24gc3RydWN0dXJlIG9mIE1NIGFuZCBMTEMuIAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX01NMkxMQ19TVFJVQ1RfSAorI2RlZmluZSBfTU0yTExDX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorI2luY2x1ZGUgInNlY3VyaXR5X2tleXNfc3RydWN0LmgiCisjaW5jbHVkZSAibDNsbGNfZW51bXMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiBvbGRfdGxsaTsgLyogeHl6Ki8KKyAgICBrYWxfdWludDMyIG5ld190bGxpOyAvKiB4eXoqLworICAgIHRsbGlfdXBkYXRlX3R5cGVfZW51bSB0bGxpX3VwZGF0ZV90eXBlOyAvKiB4eXoqLworICAgIGthbF91aW50OCBjaXBoZXJfYWxnbzsgLyogeHl6Ki8KKyAgICBrZXlfc3RydWN0IGNpcGhlcl9rZXk7IC8qIENpcGhlciBLZXkqLworfSBsbGdtbV9hc3NpZ25fcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiB0bGxpOyAvKiB4eXoqLworICAgIGthbF91aW50OCBjYXVzZTsgLyogeHl6Ki8KKyAgICBrYWxfdWludDggY2VsbF91cGRhdGVfdHlwZTsKK30gbGxnbW1fdHJpZ2dlcl9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIHRsbGk7IC8qIHh5eiovCit9IGxsZ21tX3N1c3BlbmRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiB0bGxpOyAvKiB4eXoqLworfSBsbGdtbV9yZXN1bWVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBsbGdtbV9hc3NpZ25fcmVxX3N0cnVjdCBsbGNfZ21tX2Fzc2lnbl9yZXFfc3RydWN0OwordHlwZWRlZiBsbGdtbV90cmlnZ2VyX3JlcV9zdHJ1Y3QgbGxjX2dtbV90cmlnZ2VyX3JlcV9zdHJ1Y3QgOwordHlwZWRlZiBsbGdtbV9zdXNwZW5kX3JlcV9zdHJ1Y3QgbGxjX2dtbV9zdXNwZW5kX3JlcV9zdHJ1Y3QgOwordHlwZWRlZiBsbGdtbV9yZXN1bWVfcmVxX3N0cnVjdCBsbGNfZ21tX3Jlc3VtZV9yZXFfc3RydWN0IDsKKworI2VuZGlmIAorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbTJzbV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbTJzbV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDk4YmUxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21tMnNtX3N0cnVjdC5oCkBAIC0wLDAgKzEsMjY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgbW0yc21fc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBjb21tb24gc3RydWN0dXJlIG9mIE1NIGFuZCBTTS4gCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfTU0yU01fU1RSVUNUX0gKKyNkZWZpbmUgX01NMlNNX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorI2luY2x1ZGUgIm1tY21fZW51bXMuaCIKKyNpbmNsdWRlICJzbW1tX2VudW1zLmgiCisjaW5jbHVkZSAiYXMybmFzX3N0cnVjdC5oIgorI2luY2x1ZGUgImlyYXRfY29tbW9uX3N0cnVjdC5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBnbW1zbV9jYXVzZV9lbnVtIGNhdXNlOworfSBnbW1zbV9zdXNwZW5kX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorfSBnbW1zbV9yZXN1bWVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgLy9rYWxfdWludDggY2VsbF9zdXBwb3J0X2VncHJzOworICAgIHJyX21tX3Nnc25yX2ZsYWdfZW51bSAgc2dzbnJfZmxhZzsgLyogRXJpY2E6IDIwMDcwMzIwIHNnc25yICovCit9IGdtbXNtX2NlbGxfaW5mb191cGRhdGVfaW5kX3N0cnVjdDsgLyogSm9obm55OiBmb3IgZWdwcnMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcnJfbW1fc2dzbnJfZmxhZ19lbnVtICBzZ3Nucl9mbGFnOworICAgIGdtbXNtX2ZvcF9zdGF0dXNfZW51bSAgZm9sbG93X29uX3N0YXR1czsKK30gZ21tc21fYXR0YWNoX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGdtbXNtX2NhdXNlX2VudW0gY2F1c2U7Cit9IGdtbXNtX2F0dGFjaF9yZWpfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBnbW1zbV9jYXVzZV9lbnVtIGNhdXNlOworCisgICAgLyoqIE1NIG5vdGlmaWVzIFNNIHRvIHN0b3AgdDMzOTYgYXMgc3BlY2lmaWVkIGluIDI0LjAwOC4gCisgICAgICogIFRSVUUgCisgICAgICogIC0gMTogTlcgZGV0YWNoZXMgd2l0aCBjYXVzZSAicmUtYXR0YWNoIHJlcXVpcmVkIiAKKyAgICAgKiAgLSAyOiBOVyBwYWdlcyBmb3IgR1BSUyBzZXJ2aWNlIHVzaW5nIElNU0kgCisgICAgICogCisgICAgICogIEZBTFNFCisgICAgICogIE90aGVyd2lzZSAuIAorICAgICAqLworICAgIGthbF9ib29sIGlzX3N0b3BfdDMzOTYgOworfSBnbW1zbV9kZXRhY2hfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgZ21tY21fcmVzdWx0X2VudW0gY2F1c2U7ICAgIC8qIGdtbWNtX3Jlc3VsdF9lbnVtICovCit9IGdtbXNtX2VzdF9yZWpfc3RydWN0OyAKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgRENfU3RhdHVzIHN0YXR1czsKKyAgICBwZWVyX21zZ19pZF9zdHJ1Y3QgcGVlcl9tc2dfaWQ7Cit9IGdtbXNtX3VuaXRkYXRhX2NuZl9zdHJ1Y3Q7CisKKyNpZmRlZiBfX1JFTDRfXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQxNiBuc2FwaV9zdGF0dXM7Cit9IGdtbXNtX25zYXBpX3N0YXR1c19pbmRfc3RydWN0OworI2VuZGlmCisKKy8qKiAKKyAgKiBBY2NvcmRpbmcgdG8gTXVsdGltb2RlIGludGVyUkFUIG1lc3NhZ2UgcHJvY2Vzc2luZyBydWxlcywgCisgICogdGhlIHJlY2VpdmluZyBtb2R1bGUsIHNhaWQuLi4gdGhlIE1PRF9BLCBuZWVkIHRvIHByb2Nlc3MgdGhpcyBtZXNzYWdlIGluIHRoZSBmb2xsb3dpbmcgd2F5ICAKKyAgKiAtICgxKSBSZWxheSB0aGlzIGludGVyUkFUIG1lc3NhZ2UgdG8gbmV4dCBtb2R1bGUsIHNhaWQuLi4gdGhlIE1PRF9CLCBmaXJzdAorICAqIC0gKDIpIHRoZW4gTU9EX0EgY2FuIHN0YXJ0IHRvIGRvIHByb2Nlc3Npbmcgb2YgdGhpcyBtZXNzYWdlCisgICogYmVjYXVzZSB3aGVuIGEgUkQgZGVzaWducyBhIG5ldyBNTSBpUkFUIGZlYXR1cmUsIGhlL3NoZSB3aWxsIGFzc3VtZSBvdGhlcnMgcHJvY2VzcyB0aGVzZSBtZXNzYWdlcyBpbiB0aGlzIHdheQorICAqIHRoaXMgcnVsZXMgbWFrZSBzdXJlcyB0aGUgaW50ZXJSQVQgbWVzc2FnZSBmbG93IGlzIGFzIGV4cGVjdGVkCisgICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBpcmF0X3R5cGVfZW51bQlpcmF0X3R5cGU7ICAvL0luZGljYXRlcyB0aGUgaW50ZXItUkFUIHR5cGUKKyAgICByYXRfdHlwZV9lbnVtCXNvdXJjZV9yYXQ7IC8vU291cmNlIFJBVCAoR0FTIG9yIFVBUykKKyAgICByYXRfdHlwZV9lbnVtCXRhcmdldF9yYXQ7IC8vVGFyZ2V0IFJBVCAoU2hvdWxkIGJlIEVBUykKKworICAgIG1tMmVtbV9pcmF0X2luZm9fc3RydWN0IG1tX2luZm87CisgICAgdm9pZCoJYXNfaW5mb19wdHI7ICAgIC8vSW5kaWNhdGVzIHRoZSBhZGRyZXNzIG9mIHRoZSBhY3RpdmF0aW9uIHJlcXVlc3QgZm9yIFJBVCBjaGFuZ2UgdG8gTFRFLCB0aGUgaW5mb3JtYXRpb24gaXMgZGVkaWNhdGVkIGZvciBBUy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1RoZSBidWZmZXIgd2lsbCBiZSBmcmVlZCBieSBzb3VyZSBvciB0YXJnZXQgQVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL05vdGU6IEl0IHNob3VsZCBiZSBOVUxMIGlmIGlyYXRfdHlwZSBpcyBJUl9UWVBFX1NFQVJDSAorfSBnbW1zbV9yYXRfY2hhbmdlX2luZF9zdHJ1Y3Q7Ly8gKDIzRzQgc3RhcnQpIAorCisvKiogCisgICogQWNjb3JkaW5nIHRvIE11bHRpbW9kZSBpbnRlclJBVCBtZXNzYWdlIHByb2Nlc3NpbmcgcnVsZXMsIAorICAqIHRoZSByZWNlaXZpbmcgbW9kdWxlLCBzYWlkLi4uIHRoZSBNT0RfQSwgbmVlZCB0byBwcm9jZXNzIHRoaXMgbWVzc2FnZSBpbiB0aGUgZm9sbG93aW5nIHdheSAgCisgICogLSAoMSkgUmVsYXkgdGhpcyBpbnRlclJBVCBtZXNzYWdlIHRvIG5leHQgbW9kdWxlLCBzYWlkLi4uIHRoZSBNT0RfQiwgZmlyc3QKKyAgKiAtICgyKSB0aGVuIE1PRF9BIGNhbiBzdGFydCB0byBkbyBwcm9jZXNzaW5nIG9mIHRoaXMgbWVzc2FnZQorICAqIGJlY2F1c2Ugd2hlbiBhIFJEIGRlc2lnbnMgYSBuZXcgTU0gaVJBVCBmZWF0dXJlLCBoZS9zaGUgd2lsbCBhc3N1bWUgb3RoZXJzIHByb2Nlc3MgdGhlc2UgbWVzc2FnZXMgaW4gdGhpcyB3YXkKKyAgKiB0aGlzIHJ1bGVzIG1ha2Ugc3VyZXMgdGhlIGludGVyUkFUIG1lc3NhZ2UgZmxvdyBpcyBhcyBleHBlY3RlZAorICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgaXJhdF90eXBlX2VudW0gaXJhdF90eXBlOworICAgIHJhdF90eXBlX2VudW0gc291cmNlX3JhdDsKKyAgICByYXRfdHlwZV9lbnVtIHRhcmdldF9yYXQ7CisgICAgaXJhdF9yZXN1bHRfZW51bSBpcmF0X3Jlc3VsdDsKKworICAgIGthbF9ib29sIGlzX3BzX3NpZ19jb25uZWN0ZWQ7ICAgLy9HTU0gaW5mb3JtIFNNIGFib3V0IHRoZSBQUyBTaWduYWxsaW5nIENvbm4gc3RhdHVzCisgICAga2FsX2Jvb2wgaXNfYXR0YWNoZWQ7IC8vIDIwMTIvMTIvNCBtYWlsIGNvbmZpcm1lZC4gR01NIHRlbGxzIFNNIGlmIEdNTSBpcyBjdXJyZW50bHkgYXR0YWNoZWQgb3IgZGV0YWNoZWQgKEdNTSBvd25lciBjb25maXJtZWQgdGhhdCBhdHRhY2hpbmcgaXMgbm90IHBvc3NpYmxlLCBvbmx5IGF0dGFjaGVkIG9yIGRldGFjaGVkIGlzIHBvc3NpYmxlKQorCisgICAgdm9pZCoJIGFzX2luZm9fcHRyOyAgICAvL1RoZSBwb2ludGVyIG9mIEFTIGNvbnRhaW5lciBpbmZvcm1hdGlvbgorICAgIC8vIGNoZWNrIEw0X05BU19SQVRfQ0hBTkdFX1NBUC5kb2N4IGZvciBkZXRhaWwKK30gZ21tc21fcmF0X2NoYW5nZV9jbmZfc3RydWN0OyAvLyAoNEcyMyBmaW5pc2gpIG5vdGU6IG5lZWQgdHdvIHN0YWdlIENORiBpZiBJUkNDTworCisjaWZkZWYgX19HRU1JTklfXwordHlwZWRlZiBzdHJ1Y3QgeworCUxPQ0FMX1BBUkFfSERSCisJYXNfZ2VtaW5pX3N0YXR1c19lbnVtIAlhc19nZW1pbmlfc3RhdHVzOworfWdtbXNtX3ZpcnR1YWxfbW9kZV9pbmRfc3RydWN0OworI2VuZGlmCisKKyNlbmRpZiAKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW0yc21zX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW0yc21zX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyMTJjYgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbTJzbXNfZW51bXMuaApAQCAtMCwwICsxLDExMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIG1tMnNtc19lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9NTTJTTVNfRU5VTVNfSAorI2RlZmluZSBfTU0yU01TX0VOVU1TX0gKKwordHlwZWRlZiBlbnVtIHsKKyAgICAgQ1NfUkVMRUFTRSA9IDAsCisgICAgIFBTX1JFTEVBU0UsCisgICAgIFJFTEVBU0VfRk9SX0JPVEgsCisgICAgIENTX0FUVEFDSEVELAorICAgICBQU19BVFRBQ0hFRCwKKyAgICAgQ09NQklORURfQVRUQUNIRUQsCisgICAgIEFUVEFDSF9SRUpFQ1QsCisgICAgIEdNTV9TVVNQRU5ERUQsIC8qIFJpcHBsZSovCisgICAgIEdNTV9SRVNVTUVECit9Z21tX3Ntc19yZWdfc3RhdGVfZW51bTsgIAorCit0eXBlZGVmIGVudW0geworICAgICBSQVVfU1RBUlRFRCA9IDAsCisgICAgIFJBVV9FTkQKK31nbW1fc21zX3JhdV9zdGF0ZV9lbnVtOyAgCisKKy8vQWRkZWQgZm9yIFNLVCBPcGVyYXRvciA6IEtPUiBSRVEgSUQgOiAzMjgsMjk5Cit0eXBlZGVmIGVudW0geworICAgICBDU19DT05ORUNURUQgPSAwLCAgICAgIC8vW2ldQ1MgQ29ubmVjdGVkIGluZGljYXRlcyB0aGF0IFJSQyBDb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkCisgICAgIFBTX0NPTk5FQ1RFRF9DVVNUT00sICAgLy8gW2lpXVBTIENvbm5lY3RlZCBpbmRpY2F0ZXMgdGhhdCBQRFAgY29udGV4dCBpcyBBY3RpdmUgYW5kIFJSQyBDb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkW1VNVFNdL0dNTSBpcyBub3QgaW4gU3VzdXBlbmQgU3RhdGVbR1NNXQorICAgICBDU19QU19DT05ORUNURURfQ1VTVE9NLC8vIFRoaXMgZW51bSBpbmRpY2F0ZXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgYWJvdmUgbWVudGlvbmVkIDIgRW51bXMoW2ldICYgW2lpXSkKKyAgICAgQ1NfUFNfSURMRV9DVVNUT00KK31nbW1fc21zX2NuX2RvbWFpbl9zdGF0ZV9lbnVtOworCisKKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21tMnNtc19zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbTJzbXNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2MjU4MAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbTJzbXNfc3RydWN0LmgKQEAgLTAsMCArMSwxNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqCW1tMnNtc19zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGludGVuZHMgZm9yIHN0cnVjdHVyZSBkZWZpbml0aW9uIGJldHdlZW4gU01TIGFuZCBNTS4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDAyCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgRklMRU5BTUUgOiBtbTJzbXNfc3RydWN0LmgKKyAqICBTWU5PUFNJUyA6IEZ1bmN0aW9ucyBmb3IgZW5jb2RpbmcvZGVjb2RpbmcuCisgKgorICogICAgICAgICAgICAgICAgICAgICAgUiBFIFYgSSBTIEkgTyBOICAgIEggSSBTIFQgTyBSIFkKKyAqCisgKi8KKyNpZm5kZWYgX01NMlNNU19TVFJVQ1RfSAorI2RlZmluZSBfTU0yU01TX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorI2luY2x1ZGUgIm1tY21fZW51bXMuaCIKKyNpbmNsdWRlICJtbTJzbXNfZW51bXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKyNpbmNsdWRlICJtbTJjbV9zdHJ1Y3QuaCIKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBnbW1fc21zX3JlZ19zdGF0ZV9lbnVtIHJlZ19zdGF0ZTsKKyAgICBycF9lbnVtIHJhZGlvX3ByaW9yaXR5OworfSBnbW1zbXNfcmVnX3N0YXRlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGdtbV9zbXNfcmF1X3N0YXRlX2VudW0gcmF1X3N0YXRlOworfSBnbW1zbXNfcmF1X3N0YXRlX2luZF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgZ21tY21fcmVzdWx0X2VudW0gY2F1c2U7ICAgICAvKiBnbW1jbV9yZXN1bHRfZW51bSAqLworfSBnbW1zbXNfZXN0X3Jlal9zdHJ1Y3Q7CisKK3R5cGVkZWYgbW1jbV9zeW5jX2luZF9zdHJ1Y3QgbW1zbXNfc3luY19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBnbW1fc21zX2NuX2RvbWFpbl9zdGF0ZV9lbnVtIGNuX2RvbWFpbl9zdGF0ZTsKK30gZ21tc21zX2NuX2RvbWFpbl9zdGF0ZV9pbmRfc3RydWN0OworCisKKyNlbmRpZiAKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW1fcmF0Y21fZW51bXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbV9yYXRjbV9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZDA2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW1fcmF0Y21fZW51bXMuaApAQCAtMCwwICsxLDg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgbW1fcmF0Y21fZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT05aQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIE1NX1JBVENNX0VOVU1TX0gKKyNkZWZpbmUgTU1fUkFUQ01fRU5VTVNfSAorCit0eXBlZGVmIGVudW0geworICAgUkFUQ01fT1JJR19DT05WRVJfQ0FMTCwKKyAgIFJBVENNX09SSUdfU1RSRUFNSU5HX0NBTEwsCisgICBSQVRDTV9PUklHX0lOVEVSQUNUSVZFX0NBTEwsCisgICBSQVRDTV9PUklHX0JBQ0tHUk9VTkRfQ0FMTCwKKyAgIFJBVENNX09SSUdfU1VCU0NSSUJFRF9DQUxMLAorICAgUkFUQ01fVEVSTV9DT05WRVJfQ0FMTCwKKyAgIFJBVENNX1RFUk1fU1RSRUFNSU5HX0NBTEwsCisgICBSQVRDTV9URVJNX0lOVEVSQUNUSVZFX0NBTEwsCisgICBSQVRDTV9URVJNX0JBQ0tHUk9VTkRfQ0FMTCwKKyAgIFJBVENNX0VNRVJHRU5DWV9DQUxMLAorICAgUkFUQ01fSU5URVJfUkFUX0NFTExfUkVTRUxFQ1RJT04sCisgICBSQVRDTV9SRUdJU1RSQVRJT04sCisgICBSQVRDTV9ERVRBQ0gsCisgICBSQVRDTV9ISUdIX1BSSU9SSVRZX1NJRywKKyAgIFJBVENNX0xPV19QUklPUklUWV9TSUcsCisgICBSQVRDTV9DQUxMX1JFX0VTVEFCTElTSE1FTlQsCisgICBSQVRDTV9SUkNfRXN0YWJsaXNobWVudENhdXNlX3Rlcm1pbmF0aW5nSGlnaFByaW9yaXR5U2lnbmFsbGluZywKKyAgIFJBVENNX1JSQ19Fc3RhYmxpc2htZW50Q2F1c2VfdGVybWluYXRpbmdMb3dQcmlvcml0eVNpZ25hbGxpbmcsCisgICBSQVRDTV9SUkNfRXN0YWJsaXNobWVudENhdXNlX3Rlcm1pbmF0aW5nQ2F1c2VVbmtub3duLAorICAgUkFUQ01fU1BFRUNIX0NBTEwsCisgICBSQVRDTV9EQVRBX0NBTEwsCisgICBSQVRDTV9TU19EQVRBLAorICAgUkFUQ01fVklERU9fQ0FMTCAvKiBfX1JFTDZfXyAqLworfW1tX3JhdGNtX2VzdF9jYXVzZV9lbnVtOworCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW1fcmF0Y21fc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW1fcmF0Y21fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwNmJmZQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbV9yYXRjbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDc4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIG1tX3JhdGNtX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTlpBCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgTU1fUkFUQ01fU1RSVUNUX0gKKyNkZWZpbmUgTU1fUkFUQ01fU1RSVUNUX0gKKworI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorI2luY2x1ZGUgIm1jZF9sM19pbmNfc3RydWN0LmgiCisjaW5jbHVkZSAibDNfaW5jX2xvY2FsLmgiCisjaW5jbHVkZSAibDNsbGNfZW51bXMuaCIKKyNpbmNsdWRlICJtbWxsY19lbnVtcy5oIgorI2luY2x1ZGUgImFzMm5hc19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX2dwcnNfc3RydWN0LmgiCisjaW5jbHVkZSAicHNfcHVibGljX2VudW0uaCIKKyNpbmNsdWRlICJtbV9yYXRjbV9lbnVtcy5oIgorI2luY2x1ZGUgInJzdmFzX2VudW0uaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKyNpbmNsdWRlICJpcmF0X2NvbW1vbl9zdHJ1Y3QuaCIKKyNpbmNsdWRlICJpcmF0X2NvbW1vbl9lbnVtcy5oIgorI2luY2x1ZGUgIm5hc19hc19pbnRlcl9jb3JlX2VudW0uaCIKKyNpbmNsdWRlICJnbXNzX3B1YmxpYy5oIgorI2luY2x1ZGUgIm53c2VsX21tX3N0cnVjdC5oIgorCisjaW5jbHVkZSAibmFzX3N2X3N0cnVjdC5oIgorCisjaW5jbHVkZSAicmF0Y21fcnJjZV9zdHJ1Y3QuaCIKKyNpbmNsdWRlICJyYXRjbV9jc2NlX3N0cnVjdC5oIgorI2luY2x1ZGUgIm1taTJtbV9zdHJ1Y3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmZvZmZfY2F1c2VfZW51bSByZm9mZl9jYXVzZTsKK30gbW1fcmF0Y21fcmZvZmZfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmF0X2VudW0gcmF0OworICAgIHJhdF9lbnVtIHJlcG9ydGVkX3JhdDsKKyAgICByYXRfZW51bSBhY3RpdmVfcmF0OworfSBtbV9yYXRjbV9zZXRfcmF0X21vZGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfc3VjY2Vzc2Z1bDsKKyAgICBtbV9jYXVzZV9lbnVtIGNhdXNlOworfSBtbV9yYXRjbV9zZXRfcmF0X21vZGVfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGRyeF9wYXJhWzJdOyAvKiBmb3Igc3BsaXQgcGFnaW5nIGN5Y2xlIGFuZCBub24tZHJ4IHRpbWVyICovCisgICAga2FsX3VpbnQ4IGltZWlzdl92YWx1ZV9kaWdpdDA7CisgICAga2FsX3VpbnQ4IGltZWlzdl92YWx1ZV9kaWdpdF9ieXRlWzhdOworI2lmZGVmIF9fTU9OSVRPUl9QQUdFX0RVUklOR19UUkFOU0ZFUl9fCisgICAgZ3Byc190cmFuc2Zlcl9wcmVmZXJlbmNlX2VudW0gcHJlZmVyOworI2VuZGlmCisgICAgaW5pdF9jYXVzZV9lbnVtIGluaXRfY2F1c2U7Cit9IG1tX3JhdGNtX2luaXRfcmVxX3N0cnVjdDsKKworCit0eXBlZGVmIG53c2VsX25hc19zdl9wbG1uX3NlYXJjaF9yZXFfc3RydWN0IG1tX3JhdGNtX3BsbW5fc2VhcmNoX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB0cnhfaWQ7CisgICAgcGxtbl9zZWFyY2hfcmVzdWx0X2VudW0gcmVzdWx0OworICAgIHJhdF9lbnVtIHJhdDsKKyAgICBwbG1uX2lkX3N0cnVjdCBzZWxlY3RlZF9wbG1uOworICAgIGthbF9ib29sIGlzX2FzX3BsbW5fbGlzdF9wcmVzZW50OworICAgIGFzX3BsbW5fbGlzdF9zdHJ1Y3QgYXNfcGxtbl9saXN0OworICAgIGFzX2NlbGxfdHlwZV9lbnVtICAgc2VsZWN0ZWRfY2VsbF90eXBlOyAvLzIwMDgxMDI3CisgICAga2FsX3VpbnQ4IG11bHRpX3BsbW5fY291bnQ7CisgICAgcGxtbl9pZF9zdHJ1Y3QgbXVsdGlfc2VsZWN0ZWRfcGxtbltNQVhfTlVNX01VTFRJX1BMTU5dOworICAgIGFzX2NlbGxfdHlwZV9lbnVtIG11bHRpX3NlbGVjdGVkX2NlbGxfdHlwZVtNQVhfTlVNX01VTFRJX1BMTU5dOworICAgIHNjYW5fdHlwZV9lbnVtIHNjYW5fdHlwZTsKKyAgICBrYWxfYm9vbCBpc19zdG9yZWRfbGlzdF9leGlzdDsgLy8gb25seSBmb3Igc3RvcmVkIHNlYXJjaCBub3QgZm9yIGZ1bGxiYW5kICsgZnVsbGJhbmQgYW5kIHN0b3JlZAorICAgIGZ1bGxiYW5kX3Jlc3VsdF9lbnVtIGlzX2Z1bGxiYW5kX2ZpbmlzaGVkOworICAgIGthbF9ib29sIGlzX3F1aWNrX3NlYXJjaDsKK30gbW1fcmF0Y21fcGxtbl9zZWFyY2hfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7IAorICAgIExPQ0FMX1BBUkFfSERSIAorICAgIGthbF91aW50OCBtdWx0aV9wbG1uX2NvdW50OyAKKyAgICBwbG1uX2lkX3N0cnVjdCBtdWx0aV9wbG1uX2lkW01BWF9OVU1fTVVMVElfUExNTl07IAorICAgIGFzX2NlbGxfdHlwZV9lbnVtIG11bHRpX2NlbGxfdHlwZVtNQVhfTlVNX01VTFRJX1BMTU5dOworICAgIHJhdF9lbnVtIHJhdDsKKyAgICAvLy8gc291cmNlIGZyb20gY2VsbCByZXNlbGVjdGlvbiBvciBzZWFyY2ggCisgICAgZm91bmRfaW5kX3NvdXJjZV9lbnVtIHNvdXJjZTsKK30gbW1fcmF0Y21fcGxtbl9mb3VuZF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcGxtbl9pZF9jb3VudDsKKyAgICBwbG1uX2lkX3N0cnVjdCBwbG1uX2lkW01EMV9NQVhfTlVNX0hQTE1OXTsgCisgICAga2FsX3VpbnQ4IGhvbWVfY291bnRyeV9tY2NbM107Cit9IG1tX3JhdGNtX2hwbG1uX2luZm9fdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBsYV9jb2RlWzJdOworICAgIGZvcmJpZGRlbl9sYV90eXBlX2VudW0gZm9yYmlkZGVuX2xhX3R5cGU7IC8qIGZvcmJpZGRlbl9sYV90eXBlX2VudW0gKi8KKyAgICBwbG1uX2lkX3N0cnVjdCBwbG1uX2lkOworfSBtbV9yYXRjbV9hZGRfZm9yYmlkZGVuX2xhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBsYV9jb2RlWzJdOworICAgIHBsbW5faWRfc3RydWN0IHBsbW5faWQ7CisgICAga2FsX2Jvb2wgZGVsZXRlX2FsbDsKK30gbW1fcmF0Y21fZGVsX2ZvcmJpZGRlbl9sYV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBjc2dfdXBkYXRlX3R5cGVfZW51bSBjc2dfdXBkYXRlX3R5cGU7CisgICAgcGxtbl9pZF9zdHJ1Y3QgcGxtbl9pZDsKKyAgICBrYWxfdWludDMyIGNzZ19pZDsKK30gbW1fcmF0Y21fdXBkYXRlX2FsbG93ZWRfY3NnX2xpc3RfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBtbV9zeXNfaW5mb19pbmRfc3RydWN0IG1tX3JhdGNtX3N5c19pbmZvX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIG1tX2NlbGxfZ2xvYmFsX2lkZW50aXR5X2luZm9faW5kX3N0cnVjdCBtbV9yYXRjbV9jZWxsX2dsb2JhbF9pZGVudGl0eV9pbmZvX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX2FzX3BsbW5fbGlzdF9wcmVzZW50OworICAgIGFzX3BsbW5fbGlzdF9zdHJ1Y3QgYXNfcGxtbl9saXN0OworICAgIGNzZmJfaW5kaWNhdG9yX2VudW0gY3NmYl9pbmQ7CisjaWZkZWYgX19HRU1JTklfXworICAgIGFzX3N1c3BlbmRfbW9kZV9yZWFzb25fZW51bSBjYXVzZTsgLyogZm9yIFJSIHN1c3BlbmQgbW9kZSAqLworI2VuZGlmIC8qIF9fR0VNSU5JX18gKi8KKyAgICBwbG1uX2xvc3NfcmVhc29uX2VudW0gcGxtbl9sb3NzX3JlYXNvbjsKK30gbW1fcmF0Y21fcGxtbl9sb3NzX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgbmFzX3N2X21tX3BsbW5fbGlzdF9yZXFfc3RydWN0IG1tX3JhdGNtX3BsbW5fbGlzdF9yZXFfc3RydWN0OworCit0eXBlZGVmIG53c2VsX21tX3BsbW5fbGlzdF9zdGF0dXNfdXBkYXRlX3JlcV9zdHJ1Y3QgbW1fcmF0Y21fcGxtbl9saXN0X3N0YXR1c191cGRhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBuYXNfc3ZfbW1fcGxtbl9saXN0X2NuZl9zdHJ1Y3QgbW1fcmF0Y21fcGxtbl9saXN0X2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgbmFzX3N2X21tX2NzZ19saXN0X3JlcV9zdHJ1Y3QgIG1tX3JhdGNtX2NzZ19saXN0X3JlcV9zdHJ1Y3Q7CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgUkFUQ01fUlJDX1BhZ2luZ0NhdXNlIHBhZ2luZ19jYXVzZTsKKyAgICBkb21haW5faWRfZW51bSBjbl9kb21haW5faWQ7CisgICAgdWVfaWRfdHlwZV9lbnVtIHVlX2lkX3R5cGU7Cit9IG1tX3JhdGNtX3BhZ2VfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiBvbGRfdGxsaTsKKyAgICBrYWxfdWludDMyIG5ld190bGxpOworICAgIHRsbGlfdXBkYXRlX3R5cGVfZW51bSBzdGF0dXNfdGxsaTsKKyAgICByYWlfc3RydWN0IHJhaTsKK30gbW1fcmF0Y21fdGxsaV9hc3NpZ25fcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfdG1zaV9sYWlfcHJlc2VudDsKKyAgICBrYWxfdWludDggdG1zaVs0XTsKKyAgICBrYWxfYm9vbCBpc19sYWlfYWJub3JtYWw7IC8qIE1BVUlfMDE5NTk0OTUgKi8KKyAgICBsYWlfc3RydWN0IHJlZ19sYWk7CisgICAga2FsX2Jvb2wgaXNfcHRtc2lfcmFpX3ByZXNlbnQ7CisgICAga2FsX3VpbnQ4IHB0bXNpWzRdOworICAgIGthbF9ib29sIGlzX3JhaV9hYm5vcm1hbDsgLyogTUFVSV8wMTk1OTQ5NSAqLworICAgIHJhaV9zdHJ1Y3QgcmVnX3JhaTsKKyAgICBrYWxfdWludDggdW10c19wc19kcnhfY2xjOworfSBtbV9yYXRjbV9wYWdpbmdfcGFyYW1fYXNzaWduX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGRvbWFpbl9pZF9lbnVtIGNuX2RvbWFpbl9pZDsKKyAgICBrYWxfYm9vbCBpc19uZXdfa2V5czsKKyAgICBrYWxfdWludDggY2tzbjsKKyAgICBrYWxfYm9vbCBnc21fY2lwaGVyX2tleV9pbmZvUDsKKyAgICBrYWxfdWludDggZ3NtX2NpcGhlcl9rZXlfaW5mb1tLQ19MRU5dOworICAgIGthbF9ib29sIGdzbV9jaXBoZXJfa2V5MTI4X2luZm9QOworICAgIGthbF91aW50OCBnc21fY2lwaGVyX2tleTEyOF9pbmZvW0tDMTI4X0xFTl07CisgICAga2FsX3VpbnQ4IHBzX2NpcGhlcl9hbGdvOworICAgIGthbF9ib29sIHVtdHNfa2V5c19pbmZvUDsKKyAgICBrYWxfdWludDggdW10c19jaXBoZXJfa2V5X2luZm9bQ0tfTEVOXTsKKyAgICBrYWxfdWludDggdW10c19pbnRlZ3JpdHlfa2V5X2luZm9bSUtfTEVOXTsKKyAgICBrYWxfYm9vbCBpc19wb3dlcl9vbjsgLy8gZm9yIFRTIDI0LjAwOCBDUjE5OTQKK30gbW1fcmF0Y21fc2VjdXJpdHlfbW9kZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBzeW5jX2luZF9jYXVzZV9lbnVtIGNhdXNlOworICAgIGNoYW5uZWxfdHlwZV9lbnVtIGNoYW5uZWxfdHlwZTsgLyogY2hhbm5lbF90eXBlX2VudW0gKi8KKyAgICBjaGFubmVsX21vZGVfZW51bSBjaGFubmVsX21vZGU7IC8qIGNoYW5uZWxfbW9kZV9lbnVtICovCisgICAga2FsX3VpbnQ4IHNpOworICAgIGthbF9ib29sIGlzX2NpcGhlcl9vbjsKK30gbW1fcmF0Y21fc3luY19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBkb21haW5faWRfZW51bSBjbl9kb21haW5faWQ7CisgICAga2FsX2Jvb2wgaXNfaW50ZWdyaXR5X2VuYWJsZWQ7CisgICAgQ2lwaGVyaW5nX1N0YXR1cyB1bXRzX2NpcGhlcmluZ19zdGF0dXM7CisgICAga2FsX3VpbnQ4IHNlcnZpY2VfcmVxX211aTsKK30gbW1fcmF0Y21fc2VjdXJpdHlfbW9kZV9jb21wbGV0ZV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBkb21haW5faWRfZW51bSBjbl9kb21haW5faWQ7CisgICAgQ2lwaGVyaW5nX1N0YXR1cyB1bXRzX2NpcGhlcmluZ19zdGF0dXM7IC8qIENpcGhlcmluZ19TdGF0dXMgKi8KK30gbW1fcmF0Y21fc2VjdXJpdHlfbW9kZV9jaGFuZ2VfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG11aTsKKyAgICBrYWxfdWludDE2IGdpYmlfdGFnOworICAgIGRvbWFpbl9pZF9lbnVtIGNuX2RvbWFpbl9pZDsKKyAgICBtbV9yYXRjbV9lc3RfY2F1c2VfZW51bSBlc3RiX2NhdXNlOworICAgIHBlZXJfbXNnX2lkX3N0cnVjdCBwZWVyX21zZ19pZDsKKyAgICBrYWxfYm9vbCBpc19zZXJ2aWNlX3JlcTsKKyNpZiBkZWZpbmVkIChfX1I2X0RTQUNfXykgfHwgZGVmaW5lZCAoVU5JVF9URVNUKQorICAgIGthbF9ib29sIGlzX2RzYWNfcHJlc2VudDsKKyAgICBrYWxfdWludDE2IHNlbGVjdGVkX2RzYWNfaW5mbzsKKyNlbmRpZgorICAgIHBsbW5faWRfc3RydWN0IHNlbGVjdGVkX3BsbW47CisKKyNpZiBkZWZpbmVkKF9fUFBBQ1JfU1VQUE9SVF9fKSB8fCBkZWZpbmVkIChVTklUX1RFU1QpCisgICBwcGFjX2NoZWNrZWRfdHlwZV9lbnVtICAgUFBBQ0NoZWNrZWRUeXBlOworICAga2FsX3VpbnQxNiAgICAgICAgICAgICBzZWxlY3RlZFBQQUNJbmZvOyAvL3VzZWQgYnkgUFBBQ19MUl9BTExPV0VECisjZW5kaWYKKworI2lmZGVmIF9fTFRFX1JBVF9fCisgICAgY3NmYl9pbmRpY2F0b3JfZW51bSBjc2ZiX2luZGljYXRvcjsKKyAgICBjc2ZiX3NlcnZpY2VfdHlwZV9lbnVtIGNzZmJfc2VydmljZV90eXBlOworI2VuZGlmIC8qIF9fTFRFX1JBVF9fKi8KKyAgICByYXRfZW51bSBjdXJyZW50X3JhdDsgLyogQ0VMTF9DSEFOR0VfRklOSVNIIGlzIGluIE1NIGV4dGVybmFsIHF1ZXVlIGFuZCBNTSBjdXJyZW50IHJhdCBpcyBzdGlsbCBzb3VyY2UgcmF0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICogUkFUQ00gc2hvdWxkIHJlamVjdCBjb25uX2VzdF9yZXEgd2hlbiBjdXJyZW50X3JhdCBpcyBub3QgbWF0Y2ggUkFUQ00gYWN0aXZlIHJhdCAgICovCisJa2FsX2Jvb2wgaXNfaW1zaV9kZXRhY2hfZm9yX3Bvd2VyX29mZjsJCQkJCSAgIAkKK30gbW1fcmF0Y21fY29ubl9lc3RfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgZG9tYWluX2lkX2VudW0gY25fZG9tYWluX2lkOworICAgIGFzX2VzdF9jbmZfY2F1c2VfZW51bSByZXN1bHQ7CisgICAga2FsX2Jvb2wgd2FpdF9naWJpX2ZsYWc7CisgICAga2FsX2Jvb2wgaXNfcnJjX2Nvbm5fYWxyZWFkeV9leGlzdGVkOworfSBtbV9yYXRjbV9jb25uX2VzdF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19zdWNjZXNzZnVsOworICAgIGRvbWFpbl9pZF9lbnVtIGNuX2RvbWFpbl9pZDsKKwlrYWxfYm9vbCBpc190MzEyNl9leHBpcnk7Cit9IG1tX3JhdGNtX2Nvbm5fZXN0X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGRvbWFpbl9pZF9lbnVtIGNuX2RvbWFpbl9pZDsKKyAgICBhc19yZWxfc2NvcGVfZW51bSBzY29wZTsKKyAgICBjb25uX3JlbF9jYXVzZV9lbnVtIGNhdXNlOworfSBtbV9yYXRjbV9jb25uX3JlbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBkb21haW5faWRfZW51bSBjbl9kb21haW5faWQ7CisgICAgYXNfcmVsX3Njb3BlX2VudW0gc2NvcGU7CisgICAga2FsX2Jvb2wgcHNfcmVzdW1lX2ZsYWc7CisgICAga2FsX2Jvb2wgd2FpdF9naWJpX2ZsYWc7CisJa2FsX2Jvb2wgd2FpdF9ycmNfY29ubmVjdGlvbl9yZWxlYXNlX2luZDsKK30gbW1fcmF0Y21fY29ubl9yZWxfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgZG9tYWluX2lkX2VudW0gY25fZG9tYWluX2lkOworICAgIFJBVENNX1JSQ19SZWxlYXNlQ2F1c2UgY2F1c2U7CisgICAga2FsX2Jvb2wgcHNfcmVzdW1lX2ZsYWc7CisgICAga2FsX2Jvb2wgd2FpdF9naWJpX2ZsYWc7CisJa2FsX2Jvb2wgd2FpdF9ycmNfY29ubmVjdGlvbl9yZWxlYXNlX2luZDsKK30gbW1fcmF0Y21fY29ubl9yZWxfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmVnbl9wcm9jX3N0YXR1c19lbnVtIG1tX3Byb2Nfc3RhdHVzOworICAgIGthbF91aW50MzIgdDMyMTJfb3JfdDMzMDI7CisgICAgZ21tX21zX3N0YXRlX2VudW0gbXNfc3RhdGU7CisgICAgbW1hc19yZWduX3N0YXR1c19lbnVtIHJlZ25fc3RhdHVzOworICAgIHBsbW5fc2VhcmNoX3N0YXR1c19lbnVtIHBsbW5fc2VhcmNoX3N0YXR1czsKKyAgICBwbG1uX3NlYXJjaF90eXBlX2VudW0gcGxtbl9zZWFyY2hfdHlwZTsJLyogbmV3IHBsbW4gc2VhcmNoIHR5cGUgKi8KKyAgICBsYWlfc3RydWN0IGxhaTsgLyogZm9yIEdBUyBiYXIgY2VsbCAqLworICAgIGthbF91aW50MzIgY2VsbF9pZDsgLyogZm9yIEdBUyBiYXIgY2VsbCAqLworfSBtbV9yYXRjbV9yZWduX3N0YXR1c19yZXFfc3RydWN0OworCit0eXBlZGVmIG1tX3JhdGNtX3JlZ25fc3RhdHVzX3JlcV9zdHJ1Y3QgbW1fcmF0Y21fcmVnbl9zdGF0dXNfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGFjdGlvbl9vbl9yZWFkeV90aW1lcl9lbnVtIGFjdGlvbjsKKyAgICBnbW1fbXNfc3RhdGVfZW51bSBuZXdfc3RhdGU7CisgICAga2FsX3VpbnQzMiB2YWx1ZTsKK30gbW1fcmF0Y21fcmVhZHlfdGltZXJfdXBkYXRlX3JlcV9zdHJ1Y3Q7IC8qIHNob3VsZCBiZSBzYW1lIGFzIHJhdGNtX2dhc19yZWFkeV90aW1lcl91cGRhdGVfcmVxX3N0cnVjdC4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmVhZHlfdGltZXJfc3RhdHVzX2VudW0gc3RhdHVzOworfSBtbV9yYXRjbV9yZWFkeV90aW1lcl91cGRhdGVfaW5kX3N0cnVjdDsgLyogc2hvdWxkIGJlIHNhbWUgYXMgcmF0Y21fZ2FzX3JlYWR5X3RpbWVyX3VwZGF0ZV9pbmRfc3RydWN0LiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19ncHJzX3JlcXVpcmVkOworfSBtbV9yYXRjbV9zZXJ2aWNlX2NoYW5nZV9yZXFfc3RydWN0OyAvKiBTaG91bGQgc2FtZSBhcyByYXRjbV9nYXNfc2VydmljZV9jaGFuZ2VfcmVxX3N0cnVjdC4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG11aTsKKyAgICBrYWxfdWludDE2IGdpYmlfdGFnOworICAgIERDX1ByaW9yaXR5ICBwcmlvcml0eTsKKyAgICBrYWxfYm9vbCBpc19zZXJ2aWNlX3JlcTsKKwlrYWxfYm9vbCBpc19pbXNpX2RldGFjaF9mb3JfcG93ZXJfb2ZmOworCXBlZXJfbXNnX2lkX3N0cnVjdCBwZWVyX21zZ19pZDsKK30gbW1fcmF0Y21fY3NfZGF0YV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19pbnRlZ3JpdHlfYXBwbGllZDsKK30gbW1fcmF0Y21fY3NfZGF0YV9pbmRfc3RydWN0OwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcGVlcl9tc2dfaWRfc3RydWN0IHBlZXJfbXNnX2lkOworICAgIERDX1N0YXR1cyBzdGF0dXM7Cit9IG1tX3JhdGNtX2NzX2RhdGFfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG11aTsKKyAgICBrYWxfdWludDE2IGdpYmlfdGFnOworICAgIGxsY19zYXBpX2VudW0gc2FwaTsKKyAgICBycF9lbnVtIHJhZGlvX3ByaW9yaXR5OworICAgIGthbF91aW50OCBjaXBoZXJfaW5kOworICAgIHJlc19yZXFfY2F1c2UgbXNnX3R5cGU7CisgICAga2FsX3VpbnQ4IG5zYXBpOworICAgIGthbF91aW50MzIgdGxsaTsKKyAgICBrYWxfdWludDggcGZpOworICAgIGNvbmNpc2VfcW9zX3N0cnVjdCBxb3NfcGFyYW07CisgICAgcGVlcl9tc2dfaWRfc3RydWN0IHBlZXJfbXNnX2lkOworfSBtbV9yYXRjbV9wc19kYXRhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIC8va2FsX3VpbnQ4IG11aTsKKyAgICBEQ19TdGF0dXMgc3RhdHVzOworICAgIHBlZXJfbXNnX2lkX3N0cnVjdCBwZWVyX21zZ19pZDsKK30gbW1fcmF0Y21fcHNfZGF0YV9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19pbnRlZ3JpdHlfYXBwbGllZDsKKyAgICBrYWxfdWludDMyIHRsbGk7Cit9IG1tX3JhdGNtX3BzX2RhdGFfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfY3NfcmVzZXRfa2V5czsKKyAgICBrYWxfYm9vbCBpc19wc19yZXNldF9rZXlzOworfSBtbV9yYXRjbV9yZXNldF9rZXlzX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgdGxsaTsKK30gbW1fcmF0Y21fbGxjX3Jlc3VtZV9yZXFfc3RydWN0OyAvKiBTaG91bGQgYmUgc2FtZSBhcyByYXRjbV9sbGNfcmVzdW1lX3JlcV9zdHJ1Y3QgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiB0bGxpOworfSBtbV9yYXRjbV9sbGNfc3VzcGVuZF9yZXFfc3RydWN0OyAvKiBTaG91bGQgYmUgc2FtZSBhcyByYXRjbV9sbGNfc3VzcGVuZF9yZXFfc3RydWN0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgdGxsaTsKKyAgICByZXNfcmVxX2NhdXNlIGNhdXNlOyAvKiByZXNfcmVxX2NhdXNlICovCisgICAgbGxnbW1fY2VsbF91cGRhdGVfdHlwZV9lbnVtIGNlbGxfdXBkYXRlX3R5cGU7IC8qIGxsZ21tX2NlbGxfdXBkYXRlX3R5cGVfZW51bSAqLworfSBtbV9yYXRjbV9sbGNfdHJpZ2dlcl9yZXFfc3RydWN0OyAvKiBTaG91bGQgYmUgc2FtZSBhcyByYXRjbV9sbGNfdHJpZ2dlcl9yZXFfc3RydWN0ICovCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfZXhwaXJ5OyAvKktBTF9UUlVFOiBUMzEyMiBleHBpcmVzLCBNTSB3aWxsIHJldHJ5IExVIGltbWVkaWF0ZWx5CisJCQkJCQkgIEtBTF9GQUxTRTogVDMxMjIgaXMgc3RvcHBlZCAqLworfSBtbV9yYXRjbV90MzEyMl90aW1lb3V0X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX2V4cGlyeTsgLypLQUxfVFJVRTogQ0NPIGFjdGl2YXRpb24gdGltZSBleHBpcmVzLCBNTSB3aWxsIHJldHJ5IExVIGltbWVkaWF0ZWx5CisJCQkJCQkgIEtBTF9GQUxTRTogQ0NPIGFjdGl2YXRpb24gdGltZSBpcyBzdG9wcGVkICovCit9IG1tX3JhdGNtX2Njb19hY3RpdmF0aW9uX3RpbWVfdGltZW91dF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByYXRfZW51bSByYXQ7Cit9IG1tX3JhdGNtX3NpZ25hbF9hcHBlYXJfaW5kX3N0cnVjdDsKKworI2lmZGVmIF9fRFlOQU1JQ19CQU5EX1NFTF9fCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBiYW5kX3NlbGVjdGlvbl9lbnVtIGdzbV9iYW5kOyAvKiByZWZlciB0byBiYW5kX3NlbGVjdGlvbl9lbnVtIHZhbHVlKi8KKyAgICBrYWxfYm9vbCBpc19nc21fYmFuZF9wcmVzZW50OworICAgIGthbF91aW50OCB1bXRzX2ZkZF9iYW5kW1NJWkVfT0ZfVU1UU19CQU5EXTsgICAgLyogM0cgYmFuZCBjaGFuZ2UgKi8KKyAgICBrYWxfYm9vbCBpc191bXRzX2JhbmRfcHJlc2VudDsgLyogM0cgYmFuZCBjaGFuZ2UgKi8KK31tbV9yYXRjbV9zZXRfcHJlZmVycmVkX2JhbmRfcmVxX3N0cnVjdDsKKyNlbmRpZgorCisjaWZkZWYgX19HRU1JTklfXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgc2ltX2NvbmZpZ19zdGF0dXNfZW51bSBzaW1fY29uZmlnX3N0YXR1czsKKyAgICBzaW1faW5zZXJ0X3N0YXR1c19lbnVtIHNpbV9pbnNlcnRfc3RhdHVzOworfSBtbV9yYXRjbV9zaW1fc3RhdHVzX3VwZGF0ZV9yZXFfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorfSBtbV9yYXRjbV9zdXNwZW5kX2luZF9zdHJ1Y3Q7CisKKworLy9tdGswMjQ3NTogbG9jYWwgcGFyYW0gc3RydWN0IGlzIG9ubHkgZXhpc3QgaW4gR0VNSU5JIDIuMCBwcm9qZWN0Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBhc19nZW1pbmlfc3RhdHVzX2VudW0gYXNfZ2VtaW5pX3N0YXR1czsKK30gbW1fcmF0Y21fcmVzdW1lX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGFzX2dlbWluaV9zdGF0dXNfZW51bSBhc19nZW1pbmlfc3RhdHVzOworfSBtbV9yYXRjbV92aXJ0dWFsX21vZGVfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgYXNfZ2VtaW5pX3N0YXR1c19lbnVtIGFzX2dlbWluaV9zdGF0dXM7Cit9IG1tX3JhdGNtX3Vhc192aXJ0dWFsX21vZGVfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgZ3Byc190cmFuc2Zlcl9wcmVmZXJlbmNlX2VudW0gcHJlZmVyOworfSBtbV9yYXRjbV9zZXRfZ3Byc190cmFuc2Zlcl9wcmVmZXJlbmNlX3JlcV9zdHJ1Y3Q7CisjZW5kaWYgLyogX19HRU1JTklfXyAqLworCisvKiBNQVVJXzAyODUyNDQyLCBfX05PX1BTREFUQV9TRU5EX1NDUklfXyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgZm9yY2Vfc2VuZF9TQ1JJOworICAgIGVuZF9zZXNzaW9uX2NhdXNlX2VudW0gY2F1c2U7Cit9bW1fcmF0Y21fZW5kX3BzX2RhdGFfc2Vzc2lvbl9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBlbmRfc2Vzc2lvbl9yZXN1bHRfZW51bSBjYXVzZTsKK31tbV9yYXRjbV9lbmRfcHNfZGF0YV9zZXNzaW9uX2NuZl9zdHJ1Y3Q7CisvKiBfX05PX1BTREFUQV9TRU5EX1NDUklfXyAqLworCisjaWZkZWYgX19UQzdfX0NTX19TVVBQT1JUX18KK3R5cGVkZWYgc3RydWN0IHsgICAgCQkKKwlMT0NBTF9QQVJBX0hEUiAgICAJCQkKKwlrYWxfYm9vbCBpc0ZvcmNlTGF1OyAgICAKK30gbW1fcmF0Y21fY2VsbF9jaGFuZ2Vfc3RhcnRfaW5kX3N0cnVjdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByYXRfZW51bSByYXQ7CisgICAgZG9tYWluX2lkX2VudW0gY29ubmVjdGlvbl9kb21haW47CisgICAga2FsX2Jvb2wgaXNfZ2liaV90YWdfdmFsaWQ7CisgICAga2FsX3VpbnQxNiBnaWJpX3RhZzsKK30gbW1fcmF0Y21fY2VsbF9jaGFuZ2VfZmluaXNoX2luZF9zdHJ1Y3Q7CisKKy8qIE1BVUlfMDMxMDE4NzgsIFtTaWx2ZXIgQ2xhbV1bQ1ZdW1NpbHZlckNsYW0tOTRdUHJlLUNWLUNNQVM6IEdQUlMgZmFpbGVkIGR1ZSB0byB0aW1lb3V0ICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBsYWlfc3RydWN0IGN1cnJlbnRfbGFpOworfSBtbV9yYXRjbV9jYl9sb2NfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisJbmFzX3JlcV9nZW1pbmlfcHNfaGlnaF9zZW1fZW51bSBnZW1pbmlfcHNfaGlnaF9zZW1fc3RhdHVzOworfSBtbV9yYXRjbV91YXNfZ2VtaW5pX3BzX2hpZ2hfc2VtX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfc2ltX2luc2VydGVkOworICAgIGthbF9ib29sIGlzX2RlbGV0ZV9wZW5kaW5nOworfSBtbV9yYXRjbV9zaW1faW5mb19yZXNldF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIFJBVENNX1JSQ19Mb2NhbFJlbGVhc2VUeXBlIGxvY2FsUmVsZWFzZVR5cGU7CisgICAga2FsX3VpbnQxNiBsb2NhbGx5X3JlbGVhc2VkX1BTX1JBQl9iaXRtYXA7CisgICAgLy90cmFmZmljX2NsYXNzX2VudW0gbWF4X3RyYWZmaWNfY2xhc3M7Cit9IG1tX3JhdGNtX2xvY2FsX3JlbGVhc2VfaW5kX3N0cnVjdDsKKworLy9fX0xURV9fCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGV1dHJhbl9jYXBfZW51bSBldXRyYW5fY2FwOworfSBtbV9yYXRjbV9ldXRyYW5fY2FwX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19zdWNjZXNzZnVsOworfSBtbV9yYXRjbV9ldXRyYW5fY2FwX3VwZGF0ZV9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGlyYXRfdHlwZV9lbnVtCWlyYXRfdHlwZTsgIC8vSW5kaWNhdGVzIHRoZSBpbnRlci1SQVQgdHlwZQorICAgIHJhdF90eXBlX2VudW0Jc291cmNlX3JhdDsgLy9Tb3VyY2UgUkFUIChHQVMgb3IgVUFTKQorICAgIHJhdF90eXBlX2VudW0JdGFyZ2V0X3JhdDsgLy9UYXJnZXQgUkFUIChTaG91bGQgYmUgRUFTKQorICAgIHZvaWQqCWFzX2luZm9fcHRyOyAgICAvL0luZGljYXRlcyB0aGUgYWRkcmVzcyBvZiB0aGUgYWN0aXZhdGlvbiByZXF1ZXN0IGZvciBSQVQgY2hhbmdlIHRvIExURSwgdGhlIGluZm9ybWF0aW9uIGlzIGRlZGljYXRlZCBmb3IgQVMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9UaGUgYnVmZmVyIHdpbGwgYmUgZnJlZWQgYnkgc291cmUgb3IgdGFyZ2V0IEFTCisgICAgcmF0Y21fZ2FzX3NlY3VyaXR5X21vZGVfcmVxX3N0cnVjdAlnYXNfc2VjdXJpdHk7ICAgLy9JbmRpY2F0ZXMgdGhlIEdFUkFOIHNlY3VyaXR5IGNvbnRleHQgaWYgdGFyZ2V0X3JhdCBpcyBHQVMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3RlIHRoYXQgaWYgdGhlIFJBVCBjaGFuZ2UgaXMgZmFpbGVkIGFuZCByZXR1cm4gdG8gTFRFLCB0aGUgc2VjdXJpdHkgY29udGV4dCBzaG91bGQgYmUgcmV2ZXJ0ZWQgdG8gdGhlIG9yaWdpbmFsIG9uZS4gTkFTIHdpbGwgc2VuZCBSQVRDTV9HQVNfU0VDVVJJVFlfTU9ERV9SRVEgdG8gdXBkYXRlIHRoZSBvcmlnaW5hbCBzZWN1cml0eSBpbmZvcm1hdGlvbiB3aGVuIE5BUyByZWNlaXZlcyBSQVRfQ0hBTkdFX0NORiBpbmRpY2F0ZWQgdGhhdCB0aGUgaW50ZXItUkFUIHByb2NlZHVyZSBpcyBmYWlsZWQuCisgICAgdWFzX3NlY3VyaXR5X2NvbnRleHRfc3RydWN0CXVhc19zZWN1cml0eVsyXTsgICAvL0luZGljYXRlcyB0aGUgVVRSQU4gc2VjdXJpdHkgY29udGV4dCBpZiB0YXJnZXRfcmF0IGlzIFVBUy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL05vdGUgdGhhdCBpZiB0aGUgUkFUIGNoYW5nZSBpcyBmYWlsZWQgYW5kIHJldHVybiB0byBMVEUsIHRoZSBzZWN1cml0eSBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcmV2ZXJ0ZWQgdG8gdGhlIG9yaWdpbmFsIG9uZS4gTkFTIHdpbGwgc2VuZCBSQVRDTV9SUkNFX1NFQ1VSSVRZX01PREVfUkVRIHRvIHVwZGF0ZSB0aGUgb3JpZ2luYWwgc2VjdXJpdHkgaW5mb3JtYXRpb24gd2hlbiBOQVMgcmVjZWl2ZXMgUkFUX0NIQU5HRV9DTkYgaW5kaWNhdGVkIHRoYXQgdGhlIGludGVyLVJBVCBwcm9jZWR1cmUgaXMgZmFpbGVkLgorICAgIGNzZmJfaW5kaWNhdG9yX2VudW0JY3NmYl9pbmRpY2F0b3I7IC8vSW5kaWNhdGUgdGhhdCB0aGUgcHVycG9zZSBvZiBjdXJyZW50IGludGVyLVJBVCBjaGFuZ2UgaXMgZm9yIENTIGZhbGxiYWNrIHdoaWNoIGlzIGNvbWJpbmVkIHRoZSBpbmZvcm1hdGlvbiAoTW9iaWxpdHlGcm9tRXV0cmEpIGZyb20gRVJSQyBhbmQgdGhlIHByb2Nlc3NpbmcgdHlwZSBvZiBDU0ZCIGluIEVNTS4KKyAgICBsb29wYmFja19tb2RlX3N0YXR1c19lbnVtIGxvb3BiYWNrX21vZGVfc3RhdHVzOyAvL05vdGlmeSBSQVRDTSB0byBlbnRlciB0ZXN0IG1vZGUgZm9yIExURS1MQk0gbW9kZSBCCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgaXNfbGFpX3ZhbGlkOyAgLy9DU0ZCIGVuaGFuY2VtZW50CisgICAgbGFpX3N0cnVjdCAgICAgICAgICAgbGFpOyAgICAgICAgICAgLy9DU0ZCIGVuaGFuY2VtZW50CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgaXNfc3J2Y2M7ICAgICAgLy9TUlZDQyBzdXBwb3J0LiBJZiBpc19zcnZjYz1LQUxfVFJVRSwgaXQgbWVhbnMgUkFUQ00gdnNkX21vZCBpcyA0LiAoaXNfcjk5X253ID0gS0FMX1RSVUUpCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgaXNfbWFwcGVkX3JhaV92YWxpZDsgLy8gRm9yIDRHMyBITywgQVMgbWF5IG5vdCBoYXZlIHZhbGlkIHBsbW4gaWQuIEFTIHdpbGwgZGVyaXZlIHBsbW4gaWQgZnJvbSBtYXBwZWQgcmFpLgorICAgIHJhaV9zdHJ1Y3QgICAgICAgICAgIG1hcHBlZF9yYWk7Cit9IG1tX3JhdGNtX3JhdF9jaGFuZ2VfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBpcmF0X3R5cGVfZW51bQlpcmF0X3R5cGU7ICAvL0luZGljYXRlcyB0aGUgaW50ZXItUkFUIHR5cGUKKyAgICByYXRfdHlwZV9lbnVtCXNvdXJjZV9yYXQ7IC8vU291cmNlIFJBVAorICAgIHJhdF90eXBlX2VudW0JdGFyZ2V0X3JhdDsgLy9UYXJnZXQgUkFUCisgICAgaXJhdF9yZXN1bHRfZW51bQlpcmF0X3Jlc3VsdDsgICAgLy9UaGUgcmVzdWx0IG9mIGludGVyLVJBVCBjaGFuZ2UKKyAgICB2b2lkKglhc19pbmZvX3B0cjsgICAgLy9UaGUgcG9pbnRlciBvZiBBUyBjb250YWluZXIgaW5mb3JtYXRpb24KKyAgICBkb21haW5faWRfZW51bQljb25uZWN0aW9uX2RvbWFpbjsgIC8vSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBkb21haW4gZm9yIHRoZSB0YXJnZXQgUkFUCisgICAga2FsX2Jvb2wgaXNfZ2liaV90YWdfdmFsaWQ7CisgICAga2FsX3VpbnQxNiBnaWJpX3RhZzsKK30gbW1fcmF0Y21fcmF0X2NoYW5nZV9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGlyYXRfdHlwZV9lbnVtCWlyYXRfdHlwZTsKKyAgICByYXRfdHlwZV9lbnVtCXNvdXJjZV9yYXQ7IC8vU291cmNlIFJBVCAoR0FTIG9yIFVBUykKKyAgICByYXRfdHlwZV9lbnVtCXRhcmdldF9yYXQ7IC8vVGFyZ2V0IFJBVCAoU2hvdWxkIGJlIEVBUykKKyAgICB2b2lkKglhc19pbmZvX3B0cjsgICAgLy9JbmRpY2F0ZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGFjdGl2YXRpb24gcmVxdWVzdCBmb3IgUkFUIGNoYW5nZSB0byBMVEUsIHRoZSBpbmZvcm1hdGlvbiBpcyBkZWRpY2F0ZWQgZm9yIEFTLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVGhlIGJ1ZmZlciB3aWxsIGJlIGZyZWVkIGJ5IHNvdXJlIG9yIHRhcmdldCBBUworICAgIGthbF91aW50OCBuYXNfc2VjdXJpdHlfcGFyYW1bTkFTX1NFQ1VSSVRZX1BBUkFNX0xFTl07CisgICAgICAgICAgICAgICAgLy9OQVMgc2VjdXJpdHkgcGFyYW1ldGVyIChPbmx5IHZhbGlkIGZvciBJUkhPIGZyb20gVUFTKQorICAgICAgICAgICAgICAgIC8vQnl0ZTEgfiA0OiBOb3VjZU1NRQorICAgICAgICAgICAgICAgIC8vQnl0ZTU6IFNlbGVjdGVkIEFsZ29yaXRobSAoQ2lwaGVyaW5nL0ludGVncml0eSkKKyAgICAgICAgICAgICAgICAvL0J5dGU2OiBlS1NJIChpbmNsdWRpbmcgdHlwZSBvZiBzZWN1cml0eSBjb250ZXh0KQorfSBtbV9yYXRjbV9yYXRfY2hhbmdlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgaXJhdF90eXBlX2VudW0JaXJhdF90eXBlOworICAgIHJhdF90eXBlX2VudW0Jc291cmNlX3JhdDsgLy9Tb3VyY2UgUkFUIChHQVMgb3IgVUFTKQorICAgIHJhdF90eXBlX2VudW0JdGFyZ2V0X3JhdDsgLy9UYXJnZXQgUkFUIChTaG91bGQgYmUgRUFTKQorICAgIGlyYXRfcmVzdWx0X2VudW0JaXJhdF9yZXN1bHQ7IC8vVGhlIHJlc3VsdCBvZiBpbnRlci1SQVQgY2hhbmdlCisgICAgaXJhdF9yZWplY3RfY2F1c2VfZW51bSBpcmF0X3JlamVjdF9jYXVzZTsgLy9SZWplY3QgY2F1c2Ugd2hlbiBpcmF0X3Jlc3VsdCBpcyBlcXVhbCB0byBJUl9SRVNVTFRfUkVKRUNULgorICAgIHZvaWQqCWFzX2luZm9fcHRyOyAgICAvL0luZGljYXRlcyB0aGUgYWRkcmVzcyBvZiB0aGUgYWN0aXZhdGlvbiByZXF1ZXN0IGZvciBSQVQgY2hhbmdlIHRvIExURSwgdGhlIGluZm9ybWF0aW9uIGlzIGRlZGljYXRlZCBmb3IgQVMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9UaGUgYnVmZmVyIHdpbGwgYmUgZnJlZWQgYnkgc291cmUgb3IgdGFyZ2V0IEFTCit9IG1tX3JhdGNtX3JhdF9jaGFuZ2VfcnNwX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBwYWdpbmdfdHlwZV9lbnVtIHBhZ2luZ190eXBlOworICAgIGNzZmJfc2VydmljZV90eXBlX2VudW0gcGFnaW5nX3NlcnZpY2U7CisJa2FsX2Jvb2wgaXNfcGFnaW5nX3JldHJ5OworfW1tX3JhdGNtX3BhZ2VfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfY29tcGxldGVkOworfW1tX3JhdGNtX2RlYWN0aXZhdGVfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBjc19zdGF0dXNfZW51bSAgc3RhdHVzOworfSBtbV9yYXRjbV9jc19zdGF0dXNfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKKy8qRm9yIFRERCBjYWxsIGNsZWFyaW5nIG9wdGltaXphdGlvbiovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKK30gbW1fcmF0Y21fZm9yY2VfcmVsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggaW1laXN2X3ZhbHVlX2RpZ2l0MDsKKyAgICBrYWxfdWludDggaW1laXN2X3ZhbHVlX2RpZ2l0X2J5dGVbOF07Cit9bW1fcmF0Y21fc2V0X2ltZWlfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX3BjaF9zdGF0ZTsKK31tbV9yYXRjbV9ycmNfc3RhdGVfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByYXRfZW51bSByYXRfbW9kZTsKKyAgICBrYWxfYm9vbCBpc19wZ2NoZWNrX29uOworfW1tX3JhdGNtX3NldF9wZ2NoZWNrX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICB1bXRzX2R1cGxleF9tb2RlX3R5cGUgc291cmNlX3VtdHNfZHVwbGV4X21vZGU7CisgICAgdW10c19kdXBsZXhfbW9kZV90eXBlIHRhcmdldF91bXRzX2R1cGxleF9tb2RlOworICAgIGx0ZV9kdXBsZXhfbW9kZV90eXBlIHNvdXJjZV9sdGVfZHVwbGV4X21vZGU7CisgICAgbHRlX2R1cGxleF9tb2RlX3R5cGUgdGFyZ2V0X2x0ZV9kdXBsZXhfbW9kZTsKKwltb2RlX3N3aXRjaF9jYXVzZV9lbnVtIGNhdXNlOworfSBtbV9yYXRjbV9kdXBsZXhfbW9kZV9jaGFuZ2VfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIHJlc3VsdDsKK30gbW1fcmF0Y21fZHVwbGV4X21vZGVfY2hhbmdlX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByYXRfZW51bSAgICAgICAgICAgICAgIHJhdDsgICAKKyAgICBwbG1uX2lkX3N0cnVjdCAgICAgICAgIHBsbW5faWQ7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICBhcmZjbjsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgIHJlcXVlc3RlZF9iYW5kOworfSBtbV9yYXRjbV9zZXRfbXJ1X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBzZXRfbXJ1X3Jlc3VsdF9lbnVtIHJlc3VsdDsKK30gbW1fcmF0Y21fc2V0X21ydV9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBhcmFsX29wX2VudW0gb3BfY29kZTsKKyAgICBwbG1uX2lkX3N0cnVjdCBwbG1uOworICAgIHJhdF9lbnVtICAgICAgIHJhdDsgICAKKyAgICBrYWxfdWludDggYXJhX3N0YXJ0WzJdOworICAgIGthbF91aW50OCBhcmFfZW5kWzJdOworfSBtbV9yYXRjbV9hcmFsX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIG53c2VsX21tX2VtY19mb3JiaWRkZW5fbndfbGlzdF91cGRhdGVfcmVxX3N0cnVjdCBtbV9yYXRjbV9lbWNfZm9yYmlkZGVuX253X2xpc3RfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgY2FsbF9zdGF0dXNfZW51bSBjYWxsX3N0YXR1czsKKyAgICBjYWxsX3R5cGVfaW5kaWNhdGlvbl9lbnVtIGNhbGxfdHlwZTsKK30gbW1fcmF0Y21fY2FsbF9zdGF0dXNfaW5kX3N0cnVjdDsKK3R5cGVkZWYgbndzZWxfbW1fcmF0X2Rpc2FibGVfY29uZmlnX3JlcV9zdHJ1Y3QgbW1fcmF0Y21fcmF0X2Rpc2FibGVfY29uZmlnX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKwlrYWxfdWludDggaW1laXN2X3ZhbHVlX2RpZ2l0MDsKKwlrYWxfdWludDggaW1laXN2X3ZhbHVlX2RpZ2l0X2J5dGVbOF07Cit9IG1tX3JhdGNtX3NldF9pbWVpX3N2X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgcmF0Y21fcnJjZV9jb25uX2xvc3NfaW5kX3N0cnVjdCBtbV9yYXRjbV9jb25uX2xvc3NfaW5kX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19hdXRoX2Rvd25sb2FkX29uZ29pbmc7Cit9IG1tX3JhdGNtX3JzaW1fYXV0aF9kb3dubG9hZF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgICAgaXNfb3Zlcl9pbmFjdGl2ZV9tb2RlX3RocmVzaG9sZDsgLy8gVHJ1ZTogcmVjb3ZlcnkgY291bnRlciA+IG5vcm1hbF9vb3NfcmVjb3Zlcnlfcm91bmQKK30gbW1fcmF0Y21fc2VydmljZV9yZWNvdmVyeV9yb3VuZF91cGRhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sICAgIG5vcm1hbF9vb3NfcmVjb3Zlcnlfcm91bmRfcHJlc2VudDsKKyAgICBrYWxfdWludDggICBub3JtYWxfb29zX3JlY292ZXJ5X3JvdW5kOyAgLy8gZGVmYXVsdCB2YWx1ZSA9IDUsIHJhbmdlIFsyLCAxMF0KKyAgICBrYWxfYm9vbCAgICBpbmFjdGl2ZV9mdWxsYmFuZF9wZXJpb2RfcHJlc2VudDsKKyAgICBrYWxfdWludDE2ICBpbmFjdGl2ZV9mdWxsYmFuZF9wZXJpb2Q7ICAgLy8gZGVmYXVsdCA9IDIwMHMsIHJhbmdlOiBbOTAsIDM2MF0KKyAgICBrYWxfYm9vbCAgICBpbmFjdGl2ZV9zbmlmZmVyX3BlcmlvZF9wcmVzZW50OyAgICAKKyAgICBrYWxfdWludDggICBpbmFjdGl2ZV9zbmlmZmVyX3BlcmlvZDsgICAgLy8gZGVmYXVsdCA9IDMwcywgcmFuZ2U6IFsxMCwgNjBdCisgICAga2FsX2Jvb2wgICAgaXNfaW5hY3RpdmVfbW9kZV9wcmVzZW50OworICAgIGthbF9ib29sICAgIGlzX2luYWN0aXZlX21vZGU7CQkvLyBUcnVlOiBlbnRlciBpbmFjdGl2ZSBtb2RlLCBGYWxzZTogbGVhdmUgaW5hY3RpdmUgbW9kZQorfSBtbV9yYXRjbV9pbmFjdGl2ZV9tb2RlX2NvbmZpZ3VyYXRpb25fcmVxX3N0cnVjdDsKKworLy9NU0dfSURfTU1fUkFUQ01fTFRFX05PUk1BTF9TRVJWSUNFX0xPU1NfVVBEQVRFX1JFUQordHlwZWRlZiBnbW1yZWdfbHRlX25vcm1hbF9zZXJ2aWNlX2xvc3NfdXBkYXRlX3JlcV9zdHJ1Y3QgbW1fcmF0Y21fbHRlX25vcm1hbF9zZXJ2aWNlX2xvc3NfdXBkYXRlX3JlcV9zdHJ1Y3QgOworCisvL01TR19JRF9NTV9SQVRDTV9FTkRfUFNfREFUQV9TRVNTSU9OX0lORAordHlwZWRlZiByYXRjbV9jc2NlX2VuZF9wc19kYXRhX3Nlc3Npb25faW5kX3N0cnVjdCBtbV9yYXRjbV9lbmRfcHNfZGF0YV9zZXNzaW9uX2luZF9zdHJ1Y3QgOworCisvL01TR19JRF9NTV9SQVRDTV9OT19DQ19EQVRBX0RFVEVDVF9JTkQKK3R5cGVkZWYgcmF0Y21fcnJjZV9ub19jY19kYXRhX2RldGVjdF9pbmRfc3RydWN0IG1tX3JhdGNtX25vX2NjX2RhdGFfZGV0ZWN0X2luZF9zdHJ1Y3Q7CisKKyNpZmRlZiBfX0dFTUlOSV9fCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19kYXRhX2FsbG93ZWQ7Cit9IG1tX3JhdGNtX2RhdGFfYWxsb3dfcmVxX3N0cnVjdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCXJhdF9lbnVtIHJhdDsKKyAgICBuZXR3b3JrX3NjYW5fMjNnX3VuaW9uIG53X3NjYW5fMjNnX291dHB1dDsKK30gbW1fcmF0Y21fcGxtbl9zY2FuX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcGxtbl9pZF9zdHJ1Y3QgICAgICAgICAgICAgIHBsbW5faWQ7Cit9IG1tX3JhdGNtX3BsbW5faW5mb191cGRhdGVfcmVxX3N0cnVjdDsKKworI2VuZGlmIC8qIE1NX1JBVENNX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW1fcmF0ZG1fc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW1fcmF0ZG1fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM5ZWUxYgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbV9yYXRkbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDExMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIG1tX3JhdGRtX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTlpBCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgTU1fUkFURE1fU1RSVUNUX0gKKyNkZWZpbmUgTU1fUkFURE1fU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAibDNfaW5jX2VudW1zLmgiCisjaW5jbHVkZSAibW1jbV9lbnVtcy5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtc19wdWJsaWMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSICAgCisgICAga2FsX3VpbnQ4IG5vX29mX3ZhbGlkX2VudHJpZXM7CisgICAga2FsX3VpbnQ4IG5zYXBpX2xpc3RbMTFdOworICAgIGthbF91aW50OCBzZXF1ZW5jZV9saXN0WzExXTsKK30gbW1fcmF0ZG1fc2VxdWVuY2VfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSICAgCisgICAga2FsX3VpbnQ4IG5vX29mX3ZhbGlkX2VudHJpZXM7CisgICAga2FsX3VpbnQ4IG5zYXBpX2xpc3RbMTFdOworICAgIGthbF91aW50OCBzZXF1ZW5jZV9saXN0WzExXTsKK30gbW1fcmF0ZG1fc2VxdWVuY2VfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSICAgIAorICAgIHRyYWZmaWNfY2xhc3NfZW51bSB0cmFmZmljX2NsYXNzOyAvKiB0VHJhZmZpY0NsYXNzICovCisjaWZkZWYgX19SRUw3X18KKyAgICBrYWxfdWludDE2IHVsX2RhdGFfc3RhdHVzOyAvKiAyNC4wMDggQ1IxMDUzIFI3OiBJbmRpY2F0ZSB3aGljaCBwcmVzZXJ2ZWQgUERQIGNvbnRleHRzIGhhdmUgdXBsaW5rIGRhdGEgcGVuZGluZy4gKi8KKyNlbmRpZgorfSBtbV9yYXRkbV9yZWVzdGFibGlzaF9yYWJfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSICAgCisgICAgZ21tY21fcmVzdWx0X2VudW0gcmVzdWx0OyAvKiBnbW1jbV9yZXN1bHRfZW51bSAqLworfSBtbV9yYXRkbV9yZWVzdGFibGlzaF9yYWJfcnNwX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSICAgCisgICAgZ21tY21fcmVzdWx0X2VudW0gcmVzdWx0OyAvKiBnbW1jbV9yZXN1bHRfZW51bSAqLworICAgIHJhdF9lbnVtIGN1cnJlbnRfcmF0OyAgICAvKiBNTSB3aWxsIHNlbmQgY3VycmVudCBSQVQgb2YgTU0sIGhlbHBmdWwgZm9yIGludGVyUkFUIENvbGxpc2lvbiBjYXNlcyovCit9IG1tX3JhdGRtX3NlbmRfdXNlcl9kYXRhX3JzcF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUiAgIAorfSBtbV9yYXRkbV9yZWVzdGFibGlzaF9yYWJfcmVhZHlfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSICAgCit9IG1tX3JhdGRtX3JhYl9yZWxlYXNlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggcmVmX2NvdW50OworICAgIGthbF91aW50MTYgbXNnX2xlbjsKKyAgICB0cmFmZmljX2NsYXNzX2VudW0gdHJhZmZpY19jbGFzczsgLyogdFRyYWZmaWNDbGFzcyAqLworICAgIGthbF91aW50MTYgdWxfZGF0YV9zdGF0dXM7CisgICAgZ21tY21fc2VydmljZV9wcm9jX2NhdXNlX2VudW0gY2F1c2U7IC8qIGdtbWNtX3NlcnZpY2VfcHJvY19jYXVzZV9lbnVtICovCit9IG1tX3JhdGRtX3NlcnZpY2VfcHJvY19pbmRfc3RydWN0OworCisjZW5kaWYgLyogTU1fUkFURE1fU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbWFzX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW1hc19lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZmRjMWEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW1hc19lbnVtcy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgbW1hc19lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9NTUFTX0VOVU1TX0gKKyNkZWZpbmUgX01NQVNfRU5VTVNfSAorCit0eXBlZGVmIGVudW0geworICAgIFRFUk1JTkFUSU5HX0NPTlZFUlNBVElPTkFMX0NBTEwsCisgICAgVEVSTUlOQVRJTkdfU1RSRUFNSU5HX0NBTEwsCisgICAgVEVSTUlOQVRJTkdfSU5URVJBQ1RJVkVfQ0FMTCwKKyAgICBURVJNSU5BVElOR19CQUNLR1JPVU5EX0NBTEwsCisgICAgVEVSTUlOQVRJTkdfSElHSF9QUklPUklUWV9TSUdOQUxMSU5HLAorICAgIFRFUk1JTkFUSU5HX0xPV19QUklPUklUWV9TSUdOQUxMSU5HLAorICAgIFRFUk1JTkFUSU5HX0NBVVNFX1VOS05PV04KK31tbWFzX3BhZ2VfY2F1c2VfZW51bTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBISUdIX1BSSU9SSVRZLAorICAgIE5PUk1BTF9QUklPUklUWSA9IEhJR0hfUFJJT1JJVFksCisgICAgTE9XX1BSSU9SSVRZCit9bW1hc19wcmlvcml0eV9lbnVtOworCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbWNtX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW1jbV9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNDViNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW1jbV9lbnVtcy5oCkBAIC0wLDAgKzEsMTc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKgltbWNtX2VudW1zLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRzIGZvciBlbnVtIGRlZmluaXRpb24gYWJvdXQgbW0gYW5kIGNtIGxheWVyLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworIAorI2lmbmRlZiBfTU1DTV9FTlVNU19ICisjZGVmaW5lIF9NTUNNX0VOVU1TX0gKKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBHQ0NfUEQgICAgICAgICAgICAgID0gMHgwMCwgLyogR1JPVVBfQ0FMTF9DT05UUk9MICovCisgICAgQkNDX1BEICAgICAgICAgICAgICA9IDB4MDEsIC8qIEJST0FEQ0FTVF9DQUxMX0NPTlRST0wgKi8KKyAgICBQRFNTMV9QRCAgICAgICAgICAgID0gMHgwMiwKKyAgICBDQ19QRCAgICAgICAgICAgICAgID0gMHgwMywgLyogQ0FMTF9DT05UUk9MICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUUkFOU1BBUkVOVCBUUkFOU1BPUlQgUFRPVE9DT0wqLworICAgIEdUVFBfUEQgICAgICAgICAgICAgPSAweDA0LAorICAgIE1NX1BEICAgICAgICAgICAgICAgPSAweDA1LAorICAgIFJSTV9QRCAgICAgICAgICAgICAgPSAweDA2LAorICAgIEdNTV9QRCAgICAgICAgICAgICAgPSAweDA4LAorICAgIFNNU19QRCAgICAgICAgICAgICAgPSAweDA5LAorICAgIFNNX1BEICAgICAgICAgICAgICAgPSAweDBBLAorICAgIENJU1NfUEQgICAgICAgICAgICAgPSAweDBCLCAvKiBOT05fQ0FMTF9STFREX1NTX1BEICAqLworICAgIExPQ19TRVJWX1BEICAgICAgICAgPSAweDBDLAorICAgIFRDX1BEICAgICAgICAgICAgICAgPSAweDBGICAKK31wZF9saXN0X2VudW07CisKKy8qIFNraXAgSW5kaWNhdG9yIFZhbHVlICovCisjZGVmaW5lIFNLSVBfSU5EICAgICAgICAgICAgICAgIDAKKwordHlwZWRlZiBlbnVtIHsKKyAgIEVNTFBQX05PX1BSSU9SSVRZID0gMCwKKyAgIEVNTFBQX1BSSU9SSVRZXzQgPSAxLAorICAgRU1MUFBfUFJJT1JJVFlfMyA9IDIsCisgICBFTUxQUF9QUklPUklUWV8yID0gMywKKyAgIEVNTFBQX1BSSU9SSVRZXzEgPSA0LAorICAgRU1MUFBfUFJJT1JJVFlfMCA9IDUsCisgICBFTUxQUF9QUklPUklUWV9CID0gNiwKKyAgIEVNTFBQX1BSSU9SSVRZX0EgPSA3ICAgCit9IGVtbHBwX3ByaW9yaXR5X2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIENNX0JBU0lDX0NBTEwgICAgICA9ICAgRU1MUFBfUFJJT1JJVFlfMywKKyAgICBDTV9FTUVSR0VOQ1lfQ0FMTCAgPSAgIEVNTFBQX1BSSU9SSVRZXzAKK31jYWxsX3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVElfRVhIQVVTVEVELAorICAgIENDQlNfTk9UX1NVUFBPUlRFRCAKK31wcm9tcHRfcmVqX2NhdXNlOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBHTU1DTV9TVUNDRVNTICAgICAgICAgICAgICA9IDAsCisgICAgR01NQ01fREVUQUNIICAgICAgICAgICAgICAgPSAxLAorICAgIEdNTUNNX1JFQVRUQUNIX1JFUSAgICAgICAgID0gMiwgLyogUmVqZWN0IGNhdXNlICM5LCAjMTAgKi8gICAKKyAgICBHTU1DTV9UMzMxN19FWFBJUlkgICAgICAgICA9IDMsCisgICAgR01NQ01fT1RIRVJfUkVKX0NBVVNFICAgICAgPSA0LCAvKiBTZXJ2aWNlIHJlamVjdCB3aXRoIG90aGVyIGNhdXNlcyAqLworICAgIEdNTUNNX0xPV0VSX0xBWUVSX0ZBSUxVUkUgID0gNSwgCisgICAgR01NQ01fSU5DT01QQVRJQkxFX1JBVCAgICAgPSA2LCAvKiBSZWNlaXZlIE1NX1JBVENNX1JFRVNUQUJMSVNIX1JBQl9JTkQgaW4gR1NNIFJBVCAqLworICAgIEdNTUNNX0lOQ09NUEFUSUJMRV9TVEFURSAgID0gNywgLyogTGltaXRlZCwgTm8gc2VydmljZSwgQWNjZXNzIGNsYXNzIG5vdCBncmFudGVkICovCisgICAgR01NQ01fSU5URVJfUkFUX0NPTExJU0lPTiAgPSA4LAorICAgIEdNTUNNX1QzMzE5X1JVTk5JTkcgICAgICAgID0gOSwgIC8qIF9fUkVMNl9fICovCisgICAgR01NQ01fSU5DT01QQVRJQkxFX05TQVBJICAgPSAxMCwgLyogR01NIGRpc2NvdmVyIE5TQVBJIGluYWN0aXZlIHdoaWxlIGRlcXVldSBzZXJ2aWNlICovCisgICAgR01NQ01fVDMzNDZfUlVOTklORyAgICAgICAgPSAxMQorfWdtbWNtX3Jlc3VsdF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBHTU1DTV9JTlRFUl9SQVQgICAgICAgICAgICA9IDAsCisgICAgR01NQ01fTE9DQUxfUkVMRUFTRSAgICAgICAgPSAxLAorfWdtbWNtX3NlcnZpY2VfcHJvY19jYXVzZV9lbnVtOworCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW1pMnZvaXBfZW51bXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbWkydm9pcF9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDE1NjQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW1pMnZvaXBfZW51bXMuaApAQCAtMCwwICsxLDM2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgbW1pMnZvaXBfZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBFbnVtIGZvciBpbnRlcmZhY2UgYmV0d2VlbiBNTUkgYW5kIFZvSVAgdGFzay4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9NTUkyVk9JUF9FTlVNU19ICisjZGVmaW5lIF9NTUkyVk9JUF9FTlVNU19ICisKKy8qIGNhbGwgYWN0IGVudW0gKi8KK3R5cGVkZWYgZW51bQoreworICAgIFZPSVBfQ0FMTF9BQ1RfSURMRSA9IDAsICAgICAgICAgICAgICAgICAgICAgLyogMCAgIE5vIGFjdGlvbiAqLworICAgIFZPSVBfQ0FMTF9BQ1RfRElBTF9DQUxMLCAgICAgICAgICAgICAgICAgICAgLyogMSAgIE1ha2UgYSBjYWxsICovCisgICAgVk9JUF9DQUxMX0FDVF9SRVRSSUVWRV9DQUxMLCAgICAgICAgICAgICAgICAvKiAyICAgcmV0cmlldmUgYSBzcGVjaWZpYyBoZWxkIGNhbGwgKi8KKyAgICBWT0lQX0NBTExfQUNUX0hPTERfQ0FMTCwgICAgICAgICAgICAgICAgICAgIC8qIDMgICBIb2xkIGFuIGFjdGl2ZSBjYWxsICovCisgICAgVk9JUF9DQUxMX0FDVF9BQ0NFUFRfQ0FMTCwgICAgICAgICAgICAgICAgICAvKiA0ICAgQWNjZXB0IGNhbGwgKi8KKyAgICBWT0lQX0NBTExfQUNUX1JFTF9DQUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIDUgICBSZWxlYXNlIGEgc3BlY2lmaWMgY2FsbCwgd2hldGhlciBpdCBpcyBhIHdhaXRpbmcsIGFjdGl2ZSwgb3IgaGVscCBjYWxsICovCisgICAgVk9JUF9DQUxMX0FDVF9SRUxfQUxMX0NBTExTLCAgICAgICAgICAgICAgICAvKiA2ICAgUmVsZWFzZSBhbGwgY2FsbHMgKi8KKyAgICBWT0lQX0NBTExfQUNUX1JFTF9BTExfSE9MRCwgICAgICAgICAgICAgICAgIC8qIDcgICBSZWxlYXNlIGFsbCBoZWxkIGNhbGxzICovCisgICAgVk9JUF9DQUxMX0FDVF9SRUxfQUxMX0VYQ0VQVF9XQUlUSU5HLCAgICAgICAvKiA4ICAgUmVsZWFzZSBhbGwgY2FsbHMgZXhjZXB0IHdhaXRpbmcgY2FsbCAqLworICAgIFZPSVBfQ0FMTF9BQ1RfUkVMX0FDVElWRV9BTkRfQUNDRVBULCAgICAgICAgLyogOSAgIFJlbGVhc2UgYWN0aXZlIGNhbGwgYW5kIGFjY2VwdCB3YWl0aW5nIGNhbGwgKi8KKyAgICBWT0lQX0NBTExfQUNUX0ZPUkNFX1JFTF9DQUxMLCAgICAgICAgICAgICAgIC8qIDEwICBGb3JjZSB0byByZWxlYXNlIGFuIGNhbGwgdGhhdCBpcyBhbHJlYWR5ICByZWxlYXNlZCBidXQgcmVzcG9uc2Ugbm90IGNvbWVzIGJhY2sgeWV0ICovCisgICAgVk9JUF9DQUxMX0FDVF9TV0FQX0NBTEwsICAgICAgICAgICAgICAgICAgICAvKiAxMSAgSG9sZCBhY3RpdmUgY2FsbCBhbmQgYWN0aXZhdGUgYSBzcGVjaWZpYyBoZWxkIGNhbGwgKi8KKyAgICBWT0lQX0NBTExfQUNUX1NQTElUX0NBTEwsICAgICAgICAgICAgICAgICAgIC8qIDEyICBTcGxpdCBhIG11bHRpcGFydHkgY2FsbCBpbnRvIHR3byBjYWxscyAqLworICAgIFZPSVBfQ0FMTF9BQ1RfTUVSR0VfQ0FMTCwgICAgICAgICAgICAgICAgICAgLyogMTMgIEFkZCBhIGhlbGQgY2FsbCBpbnRvIGFuIGFjdGl2ZSBjYWxsICovCisgICAgVk9JUF9DQUxMX0FDVF9CTElORF9UUkFOU0ZFUiwgICAgICAgICAgICAgICAvKiAxNCAgQmxpbmQgdHJhbnNmZXIgYSBjYWxsICovCisgICAgVk9JUF9DQUxMX0FDVF9VTkFUVEVOREVEX1RSQU5TRkVSLCAgICAgICAgICAvKiAxNSAgVW5hdHRlbmRlZCB0cmFuc2ZlciBhIGNhbGwgKi8KKyAgICBWT0lQX0NBTExfQUNUX0NPTlNVTFRfVFJOQVNGRVIsICAgICAgICAgICAgIC8qIDE2ICBDb25zdWx0aXZlIHRyYW5zZmVyIGEgY2FsbCAgKE5vdCBzdXBwb3J0ZWQgeWV0KSAqLworICAgIFZPSVBfQ0FMTF9BQ1RfQVRURU5ERURfVFJOQVNGRVIsICAgICAgICAgICAgLyogMTcgIEF0dGVuZGVkIHRyYW5zZmVyIGEgY2FsbCAgICAoTm90IHN1cHBvcnRlZCB5ZXQpICovCisgICAgVk9JUF9DQUxMX0FDVF9SRUxfQUxMX0FORF9ESUFMX0VNRVJHRU5DWSwgICAvKiAxOCAgRm9yY2UgcmVsZWFzZSBhbGwgY2FsbCBhbmQgZGlhbCBlbWVyZ2VuY3kgY2FsbCAqLworICAgIFZPSVBfQ0FMTF9BQ1RfSE9MRF9BTkRfRElBTCwgICAgICAgICAgICAgICAgLyogMTkgIEhvbGQgYWN0aXZlIGFuZCBkaWFsICovCisgICAgVk9JUF9DQUxMX0FDVF9IT0xEX0FORF9BQ0NFUFQsICAgICAgICAgICAgICAvKiAyMCAgSG9sZCBhY3RpdmUgYW5kIGFjY2VwdCAqLworICAgIFZPSVBfQ0FMTF9BQ1RfVFJBTlNGRVJFRSwgICAgICAgICAgICAgICAgICAgLyogMjEgIFRyYW5zZmVyIGNhbGwgdG8gYW5vdGhlciBsb2NhdGlvbiAodHJhbnNmZWUgY2FzZSkuICBUcmlnZ2VyZWQgYnkgcmVtb3ZlIHNpdGUuICovCisgICAgVk9JUF9DQUxMX0FDVF9CS19SRUxfTVRfQ0FMTCwgICAgICAgICAgICAgICAvKiAyMiAgUmVsZWFzZSBjYWxsIGluIHRoZSBiYWNrZ3JvdW5kICovCisgICAgVk9JUF9DQUxMX0FDVF9CS19SRUxfQUxMX0NBTEwsICAgICAgICAgICAgICAvKiAyMyAgUmVsZWFzZSBhbGwgY2FsbHMgaW4gdGhlIGJhY2tncm91bmQgKi8KKyAgICBWT0lQX0NBTExfQUNUX0FERF9QQVJUSUNJUEFOVCwgICAgICAgICAgICAgIC8qIDI0ICBBZGQgcGFydGljaXBhbnQgaW50byBhIGNvbmZlcmVuY2UgY2FsbCAqLworICAgIFZPSVBfQ0FMTF9BQ1RfUkVNT1ZFX1BBUlRJQ0lQQU5ULCAgICAgICAgICAgLyogMjUgIFJlbW92ZSBwYXJ0aWNpcGFudCBmcm9tIGEgY29uZmVyZW5jZSBjYWxsICovCisgICAgVk9JUF9DQUxMX0FDVF9DT05GX1JFRlJFU0gsICAgICAgICAgICAgICAgICAvKiAyNiAgU3Vic2NyaWJlIHN0YXRlIG9mIGEgY2FsbCAgIChOb3Qgc3VwcG9ydGVkIHlldCkgKi8KKyAgICBWT0lQX0NBTExfQUNUX0FDQ0VQVF9SRVBMQUNFRF9DQUxMLCAgICAgICAgIC8qIDI3ICBBY2NlcHQgbmV3IGNhbGwgd2l0aCByZXBsYWNlcyAqLworICAgIFZPSVBfQ0FMTF9BQ1RfVE9UQUwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjggIFRvdGFsIG51bWJlciBvZiBjYWxsIGFjdGlvbiAqLworfXZvaXBfY2FsbF9hY3RfZW51bTsKKworLyogY2FsbCBtYWluIHN0YXRlLiAqLwordHlwZWRlZiBlbnVtCit7CisgICAgVk9JUF9DQUxMX1NUQVRFX1RFUk1JTkFURUQgPSAwLCAgICAgLyogMCBDYWxsIGlzIHRlcm1pbmF0ZWQgICovCisgICAgVk9JUF9DQUxMX1NUQVRFX0NPTkZJUk1FRCwgICAgICAgICAgLyogMSBDYWxsIGlzIGNvbm5lY3RlZC4gVGhlIGNhbGwgbWlnaHQgYmUgYWN0aXZlIG9yIGhvbGQgKi8KKyAgICBWT0lQX0NBTExfU1RBVEVfR0VUX01PX0FERFIsICAgICAgICAvKiAyIEdldHRpbmcgTkFUIGFkZHJlc3MgZm9yIE1PIGNhbGwgRm9yIE1PIGNhbGwgKi8KKyAgICBWT0lQX0NBTExfU1RBVEVfSU5WSVRFX1BFTkRJTkcsICAgICAvKiAzIFdhaXRpbmcgZm9yIHRoZSByZXNwb25zZSBvZiBJTlZJVEUgcmVxdWVzdCAqLworICAgIFZPSVBfQ0FMTF9TVEFURV9SRUNWXzFYWCwgICAgICAgICAgIC8qIDQgUmVjZWl2ZSAxWFggcmVzcG9zbmUgZm9yIElOVklURSAqLworICAgIFZPSVBfQ0FMTF9TVEFURV9SRUNWXzJYWF9SRUlOVklURSwgIC8qIDUqLworICAgIFZPSVBfQ0FMTF9TVEFURV9SSU5HSU5HLCAgICAgICAgICAgIC8qIDYgSW5jb21pbmcgY2FsbCwgd2FpdGluZyB1c2VyIHRvIGFjY2VwdCAoZm9yIE1UIGNhbGwpICovCisgICAgVk9JUF9DQUxMX1NUQVRFX0dFVF9NVF9BRERSLCAgICAgICAgLyogNyBHZXR0aW5nIE5BVCBhZGRyZXNzIChmb3IgTVQgY2FsbCkgICovCisgICAgVk9JUF9DQUxMX1NUQVRFX0FDQ0VQVElORywgICAgICAgICAgLyogOCBXYWl0aW5nIGZvciB0aGUgQUNLIG9mIEFDQ0VQVCByZXF1ZXN0IChmb3IgTVQgY2FsbCkgKi8KKyAgICBWT0lQX0NBTExfU1RBVEVfSE9MRElORywgICAgICAgICAgICAvKiA5IEhvbGRpbmcgZGlhbG9nIGlubmVyIGEgc2luZ2xlIGNhbGwgIChDYWxsIEhPTEQpICovCisgICAgVk9JUF9DQUxMX1NUQVRFX1VOSE9MRElORywgICAgICAgICAgLyogMTAgUmV0cmlldmluZyBkaWFsb2cgaW5uZXIgYSBzaW5nbGUgY2FsbCAoQ2FsbCBIT0xEKSAqLworICAgIFZPSVBfQ0FMTF9TVEFURV9IT0xESU5HXzFELCAgICAgICAgIC8qIDExIEhvbGRpbmcgdGhlIGZpcnN0IGRpYWxvZyBvZiBhIGNhbGwgYW5kIHdhaXRpbmcgZm9yIHRoZSByZXNwb25zZSAoQ2FsbCBIT0xEKSovCisgICAgVk9JUF9DQUxMX1NUQVRFX0hPTERJTkdfMkQsICAgICAgICAgLyogMTIgSG9sZGluZyB0aGUgc2Vjb25kIGRpYWxvZyBvZiBhIGNhbGwgYW5kIHdhaXRpbmcgZm9yIHRoZSByZXNwb25zZSAoQ2FsbCBIT0xEKSAqLworICAgIFZPSVBfQ0FMTF9TVEFURV9SRUxfSE9MRF9GQUlMRUQsICAgIC8qIDEzIFJlbGVhc2luZyB0aGUgZmFpbGVkIGRpYWxvZyBkdXJpbmcgdGhlIEhPTEQgcHJvY2VzcyAoQ2FsbCBIT0xEKSAqLworICAgIFZPSVBfQ0FMTF9TVEFURV9VTkhPTERJTkdfMUQsICAgICAgIC8qIDE0IFJldHJpZXZpbmcgdGhlIGZpcnN0IGRpYWxvZyBvZiBhIGNhbGwgYW5kIHdhaXRpbmcgZm9yIHRoZSByZXNwb25zZSAgKENhbGwgVU5IT0xEKSAqLworICAgIFZPSVBfQ0FMTF9TVEFURV9VTkhPTERJTkdfMkQsICAgICAgIC8qIDE1IFJldHJpZXZpbmcgdGhlIHNlY29uZCBkaWFsb2cgb2YgYSBjYWxsIGFuZCB3YWl0aW5nIGZvciB0aGUgcmVzcG9uc2UgIChDYWxsIFVOSE9MRCkgICovCisgICAgVk9JUF9DQUxMX1NUQVRFX1JFTF9VTkhPTERfRkFJTEVELCAgLyogMTYgUmVsZWFzaW5nIHRoZSBmYWlsZWQgZGlhbG9nIGR1cmluZyB0aGUgVU5IT0xEIHByb2Nlc3MgKENhbGwgVU5IT0xEKSAqLworICAgIFZPSVBfQ0FMTF9TVEFURV9URVJNSU5BVElORywgICAgICAgIC8qIDE3IFJlbGVhc2luZyBjYWxsICovCisgICAgVk9JUF9DQUxMX1NUQVRFX1dBSVRfVFJBTlNGRVIsICAgICAgLyogMTggV2FpdGluZyBmb3IgdGhlIHJlc3BvbnNlIG9mIHByZXZpb3VzIHNlbnQgUkVGRVIgQ0FMTCBUcmFuc2ZlciAqLworICAgIFZPSVBfQ0FMTF9TVEFURV9UUkFOU0ZFUklORywgICAgICAgIC8qIDE5IFRyYXNmZXJpbmcgYSBjYWxsIGFuZCB3YWl0aW5nIGZvciB0aGUgcmVzdWx0LiAqLworICAgIFZPSVBfQ0FMTF9TVEFURV9BQk9SVF9NT19OQVRfQUREUiwgIC8qIDIwIEFib3J0aW5nIHRoZSBnZXR0aW5nIGRlcml2ZWQgYWRkcmVzcyBwcm9jZXNzICovCisgICAgVk9JUF9DQUxMX1NUQVRFX0FCT1JUX01UX05BVF9BRERSLCAgLyogMjEgQWJvcnRpbmcgdGhlIGdldHRpbmcgZGVyaXZlZCBhZGRyZXNzIHByb2Nlc3MgKi8KKyAgICBWT0lQX0NBTExfU1RBVEVfV0FJVF9DQU5DRUwsICAgICAgICAvKiAyMiBSZWNlaXZlZCB0aGUgcmVxdWVzdCB0byBhYm9ydCB0aGUgTU8sIGlzIHdhaXRpbmcgdGhlIDF4eCBpbmRpY2F0aW9uIHRvIHByb2NlZWQgdGhlIGNhbmNlbGluZyBwcm9jZWR1cmUgICovCisgICAgVk9JUF9DQUxMX1NUQVRFX0NBTkNFTElORywgICAgICAgICAgLyogMjMgQ2FuY2VsaW5nIGEgTU8gY2FsbCwgYW5kIHdhaXRpbmcgZm9yIHRoZSByZXNwb25zZSAqLworICAgIFZPSVBfQ0FMTF9TVEFURV9XQUlUX1RFUk1JTkFURSwgICAgIC8qIDI0IFdhaXRpbmcgZm9yIHRoZSByZXBvc25lIG9mIGFjY3BldGFuY2UgdG8gcHJvY2VlZCB0aGUgdGVybWluYXRpbmcgcHJvY2VzcyAqLworICAgIFZPSVBfQ0FMTF9TVEFURV9URVJNSU5BVElOR18yRCwgICAgIC8qIDI1IFRlcm1pbmF0aW5nIGEgbXVsaXQtcGFydHkgY2FsbCwgYW5kIHdhaXRpbmcgZm9yIHRoZSByZXNwb25zZSAqLyAgIAorICAgIFZPSVBfQ0FMTF9TVEFURV9URVJNSU5BVElOR18xRCwgICAgIC8qIDI2IFRlcm1pbmF0aW5nIGEgbXVsaXQtcGFydHkgY2FsbCwgYW5kIGFscmVhZHkgcmVjZWl2ZWQgdGhlIGZpcnN0IHJlc3BvbnNlICovCisgICAgVk9JUF9DQUxMX1NUQVRFX0FERF9QQVJUSUNJUEFOVCwgICAgLyogMjcgQWRkaW5nIHBhcnRpY2lwYW50IGFuZCB3YWl0aW5nIGZvciB0aGUgcmVzcG9uc2UgKi8KKyAgICBWT0lQX0NBTExfU1RBVEVfUkVNT1ZFX1BBUlRJQ0lQRU5ULCAvKiAyOCBSZW1vdmluZyBwYXJ0aWNpcGFudCBhbmQgd2FpdGluZyBmb3IgdGhlIHJlc3BvbnNlICovCisgICAgVk9JUF9DQUxMX1NUQVRFX1NVQlNDUklCSU5HLCAgICAgICAgLyogMjkgU3Vic2NyaWJpbmcgdGhlIGNhbGwgc3RhdGUgKi8KKy8vICAgIFZPSVBfQ0FMTF9TVEFURV9VTlNVQlNDUklCSU5HLCAgICAgIC8qIDMwIFVuc3Vic2NyaWJpbmcgdGhlIGNhbGwgc3RhdGUgYmVmb3JlIHJlbGVhc2UgYSBjYWxsICovCisgICAgVk9JUF9DQUxMX1NUQVRFX1RPVEFMCit9dm9pcF9jYWxsX3N0YXRlX2VudW07CisKKy8qIGRpYWxvZyBzdGF0ZSAqLwordHlwZWRlZiBlbnVtCit7CisgICAgVk9JUF9ETEdfU1RBVEVfVEVSTUlOQVRFRCA9IDAsICAvKiBkaWFsb2cgaXMgdGVybWluYXRlZCAqLworICAgIFZPSVBfRExHX1NUQVRFX0FDVElWRSwgICAgICAgICAgLyogMSBBY3RpdmUgY2FsbCAqLworICAgIFZPSVBfRExHX1NUQVRFX0hPTEQsICAgICAgICAgICAgLyogMiBIZWxkIGNhbGwgKi8KKyAgICBWT0lQX0RMR19TVEFURV9XQUlUSU5HLCAgICAgICAgIC8qIDMgV2FpdGluZyBjYWxsICovCisgICAgVk9JUF9ETEdfU1RBVEVfSE9MRElORywgICAgICAgICAvKiA0IFRoZSBkaWFsb2cgaXMgaG9sZGluZyBhbmQgd2FpdGluZyBmb3IgdGhlIHJlc3BvbnNlICovCisgICAgVk9JUF9ETEdfU1RBVEVfVU5IT0xESU5HLCAgICAgICAvKiA1IFRoZSBkaWFsb2cgaXMgdW5ob2xkaW5nIGFuZCB3YWl0aW5nIGZvciB0aGUgcmVzcG9uc2UgKi8KKyAgICBWT0lQX0RMR19TVEFURV9URVJNSU5BVElORywgICAgIC8qIDYgVGVybWluYXRpbmcgYSBkaWFsb2cgKi8KKyAgICBWT0lQX0RMR19TVEFURV9XQUlUX05BVCwgICAgICAgIC8qIDcgV2FpdCBOQVQgcmVzcG9uc2UgdG8gcHJvY2VlZCBNTy9NVCBjYWxsICovCisgICAgVk9JUF9ETEdfU1RBVEVfTU8sICAgICAgICAgICAgICAvKiA4IER1cmluZyBNTyBwcm9jZWR1cmUgKi8gIAorICAgIFZPSVBfRExHX1NUQVRFX01ULCAgICAgICAgICAgICAgLyogOSBEdXJpbmcgTVQgcHJvY2VkdXJlICovCisgICAgVk9JUF9ETEdfU1RBVEVfV0FJVF9BQ0ssICAgICAgICAvKiAxMCBXYWl0aW5nIGZvciByZW1vdGUgQUNLICovCisgICAgVk9JUF9ETEdfU1RBVEVfV0FJVF9QUkFDSywgICAgICAvKiAxMSBXYWl0aW5nIGZvciBQUkFDSyAqLworICAgIFZPSVBfRExHX1NUQVRFX1dBSVRfUFJBQ0tfUkVTUCwgLyogMTIgV2FpdGluZyBmb3IgMjAwIG9mIFBSQUNLICovCisgICAgVk9JUF9ETEdfU1RBVEVfVFJBTlNGRVJJTkcsICAgICAvKiAxMiBEdXJpbmcgdHJhbnNmZXJpbmcgcHJvY2VkdXJlICovCisgICAgVk9JUF9ETEdfU1RBVEVfVFJBTlNGRVJFRSwgICAgICAvKiAxMyBEdXJpbmcgYmFja2dyb3VuZCB0cmFuc2ZlcmluZyBwcm9jZWR1cmUgKi8KKyAgICBWT0lQX0RMR19TVEFURV9UT1RBTAorfXZvaXBfZGxnX3N0YXRlX2VudW07CisKKwordHlwZWRlZiBlbnVtCit7CisgICAgVk9JUF9SVFBfRElSRUNUSU9OX1NFTkRSRUNWID0gMCwgICAgLyogU2VuZCBhbmQgUmVjZWl2ZSAqLworICAgIFZPSVBfUlRQX0RJUkVDVElPTl9TRU5ET05MWSwgICAgICAgIC8qIFNlbmQgb25seSAqLworICAgIFZPSVBfUlRQX0RJUkVDVElPTl9SRUNWT05MWSwgICAgICAgIC8qIFJlY2VpdmUgb25seSAqLworICAgIFZPSVBfUlRQX0RJUkVDVElPTl9JTkFDVElWRSwgICAgICAgICAvKiBSVFAgc2Vzc2lvbiBzdXNwZW5kcyAqLworICAgIFZPSVBfUlRQX0RJUkVDVElPTl9ERUZBVUxULAorICAgIFZPSVBfUlRQX0RJUkVDVElPTl9UT1RBTAorfXZvaXBfcnRwX2RpcmVjdGlvbl9lbnVtOworCisKKy8qIFBST0dSRVNTSU5HX0lORCAqLwordHlwZWRlZiBlbnVtCit7CisgICAgVk9JUF9DQUxMX1BST0dfVFJZSU5HID0gMCwgICAgICAvKiBzcGVjaWZpYyBmb3Igc2VuZGluZyBjYWxsX2lkIHRvIG1taSAqLworICAgIFZPSVBfQ0FMTF9QUk9HX1JJTkdJTkcsICAgICAgICAgLyogUmVjZWl2ZSAxODAgKHJpbmdpbmcgaW5kaWNhdGlvbikgKi8KKyAgICBWT0lQX0NBTExfUFJPR19GT1JXQVJERUQsICAgICAgIC8qIFJlY2VvdmUgMTgxIChjYWxsIGZvcndhcmRlZCkgKi8KKyAgICBWT0lQX0NBTExfUFJPR19TRFBfRVhDSEFOR0VELCAgIC8qIFJlY2VpdmUgMXh4IHdpdGggU0RQICovCisgICAgVk9JUF9DQUxMX1BST0dfVE9UQUwKK312b2lwX2NhbGxfcHJvZ3Jlc3NfZW51bTsKKworLyogVHlwZSBvZiBjYWxsIHN0YXRlIGluIENBTExfU1RBVEVfSU5ELiAqLwordHlwZWRlZiBlbnVtCit7CisgICAgVk9JUF9TVEFURV9JTkRfU0RQX0NIQU5HRSA9IDAsCisgICAgVk9JUF9TVEFURV9JTkRfVFJBTlNGRVJJTkcsCisgICAgVk9JUF9TVEFURV9JTkRfVFJBTlNGRVJFRCwKKyAgICBWT0lQX1NUQVRFX0lORF9UUkFOU0ZFUl9GQUlMRUQsCisgICAgVk9JUF9TVEFURV9JTkRfVE9UQUwKK312b2lwX3N0YXRlX2luZF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgIFZPSVBfTVdJX1ZPSUNFPTAsIC8qIFZvaWNlIE1lc3NhZ2UgKi8KKyAgIFZPSVBfTVdJX0ZBWCwgICAgIC8qIEZheCBNZXNzYWdlICovCisgICBWT0lQX01XSV9QQUdFUiwgICAvKiBQYWdlciBNZXNzYWdlICovCisgICBWT0lQX01XSV9NTSwgICAgICAvKiBNdWx0aW1lZGlhIE1lc3NhZ2UgKi8KKyAgIFZPSVBfTVdJX1RFWFQsICAgIC8qIFRleHQgTWVzc2FnZSAqLworICAgVk9JUF9NV0lfTk9ORSwgICAgLyogVW5yZWNvZ25pemVkIE1lc3NhZ2UgKi8KKyAgIFZPSVBfTVdJX1RPVEFMCit9IHZvaXBfbXdpX3R5cGVfZW51bTsKKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBWT0lQX0NPTkZfU1RBVEVfRlVMTCA9IDAsICAgLyogZnVsbCBpbmZvcm1hdGlvbiBvZiBjb25mZXJlbmNlICovCisgICAgVk9JUF9DT05GX1NUQVRFX1BBUlRJQUwsICAgIC8qIHBhcnRpY2lhbCBpbmZvcm1hdGlvbiwgY29udGFpbnMgb25seSBjaGFuZ2VkIHBhcnQgKi8KKyAgICBWT0lQX0NPTkZfU1RBVEVfREVMRVRFRCwgICAgLyogY29uZmVyZW5jZSBpcyBkZWxldGVkIChjYWxsIGVuZCkgKi8KKyAgICBWT0lQX0NPTkZfU1RBVEVfRU5ECit9dm9pcF9jb25mX3N0YXRlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFZPSVBfQ09ORl9VU0VSX1NUQVRVU19DT05ORUNURUQgPSAwLCAgICAvKiBVc2VyIGNvbm5lY3RlZCAqLworICAgIFZPSVBfQ09ORl9VU0VSX1NUQVRVU19ESVNDT05ORUNURUQsICAgICAvKiBVc2VyIGRpc2Nvbm5lY3RlZCAqLworICAgIFZPSVBfQ09ORl9VU0VSX1NUQVRVU19FTkQKK312b2lwX2NvbmZfdXNlcl9zdGF0dXNfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVk9JUF9TVUJTX1NUQVRFX05PTkUgPSAwLAorICAgIFZPSVBfU1VCU19TVEFURV9TVUNDRVNTLAorICAgIFZPSVBfU1VCU19TVEFURV9CS19TVUJTQ1JJQklORywKKyAgICBWT0lQX1NVQlNfU1RBVEVfRU5ECit9dm9pcF9zdWJzX3N0YXRlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFZPSVBfQU5ORVhfTk9ORSA9IDAsCisgICAgVk9JUF9BTk5FWF9OTywKKyAgICBWT0lQX0FOTkVYX1lFUywKKyAgICBWT0lQX0FOTkVYX0VORAorfXZvaXBfYW5uZXhfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVk9JUF9TSVBfQ0FQX0FVRElPID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMCBzaXAuYXVkaW8gKi8KKyAgICBWT0lQX1NJUF9DQVBfQVBQTElDQVRJT04sICAgICAgICAgICAgICAgICAgICAgICAvKiAxIHNpcC5hcHBsaWNhdGlvbiAqLworICAgIFZPSVBfU0lQX0NBUF9EQVRBLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIgc2lwLmRhdGEgKi8KKyAgICBWT0lQX1NJUF9DQVBfQ09OVFJPTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzIHNpcC5jb250cm9sICovCisgICAgVk9JUF9TSVBfQ0FQX1ZJREVPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNCBzaXAudmlkZW8gKi8KKyAgICBWT0lQX1NJUF9DQVBfVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1IHNpcC50ZXh0ICovCisgICAgVk9JUF9TSVBfQ0FQX0FVVE9NQVRBLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNiBzaXAuYXV0b21hdGEgKi8KKyAgICBWT0lQX1NJUF9DQVBfQ0xBU1MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3IHNpcC5jbGFzcyAqLworICAgIFZPSVBfU0lQX0NBUF9EVVBMRVgsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDggc2lwLmR1cGxleCAqLworICAgIFZPSVBfU0lQX0NBUF9NT0JJTElUWSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDkgc2lwLm1vYmlsaXR5ICovCisgICAgVk9JUF9TSVBfQ0FQX0RFU0NSSVBUSU9OLCAgICAgICAgICAgICAgICAgICAgICAgLyogMTAgc2lwLmRlc2NyaXB0aW9uICovCisgICAgVk9JUF9TSVBfQ0FQX0VWRU5UUywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTEgc2lwLmV2ZW50cyAqLworICAgIFZPSVBfU0lQX0NBUF9QUklPUklUWSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEyIHNpcC5wcmlvcml0eSAqLworICAgIFZPSVBfU0lQX0NBUF9NRVRIT0RTLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEzIHNpcC5tZXRob2RzICovCisgICAgVk9JUF9TSVBfQ0FQX0VYVEVOU0lPTlMsICAgICAgICAgICAgICAgICAgICAgICAgLyogMTQgc2lwLmV4dGVuc2lvbnMgKi8KKyAgICBWT0lQX1NJUF9DQVBfU0NIRU1FUywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNSBzaXAuc2NoZW1lcyAqLworICAgIFZPSVBfU0lQX0NBUF9BQ1RPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE2IHNpcC5hY3RvciAqLworICAgIFZPSVBfU0lQX0NBUF9JU0ZPQ1VTLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE3IHNpcC5pc2ZvY3VzICovCisgICAgVk9JUF9TSVBfQ0FQX0JBU0VfVEFHUyA9IFZPSVBfU0lQX0NBUF9JU0ZPQ1VTLAorLyogbmV3IGRlZmluZWQgdGFncyBzdGFydGluZyBmcm9tIGhlcmUgKi8KKyAgICBWT0lQX1NJUF9DQVBfVE9UQUwKK30gdm9pcF9zaXBfY2FwYWJpbGl0eV9lbnVtOworCisjZGVmaW5lIFZPSVBfU0lQX0NBUF9OT05fU1BFQ0lGSUVEIDAKK3R5cGVkZWYgZW51bQoreworICAgIFZPSVBfU0lQX0NBUF9CT09MRUFOX1RSVUUgPSAxLAorICAgIFZPSVBfU0lQX0NBUF9CT09MRUFOX0ZBTFNFCit9IHZvaXBfc2lwX2NhcF9ib29sZWFuX3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVk9JUF9TSVBfQ0FQX0NMQVNTX0JVU0lORVNTID0gMSwKKyAgICBWT0lQX1NJUF9DQVBfQ0xBU1NfUEVSU09OQUwsCisgICAgVk9JUF9TSVBfQ0FQX0NMQVNTX1NZU1RFTSA9IFZPSVBfU0lQX0NBUF9DTEFTU19QRVJTT05BTAorfSB2b2lwX3NpcF9jYXBfY2xhc3NfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBWT0lQX1NJUF9DQVBfRFVQTEVYX0ZVTEwgPSAxLAorICAgIFZPSVBfU0lQX0NBUF9EVVBMRVhfU1lTVEVNID0gVk9JUF9TSVBfQ0FQX0RVUExFWF9GVUxMLAorICAgIFZPSVBfU0lQX0NBUF9EVVBMRVhfSEFMRiwKKyAgICBWT0lQX1NJUF9DQVBfRFVQTEVYX1JFQ1ZPTkxZLAorICAgIFZPSVBfU0lQX0NBUF9EVVBMRVhfU0VORE9OTFkKK30gdm9pcF9zaXBfY2FwX2R1cGxleF90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFZPSVBfU0lQX0NBUF9NT0JJTElUWV9GSVhFRCA9IDEsCisgICAgVk9JUF9TSVBfQ0FQX01PQklMSVRZX01PQklMRSwKKyAgICBWT0lQX1NJUF9DQVBfTU9CSUxJVFlfU1lTVEVNID0gVk9JUF9TSVBfQ0FQX01PQklMSVRZX01PQklMRQorfSB2b2lwX3NpcF9jYXBfbW9iaWxpdHlfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBWT0lQX1NJUF9DQVBfQUNUT1JfUFJJTkNJUEFMID0gMSwKKyAgICBWT0lQX1NJUF9DQVBfQUNUT1JfU1lTVEVNID0gVk9JUF9TSVBfQ0FQX0FDVE9SX1BSSU5DSVBBTCwKKyAgICBWT0lQX1NJUF9DQVBfQUNUT1JfQVRURU5EQU5ULAorICAgIFZPSVBfU0lQX0NBUF9BQ1RPUl9NU0dfVEFLRVIsCisgICAgVk9JUF9TSVBfQ0FQX0FDVE9SX0lORk9STUFUSU9OCit9IHZvaXBfc2lwX2NhcF9hY3Rvcl90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFZPSVBfQ0FMTEVSX1BSRUZfTk9OX1NQRUNJRklFRCA9IDAsCisgICAgVk9JUF9DQUxMRVJfUFJFRl9BQ0NFUFRfRVhQTElDSVQsCisgICAgVk9JUF9DQUxMRVJfUFJFRl9BQ0NFUFRfUkVRVUlSRSwKKyAgICBWT0lQX0NBTExFUl9QUkVGX0FDQ0VQVF9OT05FLAorICAgIFZPSVBfQ0FMTEVSX1BSRUZfUkVKRUNUX0VYUExJQ0lULAorICAgIFZPSVBfQ0FMTEVSX1BSRUZfUkVKRUNUX1JFUVVJUkUsCisgICAgVk9JUF9DQUxMRVJfUFJFRl9SRUpFQ1RfTk9ORQorfSB2b2lwX2NhbGxlcl9wcmVmX3R5cGVfZW51bTsKKworI2VuZGlmIC8qIF9NTUkyVk9JUF9FTlVNU19IICovCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbWkydm9pcF9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbWkydm9pcF9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODEzNTIzCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21taTJ2b2lwX3N0cnVjdC5oCkBAIC0wLDAgKzEsNzU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDYKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqIG1taTJ2b2lwX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBzdHJ1Y3R1cmUgdXNlZCBmb3IgY29tbXVuaWNhdGluZyBiZXR3ZWVuIE1NSSBhbmQgVm9JUC4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9NTUkyVk9JUF9TVFJVQ1RfSAorI2RlZmluZSBfTU1JMlZPSVBfU1RSVUNUX0gKKworI2RlZmluZSBWT0lQX0RFQlVHX0NBTExfTElTVAorLy8jZGVmaW5lIFZPSVBfM1BDQ19TVVBQT1JUICAgICAgICAgICAgICAgICAgIC8qIDNwY2MgY2FsbCBmbG93cyBzdXBwb3J0ICovCisvLyNkZWZpbmUgVk9JUF9FQVJMWV9NRURJQV9TVVBQT1JUICAgICAgICAgICAgLyogZWFybHkgbWVkaWEgc3VwcG9ydCAqLworLy8jZGVmaW5lIFZPSVBfU0lQX0NBUEFDSVRZX1NVUFBPUlQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorKiBEZWZpbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTSVBfQ09ORk9STUFOQ0VfVEVTVAorCisjZGVmaW5lIFZPSVBfTUFYX05VTV9DT0RFQwkgICAgKDE1KSAvKiBNYXhpbXVtIG51bWJlciBvZiBjb2RlYyAqLworLy8jZGVmaW5lIFZPSVBfTUFYX05VTV9TRVNTSU9OCSgyKSAgLyogTWF4aW11bSBudW1iZXIgb2YgUlRQIHNlc3Npb24gd2l0aGluIGEgZGlhbG9nICovCisjZGVmaW5lIFZPSVBfTUFYX1NPQ0tfQUREUl9MRU4gICgxNikgLyogTGVuZ3RoIG9mIElQIGFkZHJlc3MgKi8KKyNkZWZpbmUgVk9JUF9NQVhfREVSSUVWRURfQUREUiAgKDIpICAvKiBNYXhpbXVtIG51bWJlciBvZiBkZXJpdmVkIGFkZHJlc3MgKi8KKyNkZWZpbmUgVk9JUF9NQVhfSVBfU0VHX0xFTiAgICAgKDQpICAvKiBNYXhpbXVtIG51bWJlciBvZiBJUCBzZWdlbWVudCAqLworCisvKiByZXN1bHQgKi8KKyNkZWZpbmUgVk9JUF9PSwkgICAgICAgICAgICAgICAgICAgICAoMCkJLyogU3VjY3Nlc3MgKi8KKyNkZWZpbmUgVk9JUF9FUlJPUgkgICAgICAgICAgICAgICAgICgxKQkvKiBGYWlsdXJlIGhhcHBlbnMgaW4gVm9JUCB0YXNrICovCisjZGVmaW5lIFZPSVBfU0lQX0VSUk9SCSAgICAgICAgICAgICAoMikJLyogRmFpbHVyZSBoYXBwZW5zIGluIFNJUCB0YXNrICovCisjZGVmaW5lIFZPSVBfRlNfRVJST1IJICAgICAgICAgICAgICgzKQkvKiBGaWxlIHN5c3RlbSByZWxhdGVkIGVycm9yICovCisjZGVmaW5lIFZPSVBfTkFUX0VSUk9SCSAgICAgICAgICAgICAoNCkJLyogTkFUIHJlbGF0ZWQgZXJyb3IgKi8KKworLyogY2F1c2UgKi8KKyNkZWZpbmUgVk9JUF9OT19FUlJPUgkgICAgICAgICAgICAgKDApIC8qbm8gZXJyb3IgKi8KKyNkZWZpbmUgVk9JUF9VTlNQRUNJRklFRF9FUlJPUgkgICAgKC0xKSAvKlVuc3BlY2lmaWVkIGVycm9yICovCisjZGVmaW5lIFZPSVBfTk9UX1JFR0lTVEVSRUQJICAgICAgICAoLTIpIC8qIFVBIGhhcyBub3QgcmVnaXN0ZXJlZCB5ZXQgKi8KKyNkZWZpbmUgVk9JUF9BTFJFQURZX1JFR0lTVEVSRUQgICAgICgtMykgLypVQSBoYXMgYWxyZWFkeSByZWdpc3RlcmVkICovCisjZGVmaW5lIFZPSVBfSU5WQUxJRF9QQVJBTSAgICAgICAgICAoLTQpIC8qIEludmFsaWQgcGFyYW1ldGVyICovCisjZGVmaW5lIFZPSVBfQ1JFQVRFX1VBQ19FUlJPUiAgICAgICAoLTUpIC8qQ3JlYXRlIFVBQyBmYWlsZWQgKi8KKyNkZWZpbmUgVk9JUF9HRVRfQUREUl9GQUlMRUQgICAgICAgICgtNikgLyogR2V0IGRlcml2ZWQgYWRkcmVzcyBmYWlsZWQgZHVyaW5nIE1PL01UIGNhbGwgKi8KKyNkZWZpbmUgVk9JUF9DQUxMX0FCT1JUX0xPQ0FMTFkgICAgICgtNykgLyogRm9yY2UgdG8gYWJvcnQgY2FsbCAqLworI2RlZmluZSBWT0lQX1JFQ1ZfQllFICAgICAgICAgICAgICAgKC04KSAvKiBSZWNlaXZlIEJZRSByZXF1ZXN0IGZyb20gcmVtb3RlIHNpZGUgKi8KKyNkZWZpbmUgVk9JUF9JTkNPUlJFQ1RfQ0FMTF9TVEFURSAgICgtOSkgLyogQ2FsbCBzdGF0ZSBpcyBub3QgcG9zc2libGUgdG8gYWNoaWV2ZSByZXF1ZXN0ZWQgb3BlcmF0aW9uICovCisjZGVmaW5lIFZPSVBfQkVBUkVSX0RJU0NPTk5FQ1RFRCAgICAoLTEwKSAvKiBOZXR3b3JrIGlzIGRvd24gKi8KKyNkZWZpbmUgVk9JUF9BQk9SVF9GQUlMRUQgICAgICAgICAgICgtMTEpIC8qQWJvcnQgZmFpbGVkICovCisjZGVmaW5lIFZPSVBfQ0FMTF9OT1RfRVhJU1QgICAgICAgICAoLTEyKSAvKiBDYWxsIGRvZXMgbm90IGV4aXN0ICovCisjZGVmaW5lIFZPSVBfSU5WQUxJRF9VUkkgICAgICAgICAgICAoLTEzKSAvKiBJbnZhbGlkIFVSSSAqLworI2RlZmluZSBWT0lQX1NXQVBfRkFJTEVEICAgICAgICAgICAgKC0xNCkgLyogV2hvbGUgc3dhcCBmYWlsZWQgKi8KKyNkZWZpbmUgVk9JUF9TV0FQX1BBUlRJQUxfRkFJTEVEICAgICgtMTUpIC8qIEhvbGQgc3VjY2Vzc2Z1bGx5LCByZXRyaWV2ZSBmYWlsZWQgKi8KKyNkZWZpbmUgVk9JUF9UUkFOU0ZFUl9GQUlMRUQgICAgICAgICgtMTYpIC8qIFRyYW5zZmVyIGZhaWxlZCwga2VlcCB0aGUgc2FtZSBzdGF0ZSAqLworI2RlZmluZSBWT0lQX01FUkdFX0ZBSUxFRCAgICAgICAgICAgKC0xNykgLyogQ2FsbCBtZXJnZSBmYWlsZWQgKi8KKyNkZWZpbmUgVk9JUF9NRVJHRV9QQVJUSUFMX0ZBSUxFRCAgICgtMTgpIC8qIENhbGwgbWVyZ2UgcGFydGlhbCBmYWlsZWQgKi8KKyNkZWZpbmUgVk9JUF9OQVRfRkFJTEVEICAgICAgICAgICAgICgtMTkpIC8qIEdldCBOQVQgaW5mb3JtYXRpb24gZnJvbSBzZXZlciBmYWlsZWQuICovCisjZGVmaW5lIFZPSVBfVEVNUE9SQVJZX0JVU1kgICAgICAgICAoLTIwKSAvKiBObyBlbXB0eSBzbG90IGluIGNhbGwgbGlzdCB0byBzZXJ2Y2UgcmVxdWVzdC4gKi8KKyNkZWZpbmUgVk9JUF9VTlNVUFBPUlRFRF9OQVRfVFlQRSAgICgtMjEpIC8qIFRoZSBOQVQgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLiAqLworI2RlZmluZSBWT0lQX05FVFdPUktfRVJST1IgICAgICAgICAgKC0yMikgLyogTmV0d29yayBFcnJvciAqLworI2RlZmluZSBWT0lQX0JVU1kgICAgICAgICAgICAgICAgICAgKC0yMykgLyogVm9JUCB0YXNrIGlzIGV4ZWN1dG9pbmcgYW5vdGhlciBhY3Rpb24gbm93ICovCisjZGVmaW5lIFZPSVBfSU5WQUxJRF9DQUxMX1JFUSAgICAgICAoLTI0KSAvKiBJbnZhbGlkIGNhbGwgcmVxdWVzdCAqLworI2RlZmluZSBWT0lQX1BBUlRJQUxfRkFJTEVEICAgICAgICAgKC0yNSkgLyogUGFydGlhbCBmYWlsZWQgKi8KKyNkZWZpbmUgVk9JUF9SRVJFR0lTVEVSX0ZBSUxFRCAgICAgICgtMjYpIC8qIFJlLXJlZ2lzdGVyIGZhaWxlZC4gKi8KKyNkZWZpbmUgVk9JUF9TRFBfTUlTTUFUQ0hFRCAgICAgICAgICgtMjcpIC8qIEluY29ycmVjdCBTRFAgc2Vzc2lvbiBpbiB0aGUgcmVzcG9uc2UgKi8KKyNkZWZpbmUgVk9JUF9ETlNfRVJST1IgICAgICAgICAgICAgICgtMjgpIC8qIEZhaWx1cmUgaGFwcGVucyBpbiBTSVAgdGFzayAqLworI2RlZmluZSBWT0lQX05PX1JFU09VUkNFICAgICAgICAgICAgKC0yOSkgLyogbm8gcmVzb3VyY2Ugb3IgbWVtb3J5IHRvIGV4ZWN1dGUgKi8gLyogbmV3IGZvciBKdWxpYSAqLworI2RlZmluZSBWT0lQX1NJUF9GU19FUlJPUiAgICAgICAgICAgKC0zMCkgLyogRlMgZXJyb3IgKi8vKiBuZXcgZm9yIEp1bGlhICovIAorI2RlZmluZSBWT0lQX0RIQ1BfRVJST1IgICAgICAgICAgICAgKC0zMSkgLyogREhDUCBnZXQgSVAgZXJyb3IgKi8gLyogZm9yIE1NSSB0byByZXRyeSBsb2dpbiAqLworCisKKy8qIHN5bmMgd2l0aCBTSVAgZXJyb3IgKi8KKyNkZWZpbmUgVk9JUF9TSVBfMzAwX01VTFRJUExFX0NIT0lDRVMgICAgICAgICAoMzAwKQorI2RlZmluZSBWT0lQX1NJUF8zMDFfTU9WRURfUEVSTUFORU5UTFkgICAgICAgICgzMDEpCisjZGVmaW5lIFZPSVBfU0lQXzMwMl9NT1ZFRF9URU1QT1JBUklMWSAgICAgICAgKDMwMikKKyNkZWZpbmUgVk9JUF9TSVBfMzA1X1VTRV9QUk9YWSAgICAgICAgICAgICAgICAoMzA1KQorI2RlZmluZSBWT0lQX1NJUF80MDBfQkFEX1JFUVVFU1QgICAgICAgICAgICAgICg0MDApCisjZGVmaW5lIFZPSVBfU0lQXzQwMV9VTkFVVEhPUklaRUQgICAgICAgICAgICAgKDQwMSkKKyNkZWZpbmUgVk9JUF9TSVBfNDAzX0ZPUkJJRERFTiAgICAgICAgICAgICAgICAoNDAzKQorI2RlZmluZSBWT0lQX1NJUF80MDRfTk9UX0ZPVU5EICAgICAgICAgICAgICAgICg0MDQpCisjZGVmaW5lIFZPSVBfU0lQXzQwNV9NRVRIT0RfTk9UX0FMTE9XICAgICAgICAgKDQwNSkKKyNkZWZpbmUgVk9JUF9TSVBfNDA2X05PVF9BQ0NFUFRBQkxFICAgICAgICAgICAoNDA2KQorI2RlZmluZSBWT0lQX1NJUF80MDdfUFJPWFlfQVVUSF9SRVFVSVJFRCAgICAgICg0MDcpCisjZGVmaW5lIFZPSVBfU0lQXzQwOF9SRVFVRVNUX1RJTUVPVVQgICAgICAgICAgKDQwOCkKKyNkZWZpbmUgVk9JUF9TSVBfNDEyX0NPTkRJVElPTkFMX1JFUV9GQUlMICAgICAoNDEyKSAvKiBDb25kaXRpb25hbCBSZXF1ZXN0IEZhaWxlZCAqLworI2RlZmluZSBWT0lQX1NJUF80MjJfSU5URVJWQUxfVE9PX0JSSUVGICAgICAgICg0MjIpIC8qIFNlc3Npb24tRXhwaXJlcyB0b28gYnJpZWYgKi8KKyNkZWZpbmUgVk9JUF9TSVBfNDIzX0lOVEVSVkFMX1RPT19CUklFRiAgICAgICAoNDIzKSAvKiBFeHBpcmVzIHRvbyBicmllZiAqLworI2RlZmluZSBWT0lQX1NJUF80NzhfVU5SRVNPTFZFQUJMRV9ERVNUICAgICAgICg0NzgpIC8qIHVucmVzb2x2ZWFibGUgZGVzdGluYXRpb24gKi8KKyNkZWZpbmUgVk9JUF9TSVBfNDgwX1RFTVBfVU5BVkFJTEFCTEUgICAgICAgICAoNDgwKQorI2RlZmluZSBWT0lQX1NJUF80ODFfQ0FMTF9UUkFOU19OT1RfRVhJU1QgICAgICg0ODEpCisjZGVmaW5lIFZPSVBfU0lQXzQ4NF9BRERSRVNTX0lOQ09NUExFVEUgICAgICAgKDQ4NCkKKyNkZWZpbmUgVk9JUF9TSVBfNDg2X0JVU1lfSEVSRSAgICAgICAgICAgICAgICAoNDg2KQorI2RlZmluZSBWT0lQX1NJUF80ODhfTk9UX0FDQ0VQVEFCTEVfSEVSRSAgICAgICg0ODgpCisjZGVmaW5lIFZPSVBfU0lQXzQ4N19SRVFfVEVSTUlOQVRFRCAgICAgICAgICAgKDQ4NykKKyNkZWZpbmUgVk9JUF9TSVBfNDkxX1JFUVVFU1RfUEVORElORyAgICAgICAgICAoNDkxKQorI2RlZmluZSBWT0lQX1NJUF80OTlfVU5SRVNPTFZFQUJMRV9ERVNUICAgICAgICg0OTkpIC8qIHVucmVzb2x2ZWFibGUgZGVzdGluYXRpb24gKi8KKyNkZWZpbmUgVk9JUF9TSVBfNTAwX1NFUlZFUl9JTlRfRVJST1IgICAgICAgICAoNTAwKQorI2RlZmluZSBWT0lQX1NJUF81MDNfU0VSVklDRV9VTkFWQUlMQUJMRSAgICAgICg1MDMpCisjZGVmaW5lIFZPSVBfU0lQXzYwMF9CVVNZX0VWRVJZV0hFUkUgICAgICAgICAgKDYwMCkJCQkKKyNkZWZpbmUgVk9JUF9TSVBfNjAzX0RFQ0xJTkUgICAgICAgICAgICAgICAgICAoNjAzKQorI2RlZmluZSBWT0lQX1NJUF82MDZfTk9UX0FDQ0VQVEFCTEUgICAgICAgICAgICg2MDYpCQkJCisKKy8qIFR5cGUgb2YgT1VUQk9VTkQgc2VydmVyICovCisjZGVmaW5lIFZPSVBfT1VUQk9VTkRfTkVWRVIgICAgICAgICAoMCkKKyNkZWZpbmUgVk9JUF9PVVRCT1VORF9BVVRPICAgICAgICAgICgxKQorI2RlZmluZSBWT0lQX09VVEJPVU5EX0FMV0FZUyAgICAgICAgKDIpCisKKy8qIFR5cGUgb2YgTkFUICovCisjZGVmaW5lIFZPSVBfTkFUX1RZUEVfTk9ORSAgICAgICAgICAoMCkKKyNkZWZpbmUgVk9JUF9OQVRfVFlQRV9TVEFUSUNfSVAgICAgICgxKQorI2RlZmluZSBWT0lQX05BVF9UWVBFX1NUVU4gICAgICAgICAgKDIpCisKKy8qIFR5cGUgb2YgRFRNRiAqLworI2RlZmluZSBWT0lQX0RUTUZfSU5fQkFORCAgICAgICAgICAgKDApCisjZGVmaW5lIFZPSVBfRFRNRl9PVVRfT0ZfQkFORCAgICAgICAoMSkKKyNkZWZpbmUgVk9JUF9EVE1GX1RZUEVfTk9ORSAgICAgICAgICgyKQorCisvKiBGaWxlIExlbmd0aCAqLworI2RlZmluZSBWT0lQX0ZJTEVfTEVOICAgICAgICAgICAgICAgKDMyKQorI2RlZmluZSBWT0lQX0NBTExfRklMRV9QQVRIICAgICAgICAgIlo6XFxAdm9pcCIKKyNkZWZpbmUgVk9JUF9DQUxMX0ZJTEVfTkFNRSAgICAgICAgICJjYWxsIgorI2RlZmluZSBWT0lQX0NPTkZfU1RBVEVfRklMRV9OQU1FICAgImNvbmYiCisKKyNkZWZpbmUgVk9JUF9NQVhfTlVNX0RJQUxPRwkgICAgKDIpICAvKiBNYXhpbXVtIG51bWJlciBvZiBkaWFsb2dzIHdpdGhpbiBhIGNhbGwgKi8KKworLyogQ29uZmVyZW5jZSBTZXJ2ZXIgUmVsYXRlZCAqLworI2RlZmluZSBWT0lQX0NPTkZfU1RBVEVfVVNFUl9DT1VOVCAgKDEwKSAvKiBNYXhpbXVtIG51bWJlciBvZiBjb25mZXJlbmNlIHNlcnZlciBzdGF0ZSAqLworCisjaWZkZWYgU0lQX0NPTkZPUk1BTkNFX1RFU1QKKworI2RlZmluZSBWT0lQX1NJUF9PUFRJT05fTEVOICAgICAoMTUwMCkKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRGlhbG9nIHN0YXR1cworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFZPSVBfU0RQX1NUQVRVU19OT05FICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBWT0lQX1NEUF9TVEFUVVNfSVNfRFRNRiAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgVk9JUF9TRFBfU1RBVFVTX1BUX0NIQU5HRSAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFZPSVBfU0RQX1NUQVRVU19JTlZJVEVfU0RQICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBWT0lQX1NEUF9TVEFUVVNfU0RQX05PX01FRElBICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgVk9JUF9TRFBfU1RBVFVTX0VYQ0hBTkdFRCAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFZPSVBfU0RQX1NUQVRVU19FQVJMWV9NRURJQSAgICAgMHgwMDAwMDAyMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogVHlwZWRlZiAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgdGhlIHByb2ZpbGUgc2V0dGluZyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2ICBzaXBfcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2lwIHNlcnZlciBwb3J0IG51bWJlciAqLworICAgIGthbF91aW50MTYgIGxvY2FsX3BvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBwb3J0IChkZWZhdWx0IDA6IGF1dG8gYXNzaWduKSAqLworICAgIGthbF91aW50MTYgIG91dGJvdW5kX3BvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb3J0IG9mIG91dGJvdW5kIHNlcnZlciAqLworICAgIGthbF91aW50MTYgIHJlZ2lzdHJhcl9wb3J0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb3J0IG9mIHJlZ2lzdHJhciBzZXJ2ZXIgKi8KKyAgICBrYWxfdWludDE2ICBzdHVuX3BvcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9ydCBvZiBTVFVOIHNlcnZlciAqLworICAgIGthbF91aW50MTYgIHJ0cF9zdGFydF9wb3J0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiBSVFAgcG9ydCAqLworICAgIGthbF91aW50MTYgIHJ0cF9lbmRfcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgUlRQIHBvcnQgKi8KKyAgICBrYWxfY2hhciAgICBkaXNwX25hbWVbVk9JUF9ESVNQX05BTUVfTEVOKjNdOyAgICAgICAgLyogRGlzcGxheSBuYW1lIG9mIHRoZSB1c2VyICovCisgICAga2FsX2NoYXIgICAgc2lwX3NlcnZlcltWT0lQX1VSSV9MRU5dOyAgICAgICAgICAgICAgIC8qIFNpcCBzZXJ2ZXIgYWRkcmVzcyAqLworICAgIGthbF9jaGFyICAgIHNpcF91c2VybmFtZVtWT0lQX1VTRVJOQU1FX0xFTl07ICAgICAgICAvKiBVc2VybmFtZSBvZiBTSVAgKi8KKyAgICBrYWxfY2hhciAgICBzaXBfcGFzc3dvcmRbVk9JUF9QQVNTV09SRF9MRU5dOyAgICAgICAgLyogUGFzc3dvcmQgb2YgU0lQICovCisgICAga2FsX2NoYXIgICAgKmRvbWFpbl9uYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gdGhlIGRvbWFpbiBwYXJ0IG9mIHVzZXJuYW1lIGZpbGVkKi8KKyAgICBrYWxfYm9vbCAgICBpc19JUF9kb21haW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWYgdGhlIGRvbWFpbiBpcyBpbiBJUCBmb3JtICovCisgICAga2FsX3VpbnQ4ICAgb3V0Ym91bmRfdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBvciBkaXNhYmxlIG91dGJvdW5kIHNlcnZlciAqLworICAgIGthbF9ib29sICAgIGVuYWJsZV9yZWdpc3RyYXI7ICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgb3IgZGlzYWJsZSByZWdpc3RyYXIgc2VydmVyICovICAgIAorICAgIGthbF9jaGFyICAgIG91dGJvdW5kX3NlcnZlcltWT0lQX1VSSV9MRU5dOyAgICAgICAgICAvKiBBZGRyZXNzIG9mIG91dGJvdW5kIHNlcnZlciAqLworICAgIGthbF9jaGFyICAgIG91dGJvdW5kX3VzZXJuYW1lW1ZPSVBfVVNFUk5BTUVfTEVOXTsgICAvKiBVc2VybmFtZSBvZiBvdXRib3VuZCBzZXJ2ZXIgKi8KKyAgICBrYWxfY2hhciAgICBvdXRib3VuZF9wYXNzd29yZFtWT0lQX1BBU1NXT1JEX0xFTl07ICAgLyogUGFzc3dvcmQgb2Ygb3V0Ym91bmQgc2VydmVyICovCisgICAga2FsX2NoYXIgICAgcmVnaXN0cmFyX3NlcnZlcltWT0lQX1VSSV9MRU5dOyAgICAgICAgIC8qIEFkZHJlc3Mgb2YgcmVnaXN0cmFyIHNlcnZlciAqLworICAgIGthbF9jaGFyICAgIHJlZ2lzdHJhcl91c2VybmFtZVtWT0lQX1VTRVJOQU1FX0xFTl07ICAvKiBVc2VybmFtZSBvZiByZWdpc3RyYXIgc2VydmVyICovCisgICAga2FsX2NoYXIgICAgcmVnaXN0cmFyX3Bhc3N3b3JkW1ZPSVBfUEFTU1dPUkRfTEVOXTsgIC8qIFBhc3N3b3JkIG9mIHJlZ2lzdHJhciBzZXJ2ZXIgKi8KKyAgICBrYWxfY2hhciAgICBhdXRoX3VzZXJuYW1lW1ZPSVBfVVNFUk5BTUVfTEVOXTsgICAgICAgLyogQXV0aG9yaXphdGlvbiB1c2VybmFtZSAqLworICAgIGthbF91aW50OCAgIG5hdF90eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIG9mIE5BVCovCisgICAga2FsX3VpbnQ4ICAgZmlyZV93YWxsWzRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQIGFkZHJlc3Mgb2YgZmlyZXdhbGwgKi8KKyAgICBrYWxfY2hhciAgICBzdHVuX3NlcnZlcltWT0lQX1VSSV9MRU5dOyAgICAgICAgICAgICAgLyogQWRkcmVzcyBvZiBTVFVOIHNlcnZlciAqLworICAgIGthbF9jaGFyICAgIHZvaWNlX21haWxbVk9JUF9VUklfTEVOXTsgICAgICAgICAgICAgICAvKiBWb2ljZSBtYWlsIHNlcmZlciAqLworICAgIGthbF9ib29sICAgIG5hdF9yZWZyZXNoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdXRvIG9yIG1hbnVhbCByZWZyZXNoIE5BVCAqLworICAgIGthbF91aW50OCAgIG5hdF9yZWZyZXNoX3RpbWU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBOQVQgbWFudWFsIHJlZnJlc2ggaW50ZXJ2YWwgKi8KKyAgICBrYWxfdWludDMyICBkYXRhX2FjY291bnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5kZXggb2YgZGF0YSBhY2NvdW50ICovCit9dm9pcF9wcm9maWxlX3N0cnVjdDsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgU0lQIGNhcGFiaWxpdHkgKi8KKyNpZmRlZiBWT0lQX1NJUF9DQVBBQ0lUWV9TVVBQT1JUCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlOworICAgIHZvaXBfc2lwX2NhcF9ib29sZWFuX3R5cGVfZW51bSAgYXVkaW87CisgICAgdm9pcF9zaXBfY2FwX2Jvb2xlYW5fdHlwZV9lbnVtICBhcHBsaWNhdGlvbjsKKyAgICB2b2lwX3NpcF9jYXBfYm9vbGVhbl90eXBlX2VudW0gIGRhdGE7CisgICAgdm9pcF9zaXBfY2FwX2Jvb2xlYW5fdHlwZV9lbnVtICBjb250cm9sOworICAgIHZvaXBfc2lwX2NhcF9ib29sZWFuX3R5cGVfZW51bSAgdmlkZW87CisgICAgdm9pcF9zaXBfY2FwX2Jvb2xlYW5fdHlwZV9lbnVtICB0ZXh0OworICAgIHZvaXBfc2lwX2NhcF9ib29sZWFuX3R5cGVfZW51bSAgYXV0b21hdGE7CisgICAgdm9pcF9zaXBfY2FwX2NsYXNzX3R5cGVfZW51bSAgICBjbGFzczsKKyAgICB2b2lwX3NpcF9jYXBfZHVwbGV4X3R5cGVfZW51bSAgIGR1cGxleDsKKyAgICB2b2lwX3NpcF9jYXBfbW9iaWxpdHlfdHlwZV9lbnVtIG1vYmlsaXR5OworICAgIGthbF9jaGFyICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb25bNjRdOworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RzOworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uczsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtZXM7CisgICAgdm9pcF9zaXBfY2FwX2FjdG9yX3R5cGVfZW51bSAgICBhY3RvcjsKKyAgICB2b2lwX3NpcF9jYXBfYm9vbGVhbl90eXBlX2VudW0gIGlzZm9jdXM7Cit9dm9pcF9zaXBfY2FwX3N0cnVjdDsKKyNlbmRpZgorCisjaWZkZWYgVk9JUF9TSVBfQ0FQQUNJVFlfU1VQUE9SVAordHlwZWRlZiBzdHJ1Y3QgX3ZvaXBfY2FsbGVyX3ByZWZfc3RydWN0Cit7CisgICAgdm9pcF9zaXBfY2FwX3N0cnVjdCAgICAgICAgICAgICBjYWxsZXJfcHJlZjsKKyAgICB2b2lwX2NhbGxlcl9wcmVmX3R5cGVfZW51bSAgICAgIHByZWZfdHlwZTsKK30gdm9pcF9jYWxsZXJfcHJlZl9zdHJ1Y3Q7CisjZW5kaWYKKy8qIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIHRoZSBvcHRpb24gb2YgYSBjYWxsICovCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICB2b2lwX2NvZGVjX2VudW0gICAgICAgICBjb2RlY19vcmRlcltWT0lQX01BWF9OVU1fQ09ERUNdOyAgICAgICAgLyogQXJyYXkgaW5kZXggb2YgY29kZWMgKi8KKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICBhdXRvX2RlY2xpbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0byBkZWNsaW5lIGFub255bW91c2UgKi8KKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICBkb19ub3RfZGlzdHVyYjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0byByZWplY3QgYWxsIGNhbGxzICovCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgaGlkZV91c2VyX2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhpZGUgdXNlciBpZCBvciBub3QgKi8KKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICBhdXRvX2Fuc3dlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0byBhbnN3ZXIgbW9kZSBpbiBNTUkgKi8KKyAgICBrYWxfdWludDggICAgICAgICAgICAgICBkdG1mOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW4gYmFuZCBvciBvdXQtb2YtYmFuZCBEVE1GICovCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgY29tZm9ydGFibGVfbm9pc2U7ICAgICAgICAgICAgICAgICAgICAgIC8qIGVuYWJsZSBjb25mb3J0YWJsZSBub2lzZSBvciBub3QgKi8KKyAgICBrYWxfYm9vbCAgICBzcnRwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5hYmxlIHNydHAgdXNhZ2Ugb3Igbm90ICovCisjaWZkZWYgVk9JUF9TSVBfQ0FQQUNJVFlfU1VQUE9SVAorICAgIHZvaXBfc2lwX2NhcF9zdHJ1Y3QgICAgIHNpcF9jYXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTSVAgQ2FwYWJpbGl0eSAqLworICAgIHZvaXBfY2FsbGVyX3ByZWZfc3RydWN0IGNhbGxlcl9wcmVmW1ZPSVBfTUFYX0NBTExFUl9QUkVGRVJFTkNFXTsvKiBDYWxsZXIgUHJlZmVyZW5jZSAqLworI2VuZGlmCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgZWFybHlfbWVkaWE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHNlbmQgZWFybHkgbWVkaWEgKi8KK312b2lwX3NldHRpbmdfc3RydWN0OworCisKKy8qIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgYSBzdHJ1Y3R1cmUgdG8gY2FycnkgYWxsIGtpbmRzIG9mIGNhbGwgaWQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MzIgIGNhbGxfaWQ7ICAgIC8qIENhbGwgSUQgKi8KKyAgICBrYWxfdWludDMyICBkaWFsb2dfaWQ7ICAvKiBEaWFsb2cgSUQgKi8KK312b2lwX2NhbGxfaWRfc3RydWN0OworCisKKy8qIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIHRoZSBhZGRyZXNzIG9mIGEgY2FsbC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2NoYXIgICBkaXNwX25hbWVbVk9JUF9ESVNQX05BTUVfTEVOKjNdOyAvKkRpc3BsYXkgbmFtZSBvZiB0aGUgdXNlciwgY291bGQgYmUgbnVsbCAqLworICAgIGthbF9jaGFyICAgIHVyaVtWT0lQX1VSSV9MRU5dOyAgICAgICAgICAgICAvKiBFZywgInNpcDogYUBiLmMiICovCit9dm9pcF9hZGRyX3N0cnVjdDsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgcmluZ2luZyBpbmRpY2F0aW9uICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHZvaXBfYWRkcl9zdHJ1Y3QgKnJlZmVyX2J5OworICAgIHZvaXBfY2FsbF9pZF9zdHJ1Y3QgKnJlcGxhY2VkX2NhbGw7Cit9dm9pcF9yaW5nX2RhdGFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MzIgbmV3bXNnczsKKyAgICBrYWxfdWludDMyIG9sZG1zZ3M7CisgICAga2FsX2Jvb2wgaXNfdXJnZW50X3ByZXNlbnQ7CisgICAga2FsX3VpbnQzMiBuZXdfdXJnZW50bXNnczsKKyAgICBrYWxfdWludDMyIG9sZF91cmdlbnRtc2dzOworfXZvaXBfbXNnX3N0cnVjdDsKKworLyogc29ja2V0IGFkZHJlc3Mgc3RyY3V0dXJlICovCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgIGthbF9pbnQxNglhZGRyX2xlbjsKKyAgIGthbF91aW50OAlhZGRyW1ZPSVBfTUFYX1NPQ0tfQUREUl9MRU5dOworICAga2FsX3VpbnQxNglwb3J0OyAKK30gdm9pcF9zb2NrYWRkcl9zdHJ1Y3Q7CisKKy8qIE5BVCBhZGRyZXNzIGluZm9ybWF0aW9uICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHZvaXBfc29ja2FkZHJfc3RydWN0IGxvY2FsX2FkZHI7CisgICAgdm9pcF9zb2NrYWRkcl9zdHJ1Y3QgZGVyaXZlZF9hZGRyOworfXZvaXBfbmF0X2FkZHJfc3RydWN0OworCisvKiBTRFAgY3J5cHRvICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCBjcnlwdG9faWR4OworICAgIHNydHBfY3J5cHRvX3N0cnVjdCBjcnlwdG87Cit9IHZvaXBfY3J5cHRvX3N0cnVjdDsKKworLyogU0RQIHNlc3NvaW4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ2NCAgICAgIHJlbW90ZV9zZHBfdmVyc2lvbjsgICAgICAgICAgICAgICAgIC8qIHJlbW90ZSBTRFAgdmVyc2lvbiAqLworICAgIGthbF91aW50MTYgICAgICBwYXlsb2FkX3R5cGVbVk9JUF9NQVhfTlVNX0NPREVDXTsgICAvKiBwYXlsb2FkIHR5cGUgKi8KKyAgICBrYWxfdWludDE2ICAgICAgbG9jYWxfcGF5bG9hZF90eXBlW1ZPSVBfTUFYX05VTV9DT0RFQ107IC8qIGxvY2FsIHBheWxvYWQgdHlwZSAqLworICAgIGthbF91aW50MTYgICAgICBkdG1mX3BheWxvYWRfdHlwZTsgICAgICAgICAgICAgICAgICAvKiBwYXlsb2FkIHR5cGUgb2YgRFRNRiAqLworICAgIGthbF91aW50MTYgICAgICBudW1fY29kZWM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY29kZWMgc3VwcG9ydGVkIGluIHRoaXMgc2VjdGlvbiAgKi8KKyAgICBrYWxfdWludDE2ICAgICAgcmVtb3RlX3J0cF9wb3J0OyAgICAgICAgICAgICAgICAgICAgLyogcmVtb3RlIFJUUCBwb3J0IG51bWJlciAqLworICAgIGthbF91aW50MTYgICAgICByZW1vdGVfcnRjcF9wb3J0OyAgICAgICAgICAgICAgICAgICAvKiByZW1vdGUgUlRDUCBwb3J0IG51bWJlciAqLworICAgIGthbF91aW50MTYgICAgICBsb2NhbF9ydHBfcG9ydDsgICAgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBSVFAgcG9ydCBudW1iZXIgKi8KKyAgICBrYWxfdWludDE2ICAgICAgbG9jYWxfcnRjcF9wb3J0OyAgICAgICAgICAgICAgICAgICAgLyogbG9jYWwgUlRDUCBwb3J0IG51bWJlciAqLworICAgIGthbF91aW50MTYgICAgICBwdGltZTsKKyAgICBrYWxfdWludDE2ICAgICAgbWF4cHRpbWU7CisgICAga2FsX3VpbnQxNiAgICAgIG1vZGVzZXRbVk9JUF9NQVhfTlVNX0NPREVDXTsgICAgICAgIC8qIG1vZGVzZXQgb2YgY29kZWMgKi8KKyAgICB2b2lwX2NvZGVjX2VudW0gY29kZWNbVk9JUF9NQVhfTlVNX0NPREVDXTsgICAgICAgICAgLyogc3VwcG9yZWQgY29kZWMgbGlzdCAqLworICAgIGthbF91aW50OCAgICAgICBsb2NhbF9hZGRyW1ZPSVBfTUFYX0lQX1NFR19MRU5dOyAgICAvKiBsb2NhbCBhZGRyZXNzICovCisgICAga2FsX3VpbnQ4ICAgICAgIHJlbW90ZV9hZGRyW1ZPSVBfTUFYX0lQX1NFR19MRU5dOyAgIC8qIHJlbW90ZSBhZGRyZXNzICovCisgICAga2FsX3VpbnQzMiAgICAgIHNkcF9zdGF0dXM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXR1cyBpbmZvIGFib3V0IHNkcCBzZXNzaW9uICovCisgICAgdm9pcF9ydHBfZGlyZWN0aW9uX2VudW0gZGlyZWN0aW9uOyAgICAgICAgICAgICAgICAgIC8qIG1lZGlhIGRpcmVjdGlvbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRvbmx5LCByZWN2b25seSwgc2VuZHJlY3YsIGluYWN0aXZlICovCisgICAgdm9pcF9hbm5leF9lbnVtIGc3MjMxX2FubmV4YTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGFubmV4YSBmb3IgRzcyMzEgKi8KKyAgICB2b2lwX2FubmV4X2VudW0gZzcyOV9hbm5leGI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5uZXhiIGZvciBHNzI5ICovCisgICAgdm9pcF9jcnlwdG9fc3RydWN0ICAgICAgKmNyeXB0b19pbmZvOyAgICAgICAgICAgICAgICAgICAgICAgLyogY3J5cHRvIGluZm9ybWF0aW9uICovCit9dm9pcF9zZHBfc3RydWN0OyAvKiB2b2lwX3Nlc3Npb25fc3RydWN0OyAqLworCisvKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIGEgZGlhbG9nIGJldHdlZW4gdHdvIHBlZXJzICovCit0eXBlZGVmIHN0cnVjdAorIHsKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICBkaWFsb2dfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1bmlxdWUgaWQgb2YgdGhlIGRpYWxvZyAqLworICAgIGthbF9pbnQxNiAgICAgICAgICAgICAgIGRpYWxvZ19pZHg7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVuaXF1ZSBpbmRleCBvZiBjYWxsIGRpYWxvZyAqLworICAgIHZvaXBfYWRkcl9zdHJ1Y3QgICAgICAgIHVzZXJfYWRkcjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlbW90ZSBzaWRlIGFkZHJlc3MgKi8KKyAgICB2b2lwX3NkcF9zdHJ1Y3QgICAgICAgICBzZHBfaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmZvcm1hdGlvbiBvZiBlYWNoIG1lZGlhIHN0cmVhbSAqLworI2lmZGVmIFZPSVBfRUFSTFlfTUVESUFfU1VQUE9SVAorICAgIHZvaXBfc2RwX3N0cnVjdCAgICAgICAgIGVhcmx5X3NkcF9pbmZvOyAgICAgICAgICAgICAgICAgICAgIC8qIGluZm9ybWF0aW9uIG9mIGVhcmx5IG1lZGlhIHN0cmVhbSAqLworI2VuZGlmCisgICAgdm9pcF9uYXRfYWRkcl9zdHJ1Y3QgICAgc3R1bl9hZGRyW1ZPSVBfTUFYX0RFUklFVkVEX0FERFJdOyAgLyogc3R1biBhZGRyZXNzICovCisgICAgdm9pcF9kbGdfc3RhdGVfZW51bSAgICAgZGlhbG9nX3N0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgLyogZGlhbG9nIHN0YXRlICovCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgaW5fdXNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlhbG9nIGlzIGluIHVzZWQgKi8KKyAgICBrYWxfdWludDggICAgICAgICAgICAgICByZWxfcHJvdl9yc3A7ICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiAxMDByZWwgaXMgcmVxdWlyZWQgaW4gTVQgaW52aXRlICovCit9dm9pcF9kaWFsb2dfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MzIgICAgICAgICAgICAgIHZlcnNpb247ICAgICAgICAvKiB2ZXJzaW9uIG9mIHRoZSBjb25mZXJlbmNlIHN0YXRlICovCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgaXNfY29uZmVyZW5jZTsgIC8qIGlmIHRoZSBjYWxsIGlzIGEgY29uZmVyZW5jZSBzZXJ2ZXIgY2FsbCAqLworICAgIHZvaXBfc3Vic19zdGF0ZV9lbnVtICAgIHN1YnNfc3RhdGU7ICAgICAvKiBpZiB0aGUgY2FsbCBzdGF0ZSBpcyBzdWJzY3JpYmVkICovCit9dm9pcF9jYWxsX2NvbmZfaW5mb19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgIGNhbGxfaWQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGwgaWQgKi8KKyAgICB2b2lwX2RpYWxvZ19zdHJ1Y3QgICAgICAgICAgZGlhbG9nW1ZPSVBfTUFYX05VTV9ESUFMT0ddOyAgLyogRGlhbG9nICovCisgICAgdm9pcF9jYWxsX2NvbmZfaW5mb19zdHJ1Y3QgIGNvbmZfaW5mbzsgICAgICAgICAgICAgICAgICAgIC8qIGluZm9ybWF0aW9uIG9mIGNvbmZlcmVuY2Ugc2VydmVyICovCisgICAgdm9pcF9jYWxsX3N0YXRlX2VudW0gICAgICAgIGNhbGxfc3RhdGU7ICAgICAgICAgICAgICAgICAgIC8qIENhbGwgc3RhdGUgKi8KKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgbnVtX2RpYWxvZ3M7ICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGRpYWxvZyBpbiB0aGlzIGNhbGwgKi8KKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfYmtfY2FsbDsgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlIGNhbGwgaXMgYSBiYWNrZ3JvdW5kIGNhbGwgKi8KK312b2lwX2NhbGxfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreyAgICAKKyAgICB2b2lwX2NvZGVjX2VudW0gICAgICAgICBjb2RlY1tWT0lQX01BWF9OVU1fQ09ERUNdOyAgICAgICAgICAvKiBzdXBwb3JlZCBjb2RlYyBsaXN0ICovCisgICAgdm9pcF9kbGdfc3RhdGVfZW51bSAgICAgZGlhbG9nX3N0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgLyogZGlhbG9nIHN0YXRlICovCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgaW5fdXNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGlhbG9nIGlzIGluIHVzZWQgKi8KKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICBwYXlsb2FkX3R5cGVbVk9JUF9NQVhfTlVNX0NPREVDXTsgICAvKiBwYXlsb2FkIHR5cGUgKi8KKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICBkdG1mX3BheWxvYWRfdHlwZTsgICAgICAgICAgICAgICAgICAvKiBwYXlsb2FkIHR5cGUgb2YgRFRNRiAqLworICAgIGthbF91aW50MTYgICAgICAgICAgICAgIG51bV9jb2RlYzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjb2RlYyBzdXBwb3J0ZWQgaW4gdGhpcyBzZWN0aW9uICAqLworICAgIGthbF91aW50MTYgICAgICAgICAgICAgIHJlbW90ZV9ydHBfcG9ydDsgICAgICAgICAgICAgICAgICAgIC8qIHJlbW90ZSBSVFAgcG9ydCBudW1iZXIgKi8KKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICByZW1vdGVfcnRjcF9wb3J0OyAgICAgICAgICAgICAgICAgICAvKiByZW1vdGUgUlRDUCBwb3J0IG51bWJlciAqLworICAgIGthbF91aW50MTYgICAgICAgICAgICAgIGxvY2FsX3J0cF9wb3J0OyAgICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIFJUUCBwb3J0IG51bWJlciAqLworICAgIGthbF91aW50MTYgICAgICAgICAgICAgIGxvY2FsX3J0Y3BfcG9ydDsgICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIFJUQ1AgcG9ydCBudW1iZXIgKi8KKyAgICBrYWxfdWludDggICAgICAgICAgICAgICBsb2NhbF9hZGRyW1ZPSVBfTUFYX0lQX1NFR19MRU5dOyAgICAvKiBsb2NhbCBhZGRyZXNzICovCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcmVtb3RlX2FkZHJbVk9JUF9NQVhfSVBfU0VHX0xFTl07ICAgLyogcmVtb3RlIGFkZHJlc3MgKi8KKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICBpc19kdG1mOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcyBEVE1GIHN1cHBvcnRlZCAqLworICAgIGthbF9ib29sICAgICAgICAgICAgICAgIGlzX3NkcF9leGNoYW5nZWQ7ICAgICAgICAgICAgICAgICAgIC8qIGlzIFNEUCBleGNoYW5nZSBmaW5pc2hlZCAqLworICAgIHZvaXBfcnRwX2RpcmVjdGlvbl9lbnVtIGRpcmVjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1lZGlhIGRpcmVjdGlvbiwgKi8KKyAgICB2b2lwX2FubmV4X2VudW0gICAgICAgICBnNzIzMV9hbm5leGE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBHNzIzMSBhbm5leGEgKi8KKyAgICB2b2lwX2FubmV4X2VudW0gICAgICAgICBnNzI5X2FubmV4YjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBHNzI5IGFubmV4YiAqLworICAgIHZvaXBfY3J5cHRvX3N0cnVjdCAgICAgICpjcnlwdG9faW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3J5cHRvIGluZm8gKi8KK312b2lwX2RpYWxvZ19pbmZvX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICBjYWxsX2lkOworICAgIHZvaXBfZGlhbG9nX2luZm9fc3RydWN0IGRpYWxvZ1tWT0lQX01BWF9OVU1fRElBTE9HXTsgICAgLyogZGlhbG9nICovCisgICAgdm9pcF9jYWxsX3N0YXRlX2VudW0gICAgY2FsbF9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAvKiBDYWxsIHN0YXRlICovCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgbnVtX2RpYWxvZ3M7ICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgZGlhbG9nIGluIHRoaXMgY2FsbCAqLworICAgIGthbF9ib29sICAgICAgICAgICAgICAgIGlzX2JrX2NhbGw7ICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlIGNhbGwgaXMgYSBiYWNrZ3JvdW5kIGNhbGwgKi8KKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICBpc19jb25mZXJlbmNlOyAgICAgICAgICAgICAgICAgIC8qIElmIHRoZSBjYWxsIGlzIGEgY29uZmVyZW5jZSBzZXJ2ZXIgY2FsbCAqLworfXZvaXBfY2FsbF9pbmZvX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB2b2lwX21zZ19zdHJ1Y3QgbXNnW1ZPSVBfTVdJX1RPVEFMXTsgICAgICAgICAgICAvKiBtZXNzYWdlIGluZGljYXRpb24gbGlzdCAqLyAgCisgICAga2FsX2Jvb2wgICAgICAgIG1zZ19wcmVzZW50W1ZPSVBfTVdJX1RPVEFMXTsgICAgLyogaWYgdGhlIG1lc3NhZ2UgaXMgcHJlc2VudCAqLworICAgIGthbF9ib29sICAgICAgICBpc19hY2NvdW50X3ByZXNlbnQ7ICAgICAgICAgICAgIC8qIGlmIG1lc3NhZ2UgYWNjb3VudCBpcyBwcmVzZW50ICovCisgICAga2FsX2NoYXIgICAgICAgIG1zZ19hY2NvdW50W1ZPSVBfVVJJX0xFTl07ICAgICAgLyogRWcsICJzaXA6IGFAYi5jIiAqLyAgICAKK312b2lwX213aV9pbmZvX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9jaGFyICAgICAgICAgICAgICAgICAgICBkaXNwX25hbWVbVk9JUF9ESVNQX05BTUVfTEVOKjNdOyAgICAvKkRpc3BsYXkgbmFtZSBvZiB0aGUgdXNlciwgY291bGQgYmUgbnVsbCAqLworICAgIGthbF9jaGFyICAgICAgICAgICAgICAgICAgICB1cmlbVk9JUF9VUklfTEVOXTsgICAgICAgICAgICAgICAgICAvKiBFZywgInNpcDogYUBiLmMiICovCisgICAgdm9pcF9jb25mX3VzZXJfc3RhdHVzX2VudW0gIHN0YXRlOworfXZvaXBfY29uZl91c2VyX3N0cnVjdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTWVzc2FnZSBzdHJ1Y3QgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVk9JUF9NU0dfU1RSVUNUCisvKiBSZWdpc3RyYXRpb24gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiAgICAgICAgICBtc2dfbGVuOyAgCisgICAgdm9pcF9wcm9maWxlX3N0cnVjdCBwcm9maWxlOyAvKiBQcm9maWxlIHNldHRpbmdzICovCisgICAgdm9pcF9zZXR0aW5nX3N0cnVjdCBzZXR0aW5nOyAvKiBTZXR0aW5nIG9mIHRoZSBjYWxsICovCit9bW1pX3ZvaXBfcmVnaXN0ZXJfcmVxX3N0cnVjdDsKKworLyogU2V0dGluZyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggICAgICAgICAgIHJlZl9jb3VudDsKKyAgICBrYWxfdWludDE2ICAgICAgICAgIG1zZ19sZW47ICAKKyAgICB2b2lwX3NldHRpbmdfc3RydWN0IHNldHRpbmc7IC8qU2V0dGluZyBvZiB0aGUgY2FsbCAqLworfW1taV92b2lwX3NldHRpbmdfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggIHJlZl9jb3VudDsKKyAgICBrYWxfdWludDE2IG1zZ19sZW47ICAKKyAgICBrYWxfdWludDggIHJlc3VsdDsgLyogcmVzdWx0ICovCisgICAga2FsX2ludDMyICBjYXVzZTsgIC8qIGNhdXNlIG9mIHRoZSByZXN1bHQgKi8KK31tbWlfdm9pcF9yZXN1bHRfc3RydWN0OworCit0eXBlZGVmIG1taV92b2lwX3Jlc3VsdF9zdHJ1Y3QgbW1pX3ZvaXBfcmVnaXN0ZXJfcnNwX3N0cnVjdDsKK3R5cGVkZWYgbW1pX3ZvaXBfcmVzdWx0X3N0cnVjdCBtbWlfdm9pcF9kZXJlZ2lzdGVyX3JzcF9zdHJ1Y3Q7Cit0eXBlZGVmIG1taV92b2lwX3Jlc3VsdF9zdHJ1Y3QgbW1pX3ZvaXBfZGVyZWdpc3Rlcl9pbmRfc3RydWN0OwordHlwZWRlZiBtbWlfdm9pcF9yZXN1bHRfc3RydWN0IG1taV92b2lwX3NldHRpbmdfcnNwX3N0cnVjdDsKKworLyogY2FsbCByZWxhdGVkIGluZGljYXRpb25zICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgICAgICAgcmVmX2NvdW50OworICAgIGthbF91aW50MTYgICAgICAgbXNnX2xlbjsgIAorICAgIGthbF91aW50MzIgICAgICAgY2FsbF9pZDsgICAgICAgICAgICAgICAgICAgICAgLyogY2FsbCBpZCBvZiB0aGUgcmluZ2luZyBjYWxsICovCisgICAga2FsX3VpbnQzMiAgICAgICBkaWFsb2dfaWQ7ICAgICAgICAgICAgICAgICAgICAvKiBkaWFsb2cgaWQgb2YgdGhlIHJpbmdpbmcgY2FsbCAqLworICAgIHZvaXBfYWRkcl9zdHJ1Y3QgcmVmZXJfYnk7ICAgICAgICAgICAgICAgICAgICAgLyogQWRkcmVzcyBvZiB0aGUgcmVmZXItYnkgZmllbGQgKi8KKyAgICBrYWxfd2NoYXIgICAgICAgIGNhbGxfbGlzdFtWT0lQX0ZJTEVfTEVOXTsgICAgIC8qIE5hbWUgb2YgY2FsbCBsaXN0IGZpbGUgKi8KKyAgICBrYWxfYm9vbCAgICAgICAgIGlzX3JlZmVyX2J5OyAgICAgICAgICAgICAgICAgIC8qIElmIHRoZSBjYWxsIGlzIHJlZmVyZWQgYnkgb3RoZXIgdXNlcnMgKi8KKyNpZmRlZiBWT0lQX0RFQlVHX0NBTExfTElTVAorICAgIHZvaXBfY2FsbF9pbmZvX3N0cnVjdCBjYWxsX2luZm9bNl07CisjZW5kaWYKK31tbWlfdm9pcF9jYWxsX3JpbmdfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggICByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiAgbXNnX2xlbjsgIAorICAgIGthbF91aW50MzIgICAgICAgY2FsbF9pZDsgICAgICAgICAgICAgICAgICAgICAgLyogY2FsbCBpZCBvZiB0aGUgcmluZ2luZyBjYWxsICovCisgICAga2FsX3VpbnQzMiAgICAgICBkaWFsb2dfaWQ7ICAgICAgICAgICAgICAgICAgICAvKiBkaWFsb2cgaWQgb2YgdGhlIHJpbmdpbmcgY2FsbCAqLworICAgIGthbF91aW50MzIgICAgICAgcmVwbGFjZV9jYWxsX2lkOyAgICAgICAgICAgICAgLyogY2FsbCBpZCBvZiB0aGUgcmVwbGFjZWQgY2FsbCAqLworICAgIGthbF91aW50MzIgICAgICAgcmVwbGFjZV9kaWFsb2dfaWQ7ICAgICAgICAgICAgLyogZGlhbG9nIGlkIG9mIHRoZSByaW5naW5nIGNhbGwgKi8KK31tbWlfdm9pcF9jYWxsX3JlcGxhY2VfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggICAgICAgIHJlZl9jb3VudDsKKyAgICBrYWxfdWludDE2ICAgICAgIG1zZ19sZW47CisgICAga2FsX3VpbnQ4ICAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBBY2NlcHQgdGhlIGNhbGwgb3Igbm90ICovCisgICAga2FsX3VpbnQzMiAgICAgICBjYWxsX2lkOyAgICAgICAgICAgICAgICAgICAgICAvKiBjYWxsIGlkIG9mIHRoZSByaW5naW5nIGNhbGwgKi8KKyAgICBrYWxfdWludDMyICAgICAgIGRpYWxvZ19pZDsgICAgICAgICAgICAgICAgICAgIC8qIGRpYWxvZyBpZCBvZiB0aGUgcmluZ2luZyBjYWxsICovCisgICAga2FsX3VpbnQzMiAgICAgICByZXBsYWNlX2NhbGxfaWQ7ICAgICAgICAgICAgICAvKiBjYWxsIGlkIG9mIHRoZSByZXBsYWNlZCBjYWxsICovCisgICAga2FsX3VpbnQzMiAgICAgICByZXBsYWNlX2RpYWxvZ19pZDsgICAgICAgICAgICAvKiBkaWFsb2cgaWQgb2YgdGhlIHJpbmdpbmcgY2FsbCAqLworfW1taV92b2lwX2NhbGxfcmVwbGFjZV9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgICAgICAgcmVmX2NvdW50OworICAgIGthbF91aW50MTYgICAgICAgbXNnX2xlbjsKKyAgICBrYWxfdWludDMyICAgICAgIHJlcGxhY2VfY2FsbF9pZDsgICAgICAgICAgICAgIC8qIGNhbGwgaWQgb2YgdGhlIHJlcGxhY2VkIGNhbGwgKi8KKyAgICBrYWxfdWludDMyICAgICAgIHJlcGxhY2VfZGlhbG9nX2lkOyAgICAgICAgICAgIC8qIGRpYWxvZyBpZCBvZiB0aGUgcmVwbGFjZWQgY2FsbCAqLworICAgIHZvaXBfY2FsbF9zdHJ1Y3QgY2FsbDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFmZmVjdGVkIGNhbGwgKi8KK31tbWlfdm9pcF9jYWxsX3JlcGxhY2VfY29tcGxldGVfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggICByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiAgbXNnX2xlbjsgIAorICAgIGthbF91aW50MzIgIGNhbGxfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGwgSUQgKi8KKyAgICBrYWxfdWludDMyICBkaWFsb2dfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaWFsb2cgSUQgKi8KKyAgICBrYWxfaW50MzIgICBjYXVzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjYXVzZSBvZiB0aGUgcmVzdWx0ICovCisgICAga2FsX3VpbnQ4ICAgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVzdWx0ICovCisgICAga2FsX3djaGFyICAgY2FsbF9saXN0W1ZPSVBfRklMRV9MRU5dOyAgICAgICAgICAgLyogbGVuZ3RoIG9mIGNhbCBsaXN0IGZpbGUgKi8KKyAgICBrYWxfdWludDE2ICBzdGF0dXNfY29kZTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgY29kZSBvZiBjYWxsIGVuZCAqLworI2lmZGVmIFZPSVBfREVCVUdfQ0FMTF9MSVNUCisgICAgdm9pcF9jYWxsX2luZm9fc3RydWN0IGNhbGxfaW5mb1s2XTsKKyNlbmRpZgorfW1taV92b2lwX2NhbGxfZW5kX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiAgICAgICAgICBtc2dfbGVuOyAgCisgICAga2FsX3VpbnQzMiAgICAgICAgICBjYWxsX2lkOyAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxsIElEICovCisgICAga2FsX3VpbnQzMiAgICAgICAgICBkaWFsb2dfaWQ7ICAgICAgICAgICAgICAgICAgICAvKiBEaWFsb2cgSUQgKi8KKyAgICBrYWxfY2hhciAgICAgICAgICAgIHRhbnNmZXJfdGFyZ2V0W1ZPSVBfVVJJX0xFTl07IC8qIEFkZHJlc3Mgb2YgdGhlIHRyYW5zZmVyIHRhcmdldC4gVXNlZCB3aGVuIHRoZSByZW1vdGUgc2l0ZSBhc2tzIHRvIHRyYW5zZmVyIHRoZSBjYWxsICovCisgICAgdm9pcF9zdGF0ZV9pbmRfZW51bSBjaGFuZ2VfY2F1c2U7ICAgICAgICAgICAgICAgICAvKiBNYWluIHN0YXRlIG9mICBjaGFuZ2VzICovCisgICAgdm9pcF9jYWxsX3N0cnVjdCAgICBjYWxsOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZmZlY3QgY2FsbCAqLworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNpZmRlZiBWT0lQX0RFQlVHX0NBTExfTElTVAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisjZW5kaWYKK31tbWlfdm9pcF9jYWxsX3N0YXRlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcmVmX2NvdW50OworICAgIGthbF91aW50MTYgICAgICAgICAgICAgIG1zZ19sZW47ICAKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICBjYWxsX2lkOyAgICAgICAgICAgICAgICAgIC8qIENhbGwgSUQgKi8KKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICBkaWFsb2dfaWQ7ICAgICAgICAgICAgICAgIC8qIERpYWxvZyBJRCAqLworICAgIHZvaXBfY2FsbF9wcm9ncmVzc19lbnVtIHN0YXR1czsgICAgICAgICAgICAgICAgICAgLyogU3RhdHVzIG9mIHRoZSBjYWxsIChyaW5naW5nLCBmb3J3YXJkLCBhbmQgZXRjLi4pICovCisgICAga2FsX3djaGFyICAgICAgICAgICAgICAgY2FsbF9saXN0W1ZPSVBfRklMRV9MRU5dOyAvKiBsZW5ndGggb2YgY2FsIGxpc3QgZmlsZSAqLworI2lmZGVmIFZPSVBfREVCVUdfQ0FMTF9MSVNUCisgICAgdm9pcF9jYWxsX2luZm9fc3RydWN0IGNhbGxfaW5mb1s2XTsKKyNlbmRpZgorfW1taV92b2lwX3Byb2dyZXNzaW5nX2luZF9zdHJ1Y3Q7CisKKy8qIGNhbGwgYWN0aW9uIHJlcXVlc3QgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiAgICAgICAgICBtc2dfbGVuOyAgCisgICAga2FsX2NoYXIgICAgICAgICAgICB0YXJnZXRfY2FsbFtWT0lQX1VSSV9MRU5dOyAgICAvKiBFZywgInNpcDogYUBiLmMiICBDYWxsIHRvIGJlIGRpYWxlZCAqLworICAgIHZvaXBfY2FsbF9pZF9zdHJ1Y3QgYWN0aXZlX2NhbGw7ICAgICAgICAgICAgICAgICAgLyogQ2FsbCB0byBiZSBhY3RpdmF0ZWQuIENhbGwgVHJhbnNmZXIgYWxzbyB1c2VzIHRoaXMgYXMgdGhlIHRyYW5zZmVyZWUgKi8KKyAgICB2b2lwX2NhbGxfaWRfc3RydWN0IGhvbGRfY2FsbDsgICAgICAgICAgICAgICAgICAgIC8qIENhbGwgdG8gYmUgaGVsZCAqLworICAgIHZvaXBfY2FsbF9pZF9zdHJ1Y3QgcmVsX2NhbGw7ICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbCB0byBiZSByZWxlYXNlZCBvciByZWplY3RlZCAqLworICAgIHZvaXBfY2FsbF9hY3RfZW51bSAgb3BfY29kZTsgICAgICAgICAgICAgICAgICAgICAgLyogT3BlcmF0aW9uIGNvZGUgICovCisgICAga2FsX2ludDggICAgICAgICAgICBhYm9ydF9jYWxsX2lkOworI2lmZGVmIFZPSVBfU0lQX0NBUEFDSVRZX1NVUFBPUlQKKyAgICB2b2lwX2NhbGxlcl9wcmVmX3N0cnVjdCBjYWxsZXJfcHJlZltWT0lQX01BWF9DQUxMRVJfUFJFRkVSRU5DRV07CisjZW5kaWYKK31tbWlfdm9pcF9jYWxsX2FjdF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgICAgICAgICAgcmVmX2NvdW50OworICAgIGthbF91aW50MTYgICAgICAgICAgbXNnX2xlbjsgIAorICAgIHZvaXBfY2FsbF9hY3RfZW51bSAgb3BfY29kZTsgICAgICAgICAgICAgICAgICAgICAgLyogT3BlcmF0aW9uIGNvZGUgKi8KKyAgICBrYWxfdWludDggICAgICAgICAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VsdCAqLworICAgIGthbF9pbnQzMiAgICAgICAgICAgY2F1c2U7ICAgICAgICAgICAgICAgICAgICAgICAgLyogY2F1c2Ugb2YgdGhlIHJlc3VsdCAqLworICAgIGthbF93Y2hhciAgICAgICAgICAgY2FsbF9saXN0W1ZPSVBfRklMRV9MRU5dOyAgICAgLyogbGVuZ3RoIG9mIGNhbCBsaXN0IGZpbGUgKi8KKyNpZmRlZiBWT0lQX0RFQlVHX0NBTExfTElTVAorICAgIHZvaXBfY2FsbF9pbmZvX3N0cnVjdCBjYWxsX2luZm9bNl07CisjZW5kaWYKK31tbWlfdm9pcF9jYWxsX2FjdF9yc3Bfc3RydWN0OworCisvKiBNV0ksIHRoaXMgcHJpbWl0aXZlIGlzIHVzZWQgdG8gbm90aWZ5IHRoZSBzdGF0dXMgb2Ygd2FpdGluZyBtZXNzYWdlLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgbXNnX2xlbjsgIAorICAgIGthbF9ib29sICAgICAgICAgICAgICAgIGlzX21zZ193YWl0aW5nOworICAgIHZvaXBfbXdpX2luZm9fc3RydWN0ICAgIG13aV9pbmZvOworfW1taV92b2lwX3dhaXRpbmdfbXNnX2luZF9zdHJ1Y3Q7CisKKy8qIGNvbmZlcmVuY2Ugc3RhdGUgaW5kaWNhdGlvbiBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIHJlZl9jb3VudDsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgbXNnX2xlbjsKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgY2FsbF9pZDsgICAgICAgICAgICAgICAgICAgIC8qIGNhbGwgSUQgKi8KKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgZGxnX2lkOyAgICAgICAgICAgICAgICAgICAgIC8qIGRpYWxvZyBJRCAqLworICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICBjb3VudDsgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGVudGl0eSBpbiB0aGlzIGluZGljYXRpb24gKi8KKyAgICBrYWxfd2NoYXIgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoW1ZPSVBfRklMRV9MRU5dOyAgIC8qIGZpbGUgcGF0aCtuYW1lIGZvciBlbnRpdHkgbGlzdCAqLworICAgIHZvaXBfY29uZl9zdGF0ZV9lbnVtICAgICAgICBjb25mX3N0YXRlOyAgICAgICAgICAgICAgICAgLyogc3RhdGUgb2YgY29uZmVyZW5jZSBpbmRpY2F0aW9uICovCit9bW1pX3ZvaXBfY29uZmVyZW5jZV9zdGF0ZV9pbmRfc3RydWN0OworCisjaWZkZWYgU0lQX0NPTkZPUk1BTkNFX1RFU1QKKy8qIE1XSSwgdGhpcyBwcmltaXRpdmUgaXMgdXNlZCB0byBub3RpZnkgdGhlIHN0YXR1cyBvZiB3YWl0aW5nIG1lc3NhZ2UuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgIHJlZl9jb3VudDsKKyAgICBrYWxfdWludDE2ICBtc2dfbGVuOyAgCisgICAga2FsX2NoYXIgICAgdXJpW1ZPSVBfVVJJX0xFTl07IC8qIEFkZHJlc3Mgb2YgcmVtb3RlIHNlcnZlciAqLworfW1taV92b2lwX29wdGlvbl9yZXFfc3RydWN0OworCisvKiBNV0ksIHRoaXMgcHJpbWl0aXZlIGlzIHVzZWQgdG8gbm90aWZ5IHRoZSBzdGF0dXMgb2Ygd2FpdGluZyBtZXNzYWdlLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggICByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiAgbXNnX2xlbjsgIAorICAgIGthbF91aW50OCAgIHJlc3VsdDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VsdCAqLworICAgIGthbF9pbnQzMiAgIGNhdXNlOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhdXNlIG9mIHRoZSByZXN1bHQgKi8KKyAgICBrYWxfY2hhciAgICBkYXRhW1ZPSVBfU0lQX09QVElPTl9MRU5dOworfW1taV92b2lwX29wdGlvbl9yc3Bfc3RydWN0OworI2VuZGlmIC8qIFNJUF9DT05GT1JNQU5DRV9URVNUICovCisKKy8qIFRyYW5zZmVyZWUsIHRoaXMgcHJpbWl0aXZlIGlzIHVzZWQgdG8gbm90aWZ5IGFuIHJlZmVyIGlzIHJlY2VpdmVkICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgIHJlZl9jb3VudDsKKyAgICBrYWxfdWludDE2ICBtc2dfbGVuOworICAgIGthbF9ib29sICAgIHJlc3VsdDsKK31tbWlfdm9pcF90cmFuc2ZlcmVlX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiAgICAgICAgICBtc2dfbGVuOyAgCisgICAga2FsX3VpbnQ4ICAgICAgICAgICByZXN1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiByZXN1bHQgKi8KKyAgICBrYWxfaW50MzIgICAgICAgICAgIGNhdXNlOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNhdXNlIG9mIHRoZSByZXN1bHQgKi8KKyAgICBrYWxfdWludDMyICAgICAgICAgIGNhbGxfaWQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGwgSUQgKi8KKyAgICBrYWxfdWludDMyICAgICAgICAgIGRpYWxvZ19pZDsgICAgICAgICAgICAgICAgICAgIC8qIERpYWxvZyBJRCAqLworfW1taV92b2lwX2FjdF9ia19yZWpfcnNwX3N0cnVjdDsKKworI2VuZGlmIC8qIF9NTUkyVk9JUF9TVFJVQ1RfSCAqLworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW1sbGNfZW51bXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tbWxsY19lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNTBlZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbW1sbGNfZW51bXMuaApAQCAtMCwwICsxLDExNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgbW1sbGNfZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogIFRoaXMgZmlsZSBjb250YWlucyBlbnVtIGRlZmluaXRpb24gYmV0d2VlbiBNTSBhbmQgTExDLiAKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9NTUxMQ19FTlVNU19IXworI2RlZmluZSBfTU1MTENfRU5VTVNfSF8KKworLyogTU1MTENfRU5VTVMgaXMgZm9yIHRoZSBlbnVtcyB1c2VkIGIvdyBtb2R1bGVzIE1NIGFuZCBMTEMgT25seQorICogSXQgY2FuIGJlIGVpdGhlciBNTTJMTEMgb3IgTExDMk1NCisgKiBXZSB3aWxsIGhhdmUgYSBzaW5nbGUgZmlsZSAKKyAqLworCisjZGVmaW5lIENJUEhFUklOR19OT1RfVVNFRCAgICAgICAgICAgICAgICAgICAgMAorCisKK3R5cGVkZWYgZW51bSB7CisgICBMTEdNTV9DQVVTRV9NVUxUSVBMRV9UTExJX0FTU0lHTU5FTlQsCisgICBMTEdNTV9DQVVTRV9GUk1SX1JFQ0VJVkVEX0lOX0FCTSwKKyAgIExMR01NX0NBVVNFX1VOU09MSUNJVEVEX1JFU1BPTlNFX1JFQ0VJVkVELAorICAgTExHTU1fQ0FVU0VfTUFYX1JFVFhfQ09VTlRfUkVBQ0hFRCwKKyAgIExMR01NX0NBVVNFX0ZSQU1FX1JFSkVDVF9DT05ESVRJT04sCisgICBMTEdNTV9DQVVTRV9MTENfRkFJTFVSRSwKKyAgIExMR01NX0NBVVNFX0xPV0VSX0xBWUVSX0ZBSUxVUkUgLyogT25seSB0aGlzIGlzIGJlaW5nIHVzZWQgaW4gTU0gKi8KKyNpZmRlZiBfX0dFTUlOSV9fCisgICAsIExMR01NX0NBVVNFX1JSX0lOX1NVU1BFTkRfTU9ERQorI2VuZGlmCit9IGxsZ21tX2NhdXNlX2VudW07ICAgCisKKy8qIEplZmYgV3UgMjAwNS0wMy0wMyA6Ujk5IGZlYXR1cmUgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgTExHTU1fQU5ZX0ZSQU1FID0gMCwKKyAgICBMTEdNTV9BTllfRlJBTUVfRVhDRVBUX05VTEwsCisgICAgTExHTU1fTlVMTF9GUkFNRV9PTkxZCit9IGxsZ21tX2NlbGxfdXBkYXRlX3R5cGVfZW51bTsKKy8qIEVuZCBvZiBKZWZmIFd1IDIwMDUtMDMtMDMgKi8KKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcGFsMnJyX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21wYWwycnJfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE2NmNiZQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcGFsMnJyX3N0cnVjdC5oCkBAIC0wLDAgKzEsNzI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgbXBhbDJycl9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogIAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqICAKKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9NUEFMMlJSX1NUUlVDVF9ICisjZGVmaW5lIF9NUEFMMlJSX1NUUlVDVF9ICisKKy8qRXZlbHluOiBSZW1vdmUgcmVkdW5kYW50IGhlYWRlciBhbmQgZmlsZSAqLworI2luY2x1ZGUgInJyX21wYWxfaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJtcGhfY3NfZGVmLmgiCisjaW5jbHVkZSAicnJfY29tbW9uX2VudW1zLmgiCisjaWZkZWYgX19QU19MMV9EQ19BUkNIX18KKyNpbmNsdWRlICJwc19sMV9zaGFyZWRfaW5mby5oIgorI2VuZGlmCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF9pbnQxNiBjX3ZhbHVlOyAgICAgICAgICAgICAvKiBBdXN0aW4gMDQwNDEzOiByZXBvcnQgY192YWx1ZSBpbiBkYm0sIGluc3RlYWQgb2YgcnhsZXYgKi8KKyAgICBrYWxfdWludDggaXNfYmxfdmFyX3ZhbGlkOworICAgIGthbF91aW50MTYgYmxfdmFyOworICAgIGthbF91aW50MTYgYml0X2NvdW50WzRdOworICAgIGthbF91aW50MTYgYml0X2Vycm9yX2NvdW50WzRdOworfSBjaF9xdWFsaXR5X3JlcF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggdGltZV9zbG90OworICAgIGthbF91aW50OCBjczsKKyAgICBrYWxfdWludDggaXNfYmFkX2Jsb2NrOyAgICAKKyAgICBjaGFubmVsX3R5cGVfZW51bSBjaF90eXBlOworLyogRW5kIENsYWlyZSAwNDExMTggY2hhbmdlIDogTW9kaWZ5ICBkbF9yYWRpb19ibGtfc3RydWN0IDogVG8gYmUgcmVtb3ZlZCBsYXRlciAqLyAgCisgICAga2FsX3VpbnQ4IGlzX2RhdGFfYnVmZmVyOworI2lmZGVmIE1DRF9QQUNLX1VOUEFDSworCQlrYWxfdWludDggZGF0YVs3NV07CisjZWxzZQorICAgIGthbF91aW50OCAqZGF0YTsKKyNlbmRpZgorIAorICAjaWZkZWYgX19FR1BSU19NT0RFX18KKyAgICBrYWxfaW50MzIgbWVhbkJlcDsgICAgICAgICAgICAgICAvKiBNZWFuX0JFUChibG9jayksIG5vIG1lYW5pbmcgaWYgbm90IGluIEVHUFJTIG1vZGUqLworICAgIGthbF9pbnQzMiBjdkJlcDsgICAgICAgICAgICAgICAgIC8qIENWX0JFUChibG9jayksIG5vIG1lYW5pbmcgaWYgbm90IGluIEVHUFJTIG1vZGUgKi8KKyAgICBrYWxfdWludDggaGVhZGVyWzZdOworI2lmZGVmIE1DRF9QQUNLX1VOUEFDSworCWthbF91aW50OCBkYXRhMls3NV07CisjZWxzZQorICAgIGthbF91aW50OCAqZGF0YTI7CisjZW5kaWYKKyAgICBrYWxfdWludDggaXNfZGF0YV92YWxpZDsKKyAgICBrYWxfdWludDggaXNfZGF0YTJfdmFsaWQ7CisKKyNpZmRlZiBfX0dFUkFOX0ZBTlJfXworICAgIGthbF91aW50OCBpc19wYW5fdmFsaWQ7CisgICAga2FsX3VpbnQ4IHBhbls0XTsKKyNlbmRpZgorCisgICNlbmRpZgorICAgIAorfSBkbF9yYWRpb19ibGtfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBrYWxfdWludDMyIGZyYW1lX25vOworICAgIGthbF91aW50OCBycmJwX3R4ZWQ7CisgICAga2FsX3VpbnQ4IGlzX3VzZl9kZXRlY3RlZDsvLyBiaXRtYXAgb2YgdXNmIGRldGVjdGVkCisgICAga2FsX3VpbnQ4IGN0cmxfYmxrc19mcmVlX2luX3E7CisgICAga2FsX3VpbnQ4IG5vX2RhdGFfdHhlZFtNQVhfVEJGX05VTV07CisgICAga2FsX3VpbnQ4IGlzX2FsbG9jX2V4aGF1c3RlZDsgIAorI2lmZGVmIF9fR0VSQU5fRkFOUl9fCisgICAga2FsX3VpbnQ4IHRpbWVfc2xvdDsKKyNlbmRpZgorfXJlYWR5X3RvX3NlbmRfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNjYW5faWQ7CisgICAga2FsX2Jvb2wgYmNjaF9saXN0X3ZhbGlkOworICAgIGthbF9pbnQxNiBwb3dlcl9zdW1faW5fcXVhcnRlcl9kYm1bTVBIX01BWF9QT1dFUl9TQ0FOX1JFU1VMVFNfTEVOXTsgLyogRGVmaW5lZCBpbiBtcGhfY3NfbXNnLmggKi8KKyAgICBrYWxfdWludDggYmFuZHNfc2NhbjsKKyAgICBrYWxfYm9vbCBpc19xdWlja19tY2Nfc2VhcmNoOyAKK30gbXBhbF9ycl9zZWFyY2hfcmZfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQxNiBhcmZjbjsKKyAgICBrYWxfdWludDggcmVzdWx0OworICAgIGthbF91aW50OCBic2ljOworICAgIGthbF9pbnQzMiBmcmFtZV9vZmZzZXQ7CisgICAga2FsX2ludDMyIGViaXRfb2Zmc2V0OworCWthbF9pbnQzMiBiaXRFcnJvckNvdW50OworICAgIGthbF9pbnQxNiBzbnI7CisgICBrYWxfaW50MTYJcmVhbF9zbnI7ICAgIAorfSBtcGFsX3JyX2JzaWNfc3luY19jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBycl9ibG9ja19tb25pdG9yX2VudW0gYmxvY2tfaW5kOyAgLyogcmVmLiB0byBtcGhfYmxvY2tfbW9uaXRvcl9lbnVtICovCisgICAga2FsX3VpbnQ4IHRjOworICAgIGthbF91aW50MzIgZnJhbWVfbm87CisgICAga2FsX3VpbnQxNiBhcmZjbjsgICAgCisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hhbm5lbF90eXBlOworICAgIGthbF91aW50OCBkYXRhWzIzXTsKKyAgICBrYWxfaW50MTYgY192YWx1ZTsgICAgICAgICAgLyogQXVzdGluIDA0MDQxMzogcmVwb3J0IGNfdmFsdWUgaW4gZGJtLCBpbnN0ZWFkIG9mIHJ4bGV2ICovCisgICAga2FsX2Jvb2wgaXNfc2VydmluZzsgLyogT25seSBmb3IgY2hlY2sgTkJDQ0ggb3IgQkNDSCovCit9IG1wYWxfcnJfZGF0YV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggIHJlcV9pZDsgIC8qc2VxdWVuY2UgbnVtYmVyIGZvciBSUiB0byBrbm93IHRoZSAuX2NuZiByZWNlaXZlZCBpcyBvbGQgb3IgbmV3Ki8KKyAgICBrYWxfdWludDMyIGZyYW1lX251bWJlcjsKKyAgICBrYWxfdWludDE2IHJhY2hfZGF0YTsKKyAgICBrYWxfdWludDE2IGN1cnJlbnRfdHhfcG93ZXJfaW5fZGJtOworfSBtcGFsX3JyX3JhY2hfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHQwOworICAgIAorI2lmZGVmIF9fQkxJTkRfSEFORE9WRVJfXworICAgIC8qIEVsbHkyMDA4MDIyOCwgcmVwb3J0IHRoZSBmcmFtZSBvZmZzZXQgYW5kIGViaXQgb2Zmc2V0IHRvIFJSIGluIGNhc2UgdGhhdCB0aGUgYmxpbmQgaGFuZG92ZXIgaXMgZXhlY3V0ZWQKKyAgICAgKiBhbmQgUlIgaGFzIG5vIHRpbWluZyBpbmZvcm1hdGlvbiB0byByZXBvcnQgdGhlIE9URCB0byBOVyBpZiByZXF1ZXN0ZWQuICovCisgICAga2FsX2ludDMyICB0YXJnZXRfZnJhbWVfb2Zmc2V0OworICAgIGthbF9pbnQzMiAgdGFyZ2V0X2ViaXRfb2Zmc2V0OworI2VuZGlmIC8qIGVuZCBvZiBfX0JMSU5EX0hBTkRPVkVSX18gKi8KKworfSBtcGFsX3JyX2hhbmRvdmVyX3N1Y2Nlc3NfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSICAgIAorICAgIGhhbmRvdmVyX2ZhaWxfY2F1c2VfZW51bSBlcnJvcl9jYXVzZTsKKworfSBtcGFsX3JyX2hhbmRvdmVyX2ZhaWxfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGN1cnJlbnRfZGNoOworICAgIGthbF91aW50OCBpc19mcmVxX2luX29uZV9iYW5kOworICAgIGthbF91aW50OCBzdGFydGluZ190aW1lX2V4cGlyZWQ7Cit9IG1wYWxfcnJfZnJlcXVlbmN5X3JlZGVmaW5pdGlvbl9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggZXh0X21lYXNfZnJlcV9saXN0X2xlbjsKKyAgICBrYWxfdWludDggZHR4X3VzZWQ7CisgICAga2FsX3VpbnQ4IGxpc3RfcmVmOworICAgIGthbF91aW50MTYgYXJmY25bNjRdOworICAgIGthbF9pbnQxNiBybGFjX2luX3F1YXJ0ZXJfZGJtWzY0XTsKK30gbXBhbF9ycl9leHRlbmRlZF9tZWFzX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9pbnQxNiBybGFfaW5fcXVhcnRlcl9kYm07CisgICAga2FsX3VpbnQ4IHRpbWluZ19hZHZhbmNlZDsgIC8qIFRZOiB1c2VkIGZvciBBR1BTLCByZXBvcnQgcGFja2V0IFRBIGluIFBUTSAqLworI2lmZGVmIFVOSVRfVEVTVAorICAgIGthbF91aW50MzIgbWVhc19pbmRfbXNfZGlmZjsKKyNlbmRpZiAvKiBVTklUX1RFU1QgKi8KKyAgIGthbF9pbnQxNglyZWFsX3NucjsKK30gbXBhbF9ycl9zZXJ2X2lkbGVfbWVhc19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfaW50MTYgcmxhY19mdWxsX2luX3F1YXJ0ZXJfZGJtOworICAgIGthbF9pbnQxNiBybGFjX3N1Yl9pbl9xdWFydGVyX2RibTsKKyAgICBrYWxfdWludDggcnhxdWFsX2Z1bGxfYXZnOworICAgIGthbF91aW50OCByeHF1YWxfc3ViX2F2ZzsKKyAgICBrYWxfdWludDggZHR4X3VzZWQ7CisgICAga2FsX2ludDE2IGN1cnJlbnRfdHhfcG93ZXJfaW5fZGJtOyAgLyogTWFydWNvMjAxMDA0MjMsIHRvIHNob3cgdGhlIHR4IHBvd2VyIGxldmVsIGluIGVuZ2luZWVyaW5nIG1vZGUgKi8KKyAgICBrYWxfaW50OCAgIG1lYW5fYmVwOworICAgIGthbF9pbnQ4ICAgY3ZfYmVwOworICAgIGthbF9pbnQzMiAgcnhsZXZfdmFsOworICAgIGthbF9pbnQ4ICAgbmJyX3JjZHZfYmxvY2tzOworI2lmIGRlZmluZWQgKF9fQU1SX1NVUFBPUlRfXykgfHwgZGVmaW5lZCAoX19BTVJXQl9MSU5LX1NVUFBPUlRfXykKKyAgIGthbF9ib29sIGFtcl9pbmZvX3ZhbGlkOworICAga2FsX2Jvb2wgIGRsX2R0eDsgIC8qIE1hcnVjbzIwMTAwNDIzLCB0byBzaG93IERMIERUWCBpcyBvbi9vZmYgaW4gZW5naW5lZXJpbmcgbW9kZSAqLworICAga2FsX3VpbnQ4IGNtcl9jbWNfY21pdV9jbWlkOworICAga2FsX3VpbnQ4IGNfaTsKKyAgIGthbF91aW50MTYgaWNtOworICAga2FsX3VpbnQxNiBhY3M7CisjZW5kaWYgLyogX19BTVJfU1VQUE9SVF9fIHx8IF9fQU1SV0JfTElOS19TVVBQT1JUX18qLworCisgICBrYWxfaW50MTYJcmVhbF9zbnI7Cit9IG1wYWxfcnJfc2Vydl9kZWRpX21lYXNfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGxpc3RfcmVmOworICAgIGthbF91aW50OCBsaXN0X2xlbjsKKyAgICBrYWxfdWludDE2IGFyZmNuX2xpc3RbMzNdOworICAgIGthbF9pbnQxNiBybGFfaW5fcXVhcnRlcl9kYm1bMzNdOworCWthbF9pbnQxNiBhZmNfZGFjWzMzXTsKKyNpZiBkZWZpbmVkKF9fVU1UU19SQVRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykKKyAgICAvKiBFbGx5MjAwODEwMDMsIEluZGljYXRlcyB0aGUgZm9sbG93aW5nIDQgaWRsZSBmcmFtZXMgYXJlIGZvciBHU00gb3Igb3RoZXIgUkFULiAqLworICAgIGthbF91aW50OCBpc19vY2N1cGllZF9ieV9vdGhlcl9yYXQ7CisjZW5kaWYgLyogZGVmaW5lZChfX1VNVFNfUkFUX18pIHx8IGRlZmluZWQoX19MVEVfUkFUX18pICovCit9IG1wYWxfcnJfbmVpZ2hib3JfbWVhc19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyNpZiBkZWZpbmVkIChfX1BTX1NFUlZJQ0VfXykgJiYgZGVmaW5lZCAoX19QS1RfRVhUX01FQVNfXykKKyAgICBrYWxfdWludDggaXNfZm9yX2V4dGVuZGVkX21lYXM7CisjZW5kaWYgLyooX19QU19TRVJWSUNFX18pICYmIChfX1BLVF9FWFRfTUVBU19fKSovCisgICAga2FsX3VpbnQxNiBhcmZjbjsKKyAgICBrYWxfdWludDggYnNpY192YWxpZDsKKyAgICBrYWxfdWludDggYnNpYzsKKyAgICBrYWxfdWludDggYnVyc3RfYWNjZXNzX2lkOworICAgIGthbF9pbnQzMiBmcmFtZV9vZmZzZXQ7CisgICAga2FsX2ludDMyIGViaXRfb2Zmc2V0OworICAgIGthbF91aW50OCBpc19mb3JfbWFudWFsX2xpc3Q7CisJa2FsX2ludDE2IHNucjsKKyAgIGthbF9pbnQxNglyZWFsX3NucjsJCit9IG1wYWxfcnJfbmVpZ2hib3JfYnNpY19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDE2IGFyZmNuOworICAgIGthbF91aW50OCBic2ljX3ZhbGlkOworICAgIGthbF91aW50OCBic2ljOworICAgIGthbF91aW50OCBidXJzdF9hY2Nlc3NfaWQ7CisgICAga2FsX2ludDMyIGZyYW1lX29mZnNldDsKKyAgICBrYWxfaW50MzIgZWJpdF9vZmZzZXQ7Cit9IG1wYWxfcnJfY2VsbF9ic2ljX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBsaXN0X3JlZjsKKyAgICBrYWxfdWludDggbGlzdF9sZW47CisgICAga2FsX3VpbnQxNiBhcmZjbl9saXN0WzMzXTsKKyAgICBrYWxfaW50MTYgbmNfbWVhc19pbl9xZGJtWzMzXTsKK30gbXBhbF9ycl9uY19tZWFzdXJlbWVudF9pbmRfc3RydWN0OworCisjaWZkZWYgX19QS1RfRVhUX01FQVNfXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGxpc3RfbGVuOworICAgIGthbF91aW50MTYgYXJmY25fbGlzdFszMl07CisgICAga2FsX3VpbnQ4IGV4dF9tZWFzX2luX3J4bGV2WzMyXTsKK30gbXBhbF9ycl9wa3RfZXh0X21lYXN1cmVtZW50X2luZF9zdHJ1Y3Q7CisjZW5kaWYgLypfX1BLVF9FWFRfTUVBU19fKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGNhcnJpZXJfcmVmOworICAgIGthbF91aW50OCB2YWxpZF9tZWFzX3RzOworICAgIGthbF9pbnQxNiBzc19zYW1wbGVbOF07CisgICAga2FsX3VpbnQ4IGludF9tZWFzX2ZyZXE7CisgICAga2FsX3VpbnQzMiBmcmFtZV9udW1iZXI7Cit9IG1wYWxfcnJfaW50X21lYXN1cmVtZW50X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfYWxsX3RiZl9yZWw7CisgICAga2FsX3VpbnQ4IHVsX3RiZl9iaXRtYXA7CisgICAga2FsX3VpbnQ4IGRsX3RiZl9iaXRtYXA7Cit9bXBhbF9ycl9wZHRjaF9kaXNjb25uX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB0cmFuc2l0aW9uX2lkX3VsW01BWF9UQkZfTlVNXTsKKyAgICBrYWxfdWludDggdHJhbnNpdGlvbl9pZF9kbFtNQVhfVEJGX05VTV07CisgICAga2FsX3VpbnQ4IHVsX3RiZl9iaXRtYXA7CisgICAga2FsX3VpbnQ4IGRsX3RiZl9iaXRtYXA7CQorfSBtcGFsX3JyX3BkdGNoX2Nvbm5lY3RfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiBmcmFtZV9ubzsKKyAgICBrYWxfdWludDE2IGFyZmNuOworICAgIGNoX3F1YWxpdHlfcmVwX3N0cnVjdCBjaF9xdWFsX3JlcDsKKyAgICBrYWxfdWludDggbm9fZGxfcmFkaW9fYmxrczsKKyAgICAvL2thbF91aW50OCBkbF9yYWRpb19ibGtzX3NpemU7CisgICAgZGxfcmFkaW9fYmxrX3N0cnVjdCBkbF9yYWRpb19ibGtzWzRdOworICAjaWZkZWYgX19FR1BSU19NT0RFX18KKyAgICBrYWxfdWludDggb3V0X29mX21lbTsKKyAgICBrYWxfdWludDE2IGRzcF92cVtNQVhfVEJGX05VTV07ICAgIAkKKyAgI2VuZGlmCisKKyAgICBrYWxfdWludDggaXNfdWxfYmxrX2NvbmZsaWN0OyAvKiBvbmx5IHVzZWQgaW4gRzIuMCsgKi8KKyAgICBrYWxfdWludDggaXNfcnRzX2luZm9fdmFsaWQ7CisgICAgcmVhZHlfdG9fc2VuZF9pbmRfc3RydWN0IHJ0c19pbmZvOworICAgIGthbF91aW50OCBkbF9tVEJGdGlkW01BWF9UQkZfTlVNXTsKKyAgICAKKyNpZmRlZiBfX01PTklUT1JfUEFHRV9EVVJJTkdfVFJBTlNGRVJfXworICAgLyogUHJvdmlkZSBuZXh0IHBjaCBmcmFtZSBudW1iZXIgZm9yIE1BQyB0byBlbmhhbmNlIHBzIHBlcmZvcm1hbmNlIGR1cmluZyBQUyB0cmFuc2ZlciovCisgICAga2FsX3VpbnQzMiBuZXh0X3BjaF9mbjsKKyNlbmRpZiAvKmVuZCBvZiBfX01PTklUT1JfUEFHRV9EVVJJTkdfVFJBTlNGRVJfXyovCisKKyNpZm5kZWYgX19NVEtfVEFSR0VUX18KKyAgICBrYWxfdWludDggcGFja19kYXRhWzIzXTsKKyNlbmRpZgorCisgICAgLyogWXUtUG86IDIwMTQwNDMwIGFkZCBmb3IgcmVwb3J0IHRyYW5zbWl0IHBvd2VyIHRvIHVwcGVyIGxheWVyKi8KKyAgICBrYWxfdWludDE2IGN1cnJlbnRfdHhfcG93ZXJfaW5fZGJtWzhdOworCit9IG1wYWxfcnJfdHJhbnNmZXJfZGF0YV9pbmRfc3RydWN0OworCisjaWZkZWYgX19QU19MMV9EQ19BUkNIX18KKyNpZm5kZWYgX19NVEtfVEFSR0VUX18KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc291cmNlOworICAgIC8qIFUxIHBhcnQgKi8KKyAgICBQcmVQYWNrZXRVcGxpbmtTcGVjRGVzY3JpcHRpb24gcHB1c0RlczsKKworICAgIC8qIFUyIHBhcnQgKi8KKyAgICBtcGFsX2wxaV9ydHNfaW5mb3JtYXRpb25fc3RydWN0IFJUU0luZm87Cit9bXBhbF9kY19kZWJ1Z19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiB0YWlsOworICAgIGthbF91aW50MzIgaGVhZDsKKyAgICBrYWxfdWludDMyIG51bV9vZl9ycmJwX2luX21wYWxfcXVldWU7CisgICAga2FsX3VpbnQzMiBtcGFsX3JyYnBbNF07CisgICAga2FsX3VpbnQzMiBtcGFsX21pbl9ycmJwX2ZuOworfW1wYWxfZGNfZGVidWdfbWluX3JyYnBfaW5kX3N0cnVjdDsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAoIWRlZmluZWQoX19NVEtfVEFSR0VUX18pKSAmJiAoZGVmaW5lZCAoX19HRVJBTl9SVFRJX18pIHx8IGRlZmluZWQoX19HRVJBTl9GQU5SX18pKQorI2luY2x1ZGUgIm1waF9jbnN0LmgiCisjaW5jbHVkZSAibXBoX3R5cGVzLmgiCisjaW5jbHVkZSAibXBoX2NzX2RlZi5oIgorI2luY2x1ZGUgIm1waF9jc19tc2cuaCIKKyNpbmNsdWRlICJtcGhfcHNfZGVmLmgiCisjaW5jbHVkZSAibXBoX3BzX21zZy5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBtcGhwX3BhY2tldF9kb3dubGlua19zdHJ1Y3QgcHRyX3BrdF9kbDsKKyAgICBtcGhfcnhfbXVsdGlzbG90X2RhdGFfc3RydWN0IHJ4X2RhdGFbNF07Cit9bXBhbF9ycl90cmFuc2Zlcl9kYXRhX25vdGljZV9pbmRfc3RydWN0OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBpc19zdWNjZXNzZnVsOworfSBtcGFsX3JyX2NjY2hfcnJicF9jbmZfc3RydWN0OworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGlzX3N1Y2Nlc3NmdWw7Cit9IG1wYWxfcnJfZGVhY3RpdmF0ZV9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBzdWNjZXNzOworfSBtcGFsX3JyX3NldF9yYXRfc2VydmljZV9jbmZfc3RydWN0OworCisjaWZkZWYgX19QU19TRVJWSUNFX18KKyNlbmRpZiAvKiBlbmQgb2YgX19QU19TRVJWSUNFX18gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHBjaF9kYXRhWzIzXTsKK30gbXBhbF9ycl9kZXRlY3RfcGFnaW5nX2Jsb2NrX2NhbGxiYWNrX3JlcV9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgTXVsdGktbW9kZSBTdGFuZGJ5IEdTTSBpbnRlci1SQVQgcHJvY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fVU1UU19SQVRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykKKyNpbmNsdWRlICJnYXNfZWFzX2VudW1zLmgiCisKKyNkZWZpbmUgU1RBTkRCWV9HU01fTUVBU19NQVhfQ0VMTF9OVU0gKDMyKQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbGlzdF9yZWY7CisgICAga2FsX3VpbnQ4IGxpc3RfbGVuOworICAgIGthbF9pbnQxNiBhcmZjbl9saXN0W1NUQU5EQllfR1NNX01FQVNfTUFYX0NFTExfTlVNXTsKKyAgICBrYWxfaW50MTYgcmxhX2luX3F1YXJ0ZXJfZGJtW1NUQU5EQllfR1NNX01FQVNfTUFYX0NFTExfTlVNXTsKKyAgICBrYWxfdWludDMyIGJzaWNfcmVjb25maXJtX3BhcmE7CisjaWZkZWYgVU5JVF9URVNUCisgICAga2FsX3VpbnQzMiB0aW1lX3N0YW1wOworI2VuZGlmIC8qIFVOSVRfVEVTVCAqLworICAgIGthbF9ib29sIGlzX25vdF9hbGxfYXJmY25fbWVhc3VyZWQ7Cit9IG1wYWxfcnJfc3RhbmRieV9nc21fbWVhc19pbmRfc3RydWN0OworCisjaWYgZGVmaW5lZChfXzIzR19QUklfUkVTRUxfU1VQUE9SVF9fKSB8fCBkZWZpbmVkKF9fTFRFX1JBVF9fKQordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGxpc3RfcmVmOworICAgIGthbF91aW50OCBsaXN0X2xlbjsKKyAgICBrYWxfaW50MTYgYXJmY25fbGlzdFtTVEFOREJZX0dTTV9NRUFTX01BWF9DRUxMX05VTV07CisgICAga2FsX2ludDE2IHJsYV9pbl9xdWFydGVyX2RibVtTVEFOREJZX0dTTV9NRUFTX01BWF9DRUxMX05VTV07CisjaWZkZWYgVU5JVF9URVNUCisgICAga2FsX3VpbnQzMiB0aW1lX3N0YW1wOworI2VuZGlmIC8qIFVOSVRfVEVTVCAqLyAgICAKK30gbXBhbF9ycl9zdGFuZGJ5X2dzbV9wcmlvX21lYXNfaW5kX3N0cnVjdDsKKyNlbmRpZiAvKiBkZWZpbmVkKF9fMjNHX1BSSV9SRVNFTF9TVVBQT1JUX18pIHx8IHx8IGRlZmluZWQoX19MVEVfUkFUX18pICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MTYgYXJmY247CisgICAga2FsX2Jvb2wgYnNpY192YWxpZDsKKyAgICBrYWxfdWludDggYnNpYzsKKyAgICBrYWxfdWludDMyIGZyYW1lX29mZnNldDsKKyAgICBrYWxfdWludDMyIGViaXRfb2Zmc2V0OworICAgIGthbF91aW50MzIgdGltZV9zdGFtcDsKK30gbXBhbF9ycl9zdGFuZGJ5X2dzbV9ic2ljX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorfSBtcGFsX3JyX2ludGVyX3JhdF9oYW5kb3Zlcl9jbmZfc3RydWN0OworCisjaWZkZWYgX19MVEVfUkFUX18KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzY2FuX2lkOworICAgIGthbF91aW50MTYgYXJmY247CisgICAga2FsX2ludDE2IHBvd2VyX3N1bV9pbl9xdWFydGVyX2RibTsKK30gbXBhbF9ycl9zdGFuZGJ5X2dzbV9yZXBvcnRfY2dpX3NlYXJjaF9yZl9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggYnNpY190aWQ7CisgICAga2FsX3VpbnQxNiBhcmZjbjsKKyAgICBrYWxfYm9vbCBic2ljX3ZhbGlkOworICAgIGthbF9pbnQ4IGJzaWM7CisgICAga2FsX2ludDMyIGZyYW1lX29mZnNldDsKKyAgICBrYWxfaW50MzIgZWJpdF9vZmZzZXQ7Cit9IG1wYWxfcnJfc3RhbmRieV9nc21fcmVwb3J0X2NnaV9ic2ljX2luZF9zdHJ1Y3Q7CisjZW5kaWYgLyogX19MVEVfUkFUX18gKi8KKyNlbmRpZiAvKiBkZWZpbmVkKF9fVU1UU19SQVRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykgKi8KKworI2VuZGlmIC8qIF9NUEFMMlJSX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXBhbF9lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21wYWxfZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWU3ZjlhCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21wYWxfZW51bXMuaApAQCAtMCwwICsxLDEzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgICAgbXBhbF9lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9NUEFMX0VOVU1TX0gKKyNkZWZpbmUgX01QQUxfRU5VTVNfSAorCisvKiBUaGUgc3RhdGVzIG9mIE1QQUwgKi8KK3R5cGVkZWYgZW51bQoreworICAgIE1QQUxfTlVMTF9TVEFURSAgICAgID0gMHgwMCwKKyAgICBNUEFMX0NTX1NDQU4gICAgICAgICA9IDB4ODAsCisgICAgTVBBTF9DU19JRExFICAgICAgICAgPSAweDQwLAorICAgIE1QQUxfQ1NfQUNDRVNTICAgICAgID0gMHgyMCwKKyAgICBNUEFMX0NTX0RFRElDQVRFRCAgICA9IDB4MTAsCisgICAgTVBBTF9DQ0NIX1BTX0lETEUgICAgPSAweDA4LCAvKiBfX1BTX1NFUlZJQ0VfXyBzdGFydCAqLworICAgIE1QQUxfUENDQ0hfUFNfSURMRSAgID0gMHgwNCwKKyAgICBNUEFMX1BTX0FDQ0VTUyAgICAgICA9IDB4MDIsCisgICAgTVBBTF9QU19UUkFOU0ZFUiAgICAgPSAweDAxICAvKiBfX1BTX1NFUlZJQ0VfXyBlbmQgKi8KK30gbXBhbF9zdGF0ZV9lbnVtOworCisjaWZkZWYgX19HRU1JTklfXwordHlwZWRlZiBlbnVtCit7CisgICAgTVBBTDEgPSAweDAsCisgICAgTVBBTDIgPSAweDEsCisgICAgTVBBTDMgPSAweDIsICAgIC8qIEdlbWluaSsgKi8KKyAgICBNUEFMNCA9IDB4MywgICAgLyogR2VtaW5pKyAqLworICAgIE1QQUxfSU5WQUxJRF9OTyA9IDB4RgorfSBtcGFsX2N1cnJlbnRfY250eF9wdHJfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgR0VNSU5JX05PUk1BTF9NT0RFICAgICA9IDB4MCwKKyAgICBHRU1JTklfU1VTUEVORF9NT0RFICAgID0gMHgxLAorICAgIEdFTUlOSV9WSVJUVUFMX01PREUgICAgPSAweDIgLyogR2VtaW5pIDIuMCAqLworfSBtcGFsX2dlbWluaV9tb2RlX2VudW07CisjZW5kaWYgLyogZW5kIG9mIF9fR0VNSU5JX18gKi8KKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBNUEFMX1FVRVVFX05VTEwgICAgICAgICAgICAgPSAweDAsCisgICAgTVBBTF9RVUVVRV9QRFRDSF9ESVNDT05OICAgID0gMHgxLAorICAgIE1QQUxfUVVFVUVfU1VTUEVOU0lPTiAgICAgICA9IDB4MiAgIC8qIGZvciBHZW1pbmkgKi8KK30gbXBhbF9xdWV1ZV9yZWFzb25fZW51bTsKKwordHlwZWRlZiBlbnVtCit7ICAgLyogc2hhbGwgc3luYyB3aXRoIFJMQ19USU1FUl9OVU1fTVNHUyB2YWx1ZSAqLworICAgIE1QQUxfVDMxMjRfVElNRVJfSUQgPSAwLAorICAgIE1QQUxfVElNRVJfTlVNX01TR1MKK30gbXBhbF90aW1lcl9pZF9lbnVtOyAgICAvKiBNUEFMX1RJTUVSIE1lc3NhZ2UgVHlwZSAqLworCisjZW5kaWYgLyogX01QQUxfRU5VTVNfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19hc19lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19hc19lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMjgyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX2FzX2VudW1zLmgKQEAgLTAsMCArMSw1OTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBtcnNfYXNfZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNdWx0aW1vZGUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTVJTX0FTX0VOVU1TX0gKKyNkZWZpbmUgX01SU19BU19FTlVNU19ICisKKyNpbmNsdWRlICJnbG9iYWxfZGVmLmgiCisjaW5jbHVkZSAibDNfaW5jX2VudW1zLmgiCisjaW5jbHVkZSAicHNfcHVibGljX2VudW0uaCIKKyNpbmNsdWRlICJtcnNfYXNfaW50ZXJfY29yZV9lbnVtLmgiCisjaW5jbHVkZSAibXJzX2FzX2lyYXRfZW51bXMuaCIKKwordHlwZWRlZiBlbnVtIAoreworICAgIElOSVRJQUwsCisgICAgU0hBUkVELAorICAgIE9DQ1VQSUVECit9bG93ZXJfbGF5ZXJfYXZhaWxhYmlsaXR5X2VudW07CisKKyNpZiBkZWZpbmVkKF9fR0VNSU5JX18pCisjZGVmaW5lIE1BWF9HQVNfQ0FQQUJJTElUWSAgICAgIE1BWF9HU01fTlVNCisjZGVmaW5lIE1BWF9VQVNfQ0FQQUJJTElUWSAgICAgIE1BWF9VTVRTX05VTQorI2RlZmluZSBNQVhfRUFTX0NBUEFCSUxJVFkgICAgICBNQVhfTFRFX05VTQorI2RlZmluZSBNQVhfTU1fQ0FQQUJJTElUWSAgICAgICBNQVhfR1NNX05VTSAvKiBhc3N1bWUgR1NNIG51bWJlciA+IFVNVFMgbnVtYmVyICovCisjZGVmaW5lIE1BWF9FTU1fQ0FQQUJJTElUWSAgICAgIE1BWF9MVEVfTlVNCisjaWZkZWYgX19GSVZFR19OQVNfXworI2RlZmluZSBNQVhfVkdOQVNfQ0FQQUJJTElUWSAgICBNQVhfU0lNX05VTQorI2VuZGlmIC8qIF9fRklWRUdfTkFTX18gKi8KKyNkZWZpbmUgTUFYX0NBU19DQVBBQklMSVRZICAgICAgMQorI2lmZGVmIF9fTlJfUkFUX18KKyNkZWZpbmUgTUFYX05SQVNfQ0FQQUJJTElUWSAgICAgTUFYX05SX05VTQorI2VuZGlmIC8qIF9fTlJfUkFUX18gKi8KKyNlbHNlCisjZGVmaW5lIE1BWF9HQVNfQ0FQQUJJTElUWSAgICAgIDEKKyNkZWZpbmUgTUFYX1VBU19DQVBBQklMSVRZICAgICAgMQorI2RlZmluZSBNQVhfRUFTX0NBUEFCSUxJVFkgICAgICAxCisjZGVmaW5lIE1BWF9NTV9DQVBBQklMSVRZICAgICAgIDEKKyNkZWZpbmUgTUFYX0VNTV9DQVBBQklMSVRZICAgICAgMQorI2lmZGVmIF9fRklWRUdfTkFTX18KKyNkZWZpbmUgTUFYX1ZHTkFTX0NBUEFCSUxJVFkgICAgMQorI2VuZGlmIC8qIF9fRklWRUdfTkFTX18gKi8KKyNkZWZpbmUgTUFYX0NBU19DQVBBQklMSVRZICAgICAgMQorI2lmZGVmIF9fTlJfUkFUX18KKyNkZWZpbmUgTUFYX05SQVNfQ0FQQUJJTElUWSAgICAgMQorI2VuZGlmIC8qIF9fTlJfUkFUX18gKi8KKyNlbmRpZgorCisjZGVmaW5lIE1BWF9BU1NPQ0lBVElPTl9MQUlfQ0VMTF9JTkZPIDEyCisjZGVmaW5lIE1BWF9BU1NPQ0lBVElPTl9TQU1FX0xBSV9DRUxMX0lORk8gMjQKKworLyogRm9yIGZhc3QgcmVzdW1lIGFuZCBTZWFyY2ggaW5mby4gcmV1c2UgZm9yIG1vZGUgc3dpdGNoLiAqLworI2RlZmluZSBTSTFfUkFXX1ZBTElEICAgICAgICAgICAgICAgICAgMHgwMSAvLzAwMDAwMDAxCisjZGVmaW5lIFNJMl9SQVdfVkFMSUQgICAgICAgICAgICAgICAgICAweDAyIC8vMDAwMDAwMTAKKyNkZWZpbmUgU0kyQklTX1JBV19WQUxJRCAgICAgICAgICAgICAgIDB4MDQgLy8wMDAwMDEwMAorI2RlZmluZSBTSTNfUkFXX1ZBTElEICAgICAgICAgICAgICAgICAgMHgwOCAvLzAwMDAxMDAwCisjZGVmaW5lIFNJNF9SQVdfVkFMSUQgICAgICAgICAgICAgICAgICAweDEwIC8vMDAwMTAwMDAKKyNkZWZpbmUgU0kxM19SQVdfVkFMSUQgICAgICAgICAgICAgICAgIDB4MjAgLy8wMDEwMDAwMAorI2RlZmluZSBTSTFfRVhJUyAgICAgICAgICAgICAgICAgICAgICAgMHg4MCAvLzEwMDAwMDAwCisjZGVmaW5lIFNJMlNFUklFU19SQVdfVkFMaUQgICAgICAgICAgICAweDA2IC8vMDAwMDAxMTAgIHNpMiAmIHNpMmJpcworI2RlZmluZSBBTExfU0lfUkFXX1ZBTElEICAgICAgICAgICAgICAgMHhiZiAvLzEwMTExMTExCisjaWZkZWYgX19QU19TRVJWSUNFX18KKyNkZWZpbmUgR0FTX0ZBU1RfTU9ERV9TV0lUQ0hfVkFMSURfU0kgIDB4YmYgLy8xMDExMTExMQorI2Vsc2UKKyNkZWZpbmUgR0FTX0ZBU1RfTU9ERV9TV0lUQ0hfVkFMSURfU0kgIDB4OWYgLy8xMDAxMTExMQorI2VuZGlmCisjZGVmaW5lIEdBU19TSV9SQVdfREFUQV9MRU4gMjAKKworCisjaWZkZWYgX19HQVNfU1RPUkVEX1NJX0ZFQVRfXworI2RlZmluZSBSUk1fTUFYX1NJMlRFUl9JTlNUQU5DRVMgICAgOAorI2RlZmluZSBSUk1fU0kyVEVSX1JFU1RfTEVOICAgIDQKKyNkZWZpbmUgUlJNX01BWF9TSTJRVUFSVEVSX0lOU1RBTkNFUyAgICAxNgorI2RlZmluZSBSUk1fU0kyUVVBUlRFUl9SRVNUX0xFTiAgICAyMAorI2RlZmluZSBSUk1fTUFYX1NJWkVfT0ZfR0FTX1NUT1JFRF9TSV9MSVNUIDgKKyNkZWZpbmUgR0FTX0NBTkRJREFURV9USUNLX0lOSVQgKDB4RkZGRkZGRkYpCisjZW5kaWYKKworI2RlZmluZSBBRlJfTUFTS18yRzQgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEFGUl9NQVNLXzNHNCAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgQUZSX01BU0tfMkc1X0ZERCAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBBRlJfTUFTS18yRzVfVEREICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIEFGUl9NQVNLXzNHNV9GREQgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgQUZSX01BU0tfM0c1X1RERCAgICAgICAgICAgICAgIDB4MDAyMAorI2RlZmluZSBBRlJfTUFTS180RzUgICAgICAgICAgICAgICAgICAgMHgwMDQwCisKKy8qIEFscmVhZHkgaW4gbDNfaW5jX2VudW1zLmgKK3R5cGVkZWYgZW51bSAKK3sKKyAgICBERUxfQ1NHLAorICAgIEFERF9DU0cKK31jc2dfdXBkYXRlX3R5cGVfZW51bTsKKyovCisKK3R5cGVkZWYgZW51bSAKK3sKKyAgICBOT19DSEFOR0UsCisgICAgQUxMT1dFRF9DU0dfTElTVF9DSEFOR0VELAorICAgIE9QRVJBVE9SX0NTR19MSVNUX0NIQU5HRUQsCisgICAgQk9USF9DU0dfTElTVF9DSEFOR0VECit9d2hpdGVfbGlzdF91cGRhdGVfdHlwZTsKKworLyogQWxyZWFkeSBpbiBwc19wdWJsaWNfZW51bS5oCit0eXBlZGVmIGVudW0gCit7CisgICAgTk9UX0lOX1dISVRFX0xJU1QsCisgICAgQUxMT1dFRF9DU0csCisgICAgT1BFUkFUT1JfQ1NHLAorICAgIFVOQVVUSF9PUEVSQVRPUl9DU0cKK31jc2dfdHlwZV9lbnVtOworKi8KKwordHlwZWRlZiBlbnVtIAoreworICAgIEFMTE9XRURfQ1NHX0xJU1QsCisgICAgT1BFUkFUT1JfQ1NHX0xJU1QKK31jc2dfbGlzdF90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bSAKK3sKKyAgICBTSU1fTkVXX0lOU0VSVEVELAorICAgIFNJTV9GSUxFX1VQREFURUQsCisgICAgQVNfVVBEQVRFRAorfWNzZ193aGl0ZV9saXN0X3VwZGF0ZV9jYXVzZTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQ1NGQl9SRURVQ0VfTEFVID0gMSwKKyAgICBDU0ZCX0RFRkVSX1NJMTMsCisgICAgQ1NGQl8yR19BRlIsCisgICAgQ1NGQl8zR19BRlIsCisgICAgQ1NGQl8yR19GRERfZUNTRkIsCisgICAgQ1NGQl8zR19GRERfZUNTRkIsCisgICAgQ1NGQl8yR19URERfZUNTRkIsCisgICAgQ1NGQl8zR19URERfZUNTRkIsCisgICAgQ1NGQl9FTkhBTkNFTUVOVF9JVEVNX0VORAorfWNzZmJfZW5oYW5jZW1lbnRfZW51bTsKKwordHlwZWRlZiBlbnVtIAoreworICAgIEJBTkRfMzlfRElTQUJMRSwKKyAgICBCQU5EXzM5X0VOQUJMRQorfWJhbmRfMzlfY29udHJvbF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBCQU5EX0RJU0FCTEUsCisgICAgQkFORF9FTkFCTEUKK31lYXNfYmFuZF9jb250cm9sX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIEJHX1NFQVJDSF8yRzRfRkRELAorICAgIEJHX1NFQVJDSF8zRzRfRkRELAorICAgIEJHX1NFQVJDSF8yRzRfVERELAorICAgIEJHX1NFQVJDSF8zRzRfVERELAorICAgIEJHX1NFQVJDSF8yRzVfRkRELAorICAgIEJHX1NFQVJDSF8zRzVfRkRELAorICAgIEJHX1NFQVJDSF8yRzVfVERELAorICAgIEJHX1NFQVJDSF8zRzVfVERELAorICAgIEJHX1NFQVJDSF80RzUKK31iYWNrZ3JvdW5kX3NlYXJjaF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBNUlNfR0FTX0ZBU1RfTU9ERV9TV0lUQ0hfTk9UX0FMTE9XRUQgICAgICAgICAgICAgICAgPSAweDAwLCAgICAgIC8vSW5pdGlhbCB2YWx1ZQorICAgIE1SU19HQVNfRkFTVF9NT0RFX1NXSVRDSF9DT0xMRUNUSU5HX0VTU0VOVElBTF9TSSAgICA9IDB4MDEgPDwgMCwgLy9SQVRDTV9HQVNfU1lTX0lORk8gbm90IHNlbnQgb3Igc3RpbGwgcmVjZWl2aW5nIGVzc2VudGlhbCBTSQorICAgIE1SU19HQVNfRkFTVF9NT0RFX1NXSVRDSF9FU1NFTlRJQUxfU0lfQ09MTEVDVEVEICAgICA9IDB4MDEgPDwgMSwgLy9SQVRDTV9HQVNfU1lTX0lORk8gc2VudAorICAgIE1SU19HQVNfRkFTVF9NT0RFX1NXSVRDSF9OT1RfSEFQUEVORUQgICAgICAgICAgICAgICA9IDB4MDEgPDwgMiwgLy8gRFVQTEVYIG1vZGUgY2hhbmdlIG5vdCBoYXBwZW5lZAorICAgIE1SU19HQVNfRkFTVF9NT0RFX1NXSVRDSF9IQVBQRU5FRCAgICAgICAgICAgICAgICAgICA9IDB4MDEgPDwgMywgLy8gRFVQTEVYIG1vZGUgY2hhbmdlIGhhcHBlbmVkCisgICAgTVJTX0dBU19GQVNUX01PREVfU1dJVENIX05PVF9IQVBQRU5FRF9XT19TSSAgICAgICAgID0gTVJTX0dBU19GQVNUX01PREVfU1dJVENIX0NPTExFQ1RJTkdfRVNTRU5USUFMX1NJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgTVJTX0dBU19GQVNUX01PREVfU1dJVENIX05PVF9IQVBQRU5FRCwKKyAgICBNUlNfR0FTX0ZBU1RfTU9ERV9TV0lUQ0hfSEFQUEVORURfQlVUX1dPX1NJICAgICAgICAgPSBNUlNfR0FTX0ZBU1RfTU9ERV9TV0lUQ0hfQ09MTEVDVElOR19FU1NFTlRJQUxfU0kKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBNUlNfR0FTX0ZBU1RfTU9ERV9TV0lUQ0hfSEFQUEVORUQsCisgICAgTVJTX0dBU19GQVNUX01PREVfU1dJVENIX05PVF9IQVBQRU5FRF9XX1NJICAgICAgICAgID0gTVJTX0dBU19GQVNUX01PREVfU1dJVENIX0VTU0VOVElBTF9TSV9DT0xMRUNURUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBNUlNfR0FTX0ZBU1RfTU9ERV9TV0lUQ0hfTk9UX0hBUFBFTkVELAorICAgIE1SU19HQVNfRkFTVF9NT0RFX1NXSVRDSF9BTExPV0VEICAgICAgICAgICAgICAgICAgICA9IE1SU19HQVNfRkFTVF9NT0RFX1NXSVRDSF9FU1NFTlRJQUxfU0lfQ09MTEVDVEVECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgTVJTX0dBU19GQVNUX01PREVfU1dJVENIX0hBUFBFTkVELAorfSBtcnNfZ2FzX2Zhc3RfbW9kZV9zd2l0Y2hfc3RhdHVzX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIE1PRFVMRV9OT05FLAorICAgIE1PRFVMRV9FUlJDX1JDTSwKKyAgICBNT0RVTEVfRVJSQ19DRUwsCisgICAgTU9EVUxFX0VSUkNfU1BWLAorICAgIE1PRFVMRV9VQVNfRkRELAorICAgIE1PRFVMRV9VQVNfVERELAorICAgIE1PRFVMRV9HQVNfRkRELAorICAgIE1PRFVMRV9HQVNfVERELAorICAgIE1PRFVMRV9DMksKKyNpZmRlZiBfX05SX1JBVF9fCisgICAgLAorICAgIE1PRFVMRV9OUlJDX0lETEUsCisgICAgTU9EVUxFX05SUkNfQkFDS0dST1VORCwKKyAgICBNT0RVTEVfTlJSQ19OQ09OTiwKKyAgICBNT0RVTEVfTlJSQ19NQUlOCisjZW5kaWYgLyogX19OUl9SQVRfXyAqLworfWZ1bmN0aW9uX2NhbGxlcl9pZF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTVEFURV9OT05FPTAsCisgICAgQ0hJTkFfTUNDCit9bXJzX3NpbV9iYW5kX2NmZ19zdGF0ZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBESVNBQkxFX0JBTkRfU1RBVEVfTk9ORSA9IDAsCisgICAgRElTQUJMRV9CQU5EXzdfMzgsCisgICAgRElTQUJMRV9CQU5EX05VTExfQkFORCAgICAKK31tcnNfcGxtbl9iYW5kX2NmZ19zdGF0ZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBQQVJUSUFMX0JBTkRfU0VUVElOR19OT05FID0gMCwgICAgCisgICAgQ0hJTkFfUEFSVElBTF9CQU5EX1NFVFRJTkcsCisgICAgSkFQQU5fUEFSVElBTF9CQU5EX1NFVFRJTkcKK31tcnNfc2ltX3BhcnRpYWxfYmFuZF9jZmdfc3RhdGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisJQ1VTVE9NX0RJU0FCTEVfQkFORF9CWV9QTE1OX05PTkUgPSAwLAorCUNVU1RPTV9ESVNBQkxFX0JBTkRfQllfUExNTiwKKwlDVVNUT01fRElTQUJMRV9CQU5EX0JZX1BMTU5fTlVMTF9CQU5ECit9bXJzX2N1c3RvbV9kaXNhYmxlX2JhbmRfYnlfcGxtbl9zdGF0ZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBQTE1OX1JFR0lPTl9CQU5EX1NFVFRJTkdfTk9ORT0wLCAgICAKKyAgICBQTE1OX1JFR0lPTl9CQU5EX1NFVFRJTkcsCisgICAgUExNTl9SRUdJT05fQkFORF9TRVRUSU5HX05VTExfQkFORAorfW1yc19wbG1uX3JlZ2lvbl9iYW5kX2NmZ19zdGF0ZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBBU19SRUxFQVNFX0lOVkFMSUQ9MCwgICAgCisgICAgQVNfUkVMRUFTRV9SRUw5LAorICAgIEFTX1JFTEVBU0VfUkVMMTAsCisgICAgQVNfUkVMRUFTRV9SRUwxMSwKKyAgICBBU19SRUxFQVNFX1JFTDEyLAorICAgIEFTX1JFTEVBU0VfUkVMMTMsCisgICAgQVNfUkVMRUFTRV9SRUwxNCwKKyAgICBBU19SRUxFQVNFX1JFTDE1Cit9bXJzX2FzX3JlbGVhc2VfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQ1NGQl9DQUxMX1NUQVRVU19VTktOT1dOPTAsICAgIAorICAgIENTRkJfQ0FMTF9TVUNDRVNTLAorICAgIENTRkJfQ0FMTF9GQUlMVVJFCit9bXJzX2dhc19lY3NmYl9jYWxsX3N0YXR1c19lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBBRlJfMkc0LAorICAgIEFGUl8zRzQsCisgICAgQUZSXzJHNV9GREQsCisgICAgQUZSXzJHNV9UREQsCisgICAgQUZSXzNHNV9GREQsCisgICAgQUZSXzNHNV9UREQsCisgICAgQUZSXzRHNSwKKyAgICBBRlJfRU5IQU5DRU1FTlRfSVRFTV9FTkQKK31hZnJfZW5oYW5jZW1lbnRfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgU1JWQ19WT0lDRV9UUklHR0VSX0FUXzVHLAorICAgIFNSVkNfVk9JQ0VfVFJJR0dFUl9BVF80RywKKyAgICBTUlZDX1NTX1RSSUdHRVJfQVRfNUcsCisgICAgU1JWQ19TU19UUklHR0VSX0FUXzRHLAorICAgIFNSVkNfQ1NGQl9UUklHR0VSX0FUXzRHLAorICAgIFNSVkNfRVBTRkJfVFJJR0dFUl9BVF81RywKKyAgICBTUlZDX0xQUCwKKyAgICBTUlZDX0VNRVJHRU5DWSwKKyAgICBTUlZDX0NFTExVTEFSX0NBTEwsCisgICAgQUZSX1NSVkNfTUFYX05VTQorfWFmcl9zZXJ2aWNlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFBST0NfQ1NGQl9GUk9NXzRHLAorICAgIFBST0NfU1JWQ0NfRlJPTV80RywKKyAgICBQUk9DX0VQU0ZCX0ZST01fNUcsCisgICAgUFJPQ19TUlZDQ19GUk9NXzVHLAorICAgIEFGUl9QUk9DX01BWF9OVU0KK31hZnJfcHJlX2NvbmRfcHJvY19lbnVtOworCit0eXBlZGVmIGVudW0gIAoreworICAgIElSQVRfUElOR1BPTkdfNEczPTAsIC8qIFdoZW4gdGhlIFJBVCBDaGFuZ2UgYmV0d2VlbiA0RyAmIDNHLCBpbmNsZGluZyA0RzMgYW5kIDNHNCAqLworICAgIElSQVRfUElOR1BPTkdfNEdDMkssIC8qIFdoZW4gdGhlIFJBVCBDaGFuZ2UgaXMgNEcgdG8gQzJLLCBidXQgQzJLIHRvIDRHIGlzIE1QU1IgKi8KKyAgICBJUkFUX1BJTkdQT05HXzRHMiwgICAvKiBXaGVuIHRoZSBSQVQgQ2hhbmdlIGJldHdlZW4gNEcgJiAyRywgaW5jbGRpbmcgNEcyIGFuZCAyRzQgKi8KKy8vICAgIElSQVRfUElOR1BPTkdfM0cyLCAgIC8qIFdoZW4gdGhlIFJBVCBDaGFuZ2UgYmV0d2VlbiAzRyAmIDJHLCBpbmNsZGluZyAzRzIgYW5kIDJHMyAqLworICAgIElSQVRfUElOR1BPTkdfNEc1LCAgIC8qIFdoZW4gdGhlIFJBVCBDaGFuZ2UgYmV0d2VlbiA0RyAmIDVHLCBpbmNsZGluZyA0RzUgYW5kIDVHNCAqLworICAgIElSQVRfUElOR1BPTkdfVFlQRV9OVU0KK31tcnNfaXJhdF9waW5ncG9uZ190eXBlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIE1SU19HRU1JTklfRFNEU19NT0RFLAorICAgIE1SU19HRU1JTklfRFJfRFNEU19NT0RFLAorICAgIE1SU19HRU1JTklfRFNEQV9NT0RFLAorfW1yc19nZW1pbmlfbW9kZV9lbnVtOworCisKK3R5cGVkZWYgZW51bQoreworICAgIC8qIE1SU19GRUFUX0lHTk9SRV9SRURJUkVDVF9UT19MVEU6CisgICAgICogLSBVc2FnZTogSWdub3JlIHRoZSByZWRpcmVjdGlvbiB0byBMVEUgaWYgbm8gc3VpdGFibGUgY2VsbCBjb3VsZCBiZSBmb3VuZC4KKyAgICAgKiAgICAgICAgICBbRUFTXSBFUlJDIHdvdWxkIHNldCB0aGlzIGZlYXR1cmUgdG8gVFJVRSBpZiBjb250aW5vdXMgcmVkaXJlY3Rpb24gZmFpbHVyZXMgYXJlIGRldGVjdGVkLiAKKyAgICAgKiAgICAgICAgICBbVUFTXSAzRyBUREQgd291bGQgcXVlcnkgaWYgbmVlZGVkIHRvIGlnbm9yZSB0aGUgcmVkaXJlY3Rpb24uICovCisgICAgTVJTX0ZFQVRfSUdOT1JFX1JFRElSRUNUX1RPX0xURT0wLAorICAgIE1SU19GRUFUX05VTQorfW1yc19mZWF0dXJlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIE1SU19BRlJfU1RSSUNUX0NPTlNUUkFJTl9TRUFSQ0hfTk9UX1RSSUdHRVJFRCwKKyAgICBNUlNfQUZSX1NUUklDVF9DT05TVFJBSU5fU0VBUkNIX1RSSUdHRVJFRCwKKyAgICBNUlNfQUZSX1NUUklDVF9DT05TVFJBSU5fU0VBUkNIX1RSSUdHRVJFRF9BTkRfRkFJTEVECit9bXJzX2Fmcl9zdHJpY3RfY29uc3RyYWluX3N0YXRlOworCisKKyNkZWZpbmUgTVJTX0ZFQVRfQklUTUFQX1NJWkUgKCAoTVJTX0ZFQVRfTlVNICUgOCA9PSAwKT8gKE1SU19GRUFUX05VTS84KSA6IChNUlNfRkVBVF9OVU0vOCArIDEpICkKKworI2lmIChDVVJfR0VOID49IE1EX0dFTjk3KQordHlwZWRlZiBlbnVtCit7CisJTVJTX0dFTUlOSV9TVEFUVVNfRlVMTF9DQVAsCisgICAgTVJTX0dFTUlOSV9TVEFUVVNfREFUQV9TSU0sCisgICAgTVJTX0dFTUlOSV9TVEFUVVNfTk9OX0RBVEFfU0lNLAorCU1SU19HRU1JTklfU1RBVFVTX0lOVkFMSUQKK30gbXJzX2dlbWluaV9zdGF0dXNfZW51bTsKKyNlbmRpZiAvKiAoQ1VSX0dFTiA+PSBNRF9HRU45NykgKi8KK3R5cGVkZWYgZW51bQoreworICAgIE1SU19BU19DQVBBX05PTkUgPTAsCisgICAgTVJTX0FTX0NBUEFfRVJSQ19OU0FfTU9ERV9BU05fREVDT0RFX0VSUk9SID0xLAorICAgIE1SU19BU19DQVBBX0VSUkNfTlNBX01PREVfSUVfRVJST1IgPTIsCisgICAgTVJTX0FTX0NBUEFfRU1NX1RBVV9UQUlfQ0hBTkdFRCA9MywKKyAgICBNUlNfQVNfQ0FQQV9FTU1fREVUQUNIX1JFUSA9IDQgICAgCit9bXJzX2FzX2NhcGFfZXZlbnRfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgTVJTX0FTX0NBUEFfRkVBVFVSRV9ESVNBQkxFX05TQSA9IDAsICAgICAvKmJpdCAgMCBvZiBtcnNfY2FwYWJpbGl0eV9jaGFuZ2VfaW5mby5jYXBhYmlsaXR5X2NoYW5nZV9mZWF0dXJlX2VuYWJsZV9zdGF0ZSovIAorCisgICAgTVJTX0FTX0NBUEFfRkVBVFVSRV9JTlZBTElECit9bXJzX2FzX2NhcGFfY2hhbmdlX2ZlYXR1cmVfZW51bTsKKworI2VuZGlmIC8qIF9NUlNfQVNfRU5VTVNfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19hc19pcmF0X2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX2FzX2lyYXRfZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWFkYTBjCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19hc19pcmF0X2VudW1zLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBtcnNfYXNfaXJhdF9lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKgorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIAorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICRMb2c6JAorICoKKyAqIDA3IDA5IDIwMTkgZ2licmFuLmNoYW5nCisgKiBbTU9MWTAwNDE4MDcyXSBbR2VuOTddIEFkdi4gQ2VsbCBTZWFyY2ggRmVhdHVyZQorICogQkJMIFZNT0xZIFRydW5rIChNUlMgcGFydCkKKyAqCisgKiAxMCAwMyAyMDE4IG11bmVlc3dhcmFpYWguZGFtYQorICogW01PTFkwMDM1NjI4Nl0gW0dlbjk3XSBiYWNrZ3JvdW5kIHNlYXJjaCBmZWF0dXJlCisgKiAuCisgKgorICogMDggMTUgMjAxOCB5aW5nd2VpLmh1YW5nCisgKiBbTU9MWTAwMzQ2MTQ2XSBbVk1PTFldIEdFTjk3LkRFViBwYXRjaCBiYWNrIHRvIFZNT0xZCisgKiAJCisgKiAJLgorICoKKyAqIDExIDA5IDIwMTYgdGl0aS53dQorICogW01PTFkwMDIwODQzNV0gWzYyOTNdW0MyS11TeW5jIEMySyBjb2RlIHRvIFVNT0xZQSBUUlVOSworICogLgorICoKKyAqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX01SU19BU19JUkFUX0VOVU1TX0hfCisjZGVmaW5lIF9NUlNfQVNfSVJBVF9FTlVNU19IXworCisjZGVmaW5lIE1SU19SQVRfVFlQRV9HU01fQk1QICAgICAgICAgICAgICAweDAwMDAwMQorI2RlZmluZSBNUlNfUkFUX1RZUEVfVU1UU19CTVAgICAgICAgICAgICAgMHgwMDAwMDIKKyNkZWZpbmUgTVJTX1JBVF9UWVBFX0xURV9CTVAgICAgICAgICAgICAgIDB4MDAwMDA0CisjZGVmaW5lIE1SU19SQVRfVFlQRV9OUl9CTVAgICAgICAgICAgICAgICAweDAwMDAwOAorI2RlZmluZSBNUlNfUkFUX1RZUEVfQzJLX0JNUCAgICAgICAgICAgICAgMHgwMDAwMTAKKwordHlwZWRlZiBlbnVtCit7CisgICAgTVJTX0dTTV9SQVQsCisgICAgTVJTX1VNVFNfUkFULAorICAgIE1SU19MVEVfUkFULAorICAgIE1SU19OUl9SQVQsCisgICAgTVJTX0MyS19SQVQsCisgICAgTVJTX1JBVF9OT05FLAorICAgIE1SU19OVUxMX1JBVAorfU1SU19SQVRfTU9ERV9UWVBFOworCisKK3R5cGVkZWYgZW51bQoreworICAgIE1SU19TSU0xLAorICAgIE1SU19TSU0yLAorICAgIE1SU19TSU0zLAorICAgIE1SU19TSU00Cit9TVJTX1NJTV9JTkRFWDsKKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBNUlNfTUFKT1JfUFJPQywgLyogQnkgYWN0aXZlIHJhdCBvbmx5ICovCisgICAgTVJTX0xJU1RfUFJPQywKKyAgICBNUlNfQUNUSVZFX1JBVF9DU0dfQVVUT19TRUFSQ0gsCisgICAgTVJTX0lOQUNUSVZFX1JBVF9DU0dfQVVUT19TRUFSQ0gsCisgICAgTVJTX05XX1NFQVJDSF9QUk9DLAorICAgIE1SU19CR19TRUFSQ0hfRlJFUV9QUk9DLAorICAgIE1SU19CR19TRUFSQ0hfQkFORF9QUk9DLCAKKyAgICBNUlNfQ1NHX0ZJTkdFUlBSSU5ULCAgICAKKyAgICBNUlNfQkdfQkFORF9MRUFSTklOR19QUk9DLAorICAgIE1SU19PQ0NVUFlfTk9ORQorfU1SU19PQ0NVUFlfUFJPQ0VEVVJFOworCisjZW5kaWYgLyogX01SU19BU19JUkFUX0VOVU1TX0hfICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX2FzX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19hc19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWNhMWI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19hc19zdHJ1Y3QuaApAQCAtMCwwICsxLDY3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA3CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIG1yc19hc19zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNdWx0aW1vZGUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9NUlNfQVNfU1RSVUNUX0gKKyNkZWZpbmUgX01SU19BU19TVFJVQ1RfSAorCisjaW5jbHVkZSAibXJzX2FzX2VudW1zLmgiCisjaW5jbHVkZSAibXJzX2FzX2ludGVyX2NvcmVfc3RydWN0LmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAiZ2xvYmFsX3R5cGUuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX3N0cnVjdC5oIgorI2luY2x1ZGUgInBzX3B1YmxpY19lbnVtLmgiCisKKyNkZWZpbmUgQUZSX0ZSRVFfTUFYX05VTSA4CisjZGVmaW5lIE1BWF9OVU1fTVVMVElfTUNDIDYKKworI2lmZGVmIF9fTlJfUkFUX18KKyNkZWZpbmUgRVVUUkFfTVVMVElfQkFORFNfTUFYX05VTSAoOCkKKyNkZWZpbmUgRVVUUkFfTlNfUE1BWF9MSVNUX01BWF9OVU0gKDgpCisjZW5kaWYgLyogX19OUl9SQVRfXyAqLworCisjZGVmaW5lIE1SU19OUkFTX0VVVFJBTl9GRUFUVVJFX1NFVFNfTUFYX05VTSAoMjU2KSAvLyAzNi4zMzEgbWF4RmVhdHVyZVNldHMtcjE1CisjZGVmaW5lIE1SU19NQVhfQUZSX0ZSRVFfTlVNIDY0CisjZGVmaW5lIE1SU19BRlJfVE9fNEdfVElNRVIgMjAwMCAgLy9tc2VjCisjZGVmaW5lIE1SU19BRlJfVE9fNUdfVElNRVIgMjAwMCAgLy9tc2VjCisKKyNkZWZpbmUgQVNfUElOR1BPTkdfVEhSRVNIT0xEX01BWCA4IC8qIGlmIElSQVQgQ2hhbmdlIGZvdW50IGV4Y2VlZHMgdGhyZXNob2xkLCBQSU5HUE9ORyBjb25maXJtZWQgKi8KKworI2RlZmluZSBNUlNfTUFYX0NDX05VTSA4CisjZGVmaW5lIE1BWF9OVU1fVkFMSURfTUNDX1JFR0lPTlMgMjIKKyNkZWZpbmUgTUFYX05VTV9WQUxJRF9NQ0NfUkVHSU9OX1BMTU5TIDU1CisjZGVmaW5lIE5WUkFNX0VGX0FTX0dTTV9CQU5EX1NFVFRJTkdfU0laRSAgICAgICAxCisjZGVmaW5lIE5WUkFNX0VGX0FTX0ZERF9VTVRTX0JBTkRfU0VUVElOR19TSVpFICA0CisjZGVmaW5lIE5WUkFNX0VGX0FTX0xURV9CQU5EX1NFVFRJTkdfU0laRSAgICAgIDMyCisKKyNkZWZpbmUgTVJTX0NPTVBJTEVfVElNRV9BU1NFUlQoZSkgKCh2b2lkKXNpemVvZihjaGFyWzEtMiohKGUpXSkpCisKKy8qIE1SUyB1c2VzIHRoaXMgcHJpbWl0aXZlIHRvIGluZm9ybSBBUyBhYm91dCB3aGl0ZSBsaXN0IGNoYW5nZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICBjc2dfd2hpdGVfbGlzdF91cGRhdGVfY2F1c2UgdXBkYXRlX2NhdXNlOworICBrYWxfYm9vbCBhY3NnbF9jaGFuZ2VkOworICBrYWxfYm9vbCBvY3NnbF9jaGFuZ2VkOworfSBtcnNfYXNfY3NnX3doaXRlX2xpc3RfdXBkYXRlX2luZF9zdHJ1Y3Q7CisKKy8qIE1SUyB1c2VzIHRoaXMgcHJpbWl0aXZlIHRvIHN5bmNoIExMQSBzdGF0dXMgd2l0aCBBUyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICAvL2xvd2VyX2xheWVyX2F2YWlsYWJpbGl0eV9lbnVtIGwxX2F2YWlsaWJpbGl0eV9zdGF0dXM7Cit9IG1yc19sb3dlcl9sYXllcl9hdmFpbGFiaWxpdHlfdXBkYXRlX2luZF9zdHJ1Y3Q7CisKKy8qIEdBUyBzeW5jaCBMTEEgc3RhdHVzIHdpdGggTVJTICovCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIGxvd2VyX2xheWVyX2F2YWlsYWJpbGl0eV9lbnVtIGwxX2F2YWlsaWJpbGl0eV9zdGF0dXM7Cit9IG1yc19nYXNfbG93ZXJfbGF5ZXJfYXZhaWxhYmlsaXR5X3VwZGF0ZV9yZXFfc3RydWN0OworCisvKiBVQVMgc3luY2ggTExBIHN0YXR1cyB3aXRoIE1SUyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICBsb3dlcl9sYXllcl9hdmFpbGFiaWxpdHlfZW51bSBsMV9hdmFpbGliaWxpdHlfc3RhdHVzOworfSBtcnNfdWFzX2xvd2VyX2xheWVyX2F2YWlsYWJpbGl0eV91cGRhdGVfcmVxX3N0cnVjdDsKKworLyogRUFTIHN5bmNoIExMQSBzdGF0dXMgd2l0aCBNUlMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKyAgbG93ZXJfbGF5ZXJfYXZhaWxhYmlsaXR5X2VudW0gbDFfYXZhaWxpYmlsaXR5X3N0YXR1czsKK30gbXJzX2Vhc19sb3dlcl9sYXllcl9hdmFpbGFiaWxpdHlfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKKy8qIEluZm9ybSBHQVMgYmFuZCBzZXR0aW5nIGlzIGNoYW5nZWQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKK30gbXJzX2dhc19iYW5kX3NldHRpbmdfdXBkYXRlX2luZF9zdHJ1Y3Q7CisKKy8qIEluZm9ybSBVQVMgYmFuZCBzZXR0aW5nIGlzIGNoYW5nZWQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKK30gbXJzX3Vhc19iYW5kX3NldHRpbmdfdXBkYXRlX2luZF9zdHJ1Y3Q7CisKKy8qIEluZm9ybSBFQVMgYmFuZCBzZXR0aW5nIGlzIGNoYW5nZWQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKK30gbXJzX2Vhc19iYW5kX3NldHRpbmdfdXBkYXRlX2luZF9zdHJ1Y3Q7CisKKy8qIEluZm9ybSBFQVMgYmFuZCBjb250cmFsICovCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIGthbF91aW50MTYgYmFuZDsKKyAgZWFzX2JhbmRfY29udHJvbF9lbnVtIGN0cmxfaW5mbzsKK30gbXJzX2Vhc19iYW5kX2N0cmxfaW5kX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCBtcnNfcGxtbl9pZAoreworICAga2FsX3VpbnQ4IG1jYzE7CisgICBrYWxfdWludDggbWNjMjsKKyAgIGthbF91aW50OCBtY2MzOworICAga2FsX3VpbnQ4IG1uYzE7CisgICBrYWxfdWludDggbW5jMjsKKyAgIGthbF91aW50OCBtbmMzOworfSBtcnNfcGxtbl9pZDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggICAgcGxtbl9pZF9sZW47CisgICAgbXJzX3BsbW5faWQgIHBsbW5faWRbTUFYX05VTV9NVUxUSV9QTE1OXTsKK30gbXJzX3BsbW5faWRfbGlzdDsKKworLyogVXNlZCB0byBzdG9yZSBFSFBMTU4gSUQgTGlzdCBpbiBTSU0gY2FyZCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggICAgcGxtbl9pZF9sZW47CisgICAgbXJzX3BsbW5faWQgIHBsbW5faWRbTUQxX01BWF9OVU1fSFBMTU5dOworfSBtcnNfZWhwbG1uX2lkX2xpc3Q7CisKKy8qIE1SUyBub3RpZmllcyBVQVMgb2YgdGhlIHRyYW5zbWlzc2lvbiBvZiBJTlRFUiBSQVQgSEFORE9WRVIgSU5GTyBpbiBHU00gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSCit9IG1yc191YXNfdW10c19ob19pbmZvX3JzcF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKK30gbXJzX2w0Y19jYXBhYmlsaXR5X3VwZGF0ZV9pbmRfc3RydWN0OworCisvL05SIGZyZXEgbmZvIGZvciBBRlIKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgIHBlcmlvZGljaXR5OworICAgIGthbF91aW50OCAgICBvZmZzZXQ7Cit9bXJzX3NzYl9tdGNfcGVyaW9kaWNpdHlfYW5kX29mZnNldF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgbXJzX3NzYl9tdGNfcGVyaW9kaWNpdHlfYW5kX29mZnNldF9zdHJ1Y3QgICAgcGVyaW9kaWNpdHlfYW5kX29mZnNldDsKKyAgICBrYWxfdWludDggICAgZHVyYXRpb247Cit9bXJzX3NzYl9tdGNfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIE5SQVJGQ04gICAgICAgICAgICAgICAgICAgICBmcmVxOworICAgIG1yc19ucl9zY3NfZW51bSAgICAgICAgICAgICBzc2Jfc2NzOworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICBpc19zc2JfbXRjX3ZhbGlkOworICAgIG1yc19zc2JfbXRjX3N0cnVjdCAgICAgICAgICBzc2JfbXRjOworfSBtcnNfYWZyX25yX2ZyZXFfaW5mb19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgZnJlcV9udW07CisgICAgbXJzX2Fmcl9ucl9mcmVxX2luZm9fc3RydWN0ICAgZnJlcV9pbmZvW01SU19NQVhfQUZSX0ZSRVFfTlVNXTsKK30gbXJzX2Fmcl9ucl9mcmVxX2xpc3Rfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgICAgICAgICAgIG9uZ29pbmdfc3RhdHVzOworICAgIE1SU19SQVRfTU9ERV9UWVBFICAgICAgIGFmcl90YXJnZXRfcmF0OworICAgIG1yc19hZnJfc3RyaWN0X2NvbnN0cmFpbl9zdGF0ZSBzdHJpY3RfY29uc3RyYWluX3N0YXRlOworfSBtcnNfYWZyX3NlcnZpY2Vfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICBldmVyX3RyaWdnZXI7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgIHByZV9jb25kX3JlcWQ7CisgICAgTVJTX1JBVF9NT0RFX1RZUEUgICAgICAgIGFmcl9zcmNfcmF0OworfSBtcnNfYWZyX3ByZV9jb25kX3Byb2Nfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgLyogW2IxOiBub3QgdXNlZF0gW2IyOiByZWR1Y2UgbGF1LCBlbmFibGVdIFtiMzogZGVmZXIgc2kxMywgZW5hYmxlXSBbYjQ6IDJnIGFmciwgZW5hYmxlXSBbYjU6IDNnIGFmciwgZW5hYmxlXSAqLworICAgLyogW2I2OiBDU0ZCXzJHX0ZERF9lQ1NGQiwgZGlzYWJsZV0gW2I3OiBDU0ZCXzNHX0ZERF9lQ1NGQiwgZGlzYWJsZV0gW2I4OiBDU0ZCXzJHX1RERF9lQ1NGQiwgZW5hYmxlXSBbYjk6IENTRkJfM0dfVEREX2VDU0ZCLCBkaXNhYmxlXSAqLworICAgLyogW2IxMCB+IGIxNjogcmVzZXJ2ZWRdICovCisgICBrYWxfdWludDE2ICAgICAgIGNzZmJfZW5oYW5jZW1lbnRfaXRlbV9zdGF0dXM7CisgICAvKiBbYjE6IG5vdCB1c2VkXSBbYjI6IHJlZHVjZSBsYXUsIGRpc2FibGVdIFtiMzogZGVmZXIgc2kxMywgZW5hYmxlXSBbYjQ6IDJnIGFmciwgZGlzYWJsZV0gW2I1OiAzZyBhZnIsIGRpc2FibGVdICovCisgICAvKiBbYjY6IENTRkJfMkdfRkREX2VDU0ZCLCBkaXNhYmxlXSBbYjc6IENTRkJfM0dfRkREX2VDU0ZCLCBkaXNhYmxlXSBbYjg6IENTRkJfMkdfVEREX2VDU0ZCLCBkaXNhYmxlXSBbYjk6IENTRkJfM0dfVEREX2VDU0ZCLCBkaXNhYmxlXSAqLworICAgLyogW2IxMCB+IGIxNjogcmVzZXJ2ZWRdICovCisgICBrYWxfdWludDE2ICAgICAgIGNzZmJfZW5oYW5jZW1lbnRfaXRlbV9zdGF0dXNfaW5fdGVzdF9tb2RlOyAKKyAgIGthbF9ib29sICAgICAgICBpc19jc2ZiX29uZ29pbmc7CisgICBrYWxfdWludDggICAgICAgbnVtOworICAgRUFSRkNOICAgICAgICAgIGFmcl9saXN0W0FGUl9GUkVRX01BWF9OVU1dOworfSBtcnNfYWZyX21haW5fc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgLyogW2IxOiAyZzQgYWZyLCBlbmFibGVdIFtiMjogM2c0IGFmciwgZW5hYmxlLCBlbmFibGVdIFtiMzogMmc1IGZkZCBhZnIsIGVuYWJsZV0gW2I0OiAyZzUgdGRkIGFmciwgZW5hYmxlXSBbYjU6IDNnNSBmZGQgYWZyLCBlbmFibGVdICovCisgICAvKiBbYjY6IDNnNSB0ZGQgYWZyLCBkaXNhYmxlXSBbYjc6IDRnNSBmZGQgYWZyLCBkaXNhYmxlXSAqLworICAgLyogW2I4IH4gYjE2OiByZXNlcnZlZF0gKi8KKyAgIGthbF91aW50MTYgICAgICAgYWZyX2VuaGFuY2VtZW50X2l0ZW1fc3RhdHVzOworICAgLyogW2IxOiAyZzQgYWZyLCBlbmFibGVdIFtiMjogM2c0IGFmciwgZW5hYmxlLCBlbmFibGVdIFtiMzogMmc1IGZkZCBhZnIsIGVuYWJsZV0gW2I0OiAyZzUgdGRkIGFmciwgZW5hYmxlXSBbYjU6IDNnNSBmZGQgYWZyLCBlbmFibGVdICovCisgICAvKiBbYjY6IDNnNSB0ZGQgYWZyLCBkaXNhYmxlXSBbYjc6IDRnNSBmZGQgYWZyLCBkaXNhYmxlXSAqLworICAgLyogW2I4IH4gYjE2OiByZXNlcnZlZF0gKi8KKyAgIGthbF91aW50MTYgICAgICAgYWZyX2VuaGFuY2VtZW50X2l0ZW1fc3RhdHVzX2luX3Rlc3RfbW9kZTsKKworICAgbXJzX2Fmcl9zZXJ2aWNlX3N0cnVjdCAgICAgICBzZXJ2aWNlX3RibFtBRlJfU1JWQ19NQVhfTlVNXTsKKyAgIG1yc19hZnJfcHJlX2NvbmRfcHJvY19zdHJ1Y3QgcHJlX2NvbmRfcHJvY190YmxbQUZSX1BST0NfTUFYX05VTV07CisKKyNpZmRlZiBfX05SX1JBVF9fCisgICBtcnNfYWZyX25yX2ZyZXFfbGlzdF9zdHJ1Y3QgYWZyX25yX3ByaW9yaXR5X2ZyZXFfbGlzdDsKKyNlbmRpZiAvKiBfX05SX1JBVF9fICovCisgICBtcnNfYWZyX25yX2ZyZXFfbGlzdF9zdHJ1Y3QgYWZyX25yX2ZyZXFfbGlzdDsKKyAgIG1yc19hZnJfbnJfZnJlcV9pbmZvX3N0cnVjdCBucl9zZXJ2aW5nX2ZyZXFfaW5mbzsKKyAgIGthbF91aW50MzIgYWZyX3RvXzRnX3RpbWVyOyAgLy9tc2VjCisgICBrYWxfdWludDMyIGFmcl90b181Z190aW1lcjsgIC8vbXNlYyAgIAorfSBtcnNfYWZyX25yX21haW5fc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbXJzX3BsbW5faWQgcGxtbl9pZDsKKyAgICBrYWxfdWludDggbGFfY29kZVsyXTsKK30gbXJzX2xhaV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiBhcmZjbjsKKyAgICBrYWxfdWludDggYnNpYzsKK31tcnNfZ2FzX2NlbGxfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIG1yc19nYXNfY2VsbF9zdHJ1Y3QgZ2FzX2NlbGw7CisgICAgbXJzX2xhaV9zdHJ1Y3QgbGFpOworICAgIG1yc19nYXNfZWNzZmJfY2FsbF9zdGF0dXNfZW51bSBlY3NmYl9jYWxsX3N0YXR1czsKK31tcnNfZ2FzX2NlbGxfaW5mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2IHVhcmZjbjsKKyAgICBrYWxfdWludDE2IHBzYzsKK31tcnNfdWFzX2NlbGxfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgbXJzX3Vhc19jZWxsX3N0cnVjdCB1YXNfY2VsbDsKKyAgIG1yc19sYWlfc3RydWN0IGxhaTsKK31tcnNfdWFzX2NlbGxfaW5mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBFQVJGQ04gZWFyZmNuOworICAgIGthbF91aW50MTYgcGNpOworfW1yc19lYXNfY2VsbF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgIHZhbGlkOworICAgIE1SU19SQVRfTU9ERV9UWVBFICAgcmF0OworICAgIG1yc19wbG1uX2lkICAgICAgICAgcGxtbl9pZDsKKyAgICBrYWxfdWludDE2ICAgICAgICAgIGxhY19vcl90YWM7CisgICAga2FsX3VpbnQzMiAgICAgICAgICBjZWxsX2lkOworICAgIGthbF91aW50MzIgICAgICAgICAgYXJmY25fb3JfdWFyZmNuX29yX2VhcmZjbjsKKyAgICBrYWxfdWludDE2ICAgICAgICAgIGJzaWNfb3JfcHNjX29yX3BjaTsKKyAgICBrYWxfaW50MTYgICAgICAgICAgIHJlcG9ydF9vZmZzZXRfZm9yX3NlcnZfaW5fYmxhY2tfbGlzdDsgLyogc2VydmluZyBpcyBhIGJsYWNrIGNlbGwsIHVuaXQ6ZGJtICovCisgICAga2FsX2ludDE2ICAgICAgICAgICByZXBvcnRfb2Zmc2V0X2Zvcl9uY19pbl9ibGFja19saXN0OyAgIC8qIG5laWdoYm9yIGlzIGEgYmxhY2sgY2VsbCwgdW5pdDpkYm0gKi8KK30gbXJzX2FzX2JsYWNrX2NlbGxfc3RydWN0OworCisvKiBpbmZvcm0geEFTIGJsYWNrIGNlbGwgbGlzdCBhZGRlZC9jbGVhcmVkLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorfSBtcnNfdWFzX2FkZF9ibGFja19jZWxsX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKK30gbXJzX2dhc19hZGRfYmxhY2tfY2VsbF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCit9IG1yc191YXNfY2xlYXJfYmxhY2tfY2VsbF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCit9IG1yc19nYXNfY2xlYXJfYmxhY2tfY2VsbF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBtcnNfbWNjX2lkCit7CisgICBrYWxfdWludDggbWNjMTsKKyAgIGthbF91aW50OCBtY2MyOworICAga2FsX3VpbnQ4IG1jYzM7Cit9IG1yc19tY2NfaWQ7CisKKy8qIEFTIHVzZSB0aGlzIHN0cnVjdCB0byBnZXQgTUNDIGZyb20gTVJTICovCit0eXBlZGVmIHN0cnVjdCBtcnNfYXNfbWNjX3N0cnVjdAoreworICAgIGthbF91aW50OCBtcnNfYXNfbWNjX2NvdW50OworICAgIG1yc19tY2NfaWQgbXVsdGlfbWNjX2lkW01BWF9OVU1fTVVMVElfTUNDXTsKK30gbXJzX2FzX21jY19zdHJ1Y3Q7CisKKy8qIE1SUyB1c2UgdGhpcyBzdHJ1Y3QgdG8gc2V0IGFuZCBzYXZlIE1DQyBmcm9tIE5BUyAqLwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAga2FsX3VpbnQ4IG11bHRpX3BsbW5fY291bnQ7CisgICAgbXJzX3BsbW5faWQgbXVsdGlfcGxtbl9pZFtNQVhfTlVNX01VTFRJX1BMTU5dOworfSBtcnNfbmFzX21jY19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyogRmFzdCBNb2RlIFN3aXRjaCwgcmVjb3JkIHRoZSBsYXRlc3Qgc2VydmluZyBjZWxsJ3MgZXNzZW50aWFsIFNJCisgICAgICAgZm9yIGZhc3QgY2FtcCBvbiBmb3IgRkREL1RERCBtb2RlIHN3aXRjaC4gKi8KKyAgICBtcnNfZ2FzX2Zhc3RfbW9kZV9zd2l0Y2hfc3RhdHVzX2VudW0gZmFzdF9tb2RlX3N3aXRjaF9zdGF0dXM7CisgICAga2FsX3VpbnQ4IGJzaWM7CisgICAga2FsX3VpbnQxNiBhcmZjbjsKKyAgICBwbG1uX2lkX3N0cnVjdCBwbG1uX2lkOworICAgIGthbF91aW50OCBzaV9yYXdfZGF0YV92YWxpZF9iaXRtYXA7CisgICAga2FsX3VpbnQ4IHNpMV9yYXdfZGF0YVtHQVNfU0lfUkFXX0RBVEFfTEVOXTsKKyAgICBrYWxfdWludDggc2kyX3Jhd19kYXRhW0dBU19TSV9SQVdfREFUQV9MRU5dOworICAgIGthbF91aW50OCBzaTJiaXNfcmF3X2RhdGFbR0FTX1NJX1JBV19EQVRBX0xFTl07CisgICAga2FsX3VpbnQ4IHNpM19yYXdfZGF0YVtHQVNfU0lfUkFXX0RBVEFfTEVOXTsKKyAgICBrYWxfdWludDggc2k0X3Jhd19kYXRhW0dBU19TSV9SQVdfREFUQV9MRU5dOworI2lmZGVmIF9fUFNfU0VSVklDRV9fCisgICAga2FsX3VpbnQ4IHNpMTNfcmF3X2RhdGFbR0FTX1NJX1JBV19EQVRBX0xFTl07CisjZW5kaWYgLyogX19QU19TRVJWSUNFX18gKi8KK30gbXJzX2dhc19zaGFyZWRfaW5mb19zdHJ1Y3Q7CisKKy8qIE1SUyB1c2UgdGhpcyBzdHJ1Y3QgdG8gc2V0IGFuZCBnZXQgUExNTiBzdGF0dXMgZnJvbSBOQVMKKyAqIGlzX3JvYW1pbmc6IGN1cnJlbnQgUExNTiBpcyByb2FtaW5nIG9yIG5vdAorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sIGlzX3JvYW1pbmc7Cit9IG1yc19uYXNfcGxtbl9pbmZvX3N0cnVjdDsKKworI2lmZGVmIF9fR0FTX1NUT1JFRF9TSV9GRUFUX18KK3R5cGVkZWYgc3RydWN0IAoreworICAgIGthbF9ib29sICAgICB2YWxpZDsKKwkvKiBSUk1fQkFfUk9XX0RBVEFfU0laRSAqLworICAgIGthbF91aW50OCAgICBiYV9yYXdfZGF0YVsxNl07CisgICAga2FsX3VpbnQ4ICAgIGNvdW50OworICAgIGthbF91aW50OCAgICByZXN0W1JSTV9NQVhfU0kyVEVSX0lOU1RBTkNFU11bUlJNX1NJMlRFUl9SRVNUX0xFTl07Cit9cnJtX3NpMnRlcl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAga2FsX2Jvb2wgICAgIHZhbGlkOworICAga2FsX3VpbnQ4ICAgIGNvdW50OworICAga2FsX3VpbnQ4ICAgIHJlc3RbUlJNX01BWF9TSTJRVUFSVEVSX0lOU1RBTkNFU11bUlJNX1NJMlFVQVJURVJfUkVTVF9MRU5dOworfXJybV9zaTJxdWFydGVyX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAga2FsX2Jvb2wgICAgdmFsaWQ7CisgICAga2FsX2Jvb2wgICAgZXNzZW50aWFsX3NpX3ZhbGlkOworICAgIGthbF91aW50MzIgIHN5c3RlbV90aWNrOworICAgIGthbF91aW50MTYgIHN0b3JlZFNJX2FyZmNuOworICAgIGthbF91aW50OCAgIHN0b3JlZFNJX2JzaWM7CisgICAga2FsX3VpbnQ4ICAgc2lfcmF3X2RhdGFfYml0bWFwOworICAgIGthbF91aW50OCAgIHNpMV9kYXRhWzIxXTsgCisgICAga2FsX3VpbnQ4ICAgc2kyX2RhdGFbMjFdOworICAgIGthbF91aW50OCAgIHNpMmJpc19kYXRhWzIxXTsKKyAgICBrYWxfdWludDggICBzaTNfZGF0YVsyMV07CisgICAga2FsX3VpbnQ4ICAgc2k0X2RhdGFbMjFdOworICAgIGthbF91aW50OCAgIHNpMTNfZGF0YVsyMV07CisgICAgcnJtX3NpMnRlcl9zdHJ1Y3QgICAgICAgIHNpMnRlcjsKKyAgICBycm1fc2kycXVhcnRlcl9zdHJ1Y3QgICAgc2kycXVhcnRlcjsgCit9IHJybV9nc21fc3RvcmVkU0lfc3RydWN0OworCisjZW5kaWYKKworI2lmZGVmIF9fTlJfUkFUX18KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgICBhZGRpdGlvbmFsX3BtYXhfdmFsaWQ7CisgICAga2FsX2ludDggICBhZGRpdGlvbmFsX3BtYXg7CisgICAga2FsX2Jvb2wgICBhZGRpdGlvbmFsX3NwZWN0cnVtX2VtaXNzaW9uX3ZhbGlkOworICAgIGthbF91aW50MTYgYWRkaXRpb25hbF9zcGVjdHJ1bV9lbWlzc2lvbjsKK30gZXV0cmFfbnNfcG1heF92YWx1ZV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IGV1dHJhX25zX3BtYXhfbGlzdF9sZW47CisgICAgZXV0cmFfbnNfcG1heF92YWx1ZV9zdHJ1Y3QgZXV0cmFfbnNfcG1heF9saXN0W0VVVFJBX05TX1BNQVhfTElTVF9NQVhfTlVNXTsKK30gZXV0cmFfbnNfcG1heF9saXN0X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2IGZyZXFfYmFuZF9pbmRpY2F0b3JfZXV0cmE7CisgICAgZXV0cmFfbnNfcG1heF9saXN0X3N0cnVjdCBuc19wbWF4X2xpc3Q7Cit9IGV1dHJhX211bHRpYmFuZGluZm9fc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgZXV0cmFfbXVsdGliYW5kaW5mb19saXN0X2xlbjsKKyAgICBldXRyYV9tdWx0aWJhbmRpbmZvX3N0cnVjdCBldXRyYV9tdWx0aWJhbmRpbmZvX2xpc3RbRVVUUkFfTVVMVElfQkFORFNfTUFYX05VTV07Cit9IGV1dHJhX211bHRpYmFuZGluZm9fbGlzdF9zdHJ1Y3Q7CisjZW5kaWYgLyogX19OUl9SQVRfXyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4ICpvY3Q7CisgICAga2FsX3VpbnQxNiBvY3RfbGVuOworfSBtcnNfbnJhc19vY3RldF9zdHJpbmdfc3RydWN0OworCisvKioKKyAqIFN0cnVjdHVyZSBmb3IgRVVUUkFOIGZlYXR1cmUgc2V0IElEcy4gSURzIGFyZSBpbiB0aGUgb3JkZXIgdGhleSBzaGFsbCBiZQorICogcmVwb3J0ZWQgdG8gdGhlIG5ldHdvcmsuIElEIHZhbHVlcyBhcmUgSURzIG9mIGZlYXR1cmUgc2V0cyByZWFkIGZyb20gTDEuCisgKiBmc19kbF9udW0gTnVtYmVyIG9mIElEcyBpbiBmc19kbF9pZCBsaXN0CisgKiBmc19kbF9pZCBMaXN0IG9mIEVVVFJBTiBETCBmZWF0dXJlIHNldCBJRHMKKyAqIGZzX3VsX251bSBOdW1iZXIgb2YgSURzIGluIGZzX3VsX2lkIGxpc3QKKyAqIGZzX3VsX2lkIExpc3Qgb2YgRVVUUkFOIFVMIGZlYXR1cmUgc2V0IElEcworICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgIGZzX2RsX251bTsKKyAgICBrYWxfdWludDE2ICBmc19kbF9pZFtNUlNfTlJBU19FVVRSQU5fRkVBVFVSRV9TRVRTX01BWF9OVU1dOworICAgIGthbF91aW50MTYgIGZzX3VsX251bTsKKyAgICBrYWxfdWludDE2ICBmc191bF9pZFtNUlNfTlJBU19FVVRSQU5fRkVBVFVSRV9TRVRTX01BWF9OVU1dOworfSBtcnNfbnJhc19ldXRyYW5fZmVhdHVyZV9zZXRfaWRzX3N0cnVjdDsKKworLyogcmVjb3JkIHN5c3RpbWUgb2YgUkFUX0NIQU5HRV9DTkYoc3VjY2VzKSwKKyAgIER1cmluZyB0aW1ld2luZG93LCBpZiB0aGUgcmF0IGNoYW5nZSByZWFjaGVzIHNwZWNpZmljIHRpbWVzLCBQSU5HUE9ORyBjb25maXJtZWQuCisgICB0aGUgTUFYIHJlY29yZCBmb3IgUkFUIGNoYW5nZSBpcyBBU19QSU5HUE9OR19USFJFU0hPTERfTUFYLCBidXQgdXNlciBjYW4gY3VzdG9taXplIHRoZWlyIFBJTkdQT05HIHNjZW5hcmlvIHdpdGggY291bnQgbGVzcyB0aGFuIEFTX1BJTkdQT05HX1RIUkVTSE9MRF9NQVgKKyovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MzIgcmF0X2NoYW5nZV90aW1lW0FTX1BJTkdQT05HX1RIUkVTSE9MRF9NQVhdOworfSBtcnNfaXJhdF9jaGFuZ2VfaW5mb19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgcmF0X2VudW0gcmF0OyAgICAgICAgICAgICAvLyBDdXJyZW50IGFjdGl2ZSByYXQKKyAgICBrYWxfdWludDggY2NfaWR4OyAgICAgICAgIC8vIElkbGUgbW9kZTogYWx3YXlzIDAuIENvbm5lY3RlZCBtb2RlOiBOVyBjb25maWd1cmVkIENDIGlkeC4KKyAgICBrYWxfdWludDMyIGZyZXFfMWtoejsgICAgIC8vIENvcnJlc3BvbmRpbmcgUGNlbGwvU2NlbGwgZnJlcXVlbmN5IGluIDFraHouCisgICAga2FsX3VpbnQzMiBid18xa2h6OyAgICAgICAvLyBDb3JyZXNwb25kaW5nIFBjZWxsL1NjZWxsIEJXIGluIDFraHoKKyAgICBrYWxfdWludDE2IGJhbmQ7ICAgICAgICAgIC8vIFVuaXZlcnNhbCBiYW5kCisgICAga2FsX3VpbnQ4IG1pbW9fbGF5ZXI7ICAgICAvLyAweEZGIGlmIG5vIHZhbGlkIGluZm8KK30gbXJzX2NvbW1vbl9jY19pbmZvX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBwcm90b2NvbF9pZF9lbnVtIHBzX2lkOworICAgIGthbF91aW50OCBkbF9jY19udW07IC8vIElkbGUgbW9kZTogYWx3YXlzIDEuIENvbm5lY3RlZCBtb2RlOiBOVyBjb25maWd1cmVkIERMIGNjIG51bS4KKyAgICBtcnNfY29tbW9uX2NjX2luZm9fc3RydWN0IGRsX2NjX2luZm9bTVJTX01BWF9DQ19OVU1dOworICAgIGthbF91aW50OCB1bF9jY19udW07IC8vIElkbGUgbW9kZTogYWx3YXlzIDEgb3IgMCBpZiBVTCBpbmZvIGlzIG5vdCBhdmFpbGFibGUuIENvbm5lY3RlZCBtb2RlOiBOVyBjb25maWd1cmVkIFVMIGNjIG51bS4KKyAgICBtcnNfY29tbW9uX2NjX2luZm9fc3RydWN0IHVsX2NjX2luZm9bTVJTX01BWF9DQ19OVU1dOworfSBtcnNfY2VsbF9jY19pbmZvX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggZ3NtX2JhbmQ7CisgICAga2FsX3VpbnQ4IGZkZF91bXRzX2JhbmRbTlZSQU1fRUZfQVNfRkREX1VNVFNfQkFORF9TRVRUSU5HX1NJWkVdOworICAgIGthbF91aW50OCBsdGVfYmFuZFtOVlJBTV9FRl9BU19MVEVfQkFORF9TRVRUSU5HX1NJWkVdOworfSBtcnNfbWNjX2JhbmRfc2V0dGluZ19wZXJfcmVnaW9uX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggIG1jY19yZWdpb25fbnVtYmVyOworICAgIGthbF91aW50OCAgbm9fb2ZfcGxtbnM7CisgICAgbXJzX3BsbW5faWQgIG1jY19yZWdpb25fcGxtbnNbTUFYX05VTV9WQUxJRF9NQ0NfUkVHSU9OX1BMTU5TXTsKKyAgICBtcnNfbWNjX2JhbmRfc2V0dGluZ19wZXJfcmVnaW9uX3N0cnVjdCBiYW5kX3NldHRpbmc7Cit9IG1yc19tY2NfcGxtbl9saXN0X3dpdGhpbl9yZWdpb25fcmVjb3JkX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCBub19vZl9tY2NfcmVnaW9uczsKKyAgICBtcnNfbWNjX3BsbW5fbGlzdF93aXRoaW5fcmVnaW9uX3JlY29yZF9zdHJ1Y3QgIHNldHRpbmdbTUFYX05VTV9WQUxJRF9NQ0NfUkVHSU9OU107ICAgIAorfSBtcnNfbWNjX3JlZ2lvbl9iYW5kX3NldHRpbmdfcmVjb3JkX3N0cnVjdDsKKworI2VuZGlmIC8qIF9NUlNfQVNfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfY2FzX2NhcGFiaWxpdHkuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfY2FzX2NhcGFiaWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTA2NTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19jYXNfY2FwYWJpbGl0eS5oCkBAIC0wLDAgKzEsMTY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTYKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIiJNRURJQVRFSyBTT0ZUV0FSRSIiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICIiQVMtSVMiIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TS0FMX1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgbXJzX2Nhc19jYXBhYmlsaXR5LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgTXVsdGltb2RlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICBUaGUgQzJLIEFTIGNhcGFiaWxpdHkgc3RvcmVkIGluIE1SUyBjb250ZXh0LgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICRMb2ckCisgKgorICogMDcgMDMgMjAxOCB5YW5mZW5nLnh1CisgKiBbTU9MWTAwMzM1NjYwXSChvkJEMDkxob+hvsr9vt3N+MLnob+hvsrQs6G3tMChob+/zbunyta7+sq508PK/b7dzfjC58nPcXG74bP2z9bBrL3Ts6zKsbrN0+/S9M2ou7DR08qxzsrM4qGjCisgKgorICogMTIgMDkgMjAxNiBndWFuZ2xvbmcud3UKKyAqIFtNT0xZMDAyMTE0ODJdIFs2MjkzXVtDMksgQVMgcmUtYXJjaCBpdGVtXSBBZGQgQVBJIGluIE1SUyBmb3IgY2hlY2tpbmcgQzJLIHN1cHBvcnRlZCBiYW5kCisgKiAJCisgKiAJVXBkYXRlZCBDMksgZGVmYXVsdCBzdXBwb3J0IGJhbmQgZm9yIFVUIFRFU1QKKyAqCisgKiAxMSAxMCAyMDE2IGd1YW5nbG9uZy53dQorICogW01PTFkwMDIxMTQ4Ml0gWzYyOTNdW0MySyBBUyByZS1hcmNoIGl0ZW1dIEFkZCBBUEkgaW4gTVJTIGZvciBjaGVja2luZyBDMksgc3VwcG9ydGVkIGJhbmQKKyAqIAkJbW9kaWZlZCBjYXMgY2FwYWJpbGl0eSBzdHJjdWN0dXJlIG5hbWUuCisgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfTVJTX0NBU19DQVBBQklMSVRZX0gKKyNkZWZpbmUgX01SU19DQVNfQ0FQQUJJTElUWV9ICisKKyNpbmNsdWRlICJtcnNfYXNfaW50ZXJfY29yZV9kZWYuaCIKKyNpbmNsdWRlICJtcnNfYXNfZW51bXMuaCIKKyNpbmNsdWRlICJtcnNfYXNfc3RydWN0LmgiCisjaW5jbHVkZSAicmVnX2Jhc2UuaCIKKyNpbmNsdWRlICJnbG9iYWxfdHlwZS5oIgorI2luY2x1ZGUgIm1yc19jb21tb25fY2FwYWJpbGl0eS5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1hY3JvcyBXaXRob3V0IFBhcmFtZXRlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBVTklUX1RFU1QKKy8qc3VwcG9ydGVkIGJhbmQgMCAsMSwgNCwgNiBhbmQgYmFuZCAxMCBmb3IgVVQgdGVzdCovCisjZGVmaW5lIEMyS19VVF9URVNUX1NVUFBPUlRFRF9CQU5EX01BU0sgICAgIDB4MDAwMDA0NTMKKyNlbmRpZgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYWNyb3MgV2l0aCBQYXJhbWV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIG1yc19nZXRfY2FzX2JhbmRfYml0bWFzayhjYXNfYmFuZCkgICgweDAwMDEgPDwgKGNhc19iYW5kKSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtcyB3aXRob3V0IHRhZ3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUeXBlIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgICBDQVNfQkFORF9DTEFTU18wID0gMCwgICAvKiA4MDAgTUh6IGNlbGx1bGFyIGJhbmQgICAgICAgKi8KKyAgICBDQVNfQkFORF9DTEFTU18xLCAgICAgICAvKiAxLjggdG8gMi4wIEdIeiBiYW5kICAgICAqLworICAgIENBU19CQU5EX0NMQVNTXzIsICAgICAgIC8qIDg3MiB0byA5NjAgTUh6IFRBQ1MgYmFuZCAgICAqLworICAgIENBU19CQU5EX0NMQVNTXzMsICAgICAgIC8qIDgzMiB0byA5MjUgTUh6IEpUQUNTIGJhbmQgICAqLworICAgIENBU19CQU5EX0NMQVNTXzQsICAgICAgIC8qIDEuNzUgdG8gMS44NyBHSHogS29yZWFuIFBDUyAqLworICAgIENBU19CQU5EX0NMQVNTXzUsICAgICAgIC8qIDQ1MCBNSHogTk1UIGJhbmQgICAgICAgICAgICAqLworICAgIENBU19CQU5EX0NMQVNTXzYsICAgICAgIC8qIDIgR0h6IElNVC0yMDAwIGJhbmQgICAgICAgICAqLworICAgIENBU19CQU5EX0NMQVNTXzcsICAgICAgIC8qIDcwMCBNSHogYmFuZCAgICAgICAgICAgICAgICAqLworICAgIENBU19CQU5EX0NMQVNTXzgsICAgICAgIC8qIDE4MDAgTUh6IGJhbmQgICAgICAgICAgICAgICAqLworICAgIENBU19CQU5EX0NMQVNTXzksICAgICAgIC8qIDkwMCBNSHogYmFuZCAgICAgICAgICAgICAgICAqLworICAgIENBU19CQU5EX0NMQVNTXzEwLCAgICAgIC8qIFNlY29uZGFyeSA4MDAgTUh6IE5NVCBiYW5kICAqLworICAgIENBU19CQU5EX0NMQVNTXzExLCAgICAgIC8qIDQwMCBNSHogRXVyb3BlYW4gUEFSTSBiYW5kICAqLworICAgIENBU19CQU5EX0NMQVNTXzEyLCAgICAgIC8qIDgwMCBNSHogUEFNUiBiYW5kICAgICAgICAgICAqLworICAgIENBU19CQU5EX0NMQVNTXzEzLCAgICAgIC8qIDIuNSBHSHogSU1ULTIwMDAgICAgICAgICAgICAqLworICAgIENBU19CQU5EX0NMQVNTXzE0LCAgICAgIC8qIFVTIFBDUyAxLjkgR0h6IGJhbmQgICAgICAgICAqLworICAgIENBU19CQU5EX0NMQVNTXzE1LCAgICAgIC8qIEFXUyBiYW5kICAgICAgICAgICAgICAgICAgICAqLworICAgIENBU19CQU5EX0NMQVNTXzE2LCAgICAgIC8qIFVTIDIuNSBHSHogYmFuZCAgICAgICAgICAgICAqLworICAgIENBU19CQU5EX0NMQVNTXzE3LCAgICAgIC8qIFVTIDIuNUdIeiBGb3J3YXJkIExpbmsgT25seSBCYW5kICovCisgICAgQ0FTX0JBTkRfQ0xBU1NfMTgsICAgICAgLyogNzAwIE1IeiBQdWJsaWMgU2FmZXR5IEJhbmQgICovCisgICAgQ0FTX0JBTkRfQ0xBU1NfMTksICAgICAgLyogTG93ZXIgNzAwIE1IeiBCYW5kICovCisgICAgQ0FTX0JBTkRfQ0xBU1NfMjAsICAgICAgLyogTC1CYW5kICovCisgICAgQ0FTX0JBTkRfQ0xBU1NfTUFYLAorICAgIENBU19CQU5EX0NMQVNTX05PVF9VU0VEID0gQ0FTX0JBTkRfQ0xBU1NfTUFYLAorICAgIENBU19CQU5EX0NMQVNTX1VOU1VQUE9SVEVEIC8qIE1VU1QgYmUgRElGRkVSRU5UIHRoYW4gQ0FTX0JBTkRfQ0xBU1NfTUFYIC8gQ0FTX0JBTkRfQ0xBU1NfTk9UX1VTRUQgKi8KK30gY2FzX2JhbmRfZW51bTsKKworI2RlZmluZSBNQVhfQTIxX01TX1NVQlNfSU5GT19MRU4gMzUKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAga2FsX3VpbnQ4IGxlbmd0aDsKKyAga2FsX3VpbnQ4IHN1Yl9pbmZvW01BWF9BMjFfTVNfU1VCU19JTkZPX0xFTl07Cit9IGEyMV9tb2JpbGVfc3ViX2luZm9fc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBrYWxfdWludDMyICBjYXNfcmZfc3VwcG9ydF9iYW5kX2JpdG1hc2s7ICAgIC8qQWxsIFN1cHBvcnQgYmFuZCAgb2YgQzJrIFJGKi8KKyAgICBrYWxfdWludDMyICBjYXNfc3VwcG9ydF9iYW5kX2JpdG1hc2s7ICAgICAgIC8qY29uZmlndXJlZCB0byBhY3RpdmUgYmFuZCAqLworICAgIGEyMV9tb2JpbGVfc3ViX2luZm9fc3RydWN0IGEyMV9jYXA7Cit9Y2FzX2NhcGFiaWxpdHlfY29udGV4dF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVjbGFyYXRpb25zIE9mIEV4cG9ydGVkIEdsb2JhbHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwora2FsX3VpbnQzMiBtcnNfY2FzX2FsbF9yZl9zdXBwb3J0ZWRfYmFuZCh2b2lkKTsKKwora2FsX3VpbnQzMiBtcnNfY2FzX2FsbF9zdXBwb3J0ZWRfYmFuZCh2b2lkKTsKKwora2FsX2Jvb2wgbXJzX2Nhc19pc19yZl9zdXBwb3J0ZWRfYmFuZChrYWxfdWludDggY2FzX2JhbmQpOworCitrYWxfYm9vbCBtcnNfY2FzX2lzX3N1cHBvcnRlZF9iYW5kKGthbF91aW50OCBjYXNfYmFuZCkgOworCit2b2lkIG1yc19jYXNfdXBkYXRlX3JmX3N1cHBvcnRlZF9iYW5kKGthbF91aW50MzIgIHJmX3N1cHBvcnRlZF9iYW5kX21hc2spOworCit2b2lkIG1yc19jYXNfdXBkYXRlX3N1cHBvcnRlZF9iYW5kKGthbF91aW50MzIgIHN1cHBvcnRlZF9iYW5kX21hc2spOworCitrYWxfdWludDggbXJzX2Nhc19nZXRfYTIxX21vYmlsZV9zdWJfaW5mb19sZW5ndGgoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCit2b2lkIG1yc19jYXNfZ2V0X2EyMV9tb2JpbGVfc3ViX2luZm8oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCAqKmEyMV9tb2JpbGVfc3ViX2luZm8pOworCit2b2lkIG1yc19jYXNfc2V0X2EyMV9jYXBfaW5mbyhrYWxfdWludDggbGVuZ3RoLCBrYWxfdWludDggKmEyMV9tb2JpbGVfc3ViX2luZm8pOworCisjZW5kaWYgLyogX01SU19DQVNfQ0FQQUJJTElUWV9IICovCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19jb21tb25fYmFuZF90YWJsZV9wdWJsaWMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfY29tbW9uX2JhbmRfdGFibGVfcHVibGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyN2EwMAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfY29tbW9uX2JhbmRfdGFibGVfcHVibGljLmgKQEAgLTAsMCArMSwxNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgTVJTX0NPTU1PTl9CQU5EX1RBQkxFX1BVQkxJQ19ICisjZGVmaW5lIE1SU19DT01NT05fQkFORF9UQUJMRV9QVUJMSUNfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX3N0cnVjdC5oIgorI2luY2x1ZGUgImwzX2luY19sb2NhbC5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICBNQUNST1MgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogTWF4aW11bSBudW1iZXIgb2YgYmFuZHMgZXhwZWN0ZWQgdG8gYmUgdXNlZCBieSBzcGVjaWZpYyBQTE1OIG9yIE1DQworICogV2hpY2ggbGltaXRzIHRoZSBiYW5kIG51bWJlciBvZiBxdWVyeSByZXN1bHQgCisgKi8KKyNkZWZpbmUgTVJTX01BWF9QTE1OX0JBTkRfTlVNIDMyICAgIC8vIFNoYWxsIGFsaWduIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBOV1NFTCBzZWFyY2hfcmVxdWVzdAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgIFZBUklBQkxFUyAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEZVTkNUSU9OIERFQ0xBUkFUSU9OUyAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQGJyaWVmIFF1ZXJ5IGlmIGEgYmFuZCBpcyBzdXBwb3J0ZWQgYnkgc3BlY2lmaWMgUExNTi9SQVQKKyAqIEBwYXJhbVtpbl0gcGxtbl9pZCBpcyB0aGUgUExNTiBJRCAoTUNDK01OQykgdG8gYmUgcXVlcmllZAorICogQHBhcmFtW2luXSBiYW5kIGlzIHRoZSBiYW5kIG51bWJlciB0byBiZSBxdWVyaWVkCisgKiBAcGFyYW1baW5dIHJhdCBpcyB0aGUgcmFkaW8gYWNjZXNzIHRlY2hub2xvZ3kgdG8gYmUgcXVlcmllZAorICogQHBhcmFtW2luXSBiYW5kIGlzIHRoZSBiYW5kIHRvIGJlIHF1ZXJpZWQKKyAqIEByZXR1cm4gS0FMX1RSVUUgaWYgdGhlIGJhbmQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBQTE1OL1JBVCBzcGVjaWZpZWQ7IEtBTF9GQUxTRSBpZiBub3Qgc3VwcG9ydGVkCisgKi8KK2thbF9ib29sIG1yc19pc19rbm93bl9wbG1uX2JhbmQoY29uc3QgcGxtbl9pZF9zdHJ1Y3QgKnBsbW5faWQsIGthbF91aW50MTYgYmFuZCwgcmF0X2VudW0gcmF0KTsKKworLyoqCisgKiBAYnJpZWYgUXVlcnkgdGhlIGJhbmRzIHN1cHBvcnRlZCBieSBzcGVjaWZpYyBQTE1OL1JBVAorICogQHBhcmFtW2luXSBwbG1uX2lkIGlzIHRoZSBQTE1OIElEIChNQ0MrTU5DKSB0byBiZSBxdWVyaWVkCisgKiBAcGFyYW1baW5dIHJhdCBpcyB0aGUgcmFkaW8gYWNjZXNzIHRlY2hub2xvZ3kgdG8gYmUgcXVlcmllZAorICogQHBhcmFtW291dF0gYmFuZF9udW0gaXMgdGhlIG51bWJlciBvZiBiYW5kcyBzdXBwb3J0ZWQgYnkgdGhlIFBMTU4vUkFUIHNwZWNpZmllZAorICogQHBhcmFtW291dF0gYmFuZF9saXN0IGlzIHRoZSBiYW5kIGxpc3Qgc3VwcG9ydGVkIGJ5IHRoZSBQTE1OL1JBVCBzcGVjaWZpZWQKKyAqLwordm9pZCBtcnNfZ2V0X3BsbW5fc3VwcG9ydF9iYW5kKGNvbnN0IHBsbW5faWRfc3RydWN0ICpwbG1uX2lkLCByYXRfZW51bSByYXQsIGthbF91aW50MzIgKmJhbmRfbnVtLCBrYWxfdWludDE2IGJhbmRfbGlzdFtdKTsKKworLyoqCisgKiBAYnJpZWYgUXVlcnkgdGhlIGJhbmRzIHN1cHBvcnRlZCBieSBtdWx0aXBsZSBQTE1Ocy9SQVQKKyAqIEBwYXJhbVtpbl0gcGxtbl9udW0gaXMgdGhlIG51bWJlciBvZiBQTE1OcyB0byBiZSBxdWVyaWVkCisgKiBAcGFyYW1baW5dIHBsbW5fbGlzdCBpcyB0aGUgbGlzdCBvZiBQTE1OIElEcyAoTUNDK01OQykgdG8gYmUgcXVlcmllZAorICogQHBhcmFtW2luXSByYXQgaXMgdGhlIHJhZGlvIGFjY2VzcyB0ZWNobm9sb2d5IHRvIGJlIHF1ZXJpZWQKKyAqIEBwYXJhbVtvdXRdIGJhbmRfbnVtIGlzIHRoZSBudW1iZXIgb2YgYmFuZHMgc3VwcG9ydGVkIGJ5IHRoZSBQTE1Ocy9SQVQgc3BlY2lmaWVkCisgKiBAcGFyYW1bb3V0XSBiYW5kX2xpc3QgaXMgdGhlIGJhbmQgbGlzdCBzdXBwb3J0ZWQgYnkgdGhlIFBMTU5zL1JBVCBzcGVjaWZpZWQKKyAqLwordm9pZCBtcnNfZ2V0X211bHRpcGxlX3BsbW5fc3VwcG9ydF9iYW5kKGthbF91aW50MzIgcGxtbl9udW0sIGNvbnN0IHBsbW5faWRfc3RydWN0IHBsbW5fbGlzdFtdLCByYXRfZW51bSByYXQsIGthbF91aW50MzIgKmJhbmRfbnVtLCBrYWxfdWludDE2IGJhbmRfbGlzdFtdKTsKKworLyoqCisgKiBAYnJpZWYgUXVlcnkgdGhlIGJhbmRzIHN1cHBvcnRlZCBieSBzcGVjaWZpYyBvcGVyYXRvci9SQVQKKyAqIEBwYXJhbVtpbl0gcGxtbl9pZCBpcyB0aGUgUExNTiBJRCAoTUNDK01OQykgb2Ygb3BlcmF0b3IgdG8gYmUgcXVlcmllZCAob25lIG9wZXJhdG9yIG1heSBhbGxvY2F0ZSBtdWx0aXBsZSBQTE1OIElEcywgZS5nLiBDTUNDKQorICogQHBhcmFtW2luXSByYXQgaXMgdGhlIHJhZGlvIGFjY2VzcyB0ZWNobm9sb2d5IHRvIGJlIHF1ZXJpZWQKKyAqIEBwYXJhbVtvdXRdIGJhbmRfbnVtIGlzIHRoZSBudW1iZXIgb2YgYmFuZHMgc3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRvci9SQVQgc3BlY2lmaWVkCisgKiBAcGFyYW1bb3V0XSBiYW5kX2xpc3QgaXMgdGhlIGJhbmQgbGlzdCBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdG9yL1JBVCBzcGVjaWZpZWQKKyAqLwordm9pZCBtcnNfZ2V0X29wZXJhdG9yX3N1cHBvcnRfYmFuZChjb25zdCBwbG1uX2lkX3N0cnVjdCAqcGxtbl9pZCwgcmF0X2VudW0gcmF0LCBrYWxfdWludDMyICpiYW5kX251bSwga2FsX3VpbnQxNiBiYW5kX2xpc3RbXSk7CisKKy8qKgorICogQGJyaWVmIFF1ZXJ5IGlmIGEgYmFuZCBpcyBzdXBwb3J0ZWQgYnkgc3BlY2lmaWMgTUNDL1JBVAorICogQHBhcmFtW2luXSBwbG1uX2lkIGlzIHRoZSBNQ0MgKE1DQyBwYXJ0IG9mIHBsbW5faWRfc3RydWN0KSB0byBiZSBxdWVyaWVkCisgKiBAcGFyYW1baW5dIGJhbmQgaXMgdGhlIGJhbmQgdG8gYmUgcXVlcmllZAorICogQHBhcmFtW2luXSByYXQgaXMgdGhlIHJhZGlvIGFjY2VzcyB0ZWNobm9sb2d5IHRvIGJlIHF1ZXJpZWQKKyAqIEBwYXJhbVtpbl0gYmFuZCBpcyB0aGUgYmFuZCBudW1iZXIgdG8gYmUgcXVlcmllZAorICogQHJldHVybiBLQUxfVFJVRSBpZiB0aGUgYmFuZCBpcyBzdXBwb3J0ZWQgYnkgdGhlIE1DQy9SQVQgc3BlY2lmaWVkOyBLQUxfRkFMU0UgaWYgbm90IHN1cHBvcnRlZAorICovCitrYWxfYm9vbCBtcnNfaXNfa25vd25fbWNjX2JhbmQoY29uc3QgcGxtbl9pZF9zdHJ1Y3QgKnBsbW5faWQsIGthbF91aW50MTYgYmFuZCwgcmF0X2VudW0gcmF0KTsKKworLyoqCisgKiBAYnJpZWYgUXVlcnkgdGhlIGJhbmRzIHN1cHBvcnRlZCBieSBzcGVjaWZpYyBNQ0MvUkFUCisgKiBAcGFyYW1baW5dIHBsbW5faWQgaXMgdGhlIE1DQyAoTUNDIHBhcnQgb2YgcGxtbl9pZF9zdHJ1Y3QpIHRvIGJlIHF1ZXJpZWQKKyAqIEBwYXJhbVtpbl0gcmF0IGlzIHRoZSByYWRpbyBhY2Nlc3MgdGVjaG5vbG9neSB0byBiZSBxdWVyaWVkCisgKiBAcGFyYW1bb3V0XSBiYW5kX251bSBpcyB0aGUgbnVtYmVyIG9mIGJhbmRzIHN1cHBvcnRlZCBieSB0aGUgTUNDL1JBVCBzcGVjaWZpZWQKKyAqIEBwYXJhbVtvdXRdIGJhbmRfbGlzdCBpcyB0aGUgYmFuZCBsaXN0IHN1cHBvcnRlZCBieSB0aGUgTUNDL1JBVCBzcGVjaWZpZWQKKyAqLwordm9pZCBtcnNfZ2V0X21jY19zdXBwb3J0X2JhbmQoY29uc3QgcGxtbl9pZF9zdHJ1Y3QgKnBsbW5faWQsIHJhdF9lbnVtIHJhdCwga2FsX3VpbnQzMiAqYmFuZF9udW0sIGthbF91aW50MTYgYmFuZF9saXN0W10pOworCisvKioKKyAqIEBicmllZiBRdWVyeSB0aGUgYmFuZHMgc3VwcG9ydGVkIGJ5IHNwZWNpZmljIGNvdW50cnkvUkFUCisgKiBAcGFyYW1baW5dIHBsbW5faWQgaXMgdGhlIE1DQyAoTUNDIHBhcnQgb2YgcGxtbl9pZF9zdHJ1Y3QpIG9mIGNvdW50cnkgdG8gYmUgcXVlcmllZCAob25lIGNvdW50cnkgbWF5IGFsbG9jYXRlIG11bHRpcGxlIE1DQ3MsIGUuZy4gVVNBKQorICogQHBhcmFtW2luXSByYXQgaXMgdGhlIHJhZGlvIGFjY2VzcyB0ZWNobm9sb2d5IHRvIGJlIHF1ZXJpZWQKKyAqIEBwYXJhbVtvdXRdIGJhbmRfbnVtIGlzIHRoZSBudW1iZXIgb2YgYmFuZHMgc3VwcG9ydGVkIGJ5IHRoZSBjb3VudHJ5L1JBVCBzcGVjaWZpZWQKKyAqIEBwYXJhbVtvdXRdIGJhbmRfbGlzdCBpcyB0aGUgYmFuZCBsaXN0IHN1cHBvcnRlZCBieSB0aGUgY291bnRyeS9SQVQgc3BlY2lmaWVkCisgKi8KK3ZvaWQgbXJzX2dldF9jb3VudHJ5X3N1cHBvcnRfYmFuZChjb25zdCBwbG1uX2lkX3N0cnVjdCAqcGxtbl9pZCwgcmF0X2VudW0gcmF0LCBrYWxfdWludDMyICpiYW5kX251bSwga2FsX3VpbnQxNiBiYW5kX2xpc3RbXSk7CisKKy8qKgorICogQGJyaWVmIFF1ZXJ5IHRoZSBiYW5kcyBzdXBwb3J0ZWQgYnkgbXVsdGlwbGUgY291bnRyaWVzL1JBVAorICogQHBhcmFtW2luXSBwbG1uX251bSBpcyB0aGUgbnVtYmVyIG9mIE1DQ3MgdG8gYmUgcXVlcmllZAorICogQHBhcmFtW2luXSBwbG1uX2xpc3QgaXMgdGhlIGxpc3Qgb2YgTUNDcyAoTUNDIHBhcnQgb2YgcGxtbl9pZF9zdHJ1Y3QpIG9mIGNvdW50cnkgdG8gYmUgcXVlcmllZCAob25lIGNvdW50cnkgbWF5IGFsbG9jYXRlIG11bHRpcGxlIE1DQ3MsIGUuZy4gVVNBKQorICogQHBhcmFtW2luXSByYXQgaXMgdGhlIHJhZGlvIGFjY2VzcyB0ZWNobm9sb2d5IHRvIGJlIHF1ZXJpZWQKKyAqIEBwYXJhbVtvdXRdIGJhbmRfbnVtIGlzIHRoZSBudW1iZXIgb2YgYmFuZHMgc3VwcG9ydGVkIGJ5IHRoZSBjb3VudHJpZXMvUkFUIHNwZWNpZmllZAorICogQHBhcmFtW291dF0gYmFuZF9saXN0IGlzIHRoZSBiYW5kIGxpc3Qgc3VwcG9ydGVkIGJ5IHRoZSBjb3VudHJpZXMvUkFUIHNwZWNpZmllZAorICovCit2b2lkIG1yc19nZXRfbXVsdGlwbGVfY291bnRyeV9zdXBwb3J0X2JhbmQoa2FsX3VpbnQzMiBwbG1uX251bSwgY29uc3QgcGxtbl9pZF9zdHJ1Y3QgcGxtbl9saXN0W10sIHJhdF9lbnVtIHJhdCwga2FsX3VpbnQzMiAqYmFuZF9udW0sIGthbF91aW50MTYgYmFuZF9saXN0W10pOworCisvKioKKyAqIEBicmllZiBBZGQgbmV3IFBMTU4vUkFUIHN1cHBvcnQgYmFuZCB0byBkYXRhYmFzZQorICogQHBhcmFtW2luXSByYXQgaXMgdGhlIHJhZGlvIGFjY2VzcyB0ZWNobm9sb2d5IHRvIGJlIGFkZGVkCisgKiBAcGFyYW1baW5dIHBsbW5fYmFuZF9jb3VudCBpcyB0aGUgbnVtYmVyIG9mIFBMTU4vYmFuZHMgdG8gYmUgYWRkZWQKKyAqIEBwYXJhbVtpbl0gcGxtbl9iYW5kX2xpc3QgaXMgdGhlIGxpc3Qgb2YgUExNTi9iYW5kcyB0byBiZSBhZGRlZAorICovCit2b2lkIG1yc19hZGRfbGVhcm5lZF9wbG1uX2JhbmQocmF0X2VudW0gcmF0LCBrYWxfdWludDMyIHBsbW5fYmFuZF9jb3VudCwgY29uc3QgcGxtbl9iYW5kX3N0cnVjdCBwbG1uX2JhbmRfbGlzdFtdKTsKKworLyoqCisgKiBAYnJpZWYgUmVzZXQgdGhlIGxlYXJuZWQgUExNTi9iYW5kIGRhdGFiYXNlCisgKi8KK3ZvaWQgbXJzX3Jlc2V0X2xlYXJuZWRfcGxtbl9iYW5kKHZvaWQpOworCisvKioKKyAqIEBicmllZiBHZXQgdGhlIG5laWdodGJvciBjb3VudHJ5IGJhc2VkIG9uIE1SU19ORUlHSEJPUl9DT1VOVFJZX01DQ19TRVRfTlVNIGJ5IHNwZWNpZmljIE1DQworICogQHBhcmFtW2luXSBwbG1uX2lkIGlzIHRoZSBNQ0MgKE1DQyBwYXJ0IG9mIHBsbW5faWRfc3RydWN0KSB0byBiZSBxdWVyaWVkCisgKiBAcGFyYW1bb3V0XSBuZWlnaF9tY2NfbnVtIGlzIG51bWJlciBvZiBuZWlnaGJvciBjb3VudHJ5IGZvdW5kIGluIE1SU19ORUlHSEJPUl9DT1VOVFJZX01DQ19MSVNUCisgKiBAcGFyYW1bb3V0XSBuZWlnaF9tY2NfbGlzdCBpcyB0aGUgY291bnRyeShtY2MpIGVudHJ5IGZvdW5kIGluIE1SU19ORUlHSEJPUl9DT1VOVFJZX01DQ19MSVNUCisgKiBAcmV0dXJuIEtBTF9UUlVFIGlmIHRoZXJlIGlzIGEgbWF0Y2ggb2YgZmlyc3QgY291bnRyeSBvZiBNUlNfTkVJR0hCT1JfQ09VTlRSWV9NQ0NfTElTVDsgS0FMX0ZBTFNFIGlmIHRoZXJlIGlzIG5vIG1hdGNoCisgKi8KK2thbF9ib29sIG1yc19nZXRfbmVpZ2hib3JfY291bnRyeShjb25zdCBwbG1uX2lkX3N0cnVjdCAqcGxtbl9pZCwga2FsX3VpbnQzMiAqbmVpZ2hfbWNjX251bSwgcGxtbl9pZF9zdHJ1Y3QgbmVpZ2hfbWNjX2xpc3RbXSk7CisKKyNlbmRpZiAvKiBNUlNfQ09NTU9OX0JBTkRfVEFCTEVfUFVCTElDX0ggKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19jb21tb25fY2FwYWJpbGl0eS5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19jb21tb25fY2FwYWJpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNDgwZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX2NvbW1vbl9jYXBhYmlsaXR5LmgKQEAgLTAsMCArMSwyNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDcKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIG1yc19jb21tb25fY2FwYWJpbGl0eS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIE11bHRpbW9kZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgRGVjbGFyYXRpb24gb2YgZnVuY2l0b25zIG9mIG1yc19jb21tb25fY2FwYWJpbGl0eS5jLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICRMb2ckCisgKgorICogMDEgMTEgMjAyMiB0b20ud3UKKyAqIFtNT0xZMDA3NDI1MThdIE1JUEMgQVBJIHN1cHBvcnQgZm9yIEVuYWJsZS9EaXNhYmxlIFNBIGZvciBhIGdpdmVuIDVHIGJhbmQKKyAqIAkKKyAqIAkuCisgKgorICogMTAgMzAgMjAyMCB2ZW5kX210Yl9hcmljZW50MDE3CisgKiBbTU9MWTAwNTgxMzA3XSBbTE9WRV1RdWVzdGlvbiBhYm91dCBsNGNfbndfc2V0X3ByZWZlcnJlZF9iYW5kX3JlcV9ub3NhdmUoKQorICogCQorICogCS4KKyAqCisgKiAxMCAwMSAyMDIwIHRlcm8ubWlldHRpbmVuCisgKiBbTU9MWTAwNTYwMDMyXSA/Pz8/U0E/Pz8KKyAqIE1SUyAtIFBMTU4gYmFzZWQgNUcgYmFuZCBkaXNhYmxpbmcuCisgKgorICogMDkgMjggMjAyMCBlc2tvLm9pa2FyaW5lbgorICogW01PTFkwMDU1NzI0Nl0gW1AyMDA4MDMtMDA4NDVdIFtNVEtdWzVHXVtBMzI2Ql0gQVQrRVBCU0VIIOyFi+2Mhew/tO2bhCB1ZSBjYXBhIGluZm8g7Jc/IG5yNDEsNzkg7Jis6z+86rCA64qUIO2YhOyDPworICoKKyAqIDAxIDIyIDIwMjAgYm8teWFvLnRzYWkKKyAqIFtNT0xZMDA0NzU1ODJdIO+/vWnvv73vv70/77+977+9P++/vWrvv71p77+977+977+9bj8/77+977+9P++/vWog77+9aTE5MTY177+9au+/ve+/ve+/vW4/P++/ve+/vVrvv73vv70/77+977+9P++/ve+/ve+/vXE/77+9du+/ve+/vT8/77+9QT/vv73vv70/77+9RT8gLSBUQVUgY2FwYWJpbGl0eSBjaGFuZ2UgZm9yIHdvcmthcm91bmQKKyAqCisgKiAwOSAxOCAyMDE5IHZpbmF5YWsuYmFuZGFnaQorICogW01PTFkwMDQ0MTI0NF0gW0NPREUgU1lOQ10gbW9kZW0gbWluaSBkdW1wPz8/Pz8/Pz8/Py1VU0lSIENoYW5nZXMKKyAqCisgKiAwMSAzMSAyMDE5IGVza28ub2lrYXJpbmVuCisgKiBbTU9MWTAwMzA4ODIxXSBbNjI5N11bTVJTXSBOUiBpbXBsZW1lbnRhdGlvbgorICogCUJhbmQgc3VwcG9ydCBjb25maWd1cmF0aW9uIHdpdGggQVQgY29tbWFuZAorICoKKyAqIDA5IDA3IDIwMTggZXNrby5vaWthcmluZW4KKyAqIFtNT0xZMDAzNDYwMTFdIFtHZW45N11bTlJSQ10gTWVyZ2UgdG8gVk1PTFkgVFJVTksKKyAqIAkKKyAqIAlDTCA2MzM1MDU1IG1lcmdlIHRvIFZNT0xZCisgKgorICogMDUgMjkgMjAxOCBqaWF3ZWkuaGUKKyAqIFtNT0xZMDAzMjkyNThdIFtHQVMgcGFydF1GVCBTUlZDQyBpbXByb3ZlbWVudAorICogCQorICogCS4KKyAqCisgKiAwNCAxOCAyMDE4IGx3LmNoZW4KKyAqIFtNT0xZMDAzMjA2NjJdIFtHZW45M11bUDQwXVtVTU9MWUVdIEdpb25lZSBibGFja2xpc3QgZmVhdHVyZSAtIE1SUworICoKKyAqIDA0IDE4IDIwMTggbW9ydG9uLmxpbgorICogW01PTFkwMDMyMDY2Ml0gW0dlbjkzXVtQNDBdW1VNT0xZRV0gR2lvbmVlIGJsYWNrbGlzdCBmZWF0dXJlIC0gTVJTCisgKiBbTVJTXSBHaW9uZWUgQmxhY2tsaXN0IGZlYXR1cmUgcGhhc2UtaW4KKyAqCisgKiAwMyAwMiAyMDE4IHFpbmd5dS5sYWkKKyAqIFtNT0xZMDAzMTAxNzddIFvvv73vv73vv73vv71dW0NNQ0MgVm9MVEVd77+977+977+93b3vv73vv73vv73vv73qu6pf77+97Luq1LdfMy4xU1JWQ0MgZmFpbCBTVyB3b3JrYXJvdW5kIHNvbHV0aW9uCisgKiAuCisgKgorICogMTEgMjkgMjAxNyBzYXBuYS5rcworICogW01PTFkwMDI5MjA4Ml0gW0dlbjkzXVtUTU9dIDJHIGRpc2FibGUgd2l0aCBlY2MgZW5hYmxlCisgKiAuCisgKgorICogMDcgMDYgMjAxNyBtb3J0b24ubGluCisgKiBbTU9MWTAwMjYxMzA1XSBbR2VuOTNdIEI3MSBkZXZlbG9wbWVudAorICogTVJTIGFuZCBOVlJBTSBwaGFzZSBpbgorICoKKyAqIDAzIDE0IDIwMTcgbWVuZ2hhdS53dQorICogW01PTFkwMDIxNzEyOV0gW01UNjI5M10gY29kZSBzeW5jIGZyb20gVU1PTFkgKFBoYXNlNCkKKyAqIFVNT0xZIENSIDogW01PTFkwMDIyNDQ3NF0gWzYyOTFdW01QM11bUG9zdCBNUF0gQ1UgSFNUIFBhdGNoIC0gTVJTIGFuZCBDVVNUT00KKyAqIFVNT0xZIENMIDogMzU0NzEwMAorICoKKyAqIDAyIDA4IDIwMTcgbWVuZ2hhdS53dQorICogW01PTFkwMDIxNzEyOV0gW01UNjI5M10gY29kZSBzeW5jIGZyb20gVU1PTFkgKFBoYXNlNCkKKyAqIFVNT0xZIENSIDogW0FMUFMwMjkwMDA3M11bTVQ2MjkyXVtFTEJSVVNdW1Bob25lXVtHQ0ZdW0JMT0NLSU5HXVtUUzg5ODBdW1RERCBCNDEsVEMgOC43LjEzXSBObyA0RyBtZWFzdXJlbWVudCByZXBvcnQgZnJvbSBXQ0RNQSB0byBURC1MVEUKKyAqIFVNT0xZIENMIDogMzM1NDUyMC8zMzU0NjA2CisgKgorICogMTIgMjcgMjAxNiBkYXZpZC5uaXUKKyAqIExSMTItPlVNT0xZQSBzeW5jIGZvciBDUltNT0xZMDAyMTAyMTddLgorICoKKyAqIDEwIDI0IDIwMTYgdmVuZF9tdGJfbW9iaXZlaWwwMDMKKyAqIFtNT0xZMDAyMDkyOTNdIEJhbmQgNjYgc3VwcG9ydAorICogQmFuZCA2NiBzdXBwb3J0CisgKgorICogMTAgMTIgMjAxNiBtZW5naGF1Lnd1CisgKiBbTU9MWTAwMjA3MDUzXSBbTVQ2MjkzXSBjb2RlIHN5bmMgZm9ybSBVTU9MWQorICogVU1PTFkgQ1IgOiBbTU9MWTAwMTUzNTI0XSBbNjI5MV0gVml2byBCbGFja0xpc3QgZmVhdHVyZQorICogVU1PTFkgQ0wgOiAyNTc3MTUwCisgKgorICogMDMgMTAgMjAxNiBtb3J0b24ubGluCisgKiBbTU9MWTAwMTY1OTQ3XSBbNjI5MSBIU1JdIFByb3RvY29sIEVuaGFuY2VtZW50IChIZWFkZXIvSW50ZXJmYWNlKQorICogQ01DQyByZXF1aXJlbWVudDogSFNGUiBDVFJMIChTQlAsIE5WUkFNIGFuZCBNUlMpIChQcm90b2NvbCBIZWFkZXIgLyBJbnRlcmZhY2UpCisgKgorICogMDIgMTcgMjAxNiBzYWJyaW5hLmhzdQorICogW01PTFkwMDE1NjIzMF0gWzYyOTJdIEVSUkMgY29kZSBzeW5jIExSMTEgdG8gVU1PTFkKKyAqIEFUK0VQQlNFCisgKgorICogMTIgMDIgMjAxNSB3b25kZXIubGVlCisgKiBbTU9MWTAwMTUxMjUyXSBXb3JsZCBNb2RlIElEICYgU3VwcG9ydCBCYW5kIGNvbGxpc2lvbiBjaGVjaworICogCQorICogCS4KKyAqCisgKiAxMSAwNSAyMDE0IHdvbmRlci5sZWUKKyAqIFtNT0xZMDAwODMzMThdIFtVU0lNRS9NQ0RMTC9VTUFdIHN5bmMgY29kZSBmcm9tIE1UNjI5MV9ERVYKKyAqIAkuCisgKgorICogMDEgMjEgMjAxNCB3Y3B1c2VyX2ludGVncmF0b3IKKyAqIFtNT0xZMDAwNTQ0NzVdIFNHTFRFIG9wdGlvbiByZW5hbWUKKyAqIC4KKyAqCisgKiAxMiAzMSAyMDEzIHdvbmRlci5sZWUKKyAqIFtNT0xZMDAwNTEzMzVdIFVTSU1FY2FsbCBTQ1NJIGZ1bmN0aW9uIHdpdGggc2ltIGluZGV4IHdoaWNoIFVNVFMgaXMgbm90IHN1cHBvcnRlZAorICoKKyAqIDExIDEzIDIwMTMgcGVuZy5wYW4KKyAqIFtNT0xZMDAwNDYwMjddIFtNVDYyOTBFMV1bTU1EU19EQ10gTU1EQyBmZWF0dXJlIHBhdGNoIGJhY2sgdG8gTU9MWSB0cnVuaworICogQjMvQjM5IGNvbW1vbiBjYXBhYmlsaXR5LgorICoKKyAqIDAyIDA1IDIwMTMgeWVuY2hpaC55YW5nCisgKiBbTU9MWTAwMDA5MTg2XSBbU0lCRS9VU0lNRS9EQk1FXSBNdWx0aS1Nb2RlIENCciBtZXJnZSB0byBNT0xZCisgKiAuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9NUlNfQ09NTU9OX0NBUEFCSUxJVFlfSAorI2RlZmluZSBfTVJTX0NPTU1PTl9DQVBBQklMSVRZX0gKKworI2luY2x1ZGUgIm1yc19hc19lbnVtcy5oIiAvLyBmb3IgTVJTX1NJTV9JTkRFCisKKyNpbmNsdWRlICJtcnNfYXNfc3RydWN0LmgiIC8vZm9yIG1yc19hc19ibGFja19jZWxsX3N0cnVjdAorCisjZGVmaW5lIE1SU19MVEVfQkFORF9CSVRNQVNLX1NJWkUgICA4CisjZGVmaW5lIE1SU19OUl9CQU5EX0JJVE1BU0tfU0laRSAxMjgKKworLyogIFR5cGUgRGVmaW5pdGlvbnMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggIGdzbV9iYW5kOworICAgIGthbF91aW50MzIgdW10c19iYW5kOworICAgIGthbF91aW50OCAgbHRlX2JhbmRbTVJTX0xURV9CQU5EX0JJVE1BU0tfU0laRV07Cit9IG1yc19hc19iYW5kX3NldHRpbmc7CisKKy8qIEI2NiBzdXBwb3J0ICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4ICBnc21fYmFuZDsKKyAgICBrYWxfdWludDMyIHVtdHNfYmFuZDsKKyAgICBrYWxfdWludDggIGx0ZV9iYW5kW1NJWkVfTFRFX0JBTkRfTUFTS19UQUJMRV9FWFRFTkRFRF07CisgICAga2FsX3VpbnQ4ICBucl9iYW5kW01SU19OUl9CQU5EX0JJVE1BU0tfU0laRV07ICAgICAgIC8vIE5SIFNBIGJhbmQgb25seQorICAgIGthbF91aW50OCAgbnJfZW5kY19iYW5kW01SU19OUl9CQU5EX0JJVE1BU0tfU0laRV07ICAvLyBOUiBFTkRDIGJhbmQgb25seQorfSBtcnNfYXNfYmFuZF9zZXR0aW5nX2V4dGVuZGVkOworCisvKiBTaGFsbCBiZSBhbGlnbmVkIHRvIE5WUkFNX01BWF9NUlNfQVNfQkxBQ0tfQ0VMTF9OVU0gKi8KKyNkZWZpbmUgTUFYX0JMQUNLX0NFTExfTlVNICAgICAgNTAKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBudW07CisgICAgbXJzX2FzX2JsYWNrX2NlbGxfc3RydWN0ICAgIGFzX2JsYWNrX2NlbGxfbGlzdFtNQVhfQkxBQ0tfQ0VMTF9OVU1dOworfSBtcnNfYXNfYmxhY2tfY2VsbF9saXN0X3N0cnVjdDsKKworLyogUFVCTElDIEZVTkNUSU9OIFBST1RPVFlQRVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gdm9pZCBtcnNfZ2V0X2FzYmFuZF9zZXR0aW5ncyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQ4ICpub2NoZWNrX2ludmFsaWRyYXQsIGthbF91aW50OCAqc3VwcG9ydF9yYXQpOworZXh0ZXJuIHZvaWQgbXJzX2VtX2dldF9hc19iYW5kX3NldHRpbmcoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19hc19iYW5kX3NldHRpbmcgKmJhbmRfc2V0dGluZyk7CitleHRlcm4gdm9pZCBtcnNfZW1fZ2V0X2FzX2JhbmRfc2V0dGluZ19leHRlbmRlZChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgbXJzX2FzX2JhbmRfc2V0dGluZ19leHRlbmRlZCAqYmFuZF9zZXR0aW5nKTsKK2V4dGVybiB2b2lkIG1yc19nZXRfYXNfYmFuZF9zZXR0aW5nKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBtcnNfYXNfYmFuZF9zZXR0aW5nICpiYW5kX3NldHRpbmcpOworZXh0ZXJuIHZvaWQgbXJzX2dldF9hc19iYW5kX3NldHRpbmdfZXh0ZW5kZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19hc19iYW5kX3NldHRpbmdfZXh0ZW5kZWQgKmJhbmRfc2V0dGluZyk7CisjaWYgZGVmaW5lZChfX1RDMTBfXykgfHwgZGVmaW5lZChfX1RDMDFfXykKK2V4dGVybiB2b2lkIG1yc19lbV9zZXRfYXNfYmFuZF9zZXR0aW5nKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBtcnNfYXNfYmFuZF9zZXR0aW5nICpiYW5kX3NldHRpbmcsIGthbF9ib29sIGlzX252cmFtX3NhdmVfbmVlZGVkKTsKK2V4dGVybiB2b2lkIG1yc19lbV9zZXRfYXNfYmFuZF9zZXR0aW5nX2V4dGVuZGVkKCBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgbXJzX2FzX2JhbmRfc2V0dGluZ19leHRlbmRlZCAqYmFuZF9zZXR0aW5nLCBrYWxfYm9vbCBpc19udnJhbV9zYXZlX25lZWRlZCk7CisjZWxzZQorZXh0ZXJuIHZvaWQgbXJzX2VtX3NldF9hc19iYW5kX3NldHRpbmcoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19hc19iYW5kX3NldHRpbmcgKmJhbmRfc2V0dGluZyk7CitleHRlcm4gdm9pZCBtcnNfZW1fc2V0X2FzX2JhbmRfc2V0dGluZ19leHRlbmRlZCggTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19hc19iYW5kX3NldHRpbmdfZXh0ZW5kZWQgKmJhbmRfc2V0dGluZyk7CisjZW5kaWYKK2V4dGVybiB2b2lkIG1yc19zZXRfYXNfYmFuZF9zZXR0aW5nKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBtcnNfYXNfYmFuZF9zZXR0aW5nICpiYW5kX3NldHRpbmcpOworZXh0ZXJuIHZvaWQgbXJzX3NldF9hc19iYW5kX3NldHRpbmdfZXh0ZW5kZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19hc19iYW5kX3NldHRpbmdfZXh0ZW5kZWQgKmJhbmRfc2V0dGluZyk7CitleHRlcm4gdm9pZCBtcnNfc2V0X2FzX2JhbmRfc2V0dGluZ19ub3NhdmUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19hc19iYW5kX3NldHRpbmdfZXh0ZW5kZWQgKmJhbmRfc2V0dGluZyk7CisKK2V4dGVybiB2b2lkIG1yc19oc3Jfc2V0X21vZGUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF9ib29sIGhzcl9tb2RlKTsKK2V4dGVybiBrYWxfYm9vbCBtcnNfaHNyX2dldF9tb2RlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKK3ZvaWQgRkREX21yc19jbGVhbnVwKGthbF91aW50OCBzaW1faW5kZXgpOworCisKK2V4dGVybiB2b2lkIG1yc19zY3NpX3JldHJpZXZlR3NtQmFuZEJpdG1hc2soTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCAqcEdCYW5kQml0bWFzayk7CitleHRlcm4gdm9pZCBtcnNfc2NzaV9yZXRyaWV2ZVVtdHNCYW5kQml0bWFzayhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQzMiAqcFVCYW5kQml0bWFzayk7CitleHRlcm4gdm9pZCBtcnNfc2NzaV9yZXRyaWV2ZUx0ZUJhbmRCaXRtYXNrKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCB2b2lkICpwTEJhbmRCaXRtYXNrKTsKK2V4dGVybiB2b2lkIG1yc19zY3NpX3JldHJpZXZlTHRlQmFuZEJpdG1hc2tfZXh0ZW5kZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIHZvaWQgKnBMQmFuZEJpdG1hc2spOworI2lmZGVmIF9fTlJfUkFUX18KK3ZvaWQgbXJzX3Njc2lfcmV0cmlldmVOUkJhbmRCaXRtYXNrKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCB2b2lkICpwTlJCYW5kQml0bWFzayk7Cit2b2lkIG1yc19zY3NpX3JldHJpZXZlTlJfRU5EQ0JhbmRCaXRtYXNrKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgIG1yc19nZW1pbmlfc3RhdHVzX2VudW0gZ2VtaW5pX3N0YXR1cywgdm9pZCAqcE5SX0VORENCYW5kQml0bWFzayk7CisjZW5kaWYgLyogX19OUl9SQVRfXyAqLworCitleHRlcm4ga2FsX2Jvb2wgbXJzX2FkZF9ibGFja19jZWxsX2xpc3QoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19hc19ibGFja19jZWxsX2xpc3Rfc3RydWN0ICpibGFja19jZWxsX2xpc3QpOworZXh0ZXJuIHZvaWQgbXJzX2dldF9ibGFja19jZWxsX2xpc3QoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19hc19ibGFja19jZWxsX2xpc3Rfc3RydWN0ICpibGFja19jZWxsX2xpc3QpOworZXh0ZXJuIGthbF9ib29sIG1yc19jaGVja19ibGFja19jZWxsX2xpc3QoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIE1SU19SQVRfTU9ERV9UWVBFIHJhdCwgbXJzX3BsbW5faWQgcGxtbl9pZCwga2FsX3VpbnQzMiBjZWxsX2lkZW50aXR5LCBrYWxfdWludDE2IGxhY19vcl90YWMpOworLy8gU0JQX0JMQUNLX0NFTExfTElTVCBmb3IgQ09OTkVDVEVEIG1vZGUKK2V4dGVybiBrYWxfaW50MTYgbXJzX2NoZWNrX2JsYWNrX2NlbGxfbGlzdF9lYXJmY25fcGNpKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBNUlNfUkFUX01PREVfVFlQRSByYXQsIG1yc19wbG1uX2lkIHBsbW5faWQsIGthbF91aW50MTYgbGFjX29yX3RhYywga2FsX3VpbnQzMiBlYXJmY24sIGthbF91aW50MTYgcGNpLCBrYWxfYm9vbCBpc19zZXJ2X2NlbGwpOworZXh0ZXJuIHZvaWQgbXJzX2NsZWFyX2JsYWNrX2NlbGxfbGlzdChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitleHRlcm4gdm9pZCBtcnNfdXBkYXRlX2Rpc2FibGVfcmF0X21vZGUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIHJhdF9lbnVtIGRpc2FibGVfcmF0X21vZGUpOworCit2b2lkIG1yc19jb21tb25fcmVhZF9udnJhbV9jbmZfaGFuZGxlcihrYWxfdWludDE2IG52cmFtX2ZpbGVfaWQsIGthbF91aW50OCAqZGF0YSwga2FsX3VpbnQxNiBsZW4pOworCisjaWYgZGVmaW5lZChfX0FOVF9SWFBXUl9PRkZTRVRfU1VQUE9SVF9fKQorZXh0ZXJuIGthbF9pbnQxNiBMMURfUkZfQW50ZW5uYV9SWF9Qb3dlcl9PZmZzZXQoa2FsX3VpbnQxNiByZl9iYW5kLCBrYWxfdWludDE2IGFyZmNuLCBrYWxfaW50MTYgUlNTSSwga2FsX3VpbnQzMiBwY2VsbF9pZCk7CitleHRlcm4ga2FsX2ludDE2IEVBU19HQVNfUkZfQW50ZW5uYV9SWF9Qb3dlcl9PZmZzZXQoa2FsX3VpbnQxNiByZl9iYW5kLCBrYWxfdWludDE2IGFyZmNuLCBrYWxfaW50MTYgUlNTSSwga2FsX3VpbnQzMiBwY2VsbF9pZCk7CisjZW5kaWYKKwordm9pZCBtcnNfdXBkYXRlX2FzX2NhcGFiaWxpdHlfZXZlbnQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19hc19jYXBhX2V2ZW50X2VudW0gZXZlbnQpOworCitrYWxfYm9vbCBtcnNfZ2V0X2FzX2NhcGFiaWxpdHlfY2hhbmdlX2ZlYXR1cmVfc3RhdGUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19hc19jYXBhX2NoYW5nZV9mZWF0dXJlX2VudW0gZmVhdHVyZSk7CisKK2thbF9ib29sIG1yc19nZXRfYXNfcmFkaW9fY2FwYWJpbGl0eV9jaGFuZ2UoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCitrYWxfYm9vbCBtcnNfYXNfaXNfbWNjX21hdGNoKG1yc19wbG1uX2lkIHBsbW4xLCBtcnNfcGxtbl9pZCBwbG1uMik7CisKK2thbF9ib29sIG1yc19hc19pc19wbG1uX21hdGNoKG1yc19wbG1uX2lkIHBsbW4xLCBtcnNfcGxtbl9pZCBwbG1uMik7CisKKyNlbmRpZiAvKiBfTVJTX0NPTU1PTl9DQVBBQklMSVRZX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfY29tbW9uX29wZXJhdG9yX2ZlYXR1cmVfdGFibGVfcHVibGljLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX2NvbW1vbl9vcGVyYXRvcl9mZWF0dXJlX3RhYmxlX3B1YmxpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YjU0YzIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX2NvbW1vbl9vcGVyYXRvcl9mZWF0dXJlX3RhYmxlX3B1YmxpYy5oCkBAIC0wLDAgKzEsMTYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIE1SU19DT01NT05fT1BFUkFUT1JfRkVBVFVSRV9QVUJMSUNfSAorI2RlZmluZSBNUlNfQ09NTU9OX09QRVJBVE9SX0ZFQVRVUkVfUFVCTElDX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAibWNkX2wzX2luY19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJsM19pbmNfbG9jYWwuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJwc19wdWJsaWNfZW51bS5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgTUFDUk9TICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBvcF9mZWF0dXJlX2JpdG1hcCwgc2VlIHBzX3B1YmxpY19lbnVtLmgKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICBFTlVNUyAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIG9wX2ZlYXR1cmVfZW51bSwgc2VlIHBzX3B1YmxpY19lbnVtLmgKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRlVOQ1RJT04gREVDTEFSQVRJT05TICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBAYnJpZWYgUXVlcnkgaWYgYW4gb3BlcmF0b3IgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgc3BlY2lmaWMgUExNTgorICogQHBhcmFtW2luXSBwbG1uX2lkIGlzIHRoZSBQTE1OIElEIChNQ0MrTU5DKSB0byBiZSBxdWVyaWVkCisgKiBAcGFyYW1baW5dIGZlYXR1cmUgaXMgdGhlIG9wZXJhdG9yIGZlYXR1cmUgdG8gYmUgcXVlcmllZAorICogQHJldHVybiBLQUxfVFJVRSBpZiB0aGUgYmFuZCBpcyBzdXBwb3J0ZWQgYnkgdGhlIFBMTU4vUkFUIHNwZWNpZmllZDsgS0FMX0ZBTFNFIGlmIG5vdCBzdXBwb3J0ZWQKKyAqLwora2FsX2Jvb2wgbXJzX2lzX2ZlYXR1cmVfc3VwcG9ydGVkX2J5X3BsbW4oY29uc3QgcGxtbl9pZF9zdHJ1Y3QgKnBsbW5faWQsIG9wX2ZlYXR1cmVfZW51bSBmZWF0dXJlKTsKKworLyoqCisgKiBAYnJpZWYgUXVlcnkgaWYgYW4gb3BlcmF0b3IgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgc3BlY2lmaWMgTUNDCisgKiBAcGFyYW1baW5dIHBsbW5faWQgaXMgdGhlIE1DQyB0byBiZSBxdWVyaWVkCisgKiBAcGFyYW1baW5dIGZlYXR1cmUgaXMgdGhlIG9wZXJhdG9yIGZlYXR1cmUgdG8gYmUgcXVlcmllZAorICogQHJldHVybiBLQUxfVFJVRSBpZiB0aGUgYmFuZCBpcyBzdXBwb3J0ZWQgYnkgdGhlIFBMTU4vUkFUIHNwZWNpZmllZDsgS0FMX0ZBTFNFIGlmIG5vdCBzdXBwb3J0ZWQKKyAqLwora2FsX2Jvb2wgbXJzX2lzX2ZlYXR1cmVfc3VwcG9ydGVkX2J5X21jYyhjb25zdCBwbG1uX2lkX3N0cnVjdCAqcGxtbl9pZCwgb3BfZmVhdHVyZV9lbnVtIGZlYXR1cmUpOworCisvKioKKyAqIEBicmllZiBRdWVyeSB0aGUgb3BlcmF0b3IgZmVhdHVyZSBzZXQgYnkgc3BlY2lmaWMgUExNTgorICogQHBhcmFtW2luXSBwbG1uX2lkIGlzIHRoZSBQTE1OIElEIChNQ0MrTU5DKSB0byBiZSBxdWVyaWVkCisgKiBAcmV0dXJuIHRoZSBvcGVyYXRvciBmZWF0dXJlIHNldCBieSBiaXRtYXAKKyAqLworb3BfZmVhdHVyZV9iaXRtYXAgbXJzX2dldF9mZWF0dXJlX2J5X3BsbW4oY29uc3QgcGxtbl9pZF9zdHJ1Y3QgKnBsbW5faWQpOworCisvKioKKyAqIEBicmllZiBRdWVyeSB0aGUgb3BlcmF0b3IgZmVhdHVyZSBzZXQgYnkgc3BlY2lmaWMgTUNDCisgKiBAcGFyYW1baW5dIHBsbW5faWQgaXMgdGhlIE1DQyB0byBiZSBxdWVyaWVkCisgKiBAcmV0dXJuIHRoZSBvcGVyYXRvciBmZWF0dXJlIHNldCBieSBiaXRtYXAKKyAqLworb3BfZmVhdHVyZV9iaXRtYXAgbXJzX2dldF9mZWF0dXJlX2J5X21jYyhjb25zdCBwbG1uX2lkX3N0cnVjdCAqcGxtbl9pZCk7CisKKy8qKgorICogQGJyaWVmIFF1ZXJ5IGlmIG9wZXJhdG9yIDVHIGNhcGFiaWxpdHkgc2hhbGwgYmUgZGlzYWJsZWQKKyAqIEBwYXJhbVtpbl0gaHBsbW4gaXMgdGhlIFBMTU4gSUQgKE1DQytNTkMpIG9mIEhvbWUgUExNTgorICogQHBhcmFtW2luXSBzcGxtbiBpcyB0aGUgUExNTiBJRCAoTUNDK01OQykgb2YgU2VydmluZyBQTE1OCisgKiBAcGFyYW1baW5dIGlzX3JvYW1pbmcgaXMgdGhlIHJvYW1pbmcgc3RhdHVzIAorICogQHBhcmFtW2luXSB2Z19vcHRpb24gaXMgdGhlIDVHIG9wdGlvbiB0byBiZSBjaGVja2VkCisgKiBAcmV0dXJuIEtBTF9UUlVFIGlmIG9wZXJhdG9yIDVHIGNhcGFiaWxpdHkgc2hhbGwgYmUgZGlzYWJsZWQ7IEtBTF9GQUxTRSBpZiBub3QKKyAqLwora2FsX2Jvb2wgbXJzX2lzX29wX3ZnX29wdGlvbl9kaXNhYmxlZChjb25zdCBwbG1uX2lkX3N0cnVjdCAqaHBsbW4sIGNvbnN0IHBsbW5faWRfc3RydWN0ICpzcGxtbiwga2FsX2Jvb2wgaXNfcm9hbWluZywgdmdfb3B0aW9uX2VudW0gdmdfb3B0aW9uKTsKKworLyoqCisgKiBAYnJpZWYgUXVlcnkgaWYgcmF0IGNhcGFiaWxpdHkgc2hhbGwgYmUgZGlzYWJsZWQKKyAqIEBwYXJhbVtpbl0gaHBsbW4gaXMgdGhlIFBMTU4gSUQgKE1DQytNTkMpIG9mIEhvbWUgUExNTgorICogQHBhcmFtW2luXSBzcGxtbiBpcyB0aGUgUExNTiBJRCAoTUNDK01OQykgb2YgU2VydmluZyBQTE1OCisgKiBAcGFyYW1baW5dIGlzX3JvYW1pbmcgaXMgdGhlIHJvYW1pbmcgc3RhdHVzIAorICogQHBhcmFtW2luXSByYXRfY2FwIGlzIHRoZSByYXQgY2FwYWJpbGl0eSB0byBiZSBjaGVja2VkCisgKiBAcmV0dXJuIEtBTF9UUlVFIGlmIHJhdCBjYXBhYmlsaXR5IHNoYWxsIGJlIGRpc2FibGVkOyBLQUxfRkFMU0UgaWYgbm90CisgKi8KK2thbF9ib29sIG1yc19pc19yYXRfY2FwYWJpbGl0eV9kaXNhYmxlZChjb25zdCBwbG1uX2lkX3N0cnVjdCAqaHBsbW4sIGNvbnN0IHBsbW5faWRfc3RydWN0ICpzcGxtbiwga2FsX2Jvb2wgaXNfcm9hbWluZywgcmF0X2NhcGFiaWxpdHlfZW51bSByYXRfY2FwKTsKKworLyoqCisgKiBAYnJpZWYgUXVlcnkgdGhlIGN1c3RvbSBQTE1OIHNlYXJjaCByYXQgb3JkZXIgYnkgc3BlY2lmaWMgTUNDCisgKiBAcGFyYW1baW5dIHNpbUludGVyZmFjZSBpcyB0aGUgaW5kZXggb2YgdGFncmV0IFNJTSB0byBiZSBxdWVyaWVkCisgKiBAcGFyYW1baW5dIHBsbW5faWQgaXMgdGhlIE1DQyB0byBiZSBxdWVyaWVkCisgKiBAcGFyYW1baW5dIHNlYXJjaF9yYXQgaXMgdGhlIFJBVCBzZXQgdG8gYmUgZGVjaWRlZCB0aGUgcHJpb3JpdHkKKyAqIEByZXR1cm4gMXN0IFJBVCdzIHJhdF9lbnVtIGFtb25nIHNlYXJjaF9yYXQKKyAqLworcmF0X2VudW0gbXJzX2dldF9maXJzdF9zZWFyY2hfcmF0X2J5X21jYyhrYWxfdWludDggc2ltSW50ZXJmYWNlLCBjb25zdCBwbG1uX2lkX3N0cnVjdCAqcGxtbl9pZCwgcmF0X2VudW0gc2VhcmNoX3JhdCk7CisKKy8qKgorICogQGJyaWVmIFF1ZXJ5IHRoZSBjdXN0b20gUExNTiBzZWFyY2ggcmF0IG9yZGVyIGJ5IHNwZWNpZmljIFBMTU4KKyAqIEBwYXJhbVtpbl0gc2ltSW50ZXJmYWNlIGlzIHRoZSBpbmRleCBvZiB0YWdyZXQgU0lNIHRvIGJlIHF1ZXJpZWQKKyAqIEBwYXJhbVtpbl0gcGxtbl9pZCBpcyB0aGUgUExNTiBJRCAoTUNDK01OQykgdG8gYmUgcXVlcmllZAorICogQHBhcmFtW2luXSBzZWFyY2hfcmF0IGlzIHRoZSBSQVQgc2V0IHRvIGJlIGRlY2lkZWQgdGhlIHByaW9yaXR5CisgKiBAcmV0dXJuIDFzdCBSQVQncyByYXRfZW51bSBhbW9uZyBzZWFyY2hfcmF0CisgKi8KK3JhdF9lbnVtIG1yc19nZXRfZmlyc3Rfc2VhcmNoX3JhdF9ieV9wbG1uKGthbF91aW50OCBzaW1JbnRlcmZhY2UsIGNvbnN0IHBsbW5faWRfc3RydWN0ICpwbG1uX2lkLCByYXRfZW51bSBzZWFyY2hfcmF0KTsKKworLyoqCisgKiBAYnJpZWYgUXVlcnkgdGhlIGJhcnJlZCByYXQgYnkgc3BlY2lmaWMgTUNDCisgKiBAcGFyYW1baW5dIHNpbUludGVyZmFjZSBpcyB0aGUgaW5kZXggb2YgdGFncmV0IFNJTSB0byBiZSBxdWVyaWVkCisgKiBAcGFyYW1baW5dIHBsbW5faWQgaXMgdGhlIE1DQyB0byBiZSBxdWVyaWVkCisgKiBAcGFyYW1baW5dIHNlYXJjaF9yYXQgaXMgdGhlIFJBVCBzZXQgdG8gYmUgY2hlY2tlZAorICogQHJldHVybiByYXRfZW51bSBvZiBiYXJyZWQgcmF0IGFtb25nIHNlYXJjaF9yYXQKKyAqLworcmF0X2VudW0gbXJzX2dldF9iYXJyZWRfcmF0X2J5X21jYyhrYWxfdWludDggc2ltSW50ZXJmYWNlLCBjb25zdCBwbG1uX2lkX3N0cnVjdCAqcGxtbl9pZCwgcmF0X2VudW0gc2VhcmNoX3JhdCk7CisKKy8qKgorICogQGJyaWVmIFF1ZXJ5IHRoZSBiYXJyZWQgcmF0IGJ5IHNwZWNpZmljIFBMTU4KKyAqIEBwYXJhbVtpbl0gc2ltSW50ZXJmYWNlIGlzIHRoZSBpbmRleCBvZiB0YWdyZXQgU0lNIHRvIGJlIHF1ZXJpZWQKKyAqIEBwYXJhbVtpbl0gcGxtbl9pZCBpcyB0aGUgUExNTiBJRCAoTUNDK01OQykgdG8gYmUgcXVlcmllZAorICogQHBhcmFtW2luXSBzZWFyY2hfcmF0IGlzIHRoZSBSQVQgc2V0IHRvIGJlIGNoZWNrZWQKKyAqIEByZXR1cm4gcmF0X2VudW0gb2YgYmFycmVkIHJhdCBhbW9uZyBzZWFyY2hfcmF0CisgKi8KK3JhdF9lbnVtIG1yc19nZXRfYmFycmVkX3JhdF9ieV9wbG1uKGthbF91aW50OCBzaW1JbnRlcmZhY2UsIGNvbnN0IHBsbW5faWRfc3RydWN0ICpwbG1uX2lkLCByYXRfZW51bSBzZWFyY2hfcmF0KTsKKworLyoqCisgKiBAYnJpZWYgQ2hlY2sgd2hldGhlciBjdXN0b20gc2VhcmNoIG9yZGVyIGlzIGFwcGxpZWQgdG8gU1RPUkVEX1NFQVJDSCBvciBub3QgYnkgc3BlY2lmaWMgUExNTgorICogQHBhcmFtW2luXSBzaW1JbnRlcmZhY2UgaXMgdGhlIGluZGV4IG9mIHRhZ3JldCBTSU0gdG8gYmUgcXVlcmllZAorICogQHBhcmFtW2luXSBwbG1uX2lkIGlzIHRoZSBNQ0MgdG8gYmUgcXVlcmllZAorICogQHJldHVybiBLQUxfVFJVRSBpZiBpdCBpcyBhcHBsaWVkIHRvIFNUT1JFRF9TRUFSQ0gKKyAqLwora2FsX2Jvb2wgbXJzX2lzX3NlYXJjaF9vcmRlcl9hcHBsaWVkX3RvX3N0b3JlZF9zZWFyY2hfYnlfbWNjKGthbF91aW50OCBzaW1JbnRlcmZhY2UsIGNvbnN0IHBsbW5faWRfc3RydWN0ICpwbG1uX2lkKTsKKworLyoqCisgKiBAYnJpZWYgQ2hlY2sgd2hldGhlciBjdXN0b20gc2VhcmNoIG9yZGVyIGlzIGFwcGxpZWQgdG8gU1RPUkVEX1NFQVJDSCBvciBub3QgYnkgc3BlY2lmaWMgTUNDCisgKiBAcGFyYW1baW5dIHNpbUludGVyZmFjZSBpcyB0aGUgaW5kZXggb2YgdGFncmV0IFNJTSB0byBiZSBxdWVyaWVkCisgKiBAcGFyYW1baW5dIHBsbW5faWQgaXMgdGhlIFBMTU4gSUQgKE1DQytNTkMpIHRvIGJlIHF1ZXJpZWQKKyAqIEByZXR1cm4gS0FMX1RSVUUgaWYgaXQgaXMgYXBwbGllZCB0byBTVE9SRURfU0VBUkNICisgKi8KK2thbF9ib29sIG1yc19pc19zZWFyY2hfb3JkZXJfYXBwbGllZF90b19zdG9yZWRfc2VhcmNoX2J5X3BsbW4oa2FsX3VpbnQ4IHNpbUludGVyZmFjZSwgY29uc3QgcGxtbl9pZF9zdHJ1Y3QgKnBsbW5faWQpOworCisjZW5kaWYgLyogTVJTX0NPTU1PTl9PUEVSQVRPUl9GRUFUVVJFX1BVQkxJQ19IICovCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfY29tbW9uX3NlYXJjaC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19jb21tb25fc2VhcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwNzAzYwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfY29tbW9uX3NlYXJjaC5oCkBAIC0wLDAgKzEsNzggQEAKKyNpZm5kZWYgX01SU19DT01NT05fU0VBUkNIX0gKKyNkZWZpbmUgX01SU19DT01NT05fU0VBUkNIX0gKKworCisjaW5jbHVkZSAibXJzX2NvbW1vbl9jYXBhYmlsaXR5LmgiCisjaW5jbHVkZSAibXJzX2FzX3N0cnVjdC5oIgorI2luY2x1ZGUgIm1jY19yZWNvZ190cmFpbl9kYXRhLmgiCisKKyNkZWZpbmUgTUFYX1BSRURJQ1RfRlJFUV9OVU0gNjQgLy8gT25seSBvdXRwdXQgNjQgcHJlZGljdCBhcmZjbgorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgYXJmY25fdGFibGVfbnVtOworICAgIGthbF91aW50MzIgYXJmY25fdGFibGVbMzUwXTsKK30gbXJzX2FyZmNuX3ByZWRpY3RfdXRpbF91dF9yZXN1bHRfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiBhcmZjbl90YWJsZV9udW07CisgICAga2FsX3VpbnQzMiBhcmZjbl90YWJsZVtNQVhfUFJFRElDVF9GUkVRX05VTV07CisgICAga2FsX2Jvb2wgaXNfdGVzdF9tb2RlX29uOworfSBtcnNfYXJmY25fcHJlZGljdF91dGlsX2NvbmZpZ19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIGthbF91aW50MzIgKnRhYmxlX3B0cjsKKyAgICBrYWxfdWludDMyIHRhYmxlX21heF9udW07CisgICAga2FsX3VpbnQzMiB0YWJsZV92YWxpZF9udW07CisgICAga2FsX3VpbnQzMiBjdXJfaWR4OworfSBtcnNfZnJlcV90YWJsZV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIG1yc19mcmVxX3RhYmxlX3N0cnVjdCAqYXJmY25fdGFibGU7CisgICAgbXJzX2ZyZXFfdGFibGVfc3RydWN0ICpza2lwX2ZyZXFfdGFibGU7CisgICAgbXJzX2ZyZXFfdGFibGVfc3RydWN0ICpvdXRwdXRfdGFibGU7CisgICAga2FsX3VpbnQzMiBiYW5kX2xpc3RfbnVtOworICAgIGthbF91aW50MTYgKmJhbmRfbGlzdDsKK30gbXJzX2NvbXBvc2VfZnJlcV90YWJsZV9ieV9iYW5kc19zdHJ1Y3Q7CisKK3R5cGVkZWYgZW51bQoreworICAgIE1SU19TRUFSQ0hfUFJJT1JJVFlfRU5VTV9FTkRDLAorICAgIE1SU19TRUFSQ0hfUFJJT1JJVFlfRU5VTV9TSUdOQUxfTEVWRUwsCisgICAgTVJTX1NFQVJDSF9QUklPUklUWV9FTlVNX0xBUkdFX0JBTkRXSURUSCwKKyAgICBNUlNfU0VBUkNIX1BSSU9SSVRZX0VOVU1fTE9XX0xBVEVOQ1ksCisgICAgTVJTX1NFQVJDSF9QUklPUklUWV9FTlVNX1dJVEhfTlJfTkVJR0hCT1IsCisgICAgTVJTX1NFQVJDSF9QUklPUklUWV9FTlVNX05VTSwKKyAgICBNUlNfU0VBUkNIX1BSSU9SSVRZX0VOVU1fSU5WQUxJRAorfSBtcnNfc2VhcmNoX3ByaW9yaXR5X2VudW07CisKK3R5cGVkZWYgc3RydWN0eworICAgIG1yc19zZWFyY2hfcHJpb3JpdHlfZW51bSBwcmlvcml0eTsKKyAgICBrYWxfYm9vbCBpc19lbmFibGU7Cit9IG1yc19zZWFyY2hfcHJpb3JpdHlfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBtcnNfc2VhcmNoX3ByaW9yaXR5X3N0cnVjdCBpbmRleFtNUlNfU0VBUkNIX1BSSU9SSVRZX0VOVU1fTlVNXTsKK30gbXJzX3NlYXJjaF9wcmlvcml0eV9saXN0X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2ludDggaW5wdXRbTUNDX1JFQ09HX0xURV9EQVRBX0xFTl07CisgICAgbWFpZl9tY2NfZW51bSBtYWlmX21jYzsKK30gbXJzX21jY19haV9yZXN1bHRfaW5kX3N0cnVjdDsKKwora2FsX2ludDMyIG1yc19mcmVxX2NvbXBhcmUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7Cit2b2lkIG1yc19wbG1uX3RvX2wzX2luY19wbG1uKGNvbnN0IG1yc19wbG1uX2lkICptcnNfcGxtbiwgcGxtbl9pZF9zdHJ1Y3QgKm53c2VsX3BsbW4pOwora2FsX2Jvb2wgbXJzX2ZyZXFfdGJsX2FwcGVuZF9pdGVtKG1yc19mcmVxX3RhYmxlX3N0cnVjdCAqZnJlcV90YWJsZSwga2FsX3VpbnQzMiBpbnB1dF9mcmVxKTsKK2V4dGVybiB2b2lkIG1yc19kdW1wX2FyZmNuX3ByZWRpY3RfcmVzdWx0KGthbF91aW50MzIgKmFyZmNuX3RhYmxlLCBrYWxfdWludDMyIGFyZmNuX3RhYmxlX251bSk7CitleHRlcm4gdm9pZCBtcnNfY29tcG9zZV9mcmVxX3RhYmxlX2J5X2JhbmRzKHJhdF9lbnVtIHRhcmdldF9yYXQsbXJzX2ZyZXFfdGFibGVfc3RydWN0ICpza2lwX2ZyZXFfdGFibGUsbXJzX2ZyZXFfdGFibGVfc3RydWN0ICpvdXRwdXRfdGFibGUsa2FsX3VpbnQzMiBiYW5kX2xpc3RfbnVtLGNvbnN0IGthbF91aW50MTYgKmJhbmRfbGlzdCxNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitleHRlcm4ga2FsX2Jvb2wgbXJzX2lzX3N1cHBvcnRlZF9iYW5kKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDE2IGJhbmQsIHJhdF9lbnVtIHJhdCk7CitleHRlcm4ga2FsX2Jvb2wgbXJzX2NvbXBvc2VfZnJlcV90YWJsZShtcnNfZnJlcV90YWJsZV9zdHJ1Y3QgKmlucHV0X3RhYmxlLCBtcnNfZnJlcV90YWJsZV9zdHJ1Y3QgKnNraXBfdGFibGUsIG1yc19mcmVxX3RhYmxlX3N0cnVjdCAqb3V0cHV0X3RhYmxlKTsKK2V4dGVybiB2b2lkIG1yc19yZW1vdmVfZHVwbGljYXRlX2ZyZXFfdGFibGVfZW50cnkobXJzX2ZyZXFfdGFibGVfc3RydWN0ICpmcmVxX3RhYmxlKTsKK2V4dGVybiB2b2lkIG1yc19nZXRfcHJlZGljdF90ZXN0X3RhYmxlX2J5X2JhbmQoa2FsX3VpbnQzMiBucl9iYW5kLCBtcnNfZnJlcV90YWJsZV9zdHJ1Y3QgKmFyZmNuX3RhYmxlKTsKK2V4dGVybiB2b2lkIG1yc19zZWFyY2hfcmVhZF9udnJhbV9jbmZfaGFuZGxlcihrYWxfdWludDE2IG52cmFtX2ZpbGVfaWQsIGthbF91aW50OCAqZGF0YSwga2FsX3VpbnQxNiBsZW4pOworZXh0ZXJuIHZvaWQgbXJzX3NlYXJjaF9nZXRfc2VhcmNoX3ByaW9yaXR5X2xpc3QobXJzX3NlYXJjaF9wcmlvcml0eV9saXN0X3N0cnVjdCAqcF9saXN0KTsKK2V4dGVybiB2b2lkIG1yc19zZWFyY2hfc2V0X3NlYXJjaF9wcmlvcml0eV9saXN0KG1yc19zZWFyY2hfcHJpb3JpdHlfbGlzdF9zdHJ1Y3QgKnBfbGlzdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfZWFzX2NhcGFiaWxpdHkuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfZWFzX2NhcGFiaWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzI1NzJkCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19lYXNfY2FwYWJpbGl0eS5oCkBAIC0wLDAgKzEsMTIwMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgbXJzX2Vhc19jYXBhYmlsaXR5LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgTXVsdGltb2RlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICBUaGUgRUFTIGNhcGFiaWxpdHkgc3RvcmVkIGluIE1SUyBjb250ZXh0LgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICRMb2ckCisgKgorICogMDUgMTMgMjAyMSBtYW5keS56aGVuZworICogW01PTFkwMDYyNzg5NF0gW0Jsb2NraW5nXVtNVDY4ODVdW1BldHJ1c11bVE1PLVVTXVtNUDcgRXhjbHVkZWRdW3EwXVtMYWIgSU9UXVtFcmljc3Nvbi1Ob2tpYV1bVm9OUl1Wb05SIFBTSE8gdG8gTFRFIGZhaWxlZCBiZWNhdXNlIG5vIEIyIE1SIGZyb20gVUUKKyAqIFIzLWludGVyZmFjZS4KKyAqCisgKiAxMCAyMCAyMDIwIHlpLWhhbi5jaHVuZworICogW01PTFkwMDU3NTUwMV0gW1hpYW9taV1bSjIyXVtzb2Z0YmFua10gYjQxIK2tP6xxu92oRAorICogCQorICogCVNCTSBCNDEgcGFydGlhbCBiYW5kIC0gTVJTIEVBUworICoKKyAqIDEwIDEyIDIwMjAgZ2licmFuLmNoYW5nCisgKiBbTU9MWTAwNTcxODc5XSBbR2VuOThdW01UNjg4MF1bQ29sZ2luXVtJbnRlcm5hbF1bTWFjaGluZV1bSFFdWzVHTU1dW1JURCBUZXN0XVtQcm90b2NvbCBUZXN0IFN5c3RlbV1bR2VuZXJhbCBQVFNdIFNvbWV0aW1lcyBVRSBpcyBub3QgYWJsZSB0byBjYW1wIG9uIG1hY2hpbmUgY2VsbCB3aGVuIHR3byBzYW1lIEVBUkZDTiBhcmUgcHJlc2VudCB3aXRoIGRpZmZlcmVudCBQTE1OIElECisgKiBUb2RvIzY3IENoZWNrIGFsbCBQTE1OIGluIHNlYXJjaGVkIHNpYiBjZWxsCisgKgorICogMTAgMDEgMjAyMCB0ZXJvLm1pZXR0aW5lbgorICogW01PTFkwMDU2MDAzMl0gPz8/P1NBPz8/CisgKiBNUlMgLSBQTE1OIGJhc2VkIDVHIGJhbmQgZGlzYWJsaW5nLgorICoKKyAqIDA5IDIyIDIwMjAgbWFuZHkuemhlbmcKKyAqIFtNT0xZMDA1NzI0NzFdIFtNYWtlRmlsZV0gW01vZGlmeSBDb21tb24gTWFrZWZpbGUgUnVsZXNdIGNvbW1pbmNkaXJzX2RlZi5tYWsuCisgKiAJCisgKiAJRml4IE1hY3JvCisgKgorICogMDkgMDggMjAyMCBtYW5keS56aGVuZworICogW01PTFkwMDU2NTAzOF0goWkxOTQyMKFqoWlFU6FqIKFpTW92aXN0YXKhaqFpT3BlcmF0b3IgZmVlZGJhY2uhaqFpSU9UM7BlP6WyuNGhaqFpUDKhaqFpRlVOQ6FqoWk1R6FqU29tZSBOZXR3b3JrIGNhbiBub3QgaGFuZGxlIExURSBDQSByZXBvcnQsIGZvbGxvd2luZyBBTFBTMDUyNjcwMzYKKyAqIGJhY2sgb3V0LgorICoKKyAqIDA2IDI5IDIwMjAgeWVuY2hpaC55YW5nCisgKiBbTU9MWTAwNTM2NjI3XSBbR2VuOTddW01QNiBmZWF0dXJlXSA/NUcgTlNBID4gU0EgcHJlZmVycmVkPyBuZXR3b3JrIHNlYXJjaAorICogCQorICogCS4KKyAqCisgKiAwNiAwMSAyMDIwIHlpLWhhbi5jaHVuZworICogW01PTFkwMDUyNzEyMV0gTEdFL0ZDQyByZXF1aXJlbWVudCBmb3IgQmFuZCA0MSBBTVBSCisgKiAJCisgKiAJRVJSQy9NUlMKKyAqCisgKiAwNCAyOSAyMDIwIHBsdW0udHNlbmcKKyAqIFtNT0xZMDA1MTU4OTNdIFtIQ1JdW01UNjg3NV1bTWFyZ2F1eF1bUTBdW01QNV1bUjNdW1NRQ11bSFFdW01UQkZdW0xhYl1bRXJpY3Nzb25dW0Vycm9yVGltZXM6NF1bQVNTRVJUXSBmaWxlOm1jdS9wcm90b2NvbC9sdGVfc2VjL2VycmMvY29tbW9uL3NyYy9lcnJjX2FzbjFfd3JhcHBlci5jIGxpbmU6MTU5CisgKiAJCisgKiAJW1ZNT0xZX1IzXSBVRSBjYXBhYmlsaXR5IHJlc3RyaWN0aW9uLiAoYW5kIHJlY292ZXIgZW50ZXIgY29ubmVjdGVkIG1vZGUpCisgKgorICogMDIgMDcgMjAyMCBwbHVtLnRzZW5nCisgKiBbTU9MWTAwNDk2NzAxXSBbVk1PTFldW0VSUkMmTlJSQ11bQ2FwYWJpbGl0eV0gR2VtaW5pIHN0YXR1cyBzeW5jIGJldHdlZW4gRVJSQyZOUlJDCisgKgorICogMTIgMDkgMjAxOSBrZS10aW5nLmxlZQorICogW01PTFkwMDQ1ODUwM10gW0NPREUgU1lOQ11bTUg0UC1QT1NdIHBhdGNoIHJlcXVlc3QgYWJvdXQgQUxQUzA0MzA5MDI2LSBSQ00vTVJTX0VBUworICoKKyAqIDEyIDAyIDIwMTkgeXVuZy1jaHVuLmNoYW5nCisgKiBbTU9MWTAwNDYyNDcyXSBbR2VuOTddWzk1Lk9QUE8gcGF0Y2ggYmFjayB0byBWTU9MWV2haaRHP7BlP6WyuNGhakZhc3QgcmV0dXJuIHRvIDRHIHNob3VsZCBiZSBkaXNhYmxlZCBvbiBVRQorICogCQorICogCS4KKyAqCisgKiAxMCAzMCAyMDE5IG1hbmR5LnpoZW5nCisgKiBbTU9MWTAwNDU1MTcxXSBbUmVtb3RlIEZUXVtNVDY4ODVdW1BldHJ1c11bTVAxXVtTUUNdW01TTF1bUkZUXVtUZXN0IFBsYW5dW0ZERF1bTFdUR0NdWzRHTU1dW1N0YXRpY11bTkNUXSBEVVQgZG9lcyBub3QgY2FtcHMgb24gNEcgbmV0d29yayB3aGVuIDVHIGlzIHNlbGVjdGVkIGFzIHByZWZlcnJlZCBuZXR3b3JrIHR5cGUKKyAqIAkKKyAqIAkuCisgKgorICogMDkgMjUgMjAxOSBtYW5keS56aGVuZworICogW01PTFkwMDQ0MzQwMl0gW0dlbjk3XTIwMTkgSnVuIENSIC0gQ2xhcmlmaWNhdGlvbiBvbiBTQSBmYWxsYmFjayBCQyBzdXBwb3J0CisgKiAJCisgKiAJLVtFUlJDXUxURSBTQSBiYW5kIGNvbWJpbmF0aW9uIGRlcml2ZWQgZnJvbSAgRU5EQyBzdXBwb3J0IGNoZWNrIEFQSS4KKyAqCisgKiAwOSAyMyAyMDE5IHl1bmctY2h1bi5jaGFuZworICogW01PTFkwMDQ0MDY4N10gVk1PTFkgY29kZSBzeW5jIENSCisgKiAJCisgKiAJMS4gQ0EgVEJMIFYyIG1haW4gcGFydAorICogCTIuIGZpeCByZl9wYXJhbV92MTM5MCBub3QgcmVzZXQgcHJvYmxlbQorICoKKyAqIDA4IDIxIDIwMTkga2UtdGluZy5sZWUKKyAqIFtNT0xZMDA0MzEwMjNdIFtFUlJDXSBWTU9MWSBjb2RlIHN5bmMgZm9yIFZNT0xZIChNT0xZMDA0MDE0ODIpCisgKiAtaVFpIExUMjkgVUUgY2F0ZWdvcnkKKyAqCisgKiAwNiAxMyAyMDE5IHBsdW0udHNlbmcKKyAqIFtNT0xZMDA0MTM1MjJdIFtWTU9MWV1bQ29kZSBTeW5jXVtFUlJDXVtSQ01dIENBIEhQVUUgY2xhc3MgQi9DIGNsYXJpZnkKKyAqCisgKiAwMyAyOCAyMDE5IG1vcnRvbi5saW4KKyAqIFtNT0xZMDAzOTM3NjddIFtNVDYyOTddIFRTIDM2LjMzMSAyMDE4IERlY2VtYmVyIGJhc2VsaW5lIG1pZ3JhdGlvbgorICogW0VSUkNdW1JDTV0gMjAxOERFQyB2ZXJzaW9uIHVwZ3JhZGluZyAoTVBEKQorICoKKyAqIDAzIDE0IDIwMTkgcGx1bS50c2VuZworICogW01PTFkwMDM5MTE3OF0gW01DRl1bVk1PTFldW0VSUkNdIGN1c3RvbSBkaXNhYmxlIGJhbmQgZmVhdHVyZSB3aXRoIE1DRgorICogCQorICogCVtNQ0ZdW0NPU1RPTV9ESVNBQkxFX0JBTkRdW1JDTSAmIE1SU10uCisgKgorICogMDEgMjEgMjAxOSBwbHVtLnRzZW5nCisgKiBbTU9MWTAwMzgwNDAzXSBNb3ZlIFhYWF9QTE1OX0VORCBkZWZpbml0aW9uIGZyb20gY3VzdG9tIGZpbGUgdG8gTVJTX0VBUworICogCQorICogCVtSQ00mTVJTXSAuCisgKgorICogMDEgMDkgMjAxOSBzYWJyaW5hLmhzdQorICogW01PTFkwMDM3NzYxOF0gW1ZNT0xZXSBSRiBwYXJ0aWFsIGJhbmQgQVBJIGZvciBzaW5nbGUgYmFuZCBxdWVyeSBjaGFuZ2UKKyAqIFtNUlNdW0VBU10gY2hhbmdlIHRvIHVzZSBuZXcgQVBJIHRvIGdldCBzaW5nbGUgYmFuZCBwYXJ0aWFsIGJhbmQgcGFyYW1ldGVyLgorICoKKyAqIDAxIDA4IDIwMTkgc2FicmluYS5oc3UKKyAqIFtNT0xZMDAzNzc2MThdIFtWTU9MWV0gUkYgcGFydGlhbCBiYW5kIEFQSSBmb3Igc2luZ2xlIGJhbmQgcXVlcnkgY2hhbmdlCisgKiByb2xsYmFjayBmb3IgY2hhbmdlIGhlYWRlciBmaWxlLgorICoKKyAqIDEyIDI3IDIwMTggbW9ydG9uLmxpbgorICogW01PTFkwMDM3NTIyMV0gW0dlbjk3XVtOU0FdIFVFIENhcGFiaWxpdHkgZGV2ZWxvcG1lbnQgLSBGZWF0dXJlIFNldAorICogW0VSUkNdW1JDTV0gRVVUUkEgRmVhdHVyZSBTZXQgZGV2ZWxvcG1lbnQKKyAqCisgKiAxMiAxMCAyMDE4IG1vcnRvbi5saW4KKyAqIFtNT0xZMDAzNzE2MjRdIFtWTU9MWV1bRVJSQ10gcHJvdmlkZSBBUEkgZm9yIE5SUkMgdG8gY2FsY3VsYXRlIFBfY29tcGVuc2F0aW9uIGZvciBMVEUgbmVpZ2hib3IgY2VsbHMKKyAqIFtFUlJDXVtSQ01dW01SU10gUGNvbXBlbnNhdGlvbiByZXRyaWV2YWwgaW50ZXJmYWNlIGZvciA1RzQgSVJDUiBkZXZlbG9wbWVudAorICoKKyAqIDEwIDI5IDIwMTggc2FicmluYS5oc3UKKyAqIFtNT0xZMDAzNDUyNjddIFs2Mjk3XVtFUlJDXVtSQ01dIExURSBuZXcgZmVhdHVyZQorICogW1JDTV0gCisgKiAJMS4gTFRFIG5ldyBjdXN0b20gQ0EgcmVwb3J0IHdheSBieSBFTDFECisgKiAJMi4gTFRFIENBL3BhcnRpYWwgYmFuZCBjaGVjayBBUEkgaW50ZXJmYWNlCisgKiAJMy4gRjMwIEFTTiBmZWF0dXJlIG1lcmdlCisgKgorICogMDggMjAgMjAxOCBwbHVtLnRzZW5nCisgKiBbTU9MWTAwMzQ2NzM3XSBbRVJSQ11bUkNNXSBCNDFDIEhQVUUKKyAqIAkKKyAqIAlbVk1PTFldIChPQSkKKyAqCisgKiAwOCAxNyAyMDE4IHllbmNoaWgueWFuZworICogW01PTFkwMDM0NjY1OF0gW1ZNT0xZXSBHZW45NyBFUlJDLUNFTCBtb2RpZmljYXRpb25zCisgKiAJCisgKiAJMSkgRVJSQy1DRUwgRU5EQyBzdXBwb3J0LgorICogCTIpIE1SUyBFUlJDIFVwIHRvIERvd24gU2VhcmNoIEluZm9ybWF0aW9uLgorICoKKyAqIDA3IDE5IDIwMTgga2UtdGluZy5sZWUKKyAqIFtNT0xZMDAzMjI4MzBdIFtVTU9MWUVdW0VSUkNdIHNvdXJjZSBjb2RlIHJlbGVhc2UKKyAqIC0gbXJzIGVhcworICoKKyAqIDA3IDE4IDIwMTggcGx1bS50c2VuZworICogW01PTFkwMDMzODcwOF0g77+9ae+/vXQ/P++/vXfvv73KoWpBc3NlcnQgZmFpbDogZXJyY19jZWxfaXNjZWxscy5jIDIxMDggLSBFUlJDCisgKiAJCisgKiAJRml4IHJlc2V0IHBhcnQgaW4gYmFuZCBzZXR0aW5nIHVwZGF0ZSBieSBocGxtbiBhbmQgY3BsbW4uCisgKgorICogMDcgMDMgMjAxOCB5dW5nLWNodW4uY2hhbmcKKyAqIFtNT0xZMDAzMzQ2NzBdIFtDVjVhXSBibG9jayBzcGVjaWZpYyBMVEUgYmFuZHMgZm9yIHBhcnRpY3VsYXIgcm9hbWluZyBwbG1ucworICogcmNtL21ycyBwYXJ0LgorICoKKyAqIDAzIDA5IDIwMTggbW9ydG9uLmxpbgorICogW01PTFkwMDMwOTU3MF0gW0dlbjkzLzk1XVtVTU9MWUVdW0VSUkNdW1JDTV0gV1dMVEVEQiB0YWJsZSBtb3ZlbWVudCBmb3IgYmV0dGVyIGN1c3RvbWl6YXRpb24KKyAqIDEuIExURUJhbmQgYW5kIENBQ29tYiB0YWJsZSBtb3ZlbWVudAorICogCTIuIEludHJvZHVjZSBMVEVCYW5kRXhjbAorICogCTMuIEFkZCBuZXcgREwgb25seSBiYW5kczogQjc1ICYgQjc2CisgKgorICogMDEgMDUgMjAxOCBvdHRvLmxpdQorICogW01PTFkwMDI5ODA2NV0gW01UNjI5M10gVlpXIGZlYXR1cmUgZGV2ZWxvcGVtZW50ICYgcGF0Y2ggYmFjaworICogCQorICogCS4KKyAqCisgKiAxMiAxMSAyMDE3IG1vcnRvbi5saW4KKyAqIFtNT0xZMDAyOTUwNzddIFtHZW45M11bRVJSQ11bUkNNXSBMVEUgc3VwcG9ydCBiYW5kIGFuZCBDQSBjb21iaW5hdGlvbiBjdXN0b21pemF0aW9uIHJlLWFyY2gKKyAqIENvbW1vbiBJRiBhbmQgTVJTIHBhcnQgKExSMTJBLlIzLk1QKSAoTm90IGluIFYtTGlzdCkKKyAqCisgKiAxMSAyOSAyMDE3IHl1bmctY2h1bi5jaGFuZworICogW01PTFkwMDI5MjA4Ml0gW0dlbjkzXVtUTU9dIDJHIGRpc2FibGUgd2l0aCBlY2MgZW5hYmxlCisgKiByY20gb2EgcGFydAorICoKKyAqIDEwIDMxIDIwMTcgb3R0by5saXUKKyAqIFtNT0xZMDAyODUwMTFdID9pR0lPTkVFX01PREVNP2o/aU1UNjc1NT9qP2kxN0cwMT9qID8/P0JBTkQgNDEKKyAqIAkKKyAqIAkuCisgKgorICogMTAgMzEgMjAxNyBvdHRvLmxpdQorICogW01PTFkwMDI4NTAxMV0gP2lHSU9ORUVfTU9ERU0/aj9pTVQ2NzU1P2o/aTE3RzAxP2ogPz8/QkFORCA0MQorICoKKyAqIDEwIDEzIDIwMTcgb3R0by5saXUKKyAqIFtNT0xZMDAyODMxMzJdIFtHZW45M10gUjMgVVMgb3BlcmF0b3IgY3VzdG9taXphdGlvbgorICogCQorICogCS4KKyAqCisgKiAwOSAxNCAyMDE3IG90dG8ubGl1CisgKiBbTU9MWTAwMjc3OTgzXSBbTWFya2V0Xe+/ve+/vT8/P++/ve+/vT9UREQgTFRF77+9ST/vv71VPz8/77+9cUZERCBMVEUgYmFuZCDvv73vv71dCisgKiAJCisgKiAJT1BQTyBkaXNhYmxlIGJhbmQgYWNjb3JkaW5nIHRvIFNJTSBhbmQgcGxtbgorICoKKyAqIDA4IDI0IDIwMTcgbW9ydG9uLmxpbgorICogW01PTFkwMDI3MzUzMl0gW01UNjc2M11bQmlhbmNvXVtOMV1baW4tRlRBXVs0RyBQQ1RdW0Fucml0c3VdW0hRXVtFMDRdWzguMi4xLjVdCisgKiBBZGQgbmV3IGV4dGVuZGVkIHZlcnNpb24gZm9yIE1SUyBFQVMgQVBJcyB0byByZWR1Y2UgdHJhY2UgcHJpbnQgKFVNT0xZQSkKKyAqCisgKiAwNyAyOCAyMDE3IG1vcnRvbi5saW4KKyAqIFtNT0xZMDAyNjY4NTJdIFtCaWFuY28vWmlvbl0gZnJlIHN3IGNoZWNrLWluCisgKiBbTVJTXSBCNzEgU1cgcGhhc2UgaW4gKFVNT0xZQSkKKyAqCisgKiAwNyAwNiAyMDE3IG1vcnRvbi5saW4KKyAqIFtNT0xZMDAyNjEzMDVdIFtHZW45M10gQjcxIGRldmVsb3BtZW50CisgKiBNUlMgYW5kIE5WUkFNIHBoYXNlIGluCisgKgorICogMDQgMTYgMjAxNyBtZW5naGF1Lnd1CisgKiBbTU9MWTAwMjQxNDY0XSBbTVQ2MjkzXUNvZGUgc3luYyBmcm9tIExSMTIgKFcxNSwgcGhhc2UgMjEpLSBidWcgb25seQorICogVU1PTFkgQ1IgOiBbTU9MWTAwMjA5OTM5XSBbRVJSQ11bQ0VMXVtMQ0VMXSBMK0wKKyAqIFVNT0xZIENMIDogMzczMzg4MywgW01SU10gTCtMLCBjbGVhciBibGFjayBjZWxsIGJ1ZyBmaXguCisgKgorICogMDQgMDUgMjAxNyBkZW5uaXMud2VuZworICogW01PTFkwMDIzODkyOV0gW0JJQU5DT11bTVQ2NzYzXVtSRElUXVtQSE9ORV1bT3Zlcm5pZ2h0XVtIUV1bTVRCRl1bTGFiXVtFcmljc3Nvbl0iW0ZhdGFsIGVycm9yKHRhc2spXSBlcnJfY29kZTE6MHgwMDAwMDMwNSBlcnJfY29kZTI6MHg4ODg4MDJDMiBlcnJfY29kZTM6MHhDQ0NDQ0NDQyIKKyAqIGFkZCBBUEk6IG1yc19lYXNfZ2V0X2RsX2VhcmZjbl9mcmVxCisgKgorICogMDMgMTQgMjAxNyBtZW5naGF1Lnd1CisgKiBbTU9MWTAwMjE3MTI5XSBbTVQ2MjkzXSBjb2RlIHN5bmMgZnJvbSBVTU9MWSAoUGhhc2U0KQorICogVU1PTFkgQ1IgOiBbTU9MWTAwMjI0NDc0XSBbNjI5MV1bTVAzXVtQb3N0IE1QXSBDVSBIU1QgUGF0Y2ggLSBNUlMgYW5kIENVU1RPTQorICogVU1PTFkgQ0wgOiAzNTQ3MTAwCisgKgorICogMDEgMjUgMjAxNyBtZW5naGF1Lnd1CisgKiBbTU9MWTAwMjE3MTI5XSBbTVQ2MjkzXSBjb2RlIHN5bmMgZnJvbSBVTU9MWSAoUGhhc2U0KQorICogVU1PTFkgQ1IgOiBbTU9MWTAwMjIzMTczXSBbNjI5Ml1bR2VtaW5pXVtMK0xdW01lcmdlIExSMTJdW1dDUy9TRTMvUFMxflBTMTVdCisgKiBVTU9MWSBDTCA6IDMzNzAyMDMKKyAqCisgKiAxMiAyMSAyMDE2IG1lbmdoYXUud3UKKyAqIFtNT0xZMDAyMTcxMjldIFtNVDYyOTNdIGNvZGUgc3luYyBmcm9tIFVNT0xZIChQaGFzZTQpCisgKiBVTU9MWSBDUiA6IFtNT0xZMDAyMTAyMTddIFtNVDYyOTJdIFVFIENhcGFiaWxpdHkgcHJlcGFyYXRpb24gZm9yIEdlbjkyIE1QMQorICogVU1PTFkgQ0wgOiAzMjEyNzY3CisgKgorICogMTIgMDIgMjAxNiBhZGVsaW5lLmNoYW5nCisgKiBbTU9MWTAwMjE0NzE3XSBbNjI5M10gQ0hNIG1vZGlmaWNhdGlvbiBmb3IgVVQgZW5oYW5jZW1lbnQKKyAqIC4KKyAqCisgKiAxMSAxNSAyMDE2IG1lbmdoYXUud3UKKyAqIFtNT0xZMDAyMTMzMDhdIFs2MjkzXSBhZGQgTVJTX0VBUyBkZWJ1ZyB0cmFjZQorICogYWRkIE1SU19FQVMgZGVidWcgdHJhY2UKKyAqCisgKiAxMSAxMCAyMDE2IG1lbmdoYXUud3UKKyAqIFtNT0xZMDAyMTA3ODRdIFtNVDYyOTNdIGNvZGUgc3luYyBmb3JtIFVNT0xZCisgKiBVTU9MWSBDUiA6IE1PTFkwMDIwOTQzNQorICogVU1PTFkgQ0wgOiAzMDE1NjE3CisgKgorICogMTEgMTAgMjAxNiBtZW5naGF1Lnd1CisgKiBbTU9MWTAwMjEwNzg0XSBbTVQ2MjkzXSBjb2RlIHN5bmMgZm9ybSBVTU9MWQorICogVU1PTFkgQ1IgOiBNT0xZMDAyMDg3NDMKKyAqIFVNT0xZIENMIDogMjk5NzM5NworICoKKyAqIDExIDA5IDIwMTYgbWVuZ2hhdS53dQorICogW01PTFkwMDIxMDc4NF0gW01UNjI5M10gY29kZSBzeW5jIGZvcm0gVU1PTFkKKyAqIG90aGVyIHBhcnRzIG9mCisgKiBVTU9MWSBDUiA6IE1PTFkwMDIwMDU2NQorICogVU1PTFkgQ0wgOiAyODU1OTA5CisgKgorICogMTAgMjQgMjAxNiBtZW5naGF1Lnd1CisgKiBbTU9MWTAwMjA4NzY4XSBbTVQ2MjkzXSBbQjY2XSBCYW5kNjYgcG9ydGluZyAoRVJSQyBwYXJ0KQorICogVU1PTFkgQ0wyODkyNjY5IDogTWVuZ2hhdSdzIHBhcnQKKyAqCisgKiAxMCAxMiAyMDE2IG1lbmdoYXUud3UKKyAqIFtNT0xZMDAyMDcwNTNdIFtNVDYyOTNdIGNvZGUgc3luYyBmb3JtIFVNT0xZCisgKiBVTU9MWSBDUiA6IFtNT0xZMDAxODg5ODRdIFtFUlJDXVtDRUxdIGNvZGUgc3luYyBmb3IgVklWTyBibGFjayBjZWxsCisgKiBVTU9MWSBDTCA6IDI1NzcwMTkKKyAqCisgKiAwOSAyNiAyMDE2IGFkZWxpbmUuY2hhbmcKKyAqIFtNT0xZMDAyMDUwOTNdIFtVTU9MWUFdIG1lcmdlIENSIGZyb20gbXcuaHN1IENCcgorICogLgorICoKKyAqIDA5IDEzIDIwMTYgYWRlbGluZS5jaGFuZworICogW01PTFkwMDIwMzIzMF0gW1BTX0RFVl1bNjI5M10gTVJTIGNyaXRpY2FsIHNlY3Rpb24gcHJvdGVjdCBpbiBtcnNfZWFzX2NhcGFiaWxpdHkuYworICogLgorICoKKyAqIDA4IDE5IDIwMTYgaG9uZy15dWFuLnlhbmcKKyAqIFtNT0xZMDAxOTY1NTBdIFs2MjkzXSBFUlJDIENTUiBkZXZlbG9wbWVudAorICogCQorICogCS4gQVBJIHJlcGxhY2UgLU1SU19FQVNfQ0FQQUJJTElUWS5jCisgKgorICogMDYgMjIgMjAxNiBtYXJ1Y28udHUKKyAqIFtNT0xZMDAxODU5MDFdIFVNT0xZQSBlcnJjIHJlbGV2YW50IGxhdGVzdCBjb2RlIHN5bmMgZnJvbSBVTU9MWQorICogSGVscCBIWSB0byBpbnRlZ3JhdGUgbXJzX2Vhc19jYXBhYmlsaXR5LmMvLmggZnJvbSBVTU9MWSB0byBVTU9MWUEKKyAqCisgKiAwNSAxMiAyMDE2IG1vcnRvbi5saW4KKyAqIFtNT0xZMDAxNzg5MzldIFtNVDY3OTdMXW1vZGVtLG1kMTooTUNVX0wxQ09SRSkgIFtBU1NFUlRdIGZpbGU6bDFjb3JlL21vZGVtL2VsMS9lbDFkL3NyYy9jb21tb24vbGRzcF9lcnJfY2hrX2NtLmMgbGluZToxMTUKKyAqIE1UNjc5NyAgc2V0dGluZyBjb3JyZWN0aW9uIChVTU9MWSkKKyAqCisgKiAwMyAxOCAyMDE2IHNhYnJpbmEuaHN1CisgKiBbTU9MWTAwMTY5OTUyXSBbTVQ2MjkyXVtGUEdBXVtQaG9uZSBDYWxsXVs0RyBURERdW05vcm1hbF1bU2FuaXR5XSBBc3NlcnQgZmFpbDogZXJyY19yY21fbWFpbi5jIDI3MDAgLSBMNAorICogcmVtb3ZlIFIxMiBjYXRlZ29yeSBleHRlbnNpb24gZm9yIEw0IENBIGljb24gcXVlcnkgZnVuY3Rpb24KKyAqCisgKiAwMyAxNiAyMDE2IHJ5YW4ub3UKKyAqIFtNT0xZMDAxNTk5MDJdIFtFUlJDXVtDRUxdIDIwMTUgUTQgY29kZSBzeW5jIGZyb20gTFIxMSB0byBVTU9MWQorICogW01PTFkwMDE1MDc0NF0gW0xURS1BXSBMaW1pdCBkZXZpY2Ugb3BlcmF0aW9uIG9uIHBhcnRpYWwgYmFuZC4KKyAqCisgKiAwMyAwOSAyMDE2IHNhYnJpbmEuaHN1CisgKiBbTU9MWTAwMTU2MjMwXSBbNjI5Ml0gRVJSQyBjb2RlIHN5bmMgTFIxMSB0byBVTU9MWQorICogbWVyZ2UgTFIxMSBDTCAxODAxMzQyIFtNT0xZMDAxNDgxNjZdQ1QgQ0EgY2FwYWJpbGl0eSBxdWVyeSBzdXBwb3J0CisgKgorICogMDIgMTcgMjAxNiBzYWJyaW5hLmhzdQorICogW01PTFkwMDE1NjIzMF0gWzYyOTJdIEVSUkMgY29kZSBzeW5jIExSMTEgdG8gVU1PTFkKKyAqIEFUK0VQQlNFCisgKgorICogMDIgMTcgMjAxNiBzYWJyaW5hLmhzdQorICogW01PTFkwMDE1NjIzMF0gWzYyOTJdIEVSUkMgY29kZSBzeW5jIExSMTEgdG8gVU1PTFkKKyAqIG1ycy9udnJhbS9zYnAgbWVyZ2UKKyAqCisgKiAwMiAxNiAyMDE2IG5pY2t5LmNob3UKKyAqIFtNT0xZMDAxNjA0MTRdIFtFUlJDXVtDT05OXSBzeW5jIGZyb20gTFIxMSB0byBVTU9MWQorICogW0NMMTkyOTA5NV1bTU9MWTAwMTU0MjEwXSBbTVQ2NzU1XVtFMl1bR0NGXVtBbnJpdHN1XVs0R11bRkREXVtNUDNdWzE3LjQuMTEuMl1bZU1CTVNdW0UwMS1FMDNdIEZhaWwgb24gdGhpcyBjYXNlLgorICoKKyAqIDEyIDAxIDIwMTUgc2FicmluYS5oc3UKKyAqIFtNT0xZMDAxNTEyNTJdIFdvcmxkIE1vZGUgSUQgJiBTdXBwb3J0IEJhbmQgY29sbGlzaW9uIGNoZWNrCisgKiBXTUlEIGJhbmQgY2hlY2suCisgKgorICogMTAgMTIgMjAxNSBjaGktY2h1bmcubGluCisgKiBbTU9MWTAwMTQ0Mjc0XSBbTU9MWS0+VU1PTFldW01PTFkwMDEzNjA2N11bU0JNXU5ldyBGZWF0dXJlIDogUGFydGlhbCBDaGFubmVsIEJhbmR3aWR0aCBzdXBwb3J0ZWQuCisgKiAJLgorICoKKyAqIDEwIDA2IDIwMTUgc2FicmluYS5oc3UKKyAqIFtNT0xZMDAxNDQzMTFdIFtVTU9MWV1bQ0VMXVtNUlNdIF9fUkZfQllQQVNTX18gb3B0aW9uIHdyYXAgbW9kaWZpY2F0aW9uIGZvciBFbGJydXMgRElRL0FJUSB0ZXN0CisgKiByZW1vdmUgY2hpcCBvcHRpb24gdG8gZW5hYmxlIF9fUkZfQllQQVNTX18gZm9yIEVMYnJ1cy4KKyAqCisgKiAxMCAwNiAyMDE1IGNoaWgtY2hpZW4ubGluCisgKiBbTU9MWTAwMTMyNTkxXSBbRVJSQ11bQ0VMXUNNQ0MgQjM4L0I0MSBDQSBpc3N1ZQorICogQjM4LzQxIENBIElzc3VlCisgKgorICogMDkgMjEgMjAxNSBwYW51LnBlaXNhCisgKiBbTU9MWTAwMTQxMjE0XSBERTYgY29kZSBtZXJnZSBmcm9tIExSMTFfVnpXIENCciB0byBVTU9MWSB0cnVuaworICogCUludGVncmF0ZWQgQ0wgMTYwMTkwOSBmcm9tIExSMTFfVnpXIENCci4gVnpXOiBEeW5hbWljIExURSBiYW5kIHN1cHBvcnQgd2hlbiByb2FtaW5nIGluIE1SUworICoKKyAqIDA5IDA0IDIwMTUgcm9sYW5kLmxpCisgKiBbTU9MWTAwMTM5ODYxXSBbTVQ2MjkxXVtTQk1dIE5ldyBGZWF0dXJlIDogRGlzYWJsZSBMVEUgQjQxIGZvciByb2FtaW5nIG91dCBzaWRlIG9mIEphcGFuLgorICogCS4KKyAqCisgKiAwOCAyMCAyMDE1IHNhYnJpbmEuaHN1CisgKiBbTU9MWTAwMTM4MzEyXSBbNjI5Ml0gVU1PTFkgY29kZSBzeW5jCisgKiBkaXNhYmxlICAjZXJyb3IgY2hlY2sgZm9yIEVsQlJVUyBidWlsZC4KKyAqCisgKiAwOCAwNCAyMDE1IGNoaS1jaHVuZy5saW4KKyAqIFtNT0xZMDAxMzMyMDhdIFtSQ01dIEphZGUgIGNvZGUgcmV2aXNpb24KKyAqIAkuCisgKgorICogMDYgMDEgMjAxNSBoZW5yeS5sYWkKKyAqIFtNT0xZMDAwOTI1MDhdIFtNVDYyOTFdW0xURS1DMktdIEFTIEludGVyIFJBVCBmZWF0dXJlCisgKiAuCisgKgorICogMDQgMTYgMjAxNSBkb3VnLnNoaWgKKyAqIFtNT0xZMDAwOTE0NjNdIFtNVDYyOTFdIEVSUkMgUkNNL01SUyBkZXZlbG9wbWVudAorICogMS4gW0NSMTUxNV0gTmV0d29yay1yZXF1ZXN0ZWQgQ0EgQmFuZCBDb21iaW5hdGlvbiBDYXBhYmlsaXR5IFNpZ25hbGxpbmcKKyAqIDIuIFtDUjE1MzVdIEludHJvZHVjdGlvbiBvZiBVRSBjYXBhYmlsaXR5IGZvciBlTUJNUyByZWNlcHRpb24gb24gU0NlbGwgYW5kIE5vbi1TZXJ2aW5nIENlbGwKKyAqIDMuIEMySyBGR0kvQ2FwYWJpbGl0eSBJRSByZWZpbmVtZW50CisgKiAoT0EgZG9tYWluKS4KKyAqCisgKiAwMyAxNiAyMDE1IGp1c3Rpbi5saQorICogW01PTFkwMDA5ODgyN10gW01UNjI5MV1bRVJSQy1DRUxdIEV4dGVuc2lvbiBFQVJGQ04gZmVhdHVyZQorICogLgorICoKKyAqIDAzIDA5IDIwMTUgaXZ5LndhbmcKKyAqIFtNT0xZMDAwOTcyMzZdIFtUSzYyOTEgRlBHQV1bcHJlLTFzdENhbGxUZXN0XVtVTU9MWV1bNEddIEFzc2VydCBAIGxjZWxfcGFnaW5nLmMgIzkxMAorICogW01PTFkwMDA5MTk4M10gW1Z6V11bNi4yLjE2LjFdIEZFTVRPIFNZU1RFTSBTRUxFQ1RJT04oVlpfUkVRX0xURURBVEFfNjgyMCkKKyAqCisgKiAwMiAxMCAyMDE1IGRvdWcuc2hpaAorICogW01PTFkwMDA5MTQ2M10gW01UNjI5MV0gRVJSQyBSQ00vTVJTIGRldmVsb3BtZW50CisgKiBFeHRlbmQgZW5jb2RlZCBFVVRSQU4gVUUgY2FwYWJpbGl0eSBidWZmZXIgc2l6ZS4KKyAqCisgKiAxMSAxNCAyMDE0IGhlbnJ5LmxhaQorICogW01PTFkwMDA3OTA3Ml0gW01UNjI5MV0gQ2hhbmdlIEVBUkZDTiBmcm9tIGthbF91aW50MTYgdG8ga2FsX3VpbnQzMiBmb3IgQ0VMIHBhcnQKKyAqIAkuCisgKgorICogMTEgMTMgMjAxNCBkb3VnLnNoaWgKKyAqIFtNT0xZMDAwNjg3MTBdIFtNVDYyOTFfREVWXSBTeW5jIE1PTFkgdG8gTVQ2MjkxX0RFVgorICogTWVyZ2UgTVQ2MjkxX0RFViBjb2RlIHRvIFVNT0xZIHRydW5rLgorICoKKyAqIDA4IDAxIDIwMTQgbWVuZ2hhdS53dQorICogW01PTFkwMDA3Mzk4N10gW01UNjI5MEUyXVtNUlNdIENyZWF0ZSBtcnNfZWFzX21heF9iYW5kX2NhcF9mb3JfdXNlcigpIHRvIEw0QyBmb3IgdXNlciBmcmllbmRseSBVSQorICogQ3JlYXRlIG1yc19lYXNfbWF4X2JhbmRfY2FwX2Zvcl91c2VyKCkgdG8gTDRDIGZvciB1c2VyIGZyaWVuZGx5IFVJCisgKgorICogMDEgMjEgMjAxNCB3Y3B1c2VyX2ludGVncmF0b3IKKyAqIFtNT0xZMDAwNTQ0NzVdIFNHTFRFIG9wdGlvbiByZW5hbWUKKyAqIC4KKyAqCisgKiAxMSAxMyAyMDEzIGFkZWxpbmUuY2hhbmcKKyAqIFtNT0xZMDAwNDYwMjddIFtNVDYyOTBFMV1bTU1EU19EQ10gTU1EQyBmZWF0dXJlIHBhdGNoIGJhY2sgdG8gTU9MWSB0cnVuaworICogLgorICoKKyAqIDEwIDIxIDIwMTMgaG9uZy15dWFuLnlhbmcKKyAqIFtNT0xZMDAwNDAwNTBdIFtNdWx0aU1vZGVdIER5bmFtaWMgYmFuZCBzZWxlY3Rpb24KKyAqIC4KKyAqCisgKiAwOSAyNiAyMDEzIGFkZWxpbmUuY2hhbmcKKyAqIFtNT0xZMDAwMzg5NzRdIFtMVEUgR2VtaW5pXSBBZGQgU0lNIGluZGV4IGFzIGlucHV0IHBhcmFtZXRlciBmb3IgdHdvIE1SUyBBUEkKKyAqIC4KKyAqCisgKiAwOCAyMyAyMDEzIGFkZWxpbmUuY2hhbmcKKyAqIFtNT0xZMDAwMzQ4MTNdIFtNVDYyOTBdIERML1VMIEVBUkZDTiBjaGVjayB1c2luZyBETC9VTCBCVworICogLgorICoKKyAqIDA3IDEyIDIwMTMgaG9uZy15dWFuLnlhbmcKKyAqIFtNT0xZMDAwMjg3NzBdIGFkZCBlYXMgZmRkL3RkZCBqdWRnZSBhcGkgaW4gTVJTCisgKiAubW9kaWZ5IGVudW0KKyAqCisgKiAwNyAwNSAyMDEzIGhvbmcteXVhbi55YW5nCisgKiBbTU9MWTAwMDI4NzcwXSBhZGQgZWFzIGZkZC90ZGQganVkZ2UgYXBpIGluIE1SUworICogLmFkZCBmZGQvdGRkIGpkZyBhcGkKKyAqCisgKiAwNyAwNSAyMDEzIGhvbmcteXVhbi55YW5nCisgKiBbTU9MWTAwMDI4NzcwXSBhZGQgZWFzIGZkZC90ZGQganVkZ2UgYXBpIGluIE1SUworICogLmFkZCBlYXMgZmRkL3RkZCBqdWRnZSBhcGkgaW4gTVJTCisgKgorICogMDUgMTMgMjAxMyBzaGloLWNoaWVoLmxpYW8KKyAqIFtNT0xZMDAwMjIwMjhdIExURSBNTS5JVCBlcnJjIG1lcmdlIHRvIE1PTFkKKyAqIG1lcmdlIG1ycworICoKKyAqIDAxIDIyIDIwMTMgZGF2aWQubml1CisgKiBbTU9MWTAwMDA5MjA1XSBbTVJTXSBDb2RlIGNoZWNrZWQtaW4gZm9yIE1PTFkgYnJhbmNoCisgKiAuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9NUlNfRUFTX0NBUEFCSUxJVFlfSAorI2RlZmluZSBfTVJTX0VBU19DQVBBQklMSVRZX0gKKworI2luY2x1ZGUgIm1yc19hc19pbnRlcl9jb3JlX2RlZi5oIgorI2luY2x1ZGUgIm1yc19hc19lbnVtcy5oIgorI2luY2x1ZGUgIm1yc19hc19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJyZWdfYmFzZS5oIgorI2luY2x1ZGUgImdsb2JhbF90eXBlLmgiCisjaW5jbHVkZSAibXJzX2NvbW1vbl9jYXBhYmlsaXR5LmgiCisvLyNpbmNsdWRlICJlbDFkX3JmX2RlZi5oIgorI2luY2x1ZGUgImx0ZV9yZl9wdWJsaWMuaCIgICAvL2ZvciBMVEVfQklUX01BU0tfQlVGRkVSX1NJWkUKKyNpbmNsdWRlICJlbDFkX3JmX3B1YmxpYy5oIgorI2lmIChDVVJfR0VOID49IE1EX0dFTjk1KQorI2luY2x1ZGUgImVsMWRfcmZfZGVmLmgiICAgICAvL2ZvciBMVEVfQ0FfU0lNVUxfQkFORF9NQVgKKyNpbmNsdWRlICJubDFfdWVfY2FwYWJpbGl0eS5oIgorI2VuZGlmCisjaW5jbHVkZSAiZXJyY19udnJhbV9lZGl0b3IuaCIKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWFjcm9zIFdpdGhvdXQgUGFyYW1ldGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQY29yZSByZWFkaW5nICovCit0eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqIEFQQkFERFIzMjsKKworI2RlZmluZSBNQVNLXzFfQklUICAgICAgICAgICAgMHgwMDAxCisKKy8qIChUaGlzIHZhbHVlIHNob3VsZCBiZSBhbGlnbmVkIHdpdGggRUwxRF9SRl9HRVRfQkFORF9TVVBQT1JUX01BU0soKSBpbnRlcmZhY2UgCisgKiAgYW5kIHRoZSBMVEUgQmFuZCBudW1iZXIgaW4gdGhlIE5WUkFNX0VGX0FTX0JBTkRfU0VUVElOR19MSUQpCisgKi8KKyNkZWZpbmUgTFRFX0JBTkRfTUFTS19XT1JEX0NPVU5UICAgIExURV9CSVRfTUFTS19CVUZGRVJfU0laRQorCisvLyBCZWNhdXNlIEVBUyBzcmNoIEluZm8gb25seSBoYXMgMSBpbnN0YW5jZSwgYnV0IHdlIHdhbnQgdG8gcmV1c2UgZWFzX211dGV4LCBzbyBvbmx5IGNob29zZSBTSU1fSURYID0gMAorI2RlZmluZSBNUlNfRUFTX1NSQ0hfSU5GT19SRUZfU0lNX0lEWCAwCisKKyNkZWZpbmUgTVJTX0VBU19TUkNIX0lORk9fQkFORF9NQVggNjQKKyNkZWZpbmUgTVJTX0VBU19TUkNIX0lORk9fRlJFUV9NQVggMjU2CisjZGVmaW5lIE1SU19FQVNfU1JDSF9JTkZPX0NFTExfTUFYIDEyOAorLy8gVGhlIGFjdHVhbCB2YWx1ZSBvZiBNUlNfTUFYX1NVQl9CQU5EX05VTSBpcyBNQVhfU1VCX0JBTkRfTlVNIGluIGVsMV9jbnN0LmgKKy8vIFRoZSBhY3R1YWwgdmFsdWUgb2YgTVJTX0JXX0lOVkFMSUQgaXMgQldfSU5WQUxJRCBpbiBlbDFfY25zdC5oCisvLyBUaGUgYWN0dWFsIHZhbHVlIG9mIE1SU19FUlJDX1BDSV9JTlZBTElEIGlzIEVSUkNfUENJX0lOVkFMSUQgaW4gZXJyY19sY29tbW9uX2RlZi5oCisvLyBEaXJlY3RseSBkZWZpbmVkIGhlcmUgdG8gcHJldmVudCBkZXBlbmRhbmN5IHByb2JsZW0uCisjZGVmaW5lIE1SU19NQVhfU1VCX0JBTkRfTlVNICgoMjg2LzgpKzEpCisjZGVmaW5lIE1SU19CV19JTlZBTElEIDB4RkYKKyNkZWZpbmUgTVJTX0VSUkNfUENJX0lOVkFMSUQgMHhGRkZGCisKKy8qIERlZmluZSB0aGUgZW5kIG9mIGFsbCBQTE1OIGNvbmZpZyBsaXN0cyBpbiBjdXN0b20gZmlsZXMgKGNvbnRhaW5pbmcgY3VzdG9tX2VhcyBhbmQgd3dsdGVkYikgKi8KKyNkZWZpbmUgTVJTX0VBU19DVVNUT01fUExNTl9DRkdfRU5EICJGRkZGRkYiCisjZGVmaW5lIE1SU19FQVNfVUVfQ0FUX0lOVkFMSUQgTlZSQU1fTFRFX1VFX0NBVF9JTlZBTElECisKKyNkZWZpbmUgTFRFX0NBX01BWF9OVU1fU0lNVUxfQkFORFMgICAgIDUgLy9hbGlnbiBFUlJDX0NBUF9FVVRSQV9DQV9NQVhfU0lNVUxfQUdHUl9CQU5EX05VTQorI2RlZmluZSBNUkRDX01BWF9OVU1fQkFORF9DT01CSU5BVElPTlMgTkwxX0NBUF9NQVhfTlVNX0JBTkRfQ09NQklOQVRJT05TLy9hbGlnbiBOTDFfQ0FQX01BWF9OVU1fQkFORF9DT01CSU5BVElPTlMKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWFjcm9zIFdpdGggUGFyYW1ldGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNUlNfQ09NUElMRV9USU1FX0FTU0VSVChlKSAoKHZvaWQpc2l6ZW9mKGNoYXJbMS0yKiEoZSldKSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtcyB3aXRob3V0IHRhZ3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFdvcmthcm91bmQgZm9yIE1UNjI5MSBGR1BBIERpZ2l0YWwgSVEgKi8KKy8qICNpZiBkZWZpbmVkKF9fUkZfQllQQVNTX18pICovCisjZGVmaW5lIEVBU19MT0NLX01VTFRJX0ZSRVFfTlVNX01BWCAgICAgIDQKKyNkZWZpbmUgRUFTX0xPQ0tfTVVMVElfRlJFUV9OVU1fRU1QVFkgICAgMAorCit0eXBlZGVmIGVudW0geworICAgIE1SU19FQVNfU1JDSF9JTkZPX0JBTkRfTk9UX1NFQVJDSEVELAorICAgIE1SU19FQVNfU1JDSF9JTkZPX0JBTkRfUEFSVElBTCwKKyAgICBNUlNfRUFTX1NSQ0hfSU5GT19CQU5EX0NPTVBMRVRFRAorfSBtcnNfZWFzX3NyY2hfaW5mb19iYW5kX3N0YXR1c19lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIE1SU19FQVNfU1JDSF9JTkZPX0ZSRVFfVU5LTk9XTiwKKyAgICBNUlNfRUFTX1NSQ0hfSU5GT19GUkVRX0ZPVU5ELAorICAgIE1SU19FQVNfU1JDSF9JTkZPX0ZSRVFfTk9UX0ZPVU5ECit9IG1yc19lYXNfc3JjaF9pbmZvX2ZyZXFfc3RhdHVzX2VudW07CisKK3R5cGVkZWYgZW51bSB7CisgIEJBTkRfU0VUVElOR19VUERBVEUsCisgIFJFQURfTlZSQU1fQ05GLCAgCisgIE1BWF9CQU5EX0NBUCwgIAorICBCQU5EX0NUUkxfRlVOQywKKyAgQUREX1JFTU9WRV9CQU5ELAorICBTRVRfQ09OVEVYVF9OVlJBTSwKKyAgR0VUX0NPTlRFWFRfTlZSQU0sCisgIEdFVF9MVEVfU1VQUE9SVF9CQU5ELAorICBJU19GRERfU1VQUE9SVCwKKyAgSVNfVEREX1NVUFBPUlQsCisgIFNJTV9QTE1OX0JBTkRfVVBEQVRFLAorICBESVNBQkxFX0I3X0IzOCwKKyAgRElTQUJMRV9CQU5EX0JZX1BMTU4sCisgIFBMTU5fUkVHSU9OX0JBTkQKK30gZWFzX2JhbmRfcHJpbnRfZnVuY19lbnVtOworCit0eXBlZGVmIGVudW0geworICBGVU5DX0lOUFVULAorICBDT01QX09QVF9GSUxURVIsCisgIFJGX0ZJTFRFUiwKKyAgU1dVU0VfRFVQTEVYX0ZJTFRFUiwKKyAgTU9ERU1fQ09NUF9PUFRfRklMVEVSLAorICBTV1VTRV9GSUxURVIsCisgIFNDU0lfSU5QVVQsCisgIFNJTkdMRV9CQU5EX1RPR0dMRSwKKyAgTlZSQU1fT1VUUFVULAorICBSRl9TV1VTRV9GSUxURVIsCisgIFNDU0lfT1VUUFVULAorICBNUlNfTlZSQU1fU1RPUkVEX0JBTkQsCisgIENVU1RPTV9QTE1OX0JBTkQsCisgIFJGX0lOUFVUCit9IGVhc19iYW5kX3ByaW50X2NoZWNrX3BvaW50X2VudW07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVHlwZSBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLy8gVGhlIGFjdHVhbCB0eXBlIG9mIGNzcl9zcGVjaWFsX3R5cGUgaXMgZWwxX2Nzcl9zZWFyY2hfc3BjaWFsX3R5cGVfZW51bSBpbiBlbDFfZW51bS5oCisgICAgLy8gSGVyZSB1c2UgdWludDggdG8gcHJldmVudCBkZXBlbmRhbmN5IHByb2JsZW0gKEw0L0xCUyBpbmNsdWRlIG1yc19lYXNfY2FwYWJpbGl0eS5oIGJ1dCBjb3VsZCBub3QgYWNjZXNzIEwxIGhlYWRlcikKKyAgICBrYWxfdWludDggY3NyX3NwZWNpYWxfdHlwZTsKKyAgICBrYWxfYm9vbCBza2lwX3dlYWtfZnJlcTsKKyAgICBrYWxfaW50MTYgcnNzaV90aHJlc2hvbGQ7CisgICAga2FsX3VpbnQ4IHN1YmJhbmRfYmFuZHdpZHRoOworICAgIGthbF91aW50MTYgc3Ryb25nX25fc3ViYmFuZF9udW07Cit9IG1yc19lYXNfc3JjaF9pbmZvX2JhbmRfY29uZGl0aW9uX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50MTYgYmFuZDsKKyAgICBrYWxfYm9vbCBpc19jb21wbGV0ZTsKKyAgICAvLyBjbXBsX3N1YmJhbmQgb25seSB2YWxpZCB3aGVuIGlzX2NvbXBsZXRlID0gRkFMU0UKKyAgICBrYWxfdWludDggY21wbF9zdWJiYW5kW01SU19NQVhfU1VCX0JBTkRfTlVNXTsKKyAgICAvLyBjb25kIGRlc2NyaWJlIHRoZSBiYW5kIGlzIHNlYXJjaGVkIGR1cmluZyB3aGljaCBzZXR0aW5nIG9mIGNhcnJpZXJfc2VhcmNoX3JlcQorICAgIC8vIEl0J3MgdmFsaWQgbm8gbWF0dGVyIGlzX2NvbXBsZXRlID0gRkFMU0Ugb3IgVFJVRQorICAgIG1yc19lYXNfc3JjaF9pbmZvX2JhbmRfY29uZGl0aW9uX3N0cnVjdCBjb25kOworfSBtcnNfZWFzX3NyY2hfaW5mb19iYW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8vIFRoZSBhY3R1YWwgdHlwZSBvZiBzcmNoX3R5cGUgaXMgZWwxX2Nzcl9zZWFyY2hfdHlwZV9lbnVtIGluIGVsMV9lbnVtLmgKKyAgICAvLyBIZXJlIHVzZSB1aW50OCB0byBwcmV2ZW50IGRlcGVuZGFuY3kgcHJvYmxlbSAoTDQvTEJTIGluY2x1ZGUgbXJzX2Vhc19jYXBhYmlsaXR5LmggYnV0IGNvdWxkIG5vdCBhY2Nlc3MgTDEgaGVhZGVyKQorICAgIGthbF91aW50OCBzcmNoX3R5cGU7CisgICAga2FsX2Jvb2wgc2tpcF93ZWFrX2ZyZXE7CisgICAga2FsX2ludDE2IHJzc2lfdGhyZXNob2xkOworICAgIGthbF9ib29sIGlzX2VuZGNfb25seV9zZWFyY2g7Cit9IG1yc19lYXNfc3JjaF9pbmZvX2ZyZXFfY29uZGl0aW9uX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEVBUkZDTiBlYXJmY247CisgICAga2FsX2Jvb2wgaXNfZm91bmQ7CisgICAgLy8gY29uZCBkZXNjcmliZSB0aGUgZWFyZmNuIGlzIG5vdCBmb3VuZCBkdXJpbmcgd2hpY2ggc2V0dGluZyBvZiBjYXJyaWVyX3NlYXJjaF9yZXEKKyAgICAvLyBzbyBpdCdzIG9ubHkgdmFsaWQgd2hlbiBpc19mb3VuZCA9IEZBTFNFCisgICAgbXJzX2Vhc19zcmNoX2luZm9fZnJlcV9jb25kaXRpb25fc3RydWN0IGNvbmQ7Cit9IG1yc19lYXNfc3JjaF9pbmZvX2ZyZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgRUFSRkNOIGVhcmZjbjsKKyAgICBrYWxfdWludDE2IHBjaTsKKyAgICAvLyBUaGUgZm9sbG93aW5nIGNvbGxlY3QgZnJvbSBNSUIKKyAgICAvLyBUaGUgYWN0dWFsIHR5cGUgb2Ygc3JjaF90eXBlIGlzIGVsMV9iYW5kd2lkdGhfZW51bSBpbiBlbDFfZW51bS5oCisgICAgLy8gSGVyZSB1c2UgdWludDggdG8gcHJldmVudCBkZXBlbmRhbmN5IHByb2JsZW0gKEw0L0xCUyBpbmNsdWRlIG1yc19lYXNfY2FwYWJpbGl0eS5oIGJ1dCBjb3VsZCBub3QgYWNjZXNzIEwxIGhlYWRlcikKKyAgICBrYWxfdWludDggZGxfYnc7CisgICAgLy8gVGhlIGZvbGxvd2luZyBjb2xsZWN0IGZyb20gU0lCMQorICAgIG1yc19wbG1uX2lkX2xpc3QgcGxtbl9saXN0OworICAgIGthbF91aW50MTYgdGFjOworfSBtcnNfZWFzX3NyY2hfaW5mb19jZWxsX3N0cnVjdDsKKworLy8gVGhlIE1SUyBFQVMgc2VhcmNoZWQgaW5mbyBpcyBkaXZpZGVkIHRvIDMgbGlzdHMgKGJhbmQvZnJlcS9jZWxsKSB0byBwcmV2ZW50IHVzaW5nIGEgYmlnIGN0cmwgYnVmZmVyCisvLyBCZXNpZGVzLCBkaXJlY3RseSB1c2UgdGhlIGJhbmQtPmZyZXEtPmNlbGwgaGllcmFyY2h5IHdpbGwgY2F1c2UgYSBodWdlIGRhdGEgc3RydWN0dXJlCit0eXBlZGVmIHN0cnVjdCAgeworICAgIGthbF91aW50MzIgYmFuZF9udW07CisgICAgbXJzX2Vhc19zcmNoX2luZm9fYmFuZF9zdHJ1Y3QgKmJhbmRfbGV2ZWxfbGlzdDsKKyAgICBrYWxfdWludDMyIGZyZXFfbnVtOworICAgIG1yc19lYXNfc3JjaF9pbmZvX2ZyZXFfc3RydWN0ICpmcmVxX2xldmVsX2xpc3Q7CisgICAga2FsX3VpbnQzMiBjZWxsX251bTsKKyAgICBtcnNfZWFzX3NyY2hfaW5mb19jZWxsX3N0cnVjdCAqY2VsbF9sZXZlbF9saXN0OworfSBtcnNfZWFzX3NyY2hfaW5mb19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKworICBrYWxfdWludDMyIGJhbmRfbnVtOworICBtcnNfZWFzX3NyY2hfaW5mb19iYW5kX3N0cnVjdCBiYW5kX2xldmVsX2xpc3RbTVJTX0VBU19TUkNIX0lORk9fQkFORF9NQVhdOworfSBtcnNfZWFzX3NyY2hfaW5mb19iYW5kX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKworICBrYWxfdWludDMyIGZyZXFfbnVtOworICBtcnNfZWFzX3NyY2hfaW5mb19mcmVxX3N0cnVjdCBmcmVxX2xldmVsX2xpc3RbTVJTX0VBU19TUkNIX0lORk9fRlJFUV9NQVhdOworfSBtcnNfZWFzX3NyY2hfaW5mb19mcmVxX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKworICBrYWxfdWludDMyIGNlbGxfbnVtOworICBtcnNfZWFzX3NyY2hfaW5mb19jZWxsX3N0cnVjdCBjZWxsX2xldmVsX2xpc3RbTVJTX0VBU19TUkNIX0lORk9fQ0VMTF9NQVhdOworfSBtcnNfZWFzX3NyY2hfaW5mb19jZWxsX2luZF9zdHJ1Y3Q7CisgCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQxNiAgIGJhbmQ7IAorICAgIEVBUkZDTiAgICAgICBkbF9sb3dlcl9lYXJmY247CisgICAgRUFSRkNOICAgICAgIGRsX3VwcGVyX2VhcmZjbjsKKyAgICBFQVJGQ04gICAgICAgdWxfbG93ZXJfZWFyZmNuOworICAgIEVBUkZDTiAgICAgICB1bF91cHBlcl9lYXJmY247Cit9IGVhc19wYXJ0aWFsX2JhbmRfbGlzdF9zdHJ1Y3Q7CisJCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4CXZhbGlkX251bTsKKyAgICBlYXNfcGFydGlhbF9iYW5kX2xpc3Rfc3RydWN0ICBiYW5kX2xpc3RbRUFTX0VGX0VSUkNfUEFSVElBTF9CQU5EX05VTV07IAorfSBlYXNfcGFydGlhbF9iYW5kX2luZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBFQVJGQ04gICAgICAgZWFyZmNuOyAKKyAgICBrYWxfdWludDE2ICAgbHRlX2JhbmRfbnVtOworICAgIGthbF91aW50MTYgICpsdGVfYmFuZF9saXN0X3B0cjsKK31lYXJmY25fbGlzdF9zdHJ1Y3Q7CisKKworLyogV29ya2Fyb3VuZCBmb3IgTVQ2MjkxIEZHUEEgRGlnaXRhbCBJUSAqLworLyogI2lmIGRlZmluZWQoX19SRl9CWVBBU1NfXykgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggICAgIGxvY2tfbXVsdGlfZnJlcV9udW07CisgICAga2FsX3VpbnQxNiAgICBsb2NrX211bHRpX2ZyZXFbRUFTX0xPQ0tfTVVMVElfRlJFUV9OVU1fTUFYXTsKK30gZWFzX2xvY2tfbXVsdGlfZnJlcV9jYXBhX3N0cnVjdDsKKworLyogQjY2IHN1cHBvcnQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggIGx0ZV9iYW5kX2xpc3RbU0laRV9MVEVfQkFORF9NQVNLX1RBQkxFX0VYVEVOREVEXTsKK30gbXJzX2x0ZV9iYW5kX2xpc3Rfc3RydWN0OworCisvKjRHIFVFIGNhdGVnb3J5Ki8KKworLy9tcnNfZWFzX3VlX2NhdGVnb3J5X21heF9zdHJ1Y3Qgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGVycmNfcmNtX3VlX2NhdGVnb3J5X21heF9zdHJ1Y3QKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgZGw7CisgICAga2FsX3VpbnQ4ICAgdWw7Cit9bXJzX2Vhc191ZV9jYXRlZ29yeV9tYXhfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCAgICAgICAgICAgICAgIG52cmFtX3VlX2NhdGVnb3J5OyAvLyB1ZS1jYXRlZ29yeSAtPiBudnJhbV9lcnJjX3VlX2NhdF9lbnVtCisgICAgbXJzX2Vhc191ZV9jYXRlZ29yeV9tYXhfc3RydWN0ICAgICAgbWF4X3VlX2NhdGVnb3J5OyAgICAgICAgICAKK30gbXJzX2Vhc191ZV9jYXRlZ29yeV9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworI2lmZGVmIFVOSVRfVEVTVAorICAgIGthbF91aW50MzIgIGV1dHJhX2NhcGFfbGVuZ3RoOyAKKyNpZiAoQ1VSX0dFTiA+PSBNRF9HRU45NSkKKyAgICBrYWxfdWludDggICBldXRyYV9jYXBhWzgwMDBdOyAvL3NoYWxsIGJlIGFsaWduZWQgdG8gRVJSQ19SQ01fRVVUUkFfQ0FQQV9NQVhfTEVOCisjZWxzZQorICAgIGthbF91aW50OCAgIGV1dHJhX2NhcGFbNDA5Nl07IC8vc2hhbGwgYmUgYWxpZ25lZCB0byBFUlJDX1JDTV9FVVRSQV9DQVBBX01BWF9MRU4KKyNlbmRpZiAvKiAjaWYgKENVUl9HRU4gPj0gTURfR0VOOTUpICovCisjZW5kaWYgLyogVU5JVF9URVNUICovCisgICAga2FsX3VpbnQ4ICAgZWVhX3N1cHBvcnQ7LypNU0I6IEVFQTAsIEVFQTEsLi4uLi5FRUE3Ki8KKyAgICBrYWxfdWludDggICBlaWFfc3VwcG9ydDsvKk1TQjogRUlBMCwgRUlBMSwuLi4uLkVJQTcqLworICAgIGthbF91aW50OCAgIGVhc19wb3dlcl9jbGFzczsKKy8vI2lmZGVmIF9fU0dMVEVfXworICAgIGthbF9ib29sIGlzX2JhbmRfMzlfb3JpX3N1cHBvcnQ7CisvLyNlbmRpZiAvKiBfX1NHTFRFX18gKi8KKyAgICBrYWxfdWludDggICBpc19iYW5kX29yaV9zdXBwb3J0W1NJWkVfTFRFX0JBTkRfTUFTS19UQUJMRV9FWFRFTkRFRF07CisvKiBXb3JrYXJvdW5kIGZvciBNVDYyOTEgRkdQQSBEaWdpdGFsIElRICovCisvKiAjaWYgZGVmaW5lZChfX1JGX0JZUEFTU19fKSAqLworICAgIGVhc19sb2NrX211bHRpX2ZyZXFfY2FwYV9zdHJ1Y3QgIGxvY2tfbXVsdGlfZGxfZnJlcV9jYXBhOworCWthbF91aW50OAlkYXRhWzNdOyAvLyBmb3IgTFRFX0NBUCB3cml0ZSBiYWNrIHRvIE5WUkFNCisJa2FsX3VpbnQ4CW9wX2ZlbXRvY2VsbF9zeXN0ZW1fc2VsZWN0aW9uOwkvKiBWelcgOiA2LjIuMTYuMQlGRU1UT0NFTEwgU1lTVEVNIFNFTEVDVElPTiAqLworICAgIGthbF91aW50OCAgIGRpc2FibGVfYndfYm1wW0xURV9CQU5EX05VTV9FWFRFTkRFRF07CisgICAgZWFzX3BhcnRpYWxfYmFuZF9pbmZfc3RydWN0IHBhcnRpYWxfYmFuZF9pbmY7CisgICAgZWFzX3BhcnRpYWxfYmFuZF9pbmZfc3RydWN0IHBhcnRpYWxfYmFuZF9pbmZfYmFja3VwOworICAgIGthbF91aW50OCAgIG52cmFtX2x0ZV9iYW5kW1NJWkVfTFRFX0JBTkRfTUFTS19UQUJMRV9FWFRFTkRFRF07CisgICAgbXJzX2Vhc191ZV9jYXRlZ29yeV9zdHJ1Y3QgICAgZWFzX3VlX2NhdGVnb3J5OworfSBlYXNfY2FwYWJpbGl0eV9jb250ZXh0X3N0cnVjdDsKKworCisjaWYgKENVUl9HRU4gPj0gTURfR0VOOTUpCisKK3R5cGVkZWYgc3RydWN0eworICAgIGthbF91aW50MTYgYmFuZDsKKyAgICBrYWxfdWludDggY2FfYndfY2xhc191bDsgLyogQT0wLCBCPTEsIEM9MiwgLi4uLmZvciBjYyBudW0gMCBzZXQgYXMgNiovCisgICAga2FsX3VpbnQ4IGNhX2J3X2NsYXNfZGw7IC8qIEE9MCwgQj0xLCBDPTIsIC4uLi5mb3IgY2MgbnVtIDAgc2V0IGFzIDYqLworfW1yc19lYXNfY2FfYmFuZF9wYXJhbV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIGthbF91aW50OCAgIGJhbmRfcGFyYW1fbnVtOworICAgIG1yc19lYXNfY2FfYmFuZF9wYXJhbV9zdHJ1Y3QgYmFuZF9wYXJhbVtMVEVfQ0FfU0lNVUxfQkFORF9NQVhdOworfW1yc19lYXNfY2FfYmFuZF9jb21iX3N0cnVjdDsKKworI2VuZGlmIC8qICNpZiAoQ1VSX0dFTiA+PSBNRF9HRU45NSkgKi8KKworI2lmIChDVVJfR0VOID49IE1EX0dFTjk3KQorCit0eXBlZGVmIHN0cnVjdHsKKyAgICBrYWxfdWludDggICBiYW5kX3BhcmFtX251bTsKKyAgICBtcnNfZWFzX2NhX2JhbmRfcGFyYW1fc3RydWN0IGJhbmRfcGFyYW1bTFRFX0NBX01BWF9OVU1fU0lNVUxfQkFORFNdOworfW1yc19lYXNfbHRlX2JhbmRfY29tYl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgICAgYmNfbnVtOworICAgIG1yc19lYXNfbHRlX2JhbmRfY29tYl9zdHJ1Y3QgbHRlX3N0YW5kYWxvbmVfYmNbTVJEQ19NQVhfTlVNX0JBTkRfQ09NQklOQVRJT05TXTsgCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICBpc19iY19zdXBwb3J0W01SRENfTUFYX05VTV9CQU5EX0NPTUJJTkFUSU9OU107Cit9bXJzX2Vhc19tcmRjX2x0ZV9zdGFuZGFsb25lX2JjX2xpc3Q7CisKKyNlbmRpZiAvKiAjaWYgKENVUl9HRU4gPj0gTURfR0VOOTcpICovCisKK3R5cGVkZWYgZW51bSB7CisgIEVBU19CQU5EX1BIWV9GUkVRX01JTiwKKyAgRUFTX0JBTkRfUEhZX0ZSRVFfTUFYLCAgCisgIEVBU19CQU5EX0VBUkZDTl9NSU4sICAKKyAgRUFTX0JBTkRfRUFSRkNOX01BWCwKKyAgRUFTX0JBTkRfRUFSRkNOX0ZSRVFfSU5GT19OVU0KK30gZWFzX2JhbmRfZWFyZmNuX2ZyZXFfaW5mb19lbnVtOworCit0eXBlZGVmIGVudW0geworICBFQVNfQ0VMTF9NT0RFX1VOS05PV04sCisgIEVBU19DRUxMX01PREVfRkRELAorICBFQVNfQ0VMTF9NT0RFX1RERAorfSBlYXNfY2VsbF9tb2RlX2VudW07CisKK3R5cGVkZWYgZW51bSB7CisgIEVBU19DT1VOVFJZX0pBUEFOLAorICBFQVNfQ09VTlRSWV9DSElOQSwKKyAgRUFTX0NPVU5UUllfVVNBLAorICBFQVNfQ09VTlRSWV9OT1JUSF9BTUVSSUNBX0JZX0NVU1RPTUVSCit9IGVhc19jb3VudHJ5X2VudW07CisKK3R5cGVkZWYgZW51bSB7CisgIEVBU19DQVRfNCA9IDAsICAgLyogRUFTX0NBVF80IHNldCB0byAwOiBtZWFucyBubyBDQSBzdXBwb3J0IGZvciBMNCB0byBkaXNwbGF5IENUIENBIGljb24gKi8KKyAgRUFTX0NBVF82ID0gMSAgICAvKiBFQVNfQ0FUXzYgc2V0IHRvIDE6IG1lYW5zIENBIHN1cHBvcnQgKi8KK30gZWFzX2NhdGVnb3J5X2VudW07CisKK3R5cGVkZWYgZW51bSB7CisgIEVBU19DQVBfU0hPUlRfTUVBU19HQVBfUjE0LAorICAKKyAgRUFTX0NBUF9UT1RBTF9OVU0gIAorfWVhc19jYXBfZmVhdHVyZV9lbnVtOworCisjaWZkZWYgVU5JVF9URVNUCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQzMiBiYW5kX21hc2tfd29yZF9jb3VudDsKKyAgICBrYWxfdWludDMyIGJhbmRfbWFza1tMVEVfQkFORF9NQVNLX1dPUkRfQ09VTlRdOworfSBlYXNfcmZfc3VwcG9ydGVkX2JhbmRzX3N0cnVjdDsKKyNlbmRpZiAvKiBVTklUX1RFU1QgKi8KKwordHlwZWRlZiBzdHJ1Y3R7CisgICAga2FsX3VpbnQzMiAgZGxfc3RhcnRfZWFyZmNuOworCWthbF91aW50MzIgIGRsX2VuZF9lYXJmY247CisgICAga2FsX3VpbnQzMiAgdWxfc3RhcnRfZWFyZmNuOworCWthbF91aW50MzIgIHVsX2VuZF9lYXJmY247Cit9ZWFzX3JmX3BhcnRpYWxfYmFuZF9wYXJhbV9zdHJ1Y3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEZWNsYXJhdGlvbnMgT2YgRXhwb3J0ZWQgR2xvYmFscworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLyBubyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIHVzZSBmcmVlbHkKK2Vhc19jYXRlZ29yeV9lbnVtIG1yc19lYXNfdWVfY2F0ZWdvcnkoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCisKKy8vIG5vIG5lZWQgbXV0ZXggcHJvdGVjdGlvbiwgdXNlIGZyZWVseQora2FsX2Jvb2wgbXJzX2Vhc19pc19zdXBwb3J0ZWRfYmFuZChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQxNiAgICBsdGVfYmFuZCk7CisKKy8vIG5vIG5lZWQgbXV0ZXggcHJvdGVjdGlvbiwgdXNlIGZyZWVseQora2FsX2Jvb2wgbXJzX2Vhc19pc19zdXBwb3J0ZWRfYmFuZF9leHQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDE2ICAgIGx0ZV9iYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX2Jvb2wgICAgICBzaG93X3RyYWNlKTsKKworLy8gbm8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCB1c2UgZnJlZWx5CitrYWxfYm9vbCBtcnNfZWFzX2lzX3JmX3N1cHBvcnRlZF9iYW5kKGthbF91aW50MTYgbHRlX2JhbmQpOworCisKKy8vIG5vIG5lZWQgbXV0ZXggcHJvdGVjdGlvbiwgdXNlIGZyZWVseQora2FsX2Jvb2wgbXJzX2Vhc19nZXRfdW5zdXBwb3J0ZWRfcmFuZ2UoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MTYgbHRlX2JhbmQsIEVBUkZDTiAqbDEsIEVBUkZDTiAqcjEsIEVBUkZDTiAqbDIsIEVBUkZDTiAqcjIpOworCisKKy8vIG5vIG5lZWQgbXV0ZXggcHJvdGVjdGlvbiwgdXNlIGZyZWVseQordm9pZCBtcnNfZWFzX2NvbnZlcnRfZGxfZWFyZmNuKEVBUkZDTiAgICAgICAgZGxfZWFyZmNuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MTYgICAqbHRlX2JhbmRfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MzIgICAqcGh5X2ZyZXFfcHRyKTsKKworCisvLyBubyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIHVzZSBmcmVlbHkKK3ZvaWQgbXJzX2Vhc19jb252ZXJ0X3VsX2VhcmZjbihFQVJGQ04gICAgICAgIHVsX2VhcmZjbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDE2ICAgKmx0ZV9iYW5kX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDMyICAgKnBoeV9mcmVxX3B0cik7CisKKworLy8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCBjYWxsICJtcnNfZWFzX2ludGVybmFsX3h4eC4uLiIgZm9yIGludGVybmFsIHVzZSAodG8gYXZvaWQgdGFraW5nIG11dGV4IHJlY3Vyc2l2ZWx5KQora2FsX2Jvb2wgbXJzX2Vhc19pc19zdXBwb3J0ZWRfZGxfZWFyZmNuKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVBUkZDTiAgICAgICAgZGxfZWFyZmNuKTsKKworCisvLyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIGNhbGwgIm1yc19lYXNfaW50ZXJuYWxfeHh4Li4uIiBmb3IgaW50ZXJuYWwgdXNlICh0byBhdm9pZCB0YWtpbmcgbXV0ZXggcmVjdXJzaXZlbHkpCitrYWxfYm9vbCBtcnNfZWFzX2lzX3N1cHBvcnRlZF91bF9lYXJmY24oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVBUkZDTiAgICAgICAgdWxfZWFyZmNuKTsKKworCisvLyBubyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIHVzZSBmcmVlbHkKK2thbF9ib29sIG1yc19lYXNfaXNfZGxfZWFyZmNuX292ZXJsYXAoRUFSRkNOICAgICAgICAgIGRsX2VhcmZjbjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVBUkZDTiAgICAgICAgICBkbF9lYXJmY24yKTsKKworCisvLyBubyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIHVzZSBmcmVlbHkKK2thbF9ib29sIG1yc19lYXNfaXNfdWxfZWFyZmNuX292ZXJsYXAoRUFSRkNOICAgICAgICAgIHVsX2VhcmZjbjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVBUkZDTiAgICAgICAgICB1bF9lYXJmY24yKTsKKworCisvLyBubyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIHVzZSBmcmVlbHkKK2thbF9ib29sIG1yc19lYXNfcGFydGlhbF9iYW5kX3JhbmdlX2NoayhrYWxfdWludDE2ICBsdGVfYmFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQVJGQ04gICAgICBkbF9sb3dlcl9lYXJmY24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUFSRkNOICAgICAgZGxfdXBwZXJfZWFyZmNuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVBUkZDTiAgICAgIHVsX2xvd2VyX2VhcmZjbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQVJGQ04gICAgICB1bF91cHBlcl9lYXJmY24pOworCisKKy8vIG5vIG5lZWQgbXV0ZXggcHJvdGVjdGlvbiwgdXNlIGZyZWVseQora2FsX3VpbnQzMiBtcnNfZWFzX2NvbnZlcnRfZGxfZWFyZmNuX3RvX2ZyZXEoRUFSRkNOICAgIGRsX2VhcmZjbik7CisKKworLy8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCBjYWxsICJtcnNfZWFzX2ludGVybmFsX3h4eC4uLiIgZm9yIGludGVybmFsIHVzZSAodG8gYXZvaWQgdGFraW5nIG11dGV4IHJlY3Vyc2l2ZWx5KQorRUFSRkNOIG1yc19lYXNfY29udmVydF90b19iZXN0X2RsX2VhcmZjbl9tZmJpKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVBUkZDTiAgICAgICAgZGxfZWFyZmNuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MTYgICAgYmFuZF9pbmRpY2F0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICBsdGVfYmFuZF9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQxNiAgICpsdGVfYmFuZF9saXN0X3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXNfYmFuZHdpZHRoX2VudW0gYmFuZF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfYm9vbCAgICAgIGFsbG93X2Rpc2FibGVkX2JhbmRzKTsKKworCisvLyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIGNhbGwgIm1yc19lYXNfaW50ZXJuYWxfeHh4Li4uIiBmb3IgaW50ZXJuYWwgdXNlICh0byBhdm9pZCB0YWtpbmcgbXV0ZXggcmVjdXJzaXZlbHkpCitFQVJGQ04gbXJzX2Vhc19jb252ZXJ0X3RvX2Jlc3RfZGxfZWFyZmNuX21mYmlfZnJlcV9wcmkoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUFSRkNOICAgICAgICBkbF9lYXJmY24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQxNiAgICBiYW5kX2luZGljYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICAgIGx0ZV9iYW5kX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDE2ICAgKmx0ZV9iYW5kX2xpc3RfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF9ib29sICAgICAgZnJlcV9wcmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzX2JhbmR3aWR0aF9lbnVtIGJhbmRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX2Jvb2wgICAgICBhbGxvd19kaXNhYmxlZF9iYW5kcyk7CisKKworLy8gbm8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCB1c2UgZnJlZWx5CitFQVJGQ04gbXJzX2Vhc19jb252ZXJ0X2RsX2VhcmZjbl90b190YXJnZXRfYmFuZChFQVJGQ04gICAgICAgIGRsX2VhcmZjbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MTYgICAgdGFyZ2V0X2JhbmQpOworCisKKy8vIG5vIG5lZWQgbXV0ZXggcHJvdGVjdGlvbiwgdXNlIGZyZWVseQorRUFSRkNOIG1yc19lYXNfY29udmVydF91bF9lYXJmY25fdG9fdGFyZ2V0X2JhbmQoRUFSRkNOICAgICAgICB1bF9lYXJmY24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDE2ICAgIHRhcmdldF9iYW5kKTsKKworCisvLyBubyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIHVzZSBmcmVlbHkKK2thbF9ib29sIG1yc19lYXNfaXNfY2Ffc3VwcGxlbWVudGFsX2RsX2VhcmZjbihFQVJGQ04gIGRsX2VhcmZjbik7CisKKworLy8gbm8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCB1c2UgZnJlZWx5CitrYWxfYm9vbCBtcnNfZWFzX2lzX2NhX3N1cHBsZW1lbnRhbF9kbF9iYW5kKGthbF91aW50MTYgIGx0ZV9iYW5kKTsKKworCisvLyBubyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIHVzZSBmcmVlbHkKK2thbF9ib29sIG1yc19lYXNfaXNfY2Ffc3VwcGxlbWVudGFsX2RsX2JhbmRfZXh0KGthbF91aW50MTYgIGx0ZV9iYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX2Jvb2wgICAgc2hvd190cmFjZSk7CisKKworLy8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCBjcmVhdGUgbmV3ICJtcnNfZWFzX2ludGVybmFsX3l5eS4uLiIgZm9yIGludGVybmFsIHVzZSAodG8gYXZvaWQgdGFraW5nIG11dGV4IHJlY3Vyc2l2ZWx5KSAocmVmZXIgdG8gIm1yc19lYXNfaXNfc3VwcG9ydGVkX2RsX2VhcmZjbiIpCitFQVJGQ04gbXJzX2Vhc19tdWx0aV9iYW5kX2NvbnZlcnNpb24oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUFSRkNOICAgICAgICBlYXJmY24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQxNiAgICBsdGVfYmFuZF9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQxNiAgICpsdGVfYmFuZF9saXN0X3B0cik7CisKKworLy8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCBjcmVhdGUgbmV3ICJtcnNfZWFzX2ludGVybmFsX3l5eS4uLiIgZm9yIGludGVybmFsIHVzZSAodG8gYXZvaWQgdGFraW5nIG11dGV4IHJlY3Vyc2l2ZWx5KSAocmVmZXIgdG8gIm1yc19lYXNfaXNfc3VwcG9ydGVkX2RsX2VhcmZjbiIpCitFQVJGQ04gbXJzX2Vhc19tdWx0aV9iYW5kX2NvbnZlcnNpb25fcmVqX3JlZGlyZWN0aW9uKE1SU19TSU1fSU5ERVggICAgICAgc2ltX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQVJGQ04gICAgICAgICAgICAgIHJlZGlyZWN0aW9uX2VhcmZjbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICBmcmVxX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFyZmNuX2xpc3Rfc3RydWN0ICplYXJmY25fbGlzdF9wdHIpOworCisKKy8vIG5vIG5lZWQgbXV0ZXggcHJvdGVjdGlvbiwgdXNlIGZyZWVseQora2FsX2Jvb2wgbXJzX2Vhc19pc19sdGVfZmRkX3N1cHBvcnQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCisKKy8vIG5vIG5lZWQgbXV0ZXggcHJvdGVjdGlvbiwgdXNlIGZyZWVseQora2FsX2Jvb2wgbXJzX2Vhc19pc19sdGVfdGRkX3N1cHBvcnQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCisKKy8vIG5lZWQgbXV0ZXggcHJvdGVjdGlvbiwgY3JlYXRlIG5ldyAibXJzX2Vhc19pbnRlcm5hbF95eXkuLi4iIGZvciBpbnRlcm5hbCB1c2UgKHRvIGF2b2lkIHRha2luZyBtdXRleCByZWN1cnNpdmVseSkgKHJlZmVyIHRvICJtcnNfZWFzX2lzX3N1cHBvcnRlZF9kbF9lYXJmY24iKQora2FsX3VpbnQ4IG1yc19lYXNfZ2V0X2VlYV9zdXBwb3J0KE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworCisvLyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIGNyZWF0ZSBuZXcgIm1yc19lYXNfaW50ZXJuYWxfeXl5Li4uIiBmb3IgaW50ZXJuYWwgdXNlICh0byBhdm9pZCB0YWtpbmcgbXV0ZXggcmVjdXJzaXZlbHkpIChyZWZlciB0byAibXJzX2Vhc19pc19zdXBwb3J0ZWRfZGxfZWFyZmNuIikKK2thbF91aW50OCBtcnNfZWFzX2dldF9laWFfc3VwcG9ydChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKKwora2FsX3VpbnQ4IG1yc19lYXNfZ2V0X3Bvd2VyY2xhc3MoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MTYgbHRlX2JhbmQpOworCisjaWYgKENVUl9HRU4gPj0gTURfR0VOOTUpCitrYWxfdWludDggbXJzX2Vhc19nZXRfY2FfY29tYl9wb3dlcmNsYXNzKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBtcnNfZWFzX2NhX2JhbmRfY29tYl9zdHJ1Y3QgKmNhX2JhbmRfY29tYik7CisKK2thbF91aW50OCBtcnNfZWFzX2dldF9jYV9jb21iX3Bvd2VyY2xhc3NfYnlfY2Fycmllcl9pbmZvKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBtcnNfZWFzX2NhX2JhbmRfY29tYl9zdHJ1Y3QgKmNhX2JhbmRfY29tYik7CisjZW5kaWYgLyogI2lmIChDVVJfR0VOID49IE1EX0dFTjk1KSAqLworCisvLyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIGNyZWF0ZSBuZXcgIm1yc19lYXNfaW50ZXJuYWxfeXl5Li4uIiBmb3IgaW50ZXJuYWwgdXNlICh0byBhdm9pZCB0YWtpbmcgbXV0ZXggcmVjdXJzaXZlbHkpIChyZWZlciB0byAibXJzX2Vhc19pc19zdXBwb3J0ZWRfZGxfZWFyZmNuIikKK2thbF91aW50OCBtcnNfZWFzX2dldF9mZW10b2NlbGxfc3lzdGVtX3NlbGVjdGlvbihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKKworLy8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCBjcmVhdGUgbmV3ICJtcnNfZWFzX2ludGVybmFsX3l5eS4uLiIgZm9yIGludGVybmFsIHVzZSAodG8gYXZvaWQgdGFraW5nIG11dGV4IHJlY3Vyc2l2ZWx5KSAocmVmZXIgdG8gIm1yc19lYXNfaXNfc3VwcG9ydGVkX2RsX2VhcmZjbiIpCit2b2lkIG1yc19lYXNfc2V0X2ZlbXRvY2VsbF9zeXN0ZW1fc2VsZWN0aW9uKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDggZnNzKTsKKworCisvLyBvbmx5IHVzZSBpbiBtcnMgaW5pdCBwaGFzZSBvbmx5LCBubyBuZWVkIG11dGV4IHByb3RlY3Rpb24KK3ZvaWQgbXJzX2Vhc19yZWFkX252cmFtX2NuZl9oYW5kbGVyKGthbF91aW50MTYgbnZyYW1fZmlsZV9pZCwga2FsX3VpbnQ4ICpkYXRhLCBrYWxfdWludDE2IGxlbik7CisKKworI2lmZGVmIFVOSVRfVEVTVAordm9pZCBtcnNfZWFzX3NldF91ZV9ldXRyYV9jYXBhYmlsaXR5KE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDggKnBfdWVfZXV0cmFfY2FwLCBrYWxfdWludDMyIGNhcF9sZW5ndGgpOworCit2b2lkIG1yc19lYXNfc2V0X2VlYV9zdXBwb3J0KE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDggZWVhX3N1cHBvcnQpOworCit2b2lkIG1yc19lYXNfc2V0X2VpYV9zdXBwb3J0KE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDggZWlhX3N1cHBvcnQpOworI2VuZGlmIC8qIFVOSVRfVEVTVCAqLworCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmIC8qICNpZiAwICovCisKKy8vIG5vIG5lZWQgbXV0ZXggcHJvdGVjdGlvbiwgdXNlIGZyZWVseQora2FsX3VpbnQzMiBtcnNfZWFzX2dldF91ZV9ldXRyYV9jYXBhYmlsaXR5X2J5X3BsbW4oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCAqKnBwX3VlX2V1dHJhX2NhcGEsIG1yc19wbG1uX2lkX2xpc3QgKnBfcGxtbl9pZF9saXN0LCBrYWxfYm9vbCBpc19kaXNhYmxlX2dzbSk7CisKKyNpZiAoQ1VSX0dFTiA+PSBNRF9HRU45NykKK2thbF91aW50MzIgbXJzX2Vhc19nZXRfdWVfZXV0cmFfY2FwYWJpbGl0eV9mb3JfbnIoCisgICAgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgbXJzX3BsbW5faWRfbGlzdCAqcF9wbG1uX2lkX2xpc3QsCisgICAga2FsX2Jvb2wgaXNfZGlzYWJsZV9nc20sCisgICAgbXJzX25yYXNfb2N0ZXRfc3RyaW5nX3N0cnVjdCBjYXBfcmVxdWVzdF9maWx0ZXIsCisgICAga2FsX3VpbnQ4ICoqcHBfdWVfZXV0cmFfY2FwYSwgCisgICAgbXJzX2dlbWluaV9zdGF0dXNfZW51bSBnZW1pbmlfc3RhdHVzLAorICAgIGthbF9ib29sIGlzX3Jlc3RyaWN0aW9uX3NpemVfdmFsaWQsCisgICAga2FsX3VpbnQzMiByZXN0cmljdGlvbl9zaXplKTsKK3ZvaWQgbXJzX2Vhc19pc19tcmRjX2x0ZV9zdGFuZGFsb25lX2JhbmRfY29tYmluYXRpb25fc3VwcG9ydCgKKyAgICBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwKKyAgICBtcnNfcGxtbl9pZF9saXN0ICpwX3BsbW5faWRfbGlzdCwKKyAgICBtcnNfZWFzX21yZGNfbHRlX3N0YW5kYWxvbmVfYmNfbGlzdCAqcF9iYW5kX2NvbWJfbGlzdCk7CisKKyNlbmRpZiAvKiAoQ1VSX0dFTiA+PSBNRF9HRU45NykgKi8KKworLy8gbm8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCB1c2UgZnJlZWx5CitlYXNfY2VsbF9tb2RlX2VudW0gbXJzX2Vhc19qZGdfY2VsbF9tb2RlX2J5X2JhbmQoa2FsX3VpbnQxNiBsdGVfYmFuZCk7CisKKworLy8gbm8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCB1c2UgZnJlZWx5CitlYXNfY2VsbF9tb2RlX2VudW0gbXJzX2Vhc19qZGdfY2VsbF9tb2RlX2J5X2VhcmZjbihFQVJGQ04gZWFyZmNuKTsKKworCisvLyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIGNhbGwgIm1yc19lYXNfaW50ZXJuYWxfeHh4Li4uIiBmb3IgaW50ZXJuYWwgdXNlICh0byBhdm9pZCB0YWtpbmcgbXV0ZXggcmVjdXJzaXZlbHkpCitrYWxfYm9vbCBtcnNfZWFzX2lzX3N1cHBvcnRlZF9kbF9lYXJmY25fd2l0aF9id19jaGVjayhNUlNfU0lNX0lOREVYICAgICAgc2ltX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUFSRkNOICAgICAgICAgICAgIGRsX2VhcmZjbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXNfYmFuZHdpZHRoX2VudW0gYmFuZF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF9ib29sICAgICAgICAgICBhbGxvd19kaXNhYmxlZF9iYW5kcyk7CisKKy8vIG5vIG5lZWQgbXV0ZXggcHJvdGVjdGlvbiwgdXNlIGZyZWVseSwgYnV0IHlvdSBuZWVkIGNoZWNrIGlucHV0IGRsX2VhcmZjbiBpcyBzdXBwb3J0ZWQgYmFuZCBieSB5b3Vyc2VsZgora2FsX2Jvb2wgbXJzX2Vhc19kbF9mdWxsX3BhcnRpYWxfYmFuZF9jaGVjayhrYWxfdWludDE2CQkgICBiYW5kLAkKKwkJCQkJCQkJCQkgICAgRUFSRkNOICAgICAgICAgICAgIGRsX2VhcmZjbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhc19iYW5kd2lkdGhfZW51bSBiYW5kX3dpZHRoLAorCQkJCQkJCQkJCSAgICBFQVJGQ04JCQkgICBzdGFydF9lYXJmY24sCisJCQkJCQkJCQkJICAgIEVBUkZDTgkJCSAgIGVuZF9lYXJmY24sCisJCQkJCQkJCQkJICAgIGthbF9ib29sICAgICAgICAgICBza2lwX2Z1bGxfYmFuZF9jaGVjayk7CisKKy8vIG5lZWQgbXV0ZXggcHJvdGVjdGlvbiwgY2FsbCAibXJzX2Vhc19pbnRlcm5hbF94eHguLi4iIGZvciBpbnRlcm5hbCB1c2UgKHRvIGF2b2lkIHRha2luZyBtdXRleCByZWN1cnNpdmVseSkKK2thbF9ib29sIG1yc19lYXNfaXNfc3VwcG9ydGVkX3VsX2VhcmZjbl93aXRoX2J3X2NoZWNrKE1SU19TSU1fSU5ERVggICAgICBzaW1faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQVJGQ04gICAgICAgICAgICAgdWxfZWFyZmNuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhc19iYW5kd2lkdGhfZW51bSBiYW5kX3dpZHRoKTsKKworCisvLyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIGNhbGwgIm1yc19lYXNfaW50ZXJuYWxfeHh4Li4uIiBmb3IgaW50ZXJuYWwgdXNlICh0byBhdm9pZCB0YWtpbmcgbXV0ZXggcmVjdXJzaXZlbHkpCitrYWxfYm9vbCBtcnNfZWFzX2lzX3N1cHBvcnRlZF9kbF9iYW5kd2lkdGgoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQxNiAgICBsdGVfYmFuZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzX2JhbmR3aWR0aF9lbnVtIGJhbmRfd2lkdGgpOworCisKKy8vIG5lZWQgbXV0ZXggcHJvdGVjdGlvbiwgY3JlYXRlIG5ldyAibXJzX2Vhc19pbnRlcm5hbF95eXkuLi4iIGZvciBpbnRlcm5hbCB1c2UgKHRvIGF2b2lkIHRha2luZyBtdXRleCByZWN1cnNpdmVseSkgKHJlZmVyIHRvICJtcnNfZWFzX2lzX3N1cHBvcnRlZF9kbF9lYXJmY24iKQora2FsX2Jvb2wgbXJzX2Vhc19iYW5kX3NldHRpbmdfdXBkYXRlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDggKmx0ZV9iYW5kX2JtcCwga2FsX2Jvb2wgd2l0aF9kdXBsZXhfbW9kZSk7CisKKworLy8gbm8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCB1c2UgZnJlZWx5Cit2b2lkIG1yc19lYXNfbWF4X2JhbmRfY2FwX2Zvcl91c2VyX2V4dGVuZGVkKCBtcnNfbHRlX2JhbmRfbGlzdF9zdHJ1Y3QgKmx0ZV9iYW5kICk7CisKKy8vI2lmZGVmIF9fU0dMVEVfXworLy8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCBjYWxsICJtcnNfZWFzX2ludGVybmFsX3h4eC4uLiIgZm9yIGludGVybmFsIHVzZSAodG8gYXZvaWQgdGFraW5nIG11dGV4IHJlY3Vyc2l2ZWx5KQora2FsX2Jvb2wgbXJzX2Vhc19pc19zdXBwb3J0ZWRfYmFuZF9pbl9udnJhbV9zdG9yZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDE2ICAgIGx0ZV9iYW5kKTsKKworCisvLyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIGNyZWF0ZSBuZXcgIm1yc19lYXNfaW50ZXJuYWxfeXl5Li4uIiBmb3IgaW50ZXJuYWwgdXNlICh0byBhdm9pZCB0YWtpbmcgbXV0ZXggcmVjdXJzaXZlbHkpIChyZWZlciB0byAibXJzX2Vhc19pc19zdXBwb3J0ZWRfZGxfZWFyZmNuIikKK2thbF9ib29sIG1yc19lYXNfaXNfc3VwcG9ydGVkX2VhcmZjbl9pbl9udnJhbV9zdG9yZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVBUkZDTiAgICAgICAgZGxfZWFyZmNuKTsgCisvLyNlbmRpZiAvKiBfX1NHTFRFX18gKi8KKworCisvKiBXb3JrYXJvdW5kIGZvciBNVDYyOTEgRkdQQSBEaWdpdGFsIElRICovCisjaWYgZGVmaW5lZChfX1JGX0JZUEFTU19fKQordm9pZCBtcnNfZWFzX3NldF9sb2NrX211bHRpX2ZyZXFfY2FwYShlYXNfbG9ja19tdWx0aV9mcmVxX2NhcGFfc3RydWN0ICpsb2NrX211bHRpX2ZyZXFfY2FwYSk7CisjZW5kaWYgIC8qICNpZiBkZWZpbmVkKF9fUkZfQllQQVNTX18pICovCisKKworLy8gbm8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCB1c2UgZnJlZWx5CitrYWxfYm9vbCBtcnNfZWFzX2lzX3N1cHBvcnRlZF9jMmtfYmFuZChrYWxfdWludDggYmFuZCk7CisKKworLy8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCBjcmVhdGUgbmV3ICJtcnNfZWFzX2ludGVybmFsX3l5eS4uLiIgZm9yIGludGVybmFsIHVzZSAodG8gYXZvaWQgdGFraW5nIG11dGV4IHJlY3Vyc2l2ZWx5KSAocmVmZXIgdG8gIm1yc19lYXNfaXNfc3VwcG9ydGVkX2RsX2VhcmZjbiIpCit2b2lkIG1yc19lYXNfYmFuZF9jb250cm9sX2Z1bmMoa2FsX3VpbnQxNiBsdGVfYmFuZCwgZWFzX2JhbmRfY29udHJvbF9lbnVtIGJhbmRfY3RybF9pbmZvLCBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKKworLy8gbm8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCB1c2UgZnJlZWx5CitrYWxfYm9vbCBtcnNfZWFzX2lzX21jY19tYXRjaF9jb3VudHJ5KGVhc19jb3VudHJ5X2VudW0gY291bnRyeSwga2FsX3VpbnQ4IG1jYzEsIGthbF91aW50OCBtY2MyLCBrYWxfdWludDggbWNjMyk7CisKKworLy8gbmVlZCBtdXRleCBwcm90ZWN0aW9uLCBjcmVhdGUgbmV3ICJtcnNfZWFzX2ludGVybmFsX3l5eS4uLiIgZm9yIGludGVybmFsIHVzZSAodG8gYXZvaWQgdGFraW5nIG11dGV4IHJlY3Vyc2l2ZWx5KSAocmVmZXIgdG8gIm1yc19lYXNfaXNfc3VwcG9ydGVkX2RsX2VhcmZjbiIpCit2b2lkIG1yc19lYXNfYWRkX3JlbW92ZV9iYW5kKGthbF91aW50MTYgbHRlX2JhbmQsIGVhc19iYW5kX2NvbnRyb2xfZW51bSBiYW5kX2N0cmxfaW5mbywgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCit2b2lkIG1yc19lYXNfZ2V0X3JmX3N1cHBvcnRlZF9iYW5kX21hc2soTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCAqcF9sdGVfc3VwcG9ydF9iYW5kKTsKKworCisvLyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIGNhbGwgIm1yc19lYXNfaW50ZXJuYWxfeHh4Li4uIiBmb3IgaW50ZXJuYWwgdXNlICh0byBhdm9pZCB0YWtpbmcgbXV0ZXggcmVjdXJzaXZlbHkpCit2b2lkIG1yc19lYXNfZ2V0X2NvbnRleHRfbnZyYW1fbHRlX2JhbmQoa2FsX3VpbnQ4ICpwX2x0ZV9iYW5kX21hc2ssIE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworCisvLyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIGNhbGwgIm1yc19lYXNfaW50ZXJuYWxfeHh4Li4uIiBmb3IgaW50ZXJuYWwgdXNlICh0byBhdm9pZCB0YWtpbmcgbXV0ZXggcmVjdXJzaXZlbHkpCit2b2lkIG1yc19lYXNfc2V0X2NvbnRleHRfbnZyYW1fbHRlX2JhbmQoa2FsX3VpbnQ4ICpwX2x0ZV9iYW5kX21hc2ssIE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworCisvLyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIGNhbGwgIm1yc19lYXNfaW50ZXJuYWxfeHh4Li4uIiBmb3IgaW50ZXJuYWwgdXNlICh0byBhdm9pZCB0YWtpbmcgbXV0ZXggcmVjdXJzaXZlbHkpCit2b2lkIG1yc19lYXNfZ2V0X2VtX2x0ZV9zdXBwb3J0X2JhbmQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCAqcF9sdGVfc3VwcG9ydF9iYW5kKTsKKworCisvLyBuZWVkIG11dGV4IHByb3RlY3Rpb24sIGNyZWF0ZSBuZXcgIm1yc19lYXNfaW50ZXJuYWxfeXl5Li4uIiBmb3IgaW50ZXJuYWwgdXNlICh0byBhdm9pZCB0YWtpbmcgbXV0ZXggcmVjdXJzaXZlbHkpIChyZWZlciB0byAibXJzX2Vhc19pc19zdXBwb3J0ZWRfZGxfZWFyZmNuIikKK2thbF91aW50OCBtcnNfZWFzX1dNSURfbHRlX2JhbmRfY2hlY2soTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCit2b2lkIG1yc19lYXNfYWRkX2JsYWNrX2NlbGxfbGlzdF9ub3RpZmljYXRpb24odm9pZCk7CisKK3ZvaWQgbXJzX2Vhc19jbGVhcl9ibGFja19jZWxsX2xpc3Rfbm90aWZpY2F0aW9uKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworRUFSRkNOIG1yc19lYXNfZ2V0X2RsX2VhcmZjbl9mcmVxKGthbF91aW50MTYgbHRlX2JhbmQsIGVhc19iYW5kX2VhcmZjbl9mcmVxX2luZm9fZW51bSBpZHgpOworCitFQVJGQ04gbXJzX2Vhc19nZXRfdWxfZWFyZmNuX2ZyZXEoa2FsX3VpbnQxNiBsdGVfYmFuZCwgZWFzX2JhbmRfZWFyZmNuX2ZyZXFfaW5mb19lbnVtIGlkeCk7CisKKy8qIExURSBiYW5kIGNvbnZlcnNpb24gZnVuY3Rpb24gKi8KK2thbF91aW50MTYgbXJzX2Vhc19jdnJ0X2x0ZV9iYW5kX3RvX3VpbnQoTFRFX0JhbmQgbHRlX2JhbmQpOworCit2b2lkIG1yc19lYXNfY2xlYXJfc3VwcG9ydF9iYW5kX2JpdF9ieV9jZWxsX21vZGUoa2FsX3VpbnQ4ICpzdXBwb3J0QmFuZEJpdG1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWFzX2NlbGxfbW9kZV9lbnVtIGNlbGxNb2RlKTsKKworZXh0ZXJuIHZvaWQgbXJzX2Vhc19yZXRyaWV2ZUx0ZUJhbmRCaXRtYXNrX2J5X3BsbW4oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwTEJhbmRCaXRtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXJzX3BsbW5faWRfbGlzdCAqcF9wbG1uX2lkX2xpc3QpOworCitleHRlcm4ga2FsX2Jvb2wgbXJzX2Vhc19iYW5kX3NldHRpbmdfdXBkYXRlX2J5X2hwbG1uX2FuZF9jcGxtbihmdW5jdGlvbl9jYWxsZXJfaWRfZW51bSBjYWxsZXJfaWQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1yc19wbG1uX2lkKiBocGxtbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcnNfcGxtbl9pZF9saXN0KiBjcGxtbik7CisKK21yc19zaW1fcGFydGlhbF9iYW5kX2NmZ19zdGF0ZV9lbnVtIG1yc19lYXNfZ2V0X3NpbV9wYXJ0aWFsX2JhbmRfc3RhdGUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCittcnNfc2ltX2JhbmRfY2ZnX3N0YXRlX2VudW0gbXJzX2Vhc19nZXRfc2ltX2JhbmRfc3RhdGUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCittcnNfcGxtbl9iYW5kX2NmZ19zdGF0ZV9lbnVtIG1yc19lYXNfZ2V0X3BsbW5fYmFuZF9zdGF0ZShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKK21yc19jdXN0b21fZGlzYWJsZV9iYW5kX2J5X3BsbW5fc3RhdGVfZW51bSBtcnNfZWFzX2dldF9jdXN0b21fZGlzYWJsZV9iYW5kX2J5X3BsbW5fc3RhdGUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCittcnNfcGxtbl9yZWdpb25fYmFuZF9jZmdfc3RhdGVfZW51bSBtcnNfZWFzX2dldF9wbG1uX3JlZ2lvbl9iYW5kX3N0YXRlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworZnVuY3Rpb25fY2FsbGVyX2lkX2VudW0gbXJzX2Vhc19nZXRfc2ltX2JhbmRfbGFzdF9jYWxsZXJfaWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCit2b2lkIG1yc19lYXNfdXBkYXRlX3BhcnRpYWxfYmFuZF9zdXBwb3J0X2luZm8obXJzX3BsbW5faWRfbGlzdCBwbG1uX2lkX2xpc3QsTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCit2b2lkIG1yc19lYXNfcmVzZXRfcGFydGlhbF9iYW5kX3N1cHBvcnRfaW5mbyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKK2thbF9ib29sIG1yc19lYXNfZ2V0X3JmX3N3X3Vuc3VwcG9ydGVkX3JhbmdlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDE2IGx0ZV9iYW5kLCBFQVJGQ04gKmwxLCBFQVJGQ04gKnIxLCBFQVJGQ04gKmwyLCBFQVJGQ04gKnIyLCBFQVJGQ04gKmwzLCBFQVJGQ04gKnIzKTsKKwora2FsX2Jvb2wgbXJzX2Vhc19qdWRnZV9jb3VudHJ5X3BsbW4oZWFzX2NvdW50cnlfZW51bSBlYXNfY291bnRyeSxjb25zdCBtcnNfcGxtbl9pZF9saXN0KiB0YXJnZXRfcGxtbik7CisKK2thbF9ib29sIG1yc19lYXNfZ2V0X2x0ZV9zdXBwb3J0X2JhbmRfZnJvbV9jYV9zZWxfdGFibGUoCisgICAgY29uc3QgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgY29uc3QgbXJzX3BsbW5faWQgKnBfcGxtbl9pZCwKKyAgICBrYWxfdWludDggKnBfbHRlX2JhbmRfYml0bWFzayk7CisKK2thbF9ib29sIG1yc19lYXNfY2hlY2tfc3BlY2lhbF9wbG1uX2V4Y2x1ZGVkKAorICAgIGNvbnN0IE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgIGNvbnN0IG1yc19wbG1uX2lkX2xpc3QgKnBfcGxtbl9pZF9saXN0KTsKKwordm9pZCBtcnNfZWFzX3NldF9hc19yZWxlYXNlKGthbF91aW50OCBhc19yZWwsIE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworbXJzX2FzX3JlbGVhc2VfZW51bSBtcnNfZWFzX2dldF9hc19yZWxlYXNlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKwordm9pZCBtcnNfZWFzX2NsZWFyX3NyY2hfaW5mbyh2b2lkKTsKKwordm9pZCBtcnNfZWFzX3ByaW50X3NyY2hfaW5mbyh2b2lkKTsKKwordm9pZCBtcnNfZWFzX3NyY2hfaW5mb19iYW5kX2xldmVsX2FkZChjb25zdCBtcnNfZWFzX3NyY2hfaW5mb19iYW5kX3N0cnVjdCAqYik7CisKK21yc19lYXNfc3JjaF9pbmZvX2JhbmRfc3RhdHVzX2VudW0gbXJzX2Vhc19zcmNoX2luZm9fYmFuZF9sZXZlbF9xdWVyeSgKKyAgICBjb25zdCBrYWxfdWludDE2IGJhbmQsCisgICAgbXJzX2Vhc19zcmNoX2luZm9fYmFuZF9zdHJ1Y3QgKmIpOworCit2b2lkIG1yc19lYXNfc3JjaF9pbmZvX2ZyZXFfbGV2ZWxfYWRkKGNvbnN0IG1yc19lYXNfc3JjaF9pbmZvX2ZyZXFfc3RydWN0ICpmKTsKKworbXJzX2Vhc19zcmNoX2luZm9fZnJlcV9zdGF0dXNfZW51bSBtcnNfZWFzX3NyY2hfaW5mb19mcmVxX2xldmVsX3F1ZXJ5KAorICAgIGNvbnN0IEVBUkZDTiBlYXJmY24sIAorICAgIG1yc19lYXNfc3JjaF9pbmZvX2ZyZXFfc3RydWN0ICpmKTsKKwordm9pZCBtcnNfZWFzX3NyY2hfaW5mb19jZWxsX2xldmVsX2FkZF9mcm9tX21pYigKKyAgICBjb25zdCBFQVJGQ04gZWFyZmNuLAorICAgIGNvbnN0IGthbF91aW50MTYgcGNpLAorICAgIGNvbnN0IGthbF91aW50OCBkbF9idyk7CisKK3ZvaWQgbXJzX2Vhc19zcmNoX2luZm9fY2VsbF9sZXZlbF9hZGRfZnJvbV9zaWIxKAorICAgIGNvbnN0IEVBUkZDTiBlYXJmY24sCisgICAgY29uc3Qga2FsX3VpbnQxNiBwY2ksCisgICAgY29uc3QgbXJzX3BsbW5faWRfbGlzdCAqcGxtbl9saXN0LAorICAgIGNvbnN0IGthbF91aW50MTYgdGFjKTsKKwora2FsX2Jvb2wgbXJzX2Vhc19zcmNoX2luZm9fY2VsbF9sZXZlbF9xdWVyeSgKKyAgICBjb25zdCBFQVJGQ04gZWFyZmNuLCAKKyAgICBjb25zdCBrYWxfdWludDE2IHBjaSwgCisgICAgbXJzX2Vhc19zcmNoX2luZm9fY2VsbF9zdHJ1Y3QgKmMpOworCitrYWxfYm9vbCBtcnNfZWFzX3NyY2hfaW5mb19jZWxsX2xldmVsX2lzX3BsbW5faWRlbnRpY2FsX29uX2ZyZXEoCisgICAgY29uc3QgRUFSRkNOIGVhcmZjbiwgCisgICAgY29uc3QgcGxtbl9pZF9zdHJ1Y3QgcGxtbl9pZCk7CisKK3ZvaWQgbXJzX2Vhc19tcnNfcGxtbl9pZF90b19wbG1uX2lkKGNvbnN0IG1yc19wbG1uX2lkICpzcmMsIHBsbW5faWRfc3RydWN0ICpkc3QpOworCit2b2lkIG1yc19lYXNfc2V0X3VlX2NhdGVnb3J5KG1yc19lYXNfdWVfY2F0ZWdvcnlfc3RydWN0KiBwX2x0ZV91ZV9jYXRlZ29yeSwgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCitrYWxfYm9vbCBtcnNfZWFzX2dldF91ZV9jYXRlZ29yeShtcnNfZWFzX3VlX2NhdGVnb3J5X3N0cnVjdCogcF9sdGVfdWVfY2F0ZWdvcnksIE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKwora2FsX2Jvb2wgbXJzX2Vhc19nZXRfYWZyX2J5X2N1c3RvbV9ocGxtbl9hbmRfc3BsbW4oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF9ib29sICpwXzJnNF9hZnJfc3RhdHVzLCBrYWxfYm9vbCAqcF8zZzRfYWZyX3N0YXR1cyk7CisKKyNpZmRlZiBfX05SX1JBVF9fCitrYWxfaW50OCBtcnNfZWFzX2NhbGN1bGF0ZV9wX2NvbXBlbnNhdGlvbigKKyAgICBNUlNfU0lNX0lOREVYIHNpbV9pZHgsCisgICAgRUFSRkNOIHRhcmdldF9lYXJmY24sCisgICAga2FsX2ludDggcG1heCwKKyAgICBldXRyYV9tdWx0aWJhbmRpbmZvX2xpc3Rfc3RydWN0ICpwX211bHRpX2JhbmRfbGlzdCwKKyAgICBjb25zdCBwbG1uX2lkX3N0cnVjdCAqcF9wbG1uX2lkKTsKKyNlbmRpZiAvKiBfX05SX1JBVF9fICovCisKK2thbF9ib29sIG1yc19lYXNfY2hlY2tfZXV0cmFfY2FwYWJpbGl0eV9zdXBwb3J0ZWQoZWFzX2NhcF9mZWF0dXJlX2VudW0gZmVhdHVyZSk7CisKKyNlbmRpZiAvKiBfTVJTX0VBU19DQVBBQklMSVRZX0ggKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19lYXNfc2VhcmNoLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX2Vhc19zZWFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmEyOTkyCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19lYXNfc2VhcmNoLmgKQEAgLTAsMCArMSw4MSBAQAorI2lmbmRlZiBfTVJTX0VBU19TRUFSQ0hfSAorI2RlZmluZSBfTVJTX0VBU19TRUFSQ0hfSAorCisjaW5jbHVkZSAibXJzX2NvbW1vbl9jYXBhYmlsaXR5LmgiCisjaW5jbHVkZSAibXJzX2NvbW1vbl9zZWFyY2guaCIKKyNpbmNsdWRlICJtcnNfYXNfc3RydWN0LmgiCisjaW5jbHVkZSAibWNjX3JlY29nX3RyYWluX2RhdGEuaCIKKyNpZmRlZiBVTklUX1RFU1QKKyNpbmNsdWRlICJtY2NfcmVjb2dfdGVzdF9kYXRhLmgiCisjZW5kaWYgLyogVU5JVF9URVNUICovCisKKyNkZWZpbmUgTVJTX0VBU19NQ0NfUkVDT0dfTUFYX1NVQkJBTkRfTlVNIDY0IC8vU2hvdWxkIGJlIHNhbWUgYXMgTUFYX1JTU0lfU05JRkZFUl9CQU5EX0NPTVBMRVRFX1NVQkJBTkQKKwordHlwZWRlZiBlbnVtIHsKKyAgICBNUlNfR0VUX1BSRURJQ1RfRUFSRkNOX1RBQkxFLAorICAgIE1SU19FQVNfR0VUX1BSRURJQ1RfRlJFUV9MSVNUX0JZX1BMTU5fMSwKKyAgICBNUlNfRUFTX0dFVF9QUkVESUNUX0ZSRVFfTElTVF9CWV9QTE1OXzIsCisgICAgTVJTX0VBU19HRVRfUFJFRElDVF9GUkVRX0xJU1RfQllfUExNTl8zLAorICAgIE1SU19FQVNfR0VUX1BSRURJQ1RfRlJFUV9MSVNUX0JZX1BMTU5fNCwKKyAgICBNUlNfRUFTX0dFVF9QUkVESUNUX0ZSRVFfTElTVF9CWV9QTE1OXzUsCisgICAgTVJTX0VBU19HRVRfUFJFRElDVF9GUkVRX0xJU1RfQllfQkFORF8xLAorfW1yc19wcmVkaWN0X3V0aWxpdHlfdXRfZW51bTsKKwordHlwZWRlZiBzdHJ1Y3QgZWFzX21jY19yZWNvZ19tY2NfbGlzdCB7CisgICAga2FsX3VpbnQ4IG1jY19udW07CisgICAgbXJzX21jY19pZCBtY2NbTUNDX1JFQ09HX0xURV9NQVhfTUNDX0xFTl07Cit9IG1yc19lYXNfbWNjX3JlY29nX21jY19saXN0X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBFQVJGQ04gICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXE7IC8vIFRoZSBjZW50cmFsIGZyZXF1ZW5jeSBvZiBlYWNoIHN1YmJhbmQuCisgICAga2FsX2ludDE2ICAgICAgICAgICAgICAgICAgICAgICByc3NpOyAvLyBUaGUgcnNzaSByZXN1bHQgKHFkQm0pIG9yIGVhY2ggc3ViYmFuZC4KK30gbXJzX2Vhc19zdWJiYW5kX3Jzc2lfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgICAgIGJhbmQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZF9udW07IC8vIFRoZSBudW1iZXIgb2Ygc3ViYmFuZHMgdG8gcmVwb3J0LgorICAgIG1yc19lYXNfc3ViYmFuZF9yc3NpX3N0cnVjdCAgIHN1YmJhbmRfcnNzaVtNUlNfRUFTX01DQ19SRUNPR19NQVhfU1VCQkFORF9OVU1dOyAKK30gbXJzX2Vhc19iYW5kX3Jzc2lfZGlzdHJpYnV0aW9uX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYW5kX251bTsKKyAgICBtcnNfZWFzX2JhbmRfcnNzaV9kaXN0cmlidXRpb25fc3RydWN0ICBiYW5kW01DQ19SRUNPR19MVEVfQkFORF9OVU1dOworfSBtcnNfZWFzX3Jzc2lfZGlzdHJpYnV0aW9uX3N0cnVjdDsKKwora2FsX3VpbnQxNiBtcnNfZWFzX2dldF9wcmVkaWN0X2ZyZXFfbGlzdF9ieV9wbG1uKAorICAgIE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgIGNvbnN0IG1yc19wbG1uX2lkX2xpc3QgKnBsbW5fbGlzdCwKKyAgICBjb25zdCBFQVJGQ04gKnNraXBfZnJlcV9saXN0LAorICAgIGNvbnN0IGthbF91aW50MTYgc2tpcF9mcmVxX2xpc3RfbnVtLAorICAgIEVBUkZDTiAqcHJlZGljdF9mcmVxX2xpc3QpOworCit2b2lkIG1yc19nZXRfcHJlZGljdF9lYXJmY25fdGFibGVfYnlfYmFuZChrYWxfdWludDMyIGx0ZV9iYW5kLCBtcnNfZnJlcV90YWJsZV9zdHJ1Y3QgKmVhcmZjbl90YWJsZSk7Cit2b2lkIG1yc19nZXRfdG9wMTBfZWFyZmNuKG1yc19mcmVxX3RhYmxlX3N0cnVjdCAqZWFyZmNuX3RhYmxlKTsKK3ZvaWQgbXJzX2FwcGVuZF90b3AxMF9lYXJmY25fdGFibGUobXJzX2ZyZXFfdGFibGVfc3RydWN0ICpza2lwX2ZyZXFfdGFibGUsIG1yc19mcmVxX3RhYmxlX3N0cnVjdCAqb3V0cHV0X3RhYmxlKTsKK2thbF91aW50MTYgbXJzX2Vhc19nZXRfcHJlZGljdF9mcmVxX2xpc3RfYnlfYmFuZCgKKyAgICBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwKKyAgICBjb25zdCBrYWxfdWludDMyIGJhbmRfbGlzdF9udW0sCisgICAgY29uc3Qga2FsX3VpbnQxNiAqYmFuZF9saXN0LAorICAgIGNvbnN0IEVBUkZDTiAqc2tpcF9mcmVxX2xpc3QsCisgICAgY29uc3Qga2FsX3VpbnQxNiBza2lwX2ZyZXFfbGlzdF9udW0sCisgICAgRUFSRkNOICpwcmVkaWN0X2ZyZXFfbGlzdCAgICAvLyBrYWxfdWludDMyIGFycmF5WzY0XQorKTsKKwordm9pZCBtcnNfZWFzX21yc19wbG1uX2lkX3RvX3BsbW5faWQoY29uc3QgbXJzX3BsbW5faWQgKnNyYywgcGxtbl9pZF9zdHJ1Y3QgKmRzdCk7Cit2b2lkIG1yc19lYXNfcGxtbl9pZF90b19tcnNfcGxtbl9pZChjb25zdCBwbG1uX2lkX3N0cnVjdCAqc3JjLCBtcnNfcGxtbl9pZCAqZHN0KTsKKworZG91YmxlIG1yc19lYXNfbWNjX3JlY29nX2NlbnRlcmVkX2Nvc2luZV9kaXN0YW5jZShjb25zdCBrYWxfaW50OCAqZGF0YTEsIGNvbnN0IGthbF9pbnQ4ICpkYXRhMiwga2FsX3VpbnQzMiBkYXRhX2xlbik7CitrYWxfYm9vbCBtcnNfZWFzX21jY19yZWNvZ19pc19yZW1hcmthYmxlX2JhbmQoa2FsX3VpbnQxNiBiYW5kKTsKK21yc19lYXNfbWNjX3JlY29nX21jY19saXN0X3N0cnVjdCBtcnNfZWFzX21jY19yZWNvZ19nZXRfbWNjKG1yc19lYXNfcnNzaV9kaXN0cmlidXRpb25fc3RydWN0ICpyc3NpX2Rpc3RyaWJ1dGlvbik7Cit2b2lkIG1jY19haV9pbml0X3dyYXBwZXIoKTsKK2ludCBtY2NfYWlfaW5mZXJlbmNlX3dyYXBwZXIKKwkoa2FsX2ludDggKmlucHV0X2J1ZiwgaW50IGlucHV0X2xlbmd0aCwgCisJIG1haWZfbWNjX2VudW0gKnByZWRpY3Rpb25fbWNjX2NvZGUsIGZsb2F0ICpzb2Z0bWF4X3Byb2JhYmlsaXR5KTsKKyNpZmRlZiBVTklUX1RFU1QKK3ZvaWQgbXJzX2Vhc19tY2NfcmVjb2dfcmVncmVzc2lvbigpOwordm9pZCBtcnNfZWFzX21jY19yZWNvZ190ZXN0KGthbF9pbnQ4ICp0ZXN0X2RhdGEsIGthbF91aW50MzIgZGF0YV9sZW4pOworI2VuZGlmIC8qIFVOSVRfVEVTVCAqLworI2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19lbW1fY2FwYWJpbGl0eS5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19lbW1fY2FwYWJpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMjNjMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX2VtbV9jYXBhYmlsaXR5LmgKQEAgLTAsMCArMSwyMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDcKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIG1yc19lbW1fY2FwYWJpbGl0eS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIE11bHRpbW9kZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgVGhlIEVNTSBjYXBhYmlsaXR5IHN0b3JlZCBpbiBNUlMgY29udGV4dC4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAkTG9nJAorICoKKyAqIDAzIDIyIDIwMjIgb3Rfc2FtaWtzaGEuZAorICogW01PTFkwMDc4NTAyM10gW0dlbjk3XSBOQVNfU1YgZGlzYWJsZSBHU00gdGhyb3VnaCBjYXBhYmlsaXR5IHVwZGF0ZQorICogCQorICogCS0gRU1NIHBhcnQuCisgKgorICogMDUgMjggMjAyMCB5b3VydS5jaGVuCisgKiBbTU9MWTAwNTA1NTExXSBbUDIwMDMwNi0wMzg5Nl1bQTMxNU5dW01US10gVUUgaGFzIHRvIHNldCBhcyBvZmYgSUVzIGZvciBTUlZDQyB3aXRoIGtvcmVhbiBvcGVyYXRvci4KKyAqIAkKKyAqIAlbTVBEXVtSMy5NUF1bb3V0LW9mLVZsaXN0XQorICogCWNvZGUgc3luYyAKKyAqIAkxLiBNT0xZMDA1MDU1MTE6Q0wxMDg1OTA3NCwgMTA5MDc1NjQgKG5lZWQgdG8gaGFuZGxlIHNwZWNpZmljIGluIFRDMTAuU1AgYnJhbmNoKQorICoKKyAqIDA5IDIwIDIwMTggY2hpbnRlLmNoZW4KKyAqIFtNT0xZMDAzNTI1MzJdIFtFTU1dWzVHU19QaDFdIFIxNSBuZXcgZmVhdHVyZQorICogU2V0IFMxIG1vZGUgJiBOMSBtb2RlICYgZVBDTyBpbiB1ZSBuZXR3b3JrIGNhcGFiaWxpdHkuCisgKgorICogMDggMzAgMjAxOCB0aW0uaHVhbmcKKyAqIFtNT0xZMDAzMDYxNDhdIFtOQVNdIHBhbmd1IGdpYW50IENSCisgKiBmaXggVVQgZm9yIG1yc19ucmFzX2lzX2VuZGNfc3VwcG9ydC4KKyAqCisgKiAwOCAxNyAyMDE4IGplcnJ5LXloLmNoYW5nCisgKiBbTU9MWTAwMzA2MTQ4XSBbTkFTXSBwYW5ndSBnaWFudCBDUgorICogW0VNTV1bIENvZGUgU3luY11bR0VOOTcuREVWXVtPQSBEb21haW5dIFJlbW92ZSBOVlJBTSBncm91cCBoZWFkZXIgZmlsZQorICogQ0w6IDYwOTY1NTUsIDYxMjQyNTAKKyAqCisgKiAwOCAxNyAyMDE4IGNoaW50ZS5jaGVuCisgKiBbTU9MWTAwMzA2MTQ4XSBbTkFTXSBwYW5ndSBnaWFudCBDUgorICogcGF0Y2ggYmFjayA2MTM2OTYzLgorICoKKyAqIDA0IDI1IDIwMTggemFueWEucGVuZworICogW01PTFkwMDMyMTY1MF0gW1VNT0xZRV1bTVQ2NzY1XVtDZXJ2aW5vXVtPMV1bTUQgU3RhdGljIFRlc3RdW0NoaW5hXVtBdXRvXVRoZSBVTVRTIHNlY3VyaXR5IGNhcGFiaWxpdHkgaXMgbm90IGNvcnJlY3RseSBzZXQgaW4gVUUgTmV0d29yayBDYXBhYmlsaXR5IGZyb20gdGhlIFVSUkMgRHluYW1pYyBDQVAuCisgKiAJCisgKiAJLgorICoKKyAqIDA4IDE3IDIwMTcgemFueWEucGVuZworICogW01PTFkwMDI3MDcyM10gW0JJQU5DT11bTVQ2NzYzXVtSRElUXVtMK0xdW0JyaW5nVXBdbXRrbG9nc2ltMi12b2x0ZS1mYWlsP11DYWxsID9ePz8yRz9eCisgKiAJCisgKiAJLgorICoKKyAqIDAxIDI4IDIwMTYgYm9iLmNoaWFuZworICogW01PTFkwMDE1OTk1N10gQVQrQ0lTUlZDQyBpbXBsZW1lbnRhdGlvbgorICogOiBbTVJTXVtFTU1dCisgKgorICogMDggMTEgMjAxNCB0dWFuLWNoZS5jaGVuCisgKiBbTU9MWTAwMDc1MDE5XSBbQ3JpdGljYWxdW05TLUlPVF1bQ01DQyBDYXNlXVtLMiBEU0RTXVtDU0ZCXVtOUy1JT1RdW2FuaXRlOTAwMF1bMjUuMF1bYmFuZDM4XVs1LjEuMV1mYWlsOlBETiBkZWNvZGUgZXJyb3IKKyAqIGNvbnNpZGVyIFJBVCBtb2RlIGZvciBFTU0gTVJTCisgKgorICogMDEgMjIgMjAxMyBkYXZpZC5uaXUKKyAqIFtNT0xZMDAwMDkyMDVdIFtNUlNdIENvZGUgY2hlY2tlZC1pbiBmb3IgTU9MWSBicmFuY2gKKyAqIC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX01SU19FTU1fQ0FQQUJJTElUWV9ICisjZGVmaW5lIF9NUlNfRU1NX0NBUEFCSUxJVFlfSAorCisjaW5jbHVkZSAibXJzX2FzX2VudW1zLmgiCisjaW5jbHVkZSAiZXJyY19udnJhbV9kZWYuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYWNyb3MgV2l0aG91dCBQYXJhbWV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYWNyb3MgV2l0aCBQYXJhbWV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtcyB3aXRob3V0IHRhZ3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVUVfTkVUV09SS19DQVBBQklMSVRZX0xFTiAgICAgICA3CisjZGVmaW5lIFVFX1NFQ1VSSVRZX0NBUEFCSUxJVFlfTEVOICAgICAgNQorCisjZGVmaW5lIFVFX0FERF9TRUNVUklUWV9DQVBBQklMSVRZX0xFTiAgNAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFR5cGUgRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0IHsKKworICAgIGthbF91aW50OCB1ZV9uZXR3b3JrX2NhcGFiaWxpdHlbVUVfTkVUV09SS19DQVBBQklMSVRZX0xFTl07CisgICAga2FsX3VpbnQ4IHVlX3NlY3VyaXR5X2NhcGFiaWxpdHlbVUVfU0VDVVJJVFlfQ0FQQUJJTElUWV9MRU5dOworICAgIGthbF9ib29sIG5mOworICAgIGthbF9ib29sIHNydmNjOworI2lmZGVmIF9fR0VNSU5JX0xURV9fCisgICAga2FsX2Jvb2wgaXNfbHRlX25lZWRlZDsKKyAgICBrYWxfdWludDY0IHNpbV9wbG1uOworI2VuZGlmIC8qIF9fR0VNSU5JX0xURV9fICovCisgICAga2FsX2Jvb2wgczFfbW9kZTsgICAvKiBkaXNhYmxlICYgZW5hYmxlIEUtVVRSQU4gY2FwYWJpbGl0eSBieSBVRV9DQVBBQklMSVRZX0NIQU5HRV9QUk9DRURVUkUsIGNsYXVzZSA0LjUgaW4gVFMgMjQuMzAxICovCit9IGVtbV9jYXBhYmlsaXR5X2NvbnRleHRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlY2xhcmF0aW9ucyBPZiBFeHBvcnRlZCBHbG9iYWxzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgbXJzX2VtbV9pbml0X2NvbnR4X2RlZmF1bHRfdmFsdWUodm9pZCk7CisKK3ZvaWQgbXJzX2VtbV9yZWFkX252cmFtX2NuZl9oYW5kbGVyKGthbF91aW50MTYgbnZyYW1fZmlsZV9pZCwga2FsX3VpbnQ4KiBkYXRhLCBrYWxfdWludDE2IGxlbik7CisKK3ZvaWQgbXJzX2VtbV9nZXRfdWVfbndfY2FwKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCByYXRfZW51bSByYXRfbW9kZSwga2FsX3VpbnQ4KiBkYXRhLCBrYWxfdWludDgqIGxlbik7CisKK3ZvaWQgbXJzX2VtbV9nZXRfdWVfbndfY2FwX3dpdGhvdXRfcmF0X21vZGVfbW9kaWZpY2F0aW9uKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCByYXRfZW51bSByYXRfbW9kZSwga2FsX3VpbnQ4KiBkYXRhLCBrYWxfdWludDgqIGxlbik7CisKK3ZvaWQgbXJzX2VtbV9nZXRfdWVfc2VjX2NhcChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgcmF0X2VudW0gcmF0X21vZGUsIGthbF91aW50OCogZGF0YSwga2FsX3VpbnQ4ICpsZW4pOworCit2b2lkIG1yc19lbW1fZ2V0X3VlX2FkZF9zZWNfY2FwKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCByYXRfZW51bSByYXRfbW9kZSwga2FsX3VpbnQ4KiBkYXRhLCBrYWxfdWludDggKmxlbik7CisKKyNpZiBkZWZpbmVkKF9fR1NNX1JBVF9fKSB8fCBkZWZpbmVkKF9fVU1UU19SQVRfXykKK3ZvaWQgdXNpbWVfY2FwX3NldF9lbW1fY2FwYWJpbGl0eShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCxlbW1fY2FwYWJpbGl0eV9jb250ZXh0X3N0cnVjdCAqZW1tX2NhcCk7CisKK3ZvaWQgY2xhc3NtYXJrX3JhY2FwX3NldF9lbW1fY2FwYWJpbGl0eShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCxlbW1fY2FwYWJpbGl0eV9jb250ZXh0X3N0cnVjdCAqZW1tX2NhcCk7CisjZW5kaWYKKwordm9pZCBsdGVfY2FwX3NldF9lbW1fY2FwYWJpbGl0eShrYWxfdWludDggKmRhdGEsIGVtbV9jYXBhYmlsaXR5X2NvbnRleHRfc3RydWN0ICplbW1fY2FwKTsKKworLyogVXNlZCBieSBNTSAqLwora2FsX2Jvb2wgbXJzX2VtbV9nZXRfc3JjdnYoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIHJhdF9lbnVtIHJhdF9tb2RlKTsKKworLypUaXRhbiByZXF1aXJlbWVudCB0byBzZXQgU1JWQ0MgRkFMU0UgZm9yIHNvbWUgb3BlcmF0b3JzKi8KK2thbF9ib29sIG1yc19lbW1fZ2V0X3NydmNjX3N1cHBvcnRfZm9yX3NlbGVjdF9vcGVyYXRvcnMoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCisvKiBVc2VkIGJ5IEw0QyAqLwora2FsX2Jvb2wgbXJzX2VtbV9zZXRfc3J2Y2MoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF9ib29sIGlzX3N1cHBvcnQpOworCisvKiBVc2VkIGJ5IE1NICovCitrYWxfYm9vbCBtcnNfZW1tX2dldF9uZihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKKworI2lmZGVmIF9fR0VNSU5JX0xURV9fCisKKy8qIFVzZWQgYnkgRU1NICovCisKK3ZvaWQgbXJzX2VtbV9zZXRfc2ltX2N1cnJwbG1uKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDY0IHBsbW5JZCk7CisKK3ZvaWQgbXJzX2VtbV9zZXRfbHRlX25lZWRlZChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX2Jvb2wgaXNfbHRlX25lZWRlZCk7CisKKy8qIFVzZWQgYnkgR0FTICovCisKK2thbF9ib29sIG1yc19lbW1faXNfc2ltX2N1cnJwbG1uX2NtY2MoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCitrYWxfYm9vbCBtcnNfZW1tX2lzX2x0ZV9uZWVkZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCisjZW5kaWYgLyogX19HRU1JTklfTFRFX18gKi8KKworLyoqCisgKiBAYnJpZWYgQSBmdW5jdGlvbiB0aGF0IHNldHMgZXBjIG5hcyhTMSBtb2RlKSBzdXBwb3J0ZWQKKyAqIEBwYXJhbVtpbl0gc2ltX2luZGV4IGluZGljYXRlcyB0aGUgcHJvdG9jb2wgd2hpY2ggaXMgc2VsZWN0ZWQKKyAqIEBwYXJhbVtpbl0gczFfbW9kZSBpcyB1c2VkIGZvciBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uLgorICogQHJldHVybiBLQUxfVFJVRSBpZiBzMV9tb2RlIHNldCBzdWNlc3NmdWxseS4KKyAqCisgKiB0aGUgczEgbW9kZSBpcyB1c2VkIGZvciA1R01NIGNhcGFiaWxpdHkgSUUgYW5kIGRlZmluZWQgaW4gVFMgMjQuNTAxCisgKi8KK2thbF9ib29sIG1yc19lbW1fc2V0X2NhcF9lcGNfbmFzX3N1cHBvcnQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF9ib29sIHMxX21vZGUpOworCisvKioKKyAqIEBicmllZiBBIGZ1bmN0aW9uIHRoYXQgZ2V0cyBlcGMgbmFzKFMxIG1vZGUpIHN1cHBvcnRlZAorICogQHBhcmFtW2luXSBzaW1faW5kZXggaW5kaWNhdGVzIHRoZSBwcm90b2NvbCB3aGljaCBpcyBzZWxlY3RlZAorICogQHBhcmFtW2luXSByYXRfbW9kZSBpcyB1c2VkIGZvciBjaGVja2luZyBpZiB3ZSBjb3VsZCBnZXQgdGhlIHMxX21vZGUgY29uZmlndXJhdGlvbi4KKyAqIEByZXR1cm4gS0FMX1RSVUUgaWYgZXBjIG5hcyhzMV9tb2RlKSBpcyBzdXBwb3J0ZWQuCisgKgorICogdGhlIHMxIG1vZGUgaXMgdXNlZCBmb3IgNUdNTSBjYXBhYmlsaXR5IElFIGFuZCBkZWZpbmVkIGluIFRTIDI0LjUwMQorICovCitrYWxfYm9vbCBtcnNfZW1tX2dldF9jYXBfZXBjX25hc19zdXBwb3J0KE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCByYXRfZW51bSByYXRfbW9kZSk7CisKKworI2VuZGlmIC8qIF9NUlNfRU1NX0NBUEFCSUxJVFlfSCAqLworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX2VuZGNfcXVlcnlfdXRpbGl0eS5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19lbmRjX3F1ZXJ5X3V0aWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjAxOWYxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19lbmRjX3F1ZXJ5X3V0aWxpdHkuaApAQCAtMCwwICsxLDE1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE5CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBNUlNfRU5EQ19RVUVSWV9VVElMSVRZX0gKKyNkZWZpbmUgTVJTX0VORENfUVVFUllfVVRJTElUWV9ICisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtc19wdWJsaWMuaCIKKyNpbmNsdWRlICJzaW1fZXhwb3J0ZWRfZW51bS5oIgorCisjaWYgZGVmaW5lZChfX0VORENfXykgfHwgZGVmaW5lZChfX05SX1JBVF9fKQorI2luY2x1ZGUgIm1tbDFfZW5kY19wdWJsaWNfcnJjLmgiCisjaW5jbHVkZSAibnJyY19ubDFfc3RydWN0LmgiCisjZW5kaWYgLyogZGVmaW5lZChfX0VORENfXykgfHwgZGVmaW5lZChfX05SX1JBVF9fKSAqLworCisjaWZkZWYgX19OUl9SQVRfXworI2luY2x1ZGUgIm1yc19udnJhbV9lZGl0b3IuaCIKKyNlbmRpZiAvKiBfX05SX1JBVF9fICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICBNQUNST1MgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgIFRZUEUgREVGSU5JVElPTlMgJiBFTlVNUyAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBfX0VORENfXwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExURV9CQU5EX0UgIGJhbmQ7CisgICBrYWxfdWludDMyICBmcmVxOyAgICAgICAvLyBpbiAxMDBrSHoKKyAgIExURV9CV19FICAgIGJ3OworICAga2FsX3VpbnQ4ICAgbWltb19sYXllcjsgLy8gMHhGRiBpZiBubyB2YWxpZCBpbmZvCit9IG1yc19sdGVfY2NfaW5mb19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDggY2NfbnVtOworICAga2FsX3VpbnQ4IGNjX21hc2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2MgYml0bWFwLiBFeDogY2MwICYgY2MxID09PiBjY19tYXNrPTMKKyAgIG1yc19sdGVfY2NfaW5mb19zdHJ1Y3QgY2NfaW5mb1tNUlNfTUFYX0NDX05VTV07CisgICBrYWxfdWludDggcnhfY2NfaWR4W01SU19NQVhfQ0NfTlVNXTsgICAgICAgICAgICAvLyBPbmx5IG5lY2Vzc2FyeSBmb3IgdHhfY2NfbGlzdC4gRm9yIHJ4X2NjX2xpc3QsIGRvbid0IGNhcmUuCit9IG1yc19sdGVfY2NfbGlzdF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBtcnNfbHRlX2NjX2xpc3Rfc3RydWN0IHJ4X2NjX2xpc3Q7CisgICAgbXJzX2x0ZV9jY19saXN0X3N0cnVjdCB0eF9jY19saXN0OworfSBtcnNfbHRlX2NlbGxfY2NfY29uZmlnX3N0cnVjdDsKKyNlbmRpZiAvKiBfX0VORENfXyAqLworCisjaWYgZGVmaW5lZChfX0VORENfXykgfHwgZGVmaW5lZChfX05SX1JBVF9fKQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBNTUwxX0VORENfTlJSQ19DQ19MSVNUX1QgcnhfY2NfbGlzdDsKKyAgICBNTUwxX0VORENfTlJSQ19DQ19MSVNUX1QgdHhfY2NfbGlzdDsKKwlubDFfY2Fycmllcl9id19pbmZvX2xpc3Rfc3RydWN0ICpwX2NhcnJpZXJfYndfaW5mb19saXN0OworfSBtcnNfbnJfY2VsbF9jY19jb25maWdfc3RydWN0OworI2VuZGlmIC8qIGRlZmluZWQoX19FTkRDX18pIHx8IGRlZmluZWQoX19OUl9SQVRfXykgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICBWQVJJQUJMRVMgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBGVU5DVElPTiBERUNMQVJBVElPTlMgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIF9fRU5EQ19fCitrYWxfYm9vbCBtcnNfcXVlcnlfbnJfc3VwcG9ydF9zdGF0dXMocHJvdG9jb2xfaWRfZW51bSBwc19pZCk7CisKK2thbF9ib29sIG1yc19xdWVyeV9lbmRjX3N1cHBvcnRfc3RhdHVzKHByb3RvY29sX2lkX2VudW0gcHNfaWQpOworCitrYWxfYm9vbCBtcnNfcXVlcnlfZ2FwbGVzc19zdXBwb3J0X3N0YXR1cyhwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKworTU1MMV9FTkRDX05SUkNfQ0NfTElTVF9UKiBtcnNfZ2V0X25yX3JmZGJfcnhfY2NfY29uZmlnX2xpc3QocHJvdG9jb2xfaWRfZW51bSBwc19pZCk7CisKK01NTDFfRU5EQ19OUlJDX0NDX0xJU1RfVCogbXJzX2dldF9ucl9yZmRiX3R4X2NjX2NvbmZpZ19saXN0KHByb3RvY29sX2lkX2VudW0gcHNfaWQpOworCit2b2lkIG1yc19yZXNldF9ucl9yZmRiX3R4X3J4X2NvbmZpZyhwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKworTU1MMV9FTkRDX05SUkNfQ0NfTElTVF9UKiBtcnNfZ2V0X2llX2NoZWNrX25yX3JmZGJfcnhfY2NfY29uZmlnX2xpc3QocHJvdG9jb2xfaWRfZW51bSBwc19pZCk7CisKK01NTDFfRU5EQ19OUlJDX0NDX0xJU1RfVCogbXJzX2dldF9pZV9jaGVja19ucl9yZmRiX3R4X2NjX2NvbmZpZ19saXN0KHByb3RvY29sX2lkX2VudW0gcHNfaWQpOworCit2b2lkIG1yc19yZXNldF9pZV9jaGVja19ucl9yZmRiX3R4X3J4X2NvbmZpZyhwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKworTU1MMV9FTkRDX05SUkNfQ0NfTElTVF9UKiBtcnNfZ2V0X3Rlc3RfbnJfcmZkYl9yeF9jY19jb25maWdfbGlzdChwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKworTU1MMV9FTkRDX05SUkNfQ0NfTElTVF9UKiBtcnNfZ2V0X3Rlc3RfbnJfcmZkYl90eF9jY19jb25maWdfbGlzdChwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKwordm9pZCBtcnNfc2V0X2x0ZV9yZmRiX2NjX2NvbmZpZ19saXN0KHByb3RvY29sX2lkX2VudW0gcHNfaWQsIG1yc19sdGVfY2VsbF9jY19jb25maWdfc3RydWN0ICpwX21yc19sdGVfY2VsbF9jY19jb25maWcpOworCit2b2lkIG1yc19zZXRfaWVfY2hlY2tfbHRlX3JmZGJfY2NfY29uZmlnX2xpc3QocHJvdG9jb2xfaWRfZW51bSBwc19pZCwgbXJzX2x0ZV9jZWxsX2NjX2NvbmZpZ19zdHJ1Y3QgKnBfbXJzX2x0ZV9jZWxsX2NjX2NvbmZpZyk7CisKK3ZvaWQgbXJzX3Jlc2V0X2llX2NoZWNrX2x0ZV9ucl9yZmRiX3R4X3J4X3BkY3BfY29uZmlnKHByb3RvY29sX2lkX2VudW0gcHNfaWQpOworCit2b2lkIG1yc191cGRhdGVfcGRjcF9ucl9iZWFyZXIocHJvdG9jb2xfaWRfZW51bSBwc19pZCwga2FsX2Jvb2wgaXNfbnJwZGNwX2V4aXN0LCBrYWxfYm9vbCBmb3JfaWVfY2hrKTsKKwordm9pZCBtcnNfdXBkYXRlX25yX3NlY3VyaXR5X2tleV91c2VkKHByb3RvY29sX2lkX2VudW0gcHNfaWQsIGthbF9ib29sIGlzX25yX3NlY3VyaXR5X2tleV91c2VkLCBrYWxfYm9vbCBmb3JfaWVfY2hrKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0VORENfXykgfHwgZGVmaW5lZChfX05SX1JBVF9fKQordm9pZCBtcnNfc2V0X25yX3JmZGJfY2NfY29uZmlnX2xpc3QocHJvdG9jb2xfaWRfZW51bSBwc19pZCwgY29uc3QgbXJzX25yX2NlbGxfY2NfY29uZmlnX3N0cnVjdCAqcF9ucl9jY19jb25maWcsIGthbF9ib29sIGlzX3Rlc3RfZGIpOwordm9pZCBtcnNfcmVzZXRfYWxsX2VuZGNfY2hlY2tfZGIodm9pZCk7CisjZW5kaWYgLyogZGVmaW5lZChfX0VORENfXykgfHwgZGVmaW5lZChfX05SX1JBVF9fKSAqLworCisjaWZkZWYgX19OUl9SQVRfXwora2FsX3VpbnQ4IG1yc19ucl90YXJnZXRfY2Fycmllcl9zY3NfY29udmVydChOUl9TQ1NfVFlQRV9FIG5yX2NhcnJpZXJfc2NzKTsKKwora2FsX3VpbnQzMiBtcnNfbnZyYW1fbnJfYndfYml0bWFwX2J3X2dldChrYWxfdWludDMyIGJpdG1hcF9iaXRfaW5kZXgsCisgICAga2FsX3VpbnQxNiBid19iaXRtYXAsIGthbF9ib29sIG5yX2JhbmRfaXNfZnIxKTsKKwora2FsX2Jvb2wgbXJzX25yX2J3X3JlY2FsY3VsYXRpb25fY2hlY2soCisgICAgY29uc3QgbmwxX2NhcnJpZXJfYndfaW5mb19saXN0X3N0cnVjdCAqcF9ucl9jY19id19pbmZvX2xpc3QsIE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKwora2FsX2Jvb2wgbXJzX25yX2JhbmRfY2hhbm5lbF9id19pc192YWxpZCgKKyAgICBjb25zdCBubDFfY2Fycmllcl9id19zY3NfaW5mb19zdHJ1Y3QgKnBfbnJfY2Fycmllcl9id19zY3NfaW5mbywKKyAgICBjb25zdCBudnJhbV9lZl9tcnNfbnJfYndfcGVyX2JhbmRfc2V0dGluZ19zdHJ1Y3QgKnBfbnZyYW1fYmFuZF9id19zZXR0aW5nKTsKKwkKK2thbF91aW50MzIgbXJzX25yX2NoYW5uZWxfYndfY29udmVydChrYWxfdWludDMyIGNoYW5uZWxfYncpOworI2VuZGlmIC8qIF9fTlJfUkFUX18gKi8KKworI2VuZGlmIC8qIE1SU19FTkRDX1FVRVJZX1VUSUxJVFlfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19nYXNfY2FwYWJpbGl0eS5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19nYXNfY2FwYWJpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTM3NzIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX2dhc19jYXBhYmlsaXR5LmgKQEAgLTAsMCArMSwxMDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA3CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICBtcnNfZ2FzX2NhcGFiaWxpdHkuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICBNdWx0aW1vZGUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIFRoZSBHQVMgY2FwYWJpbGl0eSBzdG9yZWQgaW4gTVJTIGNvbnRleHQuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogJExvZyQKKyAqCisgKiAwMyAyNSAyMDIyIGppYXdlaS5oZQorICogW01PTFkwMDc4NTAyM10gW0dlbjk3XSBOQVNfU1YgZGlzYWJsZSBHU00gdGhyb3VnaCBjYXBhYmlsaXR5IHVwZGF0ZQorICogCQorICogCS4KKyAqCisgKiAwMyAyMiAyMDIyIG90X2RlZWtzaGEudGhha3JlCisgKiBbTU9MWTAwNzg1MDIzXSBbR2VuOTddIE5BU19TViBkaXNhYmxlIEdTTSB0aHJvdWdoIGNhcGFiaWxpdHkgdXBkYXRlCisgKgorICogMDkgMTMgMjAyMSBvdF9kZWVrc2hhLnRoYWtyZQorICogW01PTFkwMDY4MjA4MV0gbWQxOihNQ1VfY29yZTAudnBlMC50YzAoVlBFMCkpIFtGYXRhbCBlcnJvcihidWYpXSBlcnJfY29kZTE6MHgwMDAwMDg0NCBlcnJfY29kZTI6MHgyOEExRUMzNCBlcnJfY29kZTM6MHhDQ0NDQ0NDQyBNRCBPZmZlbmRlcjpFUlJDCisgKgorICogMDUgMjggMjAyMSB2ZW5kX210Yl9hcml0aGEwMjYKKyAqIFtNT0xZMDA2MDg5NDldID8/YmFuZD8/Pz8KKyAqIAorICogW0NPREUgU1lOQ11bTlIxNS5SMy5NRDcwMC5NUF1bR0FTIEZERF0KKyAqCisgKiAxMCAwNyAyMDIwIGppYXdlaS5oZQorICogW01PTFkwMDU2NTYxN10gob5DQUxMob+hvkgrob+52LHVu/K08r+qR1NNtszQxcTcwaa907/aCisgKiAJCisgKiAJLgorICoKKyAqIDEwIDA3IDIwMjAgdmVuZF9tdGJfYXJpdGhhMDE5CisgKiBbTU9MWTAwNTY1NjE3XSA/Q0FMTD8/SCs/Pz8/Pz9HU00/Pz8/Pz8KKyAqCisgKiAxMiAwOSAyMDE5IHRhbm1veS5jaGF0dGVyamVlCisgKiBbTU9MWTAwNDU4NTAzXSBbQ09ERSBTWU5DXVtNSDRQLVBPU10gcGF0Y2ggcmVxdWVzdCBhYm91dCBBTFBTMDQzMDkwMjYKKyAqIC4KKyAqCisgKiAxMiAwNSAyMDE5IHNhcG5hLmtzCisgKiBbTU9MWTAwNDQzODkyXSBbQ09ERSBTWU5DXSBBNS80IGFsZ29yaXRobSByZWxhdGVkCisgKiAuCisgKgorICogMDIgMTggMjAxOSBuYWxpbi5jaG92YXRpYQorICogW01PTFkwMDM4NDk5NV0gW1ZNT0xZXSBHRU1JTkkgMy4wLCBBRlIsIFVuaWZ5IEZyZXF1ZW5jeSBzY2FuLCBCR1NFQVJDSAorICogLmdlbWluaV9hZnJfYmcKKyAqCisgKiAxMiAwNiAyMDE4IHllbmNoaWgueWFuZworICogW01PTFkwMDM3MTE1Nl0gW1ZNT0xZXSBOUlJDLVNFQVJDSCBjaGVjay1pbi4KKyAqIEZpbGwgcGh5c2ljYWwgZnJlcXVlbmN5IHJhbmdlIGR1cmluZyBQb3dlciBTY2FuLgorICoKKyAqIDA4IDIwIDIwMTggdGFubW95LmNoYXR0ZXJqZWUKKyAqIFtNT0xZMDAzMDYxNDhdIFtOQVNdIHBhbmd1IGdpYW50IENSCisgKiBbR0FTX0ZERF1DYXBhYmlsaXR5IGNoYW5nZXMuCisgKgorICogMDggMjAgMjAxOCBydWppbmcuemhhbworICogW01PTFkwMDM0NzEyOF0gW0dlbjk3XVtUREQgR0FTXSBmZWF0dXJlIGRldmVsb3BtZW50IGNoZWNrIGluCisgKiAuY2FwYWJpbGl0eSB1cGRhdGUKKyAqCisgKiAwNyAwMiAyMDE4IHNhcG5hLmtzCisgKiBbTU9MWTAwMzM2NTMwXSBbTVQzOTY3XVtFaWdlcl1bTzFdW01QMV1bT3Zlcm5pZ2h0XVtTaGVuemhlbl1bNEdNTV1bU1dJRlRdIFtGYXRhbCBlcnJvcihidWYpXSBlcnJfY29kZTE6MHgwMDAwMDg0NCBlcnJfY29kZTI6MHgyM0JFRTdFMCBlcnJfY29kZTM6MHhDQ0NDQ0NDQworICogLgorICoKKyAqIDA1IDE2IDIwMTggc2FwbmEua3MKKyAqIFtNT0xZMDAzMjU4MjVdIFtNVDY3NjFdW01lcmxvdF1bTzFdW01EIFN0YXRpYyBUZXN0XVtDaGluYV1bQXV0b11NRkJJIGZsYWdzIG9mIEUtVVRSQS9VVFJBIGluIE1vYmlsZSBzdGF0aW9uIGNsYXNzbWFyayAzIHNoYWxsIGJlIHNldCB0byBUcnVlIGFzIHN1cHBvcnRlZC4KKyAqIC4KKyAqCisgKiAwNSAxMCAyMDE4IHJ1amluZy56aGFvCisgKiBbTU9MWTAwMzI0NTcwXSBbU01PXVtVTU9MWUVdW1RERCBHQVNdIGxlZ2FjeSBvcHRpb24gY2xlYW51cCByZWZpbmUKKyAqIC4KKyAqCisgKiAwNCAxOCAyMDE4IG5hbGluLmNob3ZhdGlhCisgKiBbTU9MWTAwMzIwOTI4XSBbQ09ERSBTWU5DXSA/Pz8/P0FMUFMwMzQ3NDEyOSA/Pz8/Pz8/cGF0Y2gtLT8/Pz9QNDAgYW5kcm9pZCBvPz8KKyAqIC4gYmxhY2sgbGlzdCBpbiBVTU9MWUUKKyAqCisgKiAwNCAwNSAyMDE4IHNhcG5hLmtzCisgKiBbTU9MWTAwMzE4MTA4XSBbTVQ2NzY1XVtDZXJ2aW5vXVtPMV1bTUQgU3RhdGljIFRlc3RdW0NoaW5hXVtBdXRvXUJpdCBmbGFnIG9mIEUtVVRSQSBXaWRlYmFuZCBSU1JRIG1lYXN1cmVtZW50cyBzdXBwb3J0IHNob3VsZCBiZSBSQVQgZGVwZW5kZW50LgorICogLgorICoKKyAqIDA0IDAzIDIwMTggc2FwbmEua3MKKyAqIFtNT0xZMDAzMTUyMDddIFtDT0RFIFNZTkNdIFtFUzJdVkFNT1MgSSAmIElJIHNob3VsZCBiZSBvZmYKKyAqIC4KKyAqCisgKiAwMyAxMyAyMDE4IHJ1amluZy56aGFvCisgKiBbTU9MWTAwMzEyNTk4XSBbRFNCUF0gcGF0Y2ggYmFjayAiRC1TQlAgZW5oYW5jbWVudCBmb3IgYWxsIG1vZGVtIiB0byBVTU9MWUUgYW5kIFRDMDEuUjMuREVWCisgKiAuCisgKgorICogMDEgMjIgMjAxOCBzYXBuYS5rcworICogW01PTFkwMDMwMjgzMl0gW0NPREUgU1lOQ10gQVQgY29tbWFuZCAoK0VTQ0VMTElORk8pIHRvIG1vZGVtIHRvIHF1ZXJ5IHNlcnZpbmcgY2VsbCBiYW5kIGFuZCBhcmZjbiBpbmZvLCB3aGVuIG5lZWRlZC4KKyAqIC4KKyAqCisgKiAwNiAxNSAyMDE3IG5hbGluLmNob3ZhdGlhCisgKiBbTU9MWTAwMjUzNjk4XSBbQ09ERSBTWU5DXSBHU00gLSBFeHRlbmRlZCBFQVJGQ04gc3VwcG9ydCAtIE5WUkFNIENoYW5nZXMKKyAqIC5iNjYgZ2FzCisgKgorICogMDQgMTIgMjAxNyBzYXBuYS5rcworICogW01PTFkwMDI0MDI3MF0gWzYyOTNdW0dlbWluaV1bVCtXXSBQaGFzZSAxOiBDb21tb24gSW50ZXJmYWNlIENoYW5nZXMgQ2hlY2sgaW4KKyAqIC4KKyAqCisgKiAxMSAxMSAyMDE2IG5hbGluLmNob3ZhdGlhCisgKiBbTU9MWTAwMTkzMzAwXSBQb3J0aW5nIG9mIE5XIEJBTkQgSW5mbyBmcm9tIExSOSB0byBMUjExIFRDMDEKKyAqIC4gTkJSIEJhbmQKKyAqCisgKiAxMSAwOSAyMDE2IG5hbGluLmNob3ZhdGlhCisgKiBbTU9MWTAwMTk4ODY1XSBbVGl0YW5dIFtQTE1OXSBXcm9uZyAicmV2aXNpb24gbGV2ZWwgaW5kaWNhdG9yICIgaW4gQVRUQUNICisgKiAuIFVtb2x5QSAtIFJldmlzaW9uIExldmVsCisgKgorICogMTAgMTQgMjAxNiB3ZW54aW5nLnlhbworICogW01PTFkwMDE1MzUyNF0gWzYyOTFdIFZpdm8gQmxhY2tMaXN0IGZlYXR1cmUuCisgKgorICogMDYgMjcgMjAxNiBjaHVhbmdkZS56aGFuZworICogW01PTFkwMDE4NjUxM10gU3luYyBjb2RlIEZyb20gVU1PTFkgdG8gVU1PTFlBCisgKiAuCisgKgorICogMDQgMTkgMjAxNiBjaHVhbmdkZS56aGFuZworICogW01PTFkwMDE3NDgzNF0gVEREIEdBUyBVVCBpbml0IG9wdGltaXphdGlvbgorICogLgorICoKKyAqIDA5IDE4IDIwMTUgcWluZ3l1LmxhaQorICogW01PTFkwMDE0MDcwN10gW0dBU11bUExNTiBzZWFyY2ggZW5oYW5jZW1lbnQgSUldIFNlYXJjaCBpbmZvIHJldXNlCisgKiAuCisgKgorICogMDkgMTggMjAxNSBtaW5nLmxlZQorICogW01PTFkwMDE0MDcwN10gW0dBU11bUExNTiBzZWFyY2ggZW5oYW5jZW1lbnQgSUldIFNlYXJjaCBpbmZvIHJldXNlCisgKiAuCisgKgorICogMDYgMDEgMjAxNSBoZW5yeS5sYWkKKyAqIFtNT0xZMDAwOTI1MDhdIFtNVDYyOTFdW0xURS1DMktdIEFTIEludGVyIFJBVCBmZWF0dXJlCisgKiAuCisgKgorICogMDUgMTQgMjAxNSBtaW5nLmxlZQorICogW01PTFkwMDExMzcyNV0gW0dBU10gRHluYW1pYyBTQlAgLSBMMiByYW5kb20gZmlsbCBiaXQKKyAqIGR5bmFtaWMgU0JQIGwyIHJhbmRvbSBmaWxsIGJpdC4KKyAqCisgKiAwNSAwNiAyMDE1IHRpdGkud3UKKyAqIFtNT0xZMDAxMTEyMDFdIFtVTU9MWV1bTVJTXSBBY2NvcmRpbmcgdG8gTlZSQU0gc2V0dGluZywgU29tZSBmaWVsZHMgaW4gQ2xhc3NtYXJrIDMgYW5kIE1TIHJhZGlvIGNhcGFiaWxpdHkgc2hvdWxkIHN5bmMgd2l0aCBzZXR0aW5nCisgKiAuCisgKgorICogMDUgMDUgMjAxNSB0aXRpLnd1CisgKiBbTU9MWTAwMTExMjAxXSBbVU1PTFldW01SU10gQWNjb3JkaW5nIHRvIE5WUkFNIHNldHRpbmcsIFNvbWUgZmllbGRzIGluIENsYXNzbWFyayAzIGFuZCBNUyByYWRpbyBjYXBhYmlsaXR5IHNob3VsZCBzeW5jIHdpdGggc2V0dGluZworICogc3luYyBDTTMgYW5kIFJBQ0FQLgorICoKKyAqIDAzIDI0IDIwMTUgd2VueGluZy55YW8KKyAqIFtNT0xZMDAxMDAyMjhdIFtGREQyVEREXSBhY2NvcmRpbmcgdG8gVFMgMjQuMDA4IHN1YmNsYXVzZSAxMC41LjUuMTJhIE1TLgorICoKKyAqIDAzIDE2IDIwMTUgdGFuZ3RlLmxvCisgKiBbTU9MWTAwMDc5NTczXSBhY2NvcmRpbmcgdG8gVFMgMjQuMDA4IHN1YmNsYXVzZSAxMC41LjUuMTJhIE1TIC1hZGQgaW5qZWN0IGluc3RlYWQgb2YgY29tcGlsZSBvcHRpb24KKyAqCisgKiAwMyAwOSAyMDE1IG1pbmcubGVlCisgKiBbTU9MWTAwMDg3NDcwXSBbVW5pdmVyc2FsIEJpbl0gRkREIEdBUyBkZXZlbG9wZW1lbnQKKyAqIC4KKyAqCisgKiAwMSAxNSAyMDE1IHFpbmd5dS5sYWkKKyAqIFtNT0xZMDAwODc1NzFdIFtVbml2ZXJzYWwgQmluXSBUREQgR0FTIGRldmVsb3BlbWVudAorICogX19BTVJXQl9MSU5LX1NVUFBPUlRfXyBjaGFuZ2UgdG8gX19URERfQU1SV0JfTElOS19TVVBQT1JUX18KKyAqCisgKiAwMSAwNyAyMDE1IHFpbmd5dS5sYWkKKyAqIFtNT0xZMDAwODc1NzFdIFtVbml2ZXJzYWwgQmluXSBUREQgR0FTIGRldmVsb3BlbWVudAorICogZml4IGJ1aWxkIGVycm9yIHJhX2NhcF9zdXBwb3J0X3JlbAorICoKKyAqIDAxIDA2IDIwMTUgbWluZy5sZWUKKyAqIFtNT0xZMDAwODc0NzBdIFtVbml2ZXJzYWwgQmluXSBGREQgR0FTIGRldmVsb3BlbWVudAorICogLkZpeCBidWlsZCBlcnJvcgorICoKKyAqIDAxIDA1IDIwMTUgbWluZy5sZWUKKyAqIFtNT0xZMDAwODc0NzBdIFtVbml2ZXJzYWwgQmluXSBGREQgR0FTIGRldmVsb3BlbWVudAorICogbXJzX2dhc19jYXBhYmlsaXR5LmggKHBvd2VyIGNsYXNzIGRlZikKKyAqCisgKiAxMiAzMSAyMDE0IG1pbmcubGVlCisgKiBbTU9MWTAwMDg3NDcwXSBbVW5pdmVyc2FsIEJpbl0gRkREIEdBUyBkZXZlbG9wZW1lbnQKKyAqIEZpeCBjb2RlZ2VuIGVycgorICoKKyAqIDEyIDE2IDIwMTQgcWluZ3l1LmxhaQorICogW01PTFkwMDA4NzU3MV0gW1VuaXZlcnNhbCBCaW5dIFRERCBHQVMgZGV2ZWxvcGVtZW50CisgKiBzeW5jIGZpeCBidWlsZCBlcnJvcgorICoKKyAqIDEyIDE1IDIwMTQgbWluZy5sZWUKKyAqIFtNT0xZMDAwODc0NzBdIFtVbml2ZXJzYWwgQmluXSBGREQgR0FTIGRldmVsb3BlbWVudAorICogLgorICoKKyAqIDExIDE0IDIwMTQgdGFuZ3RlLmxvCisgKiBbTU9MWTAwMDgwOTQ4XSBbR0FTXSBNUyBjYXBhYmlsaXR5IHJlcG9ydCB0byBSMTBSMTEKKyAqIFtHQVNdIE1TIGNhcGFiaWxpdHkgcmVwb3J0IHRvIFIxMFIxMQorICoKKyAqIDEwIDE1IDIwMTQgdGFuZ3RlLmxvCisgKiBbTU9MWTAwMDgwOTQ4XSBbR0FTXSBNUyBjYXBhYmlsaXR5IHJlcG9ydCB0byBSMTBSMTEKKyAqCisgKiAxMiAxMSAyMDEzIG1pbmcubGVlCisgKiBbTU9MWTAwMDQ5MTY2XSBHQVMgTVJTIGNhcGFiaWxpdHkgcmVmaW5lCisgKiAuCisgKgorICogMTEgMjEgMjAxMyBtaW5nLmxlZQorICogW01PTFkwMDA0NzMyNl0gWzgyTFRFdjFdW1ByZS1TUUNdVUUgY2FuJ3QgTU8vTVQgd2hpbGUgcmVnaXN0ZXJlZCBvbiAyRyBvbmx5CisgKiAuCisgKgorICogMTEgMjEgMjAxMyBtaW5nLmxlZQorICogW01PTFkwMDA0NzMyNl0gWzgyTFRFdjFdW1ByZS1TUUNdVUUgY2FuJ3QgTU8vTVQgd2hpbGUgcmVnaXN0ZXJlZCBvbiAyRyBvbmx5CisgKiBCYWNrIG91dCBjaGFuZ2VsaXN0IDMyMTg1NworICoKKyAqIDExIDE0IDIwMTMgamFtZXMuY2hhbgorICogW01PTFkwMDA0MDUyMl0gW0dBU10gUkNTIElSIGVuaGFuY2VtZW50CisgKiAuCisgKgorICogMTAgMjUgMjAxMyBrYXRpZS50c2VuZworICogW01PTFkwMDA0MzQwMF0gW01SU10gYWRkIGluamVjdGlvbiB0byB0dXJuIG9mZiBSOFI5IGNhcGFiaWxpdHkgaW4gTVMgUkEgY2FwYWJpbGl0eSBJRQorICogCS4KKyAqCisgKiAxMCAyMyAyMDEzIGphbWVzLmNoYW4KKyAqIFtNT0xZMDAwNDAwNTBdIFtNdWx0aU1vZGVdIER5bmFtaWMgYmFuZCBzZWxlY3Rpb24KKyAqCisgKiAxMCAyMSAyMDEzIGphbWVzLmNoYW4KKyAqIFtNT0xZMDAwNDAwNTBdIFtNdWx0aU1vZGVdIER5bmFtaWMgYmFuZCBzZWxlY3Rpb24KKyAqIC4KKyAqCisgKiAxMCAxOCAyMDEzIHJ1amluZy56aGFvCisgKiBbTU9MWTAwMDQxNTk1XSBbTVQ2MjkwRTFdW01NRFNfRENdIE1NREMgZmVhdHVyZSBwYXRjaCBiYWNrIHRvIE1PTFkgdHJ1bmsKKyAqIC5HQVMgcGFydAorICoKKyAqIDA5IDI2IDIwMTMgbWluZy5sZWUKKyAqIFtNT0xZMDAwMzkxNDJdIFtNQVVJdG9NT0xZXVtSUl0gU3dpdGNoIEwyIHJhbmRvbSBmaWxsIGJpdCBhbmQgVkFNT1MgY2FwYWJpbGl0eSB2aWEgTlZSQU0gc2V0dHRpbmcKKyAqIC4KKyAqCisgKiAwNSAwOSAyMDEzIGhlbnJ5LmxhaQorICogW01PTFkwMDAwOTIyMl0gW0dBU11bTXVsdGktTW9kZSBEZXZlbG9wbWVudF0gTWVyZ2UgR0FTIG11bHRpLW1vZGUgZGV2ZWxvcG1lbnQgdG8gTU9MWQorICogLgorICoKKyAqIDAzIDIwIDIwMTMgaGVucnkubGFpCisgKiBbTU9MWTAwMDA5MjIyXSBbR0FTXVtNdWx0aS1Nb2RlIERldmVsb3BtZW50XSBNZXJnZSBHQVMgbXVsdGktbW9kZSBkZXZlbG9wbWVudCB0byBNT0xZCisgKiAuCisgKgorICogMDMgMTggMjAxMyBwZW5nLWFuLmNoZW4KKyAqIFtNT0xZMDAwMDc4ODFdIFsyRy1QU10gRGVsaXZlciBSOSBtb2RpZmljYXRpb24KKyAqIC4KKyAqCisgKiAwMSAyMiAyMDEzIGRhdmlkLm5pdQorICogW01PTFkwMDAwOTIwNV0gW01SU10gQ29kZSBjaGVja2VkLWluIGZvciBNT0xZIGJyYW5jaAorICogLgorICoKKyAqIDAxIDExIDIwMTMgaGVucnkubGFpCisgKiBbSGVucnldW011bHRpLU1vZGUgRGV2ZWxvcG1lbnRdIEdBUyBEZXZlbG9wbWVudCBhbmQgUjggQ1IgU3luYworICoKKyAqIDA5IDI1IDIwMTIganVzdGluLmxpCisgKiBOVUxMCisgKiBnYXMgY2FwYWJpbGl0eS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX01SU19HQVNfQ0FQQUJJTElUWV9ICisjZGVmaW5lIF9NUlNfR0FTX0NBUEFCSUxJVFlfSAorCisjaW5jbHVkZSAibXJzX2FzX2ludGVyX2NvcmVfZW51bS5oIgorI2luY2x1ZGUgIm1yc19hc19pbnRlcl9jb3JlX3N0cnVjdC5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJiaXRzdHJlYW0uaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJtcnNfYXNfZW51bXMuaCIKKyNpbmNsdWRlICJnbXNzX3B1YmxpYy5oIgorI2luY2x1ZGUgImFzMmw0Y19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJtcnNfYXNfc3RydWN0LmgiCisKKy8qIENvbW1vbiBkZWZpbml0aW9uIGZvciBib3RoIEZERCBhbmQgVEREICovCisjZGVmaW5lIEFERF9DTEFTU01BUktfSU5GT19JRUkgICAgICAgICAweDIwCisjZGVmaW5lIENMQVNTTUFSS18yX0lFSSAgICAgICAgICAgICAgICAweDMzCisKK3R5cGVkZWYgZW51bQoreworICAgIEdTTV9TTVNfQ0FQX1VOS05PV04gPSAwLAorICAgIEdTTV9TTVNfQ0FQX09OID0gMSwKKyAgICBHU01fU01TX0NBUF9PRkYgPSAyIAorfWdzbV9zbXNfY2FwX2VudW07CisKKworLyogQ29tbW9uIGZ1bmN0aW9uIGRlY2xhcmF0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIF9fR1NNX1JBVF9fCit2b2lkIG1yc19nYXNfZ2V0X2NsYXNzbWFyazMgKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBiaXRfc3RyZWFtICpic19wdHIpOwora2FsX3VpbnQ4IG1yc19nYXNfZ2V0X2NsYXNzbWFyazNtc2dfbGVuKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKK2thbF9ib29sIG1yc19nYXNfZ2V0X3VjczJfc3VwcG9ydChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitrYWxfdWludDggbXJzX2dhc19nZXRfZ3NtX2FsZ29fc3VwcG9ydChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisjaWZkZWYgX19QU19TRVJWSUNFX18KK2thbF91aW50MTYgbXJzX2dhc19nZXRfcmFkaW9fYWNjZXNzX2NhcChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQ4IHN1cHBvcnRfYmFuZCwga2FsX3VpbnQ4ICoqcmFfY2FwKTsKKyNlbmRpZiAvKiBfX1BTX1NFUlZJQ0VfXyAqLwora2FsX2Jvb2wgbXJzX2dhc19nZXRfMmczX3BzX2hvX2NhcCAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIHJhdF9lbnVtIHJhdF9tb2RlKTsKK2thbF9ib29sIG1yc19nYXNfZ2V0XzJnNF9wc19ob19jYXAgKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCByYXRfZW51bSByYXRfbW9kZSk7CitrYWxfYm9vbCBtcnNfZ2FzX2JhbmRfc2V0dGluZ191cGRhdGUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCAqIGdzbV9iYW5kX3B0cik7CisjZW5kaWYgLyogX19HU01fUkFUX18gKi8KK3ZvaWQgbXJzX2dhc19yZWFkX252cmFtX2NuZl9oYW5kbGVyKGthbF91aW50MTYgbnZyYW1fZmlsZV9pZCwga2FsX3VpbnQ4KiBkYXRhLCBrYWxfdWludDE2IGxlbik7Cit2b2lkIG1yc19nYXNfZGVjb2RlX21zX2NhcGFiaWxpdHkoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGJpdF9zdHJlYW0gKmJpdF9zdHJlYW1fcHRyLCBrYWxfYm9vbCBpc19keW5tY19jZmcpOwora2FsX3VpbnQ4ICptcnNfZ2FzX2dldF9jbGFzc21hcmsyIChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgTVJTX1JBVF9NT0RFX1RZUEUgcmVxdWlyZWRfcmF0LCBrYWxfYm9vbCBnZXRfZnVsbF9pZSk7Cit2b2lkIG1yc19nYXNfZ2V0X3Bvd2VyY2xhc3MoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19nc21fcG93ZXJfY2xhc3Nfc3RydWN0ICpnc21fcG93X2NsYXNzKTsKKworZXh0ZXJuIGthbF9ib29sIHJyX21yc19pc19hcmZjbl9iYW5kX3N1cHBvcnRlZChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQxNiBhcmZjbik7CitleHRlcm4ga2FsX3VpbnQxNiBycl9tcnNfYXJmY25fUENTX2JhbmRfdGFnKGthbF91aW50MTYgYXJmY24sIGthbF91aW50OCBzaW1faW5kZXgpOworCitrYWxfYm9vbCBtcnNfZ2FzX3JldHJpZXZlX2FyZmNuX2JhbmQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsa2FsX3VpbnQxNiBhcmZjbiwga2FsX3VpbnQ4ICpiYW5kX3B0cik7CitleHRlcm4ga2FsX2Jvb2wgcnJfbXJzX2dldF9iYW5kX2Zvcl9hcmZjbihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQxNiBhcmZjbixrYWxfdWludDggKiBnc21fYmFuZF9wdHIpOworCitleHRlcm4gdm9pZCBtcnNfZ2FzX2FkZF9ibGFja19jZWxsX2xpc3Rfbm90aWZpY2F0aW9uKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKK2V4dGVybiB2b2lkIG1yc19nYXNfY2xlYXJfYmxhY2tfY2VsbF9saXN0X25vdGlmaWNhdGlvbihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKK2V4dGVybiBrYWxfYm9vbCBtcnNfZ2FzX2JhbmRfc2V0dGluZ191cGRhdGVfYnlfcGxtbihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgbXJzX3BsbW5faWQgY3BsbW4pOworZXh0ZXJuIHZvaWQgbXJzX2dhc19nZXRfZ3NtX2FsbF9zdXBwb3J0ZWRfYmFuZChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQ4ICpnc21iYW5kbWFzayk7CitleHRlcm4ga2FsX2Jvb2wgbXJzX2dhc19tY2NfYmFuZF9zZXR0aW5nX3VwZGF0ZShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQ4ICogZ3NtX2JhbmRfcHRyKTsKK2V4dGVybiB2b2lkIG1yc19nYXNfYmFuZF9zZXR0aW5nX3VwZGF0ZV9mb3JfT09TIChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQ4ICogZ3NtX2JhbmRfcHRyKTsKKworZXh0ZXJuIHZvaWQgbXJzX2dhc19zZXRfZ3NtX3Ntc19jYXBhYmlsaXR5KE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfYm9vbCBnc21fc21zX2NhcCk7CitleHRlcm4gdm9pZCBtcnNfZ2FzX3NldF9nc21fY2FwX3VwZGF0ZSAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGNhcGFiaWxpdHlfc3dpdGNoX2VudW0gZ3NtX2NhcCk7CitleHRlcm4gY2FwYWJpbGl0eV9zd2l0Y2hfZW51bSBtcnNfZ2FzX2dldF9nc21fY2FwX3VwZGF0ZSAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBCZWdpbiBvZiBUREQncyBwYXJ0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fVU1UU19UREQxMjhfTU9ERV9fKSB8fCBkZWZpbmVkKF9fVEREX01PREVNX18pIHx8IGRlZmluZWQoX19URERfMkdfT1AwMV9fKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBCZWdpbiBvZiBUREQncyBwYXJ0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYWNyb3MgV2l0aG91dCBQYXJhbWV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYWNyb3MgV2l0aCBQYXJhbWV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWZpbmUgdGhlIG5lZWRlZCBmaWxlIHNpemUga2VwdCBpbiBOVlJBTSAqLworI2RlZmluZSBURERfUlJfTlZSQU1fQ0xLMl9MRU4gICAgICAgICAgICAzCisvKiBQZXRlciwgMjAwODA4MDQ6IGNoYW5nZSB0aGUgbGVuIG9mIGNsYXNzbWFyazMgKi8KKyNkZWZpbmUgVEREX1JSX05WUkFNX0NMSzNfTEVOICAgICAgICAgICAzNAorI2RlZmluZSBURERfUlJfTlZSQU1fUkVBRF9DTEtfTEVOICAgICAgIDEyCisjZGVmaW5lIFRERF9SUl9GVUxMX0NMSzJfTEVOICAgICAgICAgICAgIDUKKworI2RlZmluZSBURERfUF9HU01fTUFTS19JTl9OVlJBTSAgICAgIDB4MDEKKyNkZWZpbmUgVEREX0VfR1NNX01BU0tfSU5fTlZSQU0gICAgICAweDAyCisjZGVmaW5lIFRERF9EQ1NfMTgwMF9NQVNLX0lOX05WUkFNICAgMHgwNAorI2RlZmluZSBURERfR1NNXzQ4MF9NQVNLX0lOX05WUkFNICAgIDB4MDEKKyNkZWZpbmUgVEREX0dTTV80NTBfTUFTS19JTl9OVlJBTSAgICAweDAyCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW51bXMgd2l0aG91dCB0YWdzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUeXBlIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBTdHVjdHVyZSBvZiBzdXBwb3J0ZWQgY2hhbm5lbCBtb2RlcyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggaXNfc2lnbmFsbGluZ19zdXBwOworICAgIGthbF91aW50OCBpc19zcGVlY2hfZnVsbF9vcl9oYWxmX3Zlcl8xX3N1cHA7CisgICAga2FsX3VpbnQ4IGlzX3NwZWVjaF9mdWxsX29yX2hhbGZfdmVyXzJfc3VwcDsKKyAgICBrYWxfdWludDggaXNfc3BlZWNoX2Z1bGxfb3JfaGFsZl92ZXJfM19zdXBwOworICAgIC8qIFpZOiBhZGQgZm9yIEFNUi1XQiAqLworI2lmZGVmIF9fVEREX0FNUldCX0xJTktfU1VQUE9SVF9fCisgICAga2FsX3VpbnQ4IGlzX3NwZWVjaF9mdWxsX29yX2hhbGZfdmVyXzRfc3VwcDsKKyAgICBrYWxfdWludDggaXNfc3BlZWNoX2Z1bGxfb3JfaGFsZl92ZXJfNV9zdXBwOworI2VuZGlmIC8qIF9fVEREX0FNUldCX0xJTktfU1VQUE9SVF9fICovIAorICAgIGthbF91aW50OCBpc19kYXRhXzQzXzVfZGxfb3JfMTRfNV91bF9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzI5XzBfZGxfb3JfMTRfNV91bF9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzQzXzVfZGxfb3JfMjlfMF91bF9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzE0XzVfZGxfb3JfNDNfNV91bF9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzE0XzVfZGxfb3JfMjlfMF91bF9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzI5XzBfZGxfb3JfNDNfNV91bF9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzQzXzVfcmFkaW9faW50Zl9yYXRlX3N1cHA7CisgICAga2FsX3VpbnQ4IGlzX2RhdGFfMzJfMF9yYWRpb19pbnRmX3JhdGVfc3VwcDsKKyAgICBrYWxfdWludDggaXNfZGF0YV8yOV8wX3JhZGlvX2ludGZfcmF0ZV9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzE0XzVfcmFkaW9faW50Zl9yYXRlX3N1cHA7CisgICAga2FsX3VpbnQ4IGlzX2RhdGFfMTJfMF9yYWRpb19pbnRmX3JhdGVfc3VwcDsKKyAgICBrYWxfdWludDggaXNfZGF0YV8wNl8wX3JhZGlvX2ludGZfcmF0ZV9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzAzXzZfcmFkaW9faW50Zl9yYXRlX3N1cHA7CisgICAga2FsX3VpbnQ4IGlzX2hhbGZfcmF0ZV9zdXBwOworCit9Cit0ZGRfY2hhbm5lbF9tb2RlX3N1cHBvcnRlZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IGFjY2Vzc190ZWNoWzE2XTsKKyAgICBrYWxfdWludDggcG93ZXJfY2FwWzE2XTsKKyAgICBrYWxfdWludDggaHNjc2RfbXVsdGlfc2xvdF9jbGFzczsKKyAgICBrYWxfdWludDggZ3Byc19tdWx0aV9zbG90X2NsYXNzOworICAgIGthbF91aW50OCBwc2V1ZG9fc3luY19jYXA7CisgICAga2FsX3VpbnQ4IHZiczsKKyAgICBrYWxfdWludDggdmdjczsKKyAgICBrYWxfdWludDggYWxnb19zdXBwb3J0ZWQ7CisgICAga2FsX3VpbnQ4IGhzY3NkX211bHRpX3Nsb3RfY2xhc3NfcHJlc2VudDsKKyAgICBrYWxfdWludDggZ3Byc19tdWx0aV9zbG90X2NsYXNzX3ByZXNlbnQ7CisgICAga2FsX3VpbnQ4IHJldmlzaW9uX2xldmVsX2luZGljYXRvcjsKKyAgICBrYWxfdWludDggZ3Byc19leHRfZHluYW1pY19jYXA7CisgICAga2FsX3VpbnQ4IGdlYV9zdXBwb3J0ZWQ7CisgICAga2FsX3VpbnQ4IHNtX2NhcF9ncHJzOworICAgIGthbF91aW50OCBwZmNfbW9kZTsKKworICAgIGthbF9ib29sIGVhcmx5X2NsYXNzX21hcmtfc3VwcG9ydDsKKyAgICBrYWxfdWludDggbW1fbm9uX2RyeF90aW1lcl92YWx1ZTsKKyAgICB0ZGRfY2hhbm5lbF9tb2RlX3N1cHBvcnRlZF9zdHJ1Y3QgY2hsX21vZGVfc3VwcG9ydGVkOyAgIC8qIHN0cnVjdCBvZiBzdXBwb3J0ZWQgY2hhbm5lbCBtb2RlcyAqLworCisgICAgLyogRXZlbHluIDIwMDgwOTA5ICovCisgICAgLyogTGFuc2xvIDIwMDUwMjE1OiBmb3Igc2VsZWN0aW5nIEdQUlMgb3IgRUdQUlMgY2FwYWJpbGl0eSAqLworI2lmZGVmIF9fRUdQUlNfTU9ERV9fCisgICAga2FsX3VpbnQ4IGVncHJzX211bHRpX3Nsb3RfY2xhc3NfcHJlc2VudDsKKyAgICBrYWxfdWludDggZWdwcnNfbXVsdGlfc2xvdF9jbGFzczsKKyAgICBrYWxfdWludDggZWdwcnNfZXh0X2R5bmFtaWNfY2FwOworICAgIC8vSmVsbHkgMjAwOTA2MDIgVXNlIF9fRVBTS19UWF9fCisgICAgLyogRXZlbHluIDIwMDkwNDIyOiBzZXQgZGlmZmVyZW5jZSBwb3dlciBjbGFzcyBvZiA4UFNLICovCisjaWZkZWYgX19FUFNLX1RYX18KKyAgICBrYWxfdWludDggcG93ZXJfY2FwXzhwc2tbMTZdOworI2VuZGlmIC8qIF9fRVBTS19UWF9fICovCisjZW5kaWYgLyogX19FR1BSU19NT0RFX18gKi8gCisKKyAgICAvKiBFdmVseW4gMjAwOTA5MDU6IE1vZGlmeSBmb3IgSGlnaCBtdWx0aXNsb3QgY2xhc3MgKi8KKyNpZiBkZWZpbmVkIChfX01VTFRJU0xPVF9DTEFTU18zNF9fKSB8fCBkZWZpbmVkIChfX01VTFRJU0xPVF9DTEFTU180NV9fKQorICAgIGthbF91aW50OCBoaWdoX211bHRpX3Nsb3RfY2xhc3NfcHJlc2VudDsKKyAgICBrYWxfdWludDggaGlnaF9tdWx0aV9zbG90X2NsYXNzOworI2VuZGlmCisgICAgLyogZW8gTGFuc2xvICovCit9IHRkZF9tc19jYXBhYmlsaXR5X2Zyb21fbXJzX3N0cnVjdDsKKworLyogVGhlIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGhlcmUsIGJ1dCB0aGUgdmFyaWFibGVzIGFyZSBzdG9yZWQgaW4gcnJfY250eF9pbmZvLgorICAgQmVjYXVzZSB0aGV5IGFyZSBvYnRhaW5lZCBmcm9tIFJBVENNIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZSwgbm90IE1SUyAuKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggbm9uX2RyeF90aW1lcjsKKyAgICBrYWxfdWludDggc3BsaXRfb25fY2NjaDsKKyAgICBrYWxfdWludDE2IHNwbGl0X3BnX2N5Y2xlOworfSB0ZGRfbXNfY2FwYWJpbGl0eV9mcm9tX25hc19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBhY2Nlc3NfdGVjaG5vbG9neV90eXBlX2VudW0gc2VydmluZ19iYW5kOworICAgIGthbF91aW50OCBiYW5kX2luZGljYXRvcjsKKyAgICBrYWxfdWludDE2IGFyZmNuOworICAgIGthbF91aW50OCBic2ljOworICAgIGthbF91aW50OCBtc2NfcjsKKwlycl9tbV9zZ3Nucl9mbGFnX2VudW0gc2dzbl9yOworfSB0ZGRfZ2FzX3NlcnZpbmdfY2VsbF9pbmZvX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgbXJzX2dzbV9wb3dlcl9jbGFzc19lbnVtICBwb3dfY2xhc3NfYmFuZDQ1MDsKKyAgICBtcnNfZ3NtX3Bvd2VyX2NsYXNzX2VudW0gIHBvd19jbGFzc19iYW5kNDgwOworICAgIG1yc19nc21fcG93ZXJfY2xhc3NfZW51bSAgcG93X2NsYXNzX2JhbmQ3MTA7CisgICAgbXJzX2dzbV9wb3dlcl9jbGFzc19lbnVtICBwb3dfY2xhc3NfYmFuZDc1MDsKKyAgICBtcnNfZ3NtX3Bvd2VyX2NsYXNzX2VudW0gIHBvd19jbGFzc19iYW5kODEwOworICAgIG1yc19nc21fcG93ZXJfY2xhc3NfZW51bSAgcG93X2NsYXNzX2JhbmQ4NTA7CisgICAgbXJzX2dzbV9wb3dlcl9jbGFzc19lbnVtICBwb3dfY2xhc3NfYmFuZDkwMFA7CisgICAgbXJzX2dzbV9wb3dlcl9jbGFzc19lbnVtICBwb3dfY2xhc3NfYmFuZDkwMEU7CisgICAgbXJzX2dzbV9wb3dlcl9jbGFzc19lbnVtICBwb3dfY2xhc3NfYmFuZDkwMFI7CisgICAgbXJzX2dzbV9wb3dlcl9jbGFzc19lbnVtICBwb3dfY2xhc3NfYmFuZDE4MDA7CisgICAgbXJzX2dzbV9wb3dlcl9jbGFzc19lbnVtICBwb3dfY2xhc3NfYmFuZDE5MDA7Cit9dGRkX21yc19nc21fcG93ZXJfY2xhc3Nfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IHsKKworICAgIHRkZF9tc19jYXBhYmlsaXR5X2Zyb21fbXJzX3N0cnVjdCBtc19jYXBhYmlsaXR5OworICAgIGthbF91aW50OCBtc19jbGFzc21hcmszX2xlbjsgICAgLyogVGhlIGJpdCBsZW5ndGggb2YgQ2xhc3NtYXJrMyAqLworICAgIGthbF91aW50OCBtc19jbGFzc21hcmszX1I5OF9sZW47ICAgIC8qIFRoZSBiaXQgbGVuZ3RoIG9mIENsYXNzbWFyazMgd2hlbiBNUyBzdXBwb3J0cyBSZWxlYXNlIDk4ICovCisgICAga2FsX3VpbnQ4IG1zX2RlZmF1bHRfY2xhc3NtYXJrMltURERfUlJfTlZSQU1fQ0xLMl9MRU5dOyAvKiByZWFkIGZyb20gbnZyYW0gYW5kIGhhcyBiZWVuIGRlY29kZWQgYXMgcG93ZXIgb24gKi8gICAgCisgICAga2FsX3VpbnQ4IG1zX2NsYXNzbWFyazJbVEREX1JSX05WUkFNX0NMSzJfTEVOXTsKKyAgICBrYWxfdWludDggbXNfZnVsbF9jbGFzc21hcmsyW1RERF9SUl9GVUxMX0NMSzJfTEVOXTsKKyAgICBrYWxfdWludDggbXNfY2xhc3NtYXJrM1tURERfUlJfTlZSQU1fQ0xLM19MRU5dOyAgICAKKyAgICByYXRfZW51bSAgIHJhdF9tb2RlOworICAgIC8qIEdTTSBzdXBwb3J0ZWQgYmFuZCAqLworICAgIGthbF91aW50OCAgICBnc21fc3VwcG9ydGVkX2JhbmQ7CisgICAga2FsX2Jvb2wgICAgIGlzX3Rlc3Rfc2ltOworICAgIHRkZF9nYXNfc2VydmluZ19jZWxsX2luZm9fc3RydWN0ICBzZXJ2aW5nX2NlbGxfaW5mbzsKKworI2lmZGVmIF9fTFRFX1JBVF9fCisgICAgY2FwYWJpbGl0eV9zd2l0Y2hfZW51bSAgICBldXRyYW5fY2FwOworI2VuZGlmIC8qIF9fTFRFX1JBVF9fICovCisKKyNpZmRlZiBfX1VNVFNfRkREX01PREVfXyAgIAorICAgIC8qIHJlY29yZCB0aGUgYml0IGxvY2F0aW9uIGZvciBVTVRTIEZERCBSQVQgQ2FwaWJpbGl0eTsgdGhpcyBiaXQgCisgICAgICogaXMgc2V0IHRvIDEgb25seSB3aGVuIHRoZSBNUyBpcyBpbiBHU00rVU1UUyBkdWFsIG1vZGUgCisgICAgICovICAgIAorICAgIGthbF91aW50OCBjbTNfdW10c19mZGRfYml0X2xvY2F0aW9uOworI2VuZGlmIC8qIF9fVU1UU19GRERfTU9ERV9fICovCisKKyNpZmRlZiBfX1VNVFNfVEREMTI4X01PREVfXworICAgIC8qIHJlY29yZCB0aGUgYml0IGxvY2F0aW9uIGZvciBVTVRTIFRERCBSQVQgQ2FwaWJpbGl0eTsgCisgICAgICogdGhpcyBiaXQgaXMgc2V0IHRvIDEgb25seSB3aGVuIHRoZSBNUyBpcyBpbiBHU00rVU1UUyBkdWFsIG1vZGUgCisgICAgICovICAgIAorICAgIGthbF91aW50OCBjbTNfdW10c190ZGRfYml0X2xvY2F0aW9uOyAgICAKKyNlbmRpZiAvKiBfX1VNVFNfVEREMTI4X01PREVfXyAqLworCisgICAgLyogcmVjb3JkIHRoZSBiaXQgbG9jYXRpb24gZm9yIFZBTU9TIGxldmVsIHNldHRpbmcuICovCisgICAga2FsX3VpbnQ4IGNtM192YW1vc19iaXRfbG9jYXRpb247CisgICAga2FsX3VpbnQ4IGluamVjdF92YW1vczsKKyAgICBrYWxfdWludDggdmFtb3NfbGV2ZWxfZnJvbV9udnJhbTsKKworI2lmZGVmIF9fR0VSQU5fUjhfXworICAgIC8qIHJlY29yZCB0aGUgYml0IGxvY2F0aW9uIGZvciBSOCBDYXBpYmlsaXR5OyAKKyAgICAgKiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBvbmx5IHdoZW4gdGhlIE1TIGlzIGluIEdTTStMVEUgCisgICAgICogZHVhbCBtb2RlIG9yIEdTTStVTVRTK0xURSB0cmlwbGUgbW9kZQorICAgICAqLyAgICAKKyAgICBrYWxfdWludDggY20zX3I4X2JpdF9sb2NhdGlvbjsgICAgCisjZW5kaWYgLyogX19HRVJBTl9SOF9fICovCisKKyNpZiBkZWZpbmVkKF9fR0VSQU5fUjlfXykKKyAgICAvKiByZWNvcmQgdGhlIGJpdCBsZW5ndGggZm9yIFI5IENhcGliaWxpdHk7IAorICAgICAqIHVzZWQgdG8gY2hhbmdlIGNsYXNzbWFyazMgbGVuIGZvciBmb3JjZSByOSBmZWF0dXJlIAorICAgICAqLyAgICAKKyAgICBrYWxfdWludDggbXNfY2xhc3NtYXJrM19SOV9sZW47IAorI2VuZGlmIC8qIGRlZmluZWQoX19HRVJBTl9SOV9fKSAqLworCisjaWYgZGVmaW5lZChfX0VHUFJTX01PREVfXykKKyAgICBrYWxfYm9vbCBpc19lcHNrX3R4X2VuYWJsZWQ7CisjZW5kaWYKKworI2lmZGVmIF9fQUdQU19DT05UUk9MX1BMQU5FX18KKyAgICBrYWxfYm9vbCBhZ3BzX3N1cHBvcnRlZF9pbl9jbGs7CisjZW5kaWYgLyogX19BR1BTX0NPTlRST0xfUExBTkVfXyAqLyAKKworI2lmZGVmIF9fUFNfU0VSVklDRV9fCisgICAga2FsX2Jvb2wgaW5qZWN0X3JhX2NhcF9ub3JtYWxfY29kaW5nOworICAgIC8qIEthdGllIDIwMTMwMzA0OiBhZGQgaW5qZWN0IHRvIHR1cm4gb2ZmIFI4UjkgY2FwYWJpbGl0eSBmb3IgQ1JUVUcgNDQuMi4xMCAqLworICAgIC8qIFRhbmdUZSAyMDE0MDkyOSBjaGFuZ2UgaW5qZWN0X3JhX2NhcF90dXJuX1I4Ujlfb2ZmIGludG8gaW5qZWN0X3JhX2NhcF9zdXBwb3J0X3JlbCwgCisgICAgICAgZGVmYXVsdCB2YWx1ZToyNTUsIHRoZSB2YWx1ZSB3aWxsIHJlcHJlc2VudCB0aGUgcmVsZWFzZSB2ZXJzaW9uKi8KKyAgICBrYWxfdWludDggaW5qZWN0X3JhX2NhcF9zdXBwb3J0X3JlbDsKKyAgICAvKiBXZW54aW5nIEZERDJUREQgMjAxNTAzMTMgYWRkIGZvciByZXBvcnQgMkcgY2FwYWJpbGl0eShBY2Nlc3MgdGVjaG5vbG9neSB0ZXBlIGFuZCBSRiBwb3dlciBDYXBhYmlsaXR5KSB3aGVuIDNHIG9ubHkqLworICAgIGthbF9ib29sIGluamVjdF8yZ19jYXBfaW5fM2dvbmx5OworI2VuZGlmIC8qIF9fUFNfU0VSVklDRV9fICovCisKKyAgICAvKiBzdG9yZSB0aGUgbnZyYW0gQ0xLIGluIGNvbnRleHQgdG8gYWxsb3cgc2V0IGdhcyBiYW5kIHdpdGhvdXQgcmVib290ICovCisgICAga2FsX3VpbnQ4ICptc19jbGFzc21hcmtfaW5fbnZyYW1fcHRyOworICAgIGthbF91aW50OCBtc19jbGFzc21hcmtfaW5fbnZyYW1fbGVuOworCisJLyogVGhpcyB2YXJpYWJsZSBob2xkIGVuYWJsZSBvciBkaXNhYmxlIG9mIE1UIFNNUyBjYXBhYmlsaXR5IHNldCB0aHJvdWdoIEFUIGNtZCAqLyAgCisgICAgZ3NtX3Ntc19jYXBfZW51bSBnc21fc21zX2NhcGFiaWxpdHk7CisJY2FwYWJpbGl0eV9zd2l0Y2hfZW51bSAgICBnc21fY2FwOworfSB0ZGRfZ2FzX2NhcGFiaWxpdHlfY29udGV4dF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVjbGFyYXRpb25zIE9mIEV4cG9ydGVkIEdsb2JhbHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBfX0dTTV9SQVRfXyAKK3ZvaWQgdGRkX21yc19nYXNfaW5pdF9jb250eF9kZWZhdWx0X3ZhbHVlKHZvaWQpOworCitleHRlcm4gdm9pZCB0ZGRfbXJzX2dhc19yZXNldCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgdGRkX21yc19nYXNfZ2V0X21zX2NhcGFiaWxpdHkoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIHRkZF9nYXNfY2FwYWJpbGl0eV9jb250ZXh0X3N0cnVjdCAqZ2FzX21zX2NhcF9wdHIpOworCitleHRlcm4ga2FsX3VpbnQ4ICp0ZGRfbXJzX2dhc19nZXRfY2xhc3NtYXJrMSAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIE1SU19SQVRfTU9ERV9UWVBFIHJlcXVpcmVkX3JhdCk7CisKK2V4dGVybiB2b2lkIHRkZF9tcnNfZ2FzX2dldF9jbGFzc21hcmszIChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgYml0X3N0cmVhbSAqYnNfcHRyKTsKKworZXh0ZXJuIGthbF91aW50OCB0ZGRfbXJzX2dhc19nZXRfY2xhc3NtYXJrM21zZ19sZW4oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCitleHRlcm4ga2FsX2Jvb2wgdGRkX21yc19nYXNfZ2V0X3VjczJfc3VwcG9ydChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKK2V4dGVybiB2b2lkIHRkZF9tcnNfZ2FzX3NldF9zaW1fdHlwZShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX2Jvb2wgaXNfdGVzdF9zaW0pOworCitleHRlcm4ga2FsX3VpbnQ4IHRkZF9tcnNfZ2FzX2dldF9nc21fYWxnb19zdXBwb3J0KE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworI2lmZGVmIF9fUFNfU0VSVklDRV9fCitleHRlcm4ga2FsX3VpbnQ4IHRkZF9tcnNfZ2FzX2dldF9yYWRpb19hY2Nlc3NfY2FwIChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQ4IHN1cHBvcnRfYmFuZCwga2FsX3VpbnQ4ICoqcmFfY2FwKTsKK2V4dGVybiBrYWxfdWludDggdGRkX21yc19tYWNfZ2V0X3JhZGlvX2FjY2Vzc19jYXAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCBzdXBwb3J0X2JhbmQsIGthbF91aW50OCAqKnJhX2NhcCwga2FsX2Jvb2wgKmlzX3RydW5jYXRlZCwgY29uc3Qga2FsX2Jvb2wgaXNfZXhjbHVkZV9BNSwgY29uc3Qga2FsX3VpbnQ4IGJpdF9sZW5fbGltaXQpOworI2VuZGlmIC8qIF9fUFNfU0VSVklDRV9fICovCisKK2V4dGVybiBrYWxfYm9vbCB0ZGRfbXJzX2dhc19nZXRfMmczX3BzX2hvX2NhcCAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIHJhdF9lbnVtIHJhdF9tb2RlKTsKKworZXh0ZXJuIGthbF9ib29sIHRkZF9tcnNfZ2FzX2dldF8yZzRfcHNfaG9fY2FwIChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgcmF0X2VudW0gcmF0X21vZGUpOworCitleHRlcm4ga2FsX2Jvb2wgdGRkX21yc19nYXNfZ2V0X2lyX3NydmNjX2NhcCAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIHJhdF9lbnVtIHJhdF9tb2RlKTsKKworZXh0ZXJuIHZvaWQgdGRkX21yc19nYXNfdXBkYXRlX3NlcnZpbmdfY2VsbF9pbmZvKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCB0ZGRfZ2FzX3NlcnZpbmdfY2VsbF9pbmZvX3N0cnVjdCBzZXJ2aW5nX2NlbGxfaW5mbyk7CisKK2V4dGVybiB2b2lkIHRkZF9tcnNfZ2FzX3VwZGF0ZV9jdXJyZW50X3JhdF9tb2RlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCByYXRfZW51bSByYXRfbW9kZSk7CisKK2V4dGVybiBrYWxfYm9vbCB0ZGRfbXJzX2dhc192YWxpZGF0ZV9hcmZjbihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQxNiBhcmZjbiwgdGVfZ3NtX2JhbmRfaW5kaWNhdG9yIGJhbmRfaW5kaWNhdG9yKTsKKworZXh0ZXJuIGthbF9ib29sIHRkZF9tcnNfZ2FzX2JhbmRfc2V0dGluZ191cGRhdGUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCAqIGdzbV9iYW5kX3B0cik7CisKKyNlbmRpZiAvKiBfX0dTTV9SQVRfXyAqLworCisjaWZkZWYgX19MVEVfUkFUX18KKworZXh0ZXJuIHZvaWQgdGRkX21yc19nYXNfdXBkYXRlX2Rpc2FibGVfZXV0cmFuX2NhcChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgY2FwYWJpbGl0eV9zd2l0Y2hfZW51bSBldXRyYW5fY2FwKTsKKworI2VuZGlmIC8qIF9fTFRFX1JBVF9fICovIAorCit2b2lkIHRkZF9tcnNfZ2FzX3JlYWRfbnZyYW1fY25mX2hhbmRsZXIoa2FsX3VpbnQxNiBudnJhbV9maWxlX2lkLCBrYWxfdWludDgqIGRhdGEsIGthbF91aW50MTYgbGVuKTsKKworZXh0ZXJuIHZvaWQgdGRkX21yc19nYXNfZGVjb2RlX21zY2FwX2Zyb21fbnZyYW0oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCAqYml0X3B0cik7CisKK2V4dGVybiB2b2lkIHRkZF9tcnNfZ2FzX2RlY29kZV9tc19jYXBhYmlsaXR5KE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBiaXRfc3RyZWFtICpiaXRfc3RyZWFtX3B0ciwga2FsX2Jvb2wgaXNfZHlubWNfY2ZnKTsKKworZXh0ZXJuIGthbF9ib29sIHRkZF9tcnNfZ2FzX2lzX1I5OV9zdXBwb3J0ZWRfaW5fQ1MoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCitleHRlcm4ga2FsX2Jvb2wgdGRkX21yc19nYXNfaXNfUjk5X3N1cHBvcnRlZF9pbl9QUyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKK2V4dGVybiBrYWxfdWludDggKnRkZF9tcnNfZ2FzX2dldF9jbGFzc21hcmsyIChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgTVJTX1JBVF9NT0RFX1RZUEUgcmVxdWlyZWRfcmF0LCBrYWxfYm9vbCBnZXRfZnVsbF9pZSk7CisKK2V4dGVybiB2b2lkIHRkZF9tcnNfZ2FzX2dldF9wb3dlcmNsYXNzKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCB0ZGRfbXJzX2dzbV9wb3dlcl9jbGFzc19zdHJ1Y3QgKmdzbV9wb3dfY2xhc3MpOworCitleHRlcm4gdm9pZCB0ZGRfbXJzX2dhc19hZGRfYmxhY2tfY2VsbF9saXN0X25vdGlmaWNhdGlvbih2b2lkKTsKKworZXh0ZXJuIHZvaWQgdGRkX21yc19nYXNfY2xlYXJfYmxhY2tfY2VsbF9saXN0X25vdGlmaWNhdGlvbih2b2lkKTsKKworZXh0ZXJuIGthbF9ib29sIHRkZF9tcnNfZ2FzX3JldHJpZXZlX2FyZmNuX2JhbmQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsa2FsX3VpbnQxNiBhcmZjbiwga2FsX3VpbnQ4ICpiYW5kX3B0cik7CisjaWZuZGVmIF9fTVRLX1RBUkdFVF9fCitleHRlcm4gdm9pZCBtcnNfaW5pdF90ZGRfZ2FzX3V0X2NhcGFiaWxpdHkoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworI2VuZGlmCisKK2V4dGVybiBrYWxfdWludDggdGRkX21yc19nYXNfZ2V0X3ZhbW9zX2xldmVsX3NldHRpbmcoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCitleHRlcm4gdm9pZCB0ZGRfbXJzX3NldF9nc21fc21zX2NhcGFiaWxpdHkoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF9ib29sIGdzbV9zbXNfY2FwKTsKK2V4dGVybiB2b2lkIHRkZF9tcnNfZ2FzX3NldF9nc21fY2FwX3VwZGF0ZShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgY2FwYWJpbGl0eV9zd2l0Y2hfZW51bSBnc21fY2FwKTsKK2V4dGVybiBjYXBhYmlsaXR5X3N3aXRjaF9lbnVtIHRkZF9tcnNfZ2FzX2dldF9nc21fY2FwX3VwZGF0ZShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitleHRlcm4ga2FsX2Jvb2wgdGRkX21yc19nYXNfZ3NtX2VuYWJsZWQgKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCByYXRfZW51bSByYXRfbW9kZSk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEVuZCBvZiBUREQncyBwYXJ0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZW5kaWYgLyogZGVmaW5lZChfX1VNVFNfVEREMTI4X01PREVfXykgfHwgZGVmaW5lZChfX1RERF9NT0RFTV9fKSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBCZWdpbiBvZiBGREQncyBwYXJ0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWFjcm9zIFdpdGhvdXQgUGFyYW1ldGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVmaW5lIHRoZSBuZWVkZWQgZmlsZSBzaXplIGtlcHQgaW4gTlZSQU0gKi8KKyNkZWZpbmUgRkREX1JSX05WUkFNX0NMSzJfTEVOICAgICAgICAgICAgMworLyogUGV0ZXIsIDIwMDgwODA0OiBjaGFuZ2UgdGhlIGxlbiBvZiBjbGFzc21hcmszICovCisjZGVmaW5lIEZERF9SUl9OVlJBTV9DTEszX0xFTiAgICAgICAgICAgMzQKKyNkZWZpbmUgRkREX1JSX05WUkFNX1JFQURfQ0xLX0xFTiAgICAgICAxMgorI2RlZmluZSBGRERfUlJfRlVMTF9DTEsyX0xFTiAgICAgICAgICAgICA1CisKKyNkZWZpbmUgRkREX1BfR1NNX01BU0tfSU5fTlZSQU0gICAgICAweDAxCisjZGVmaW5lIEZERF9FX0dTTV9NQVNLX0lOX05WUkFNICAgICAgMHgwMgorI2RlZmluZSBGRERfRENTXzE4MDBfTUFTS19JTl9OVlJBTSAgIDB4MDQKKyNkZWZpbmUgRkREX0dTTV80ODBfTUFTS19JTl9OVlJBTSAgICAweDAxCisjZGVmaW5lIEZERF9HU01fNDUwX01BU0tfSU5fTlZSQU0gICAgMHgwMgorCisjZGVmaW5lIERJU0FCTEVfQTU0X0NJUEhFUl9BTEdPICAgIDB4RjcKKworLyoKKyAgbXJzX2dhc19iYW5kX3NldHRpbmdfdXBkYXRlX2Zvcl9PT1MoKSBlc3NlbnRpYWxseSBkb2VzIHNhbWUgdGhpbmcgYXMKKyAgbXJzX2dhc19yZXNldF9iYW5kX3NldHRpbmdzKCkuIG1yc19nYXNfYmFuZF9zZXR0aW5nX3VwZGF0ZV9mb3JfT09TKClmdW5jdGlvbgorICBpcyByZXRhaW5lZCBhcyB0aGlzIGlzIHBvcnRlZCBmcm9tIG9mIE1DQyBiYXNlZCBiYW5kIHVwZGF0ZSBmZWF0dXJlCisqLworI2RlZmluZSBtcnNfZ2FzX3Jlc2V0X2JhbmRfc2V0dGluZ3MgbXJzX2dhc19iYW5kX3NldHRpbmdfdXBkYXRlX2Zvcl9PT1MKKyNkZWZpbmUgbXJzX2dhc191cGRhdGVfZ3NtX2JhbmRfc2V0dGluZyBtcnNfZ2FzX2JhbmRfc2V0dGluZ191cGRhdGVfZm9yX09PUworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1hY3JvcyBXaXRoIFBhcmFtZXRlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVudW1zIHdpdGhvdXQgdGFncworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIF9fQTVfM19BTkRfR0VBX1dISUxURV9MSVNUX18KKwordHlwZWRlZiBlbnVtCit7CisgICBERUZBVUxUX1ZBTFVFID0gMCwKKyAgIFBMTU5fTUFUQ0hFRCA9IDEsCisgICBQTE1OX05PVF9NQVRDSEVEID0gMiAKK31wbG1uX21hdGNoX2VudW07CisKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFR5cGUgRGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFN0dWN0dXJlIG9mIHN1cHBvcnRlZCBjaGFubmVsIG1vZGVzICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCBpc19zaWduYWxsaW5nX3N1cHA7CisgICAga2FsX3VpbnQ4IGlzX3NwZWVjaF9mdWxsX29yX2hhbGZfdmVyXzFfc3VwcDsKKyAgICBrYWxfdWludDggaXNfc3BlZWNoX2Z1bGxfb3JfaGFsZl92ZXJfMl9zdXBwOworICAgIGthbF91aW50OCBpc19zcGVlY2hfZnVsbF9vcl9oYWxmX3Zlcl8zX3N1cHA7CisgICAgLyogWlk6IGFkZCBmb3IgQU1SLVdCICovCisjaWZkZWYgX19BTVJXQl9MSU5LX1NVUFBPUlRfXworICAgIGthbF91aW50OCBpc19zcGVlY2hfZnVsbF9vcl9oYWxmX3Zlcl80X3N1cHA7CisgICAga2FsX3VpbnQ4IGlzX3NwZWVjaF9mdWxsX29yX2hhbGZfdmVyXzVfc3VwcDsKKyNlbmRpZiAvKiBfX0FNUldCX0xJTktfU1VQUE9SVF9fICovIAorICAgIGthbF91aW50OCBpc19kYXRhXzQzXzVfZGxfb3JfMTRfNV91bF9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzI5XzBfZGxfb3JfMTRfNV91bF9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzQzXzVfZGxfb3JfMjlfMF91bF9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzE0XzVfZGxfb3JfNDNfNV91bF9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzE0XzVfZGxfb3JfMjlfMF91bF9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzI5XzBfZGxfb3JfNDNfNV91bF9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzQzXzVfcmFkaW9faW50Zl9yYXRlX3N1cHA7CisgICAga2FsX3VpbnQ4IGlzX2RhdGFfMzJfMF9yYWRpb19pbnRmX3JhdGVfc3VwcDsKKyAgICBrYWxfdWludDggaXNfZGF0YV8yOV8wX3JhZGlvX2ludGZfcmF0ZV9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzE0XzVfcmFkaW9faW50Zl9yYXRlX3N1cHA7CisgICAga2FsX3VpbnQ4IGlzX2RhdGFfMTJfMF9yYWRpb19pbnRmX3JhdGVfc3VwcDsKKyAgICBrYWxfdWludDggaXNfZGF0YV8wNl8wX3JhZGlvX2ludGZfcmF0ZV9zdXBwOworICAgIGthbF91aW50OCBpc19kYXRhXzAzXzZfcmFkaW9faW50Zl9yYXRlX3N1cHA7CisgICAga2FsX3VpbnQ4IGlzX2hhbGZfcmF0ZV9zdXBwOworfWZkZF9jaGFubmVsX21vZGVfc3VwcG9ydGVkX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggYWNjZXNzX3RlY2hbMTZdOworICAgIGthbF91aW50OCBwb3dlcl9jYXBbMTZdOworICAgIGthbF91aW50OCBoc2NzZF9tdWx0aV9zbG90X2NsYXNzOworICAgIGthbF91aW50OCBncHJzX211bHRpX3Nsb3RfY2xhc3M7CisgICAga2FsX3VpbnQ4IHBzZXVkb19zeW5jX2NhcDsKKyAgICBrYWxfdWludDggdmJzOworICAgIGthbF91aW50OCB2Z2NzOworICAgIGthbF91aW50OCBhbGdvX3N1cHBvcnRlZDsKKyAgICBrYWxfdWludDggaHNjc2RfbXVsdGlfc2xvdF9jbGFzc19wcmVzZW50OworICAgIGthbF91aW50OCBncHJzX211bHRpX3Nsb3RfY2xhc3NfcHJlc2VudDsKKyAgICBrYWxfdWludDggcmV2aXNpb25fbGV2ZWxfaW5kaWNhdG9yOworICAgIGthbF91aW50OCBncHJzX2V4dF9keW5hbWljX2NhcDsKKyAgICBrYWxfdWludDggZ2VhX3N1cHBvcnRlZDsKKyAgICBrYWxfdWludDggc21fY2FwX2dwcnM7CisgICAga2FsX3VpbnQ4IHBmY19tb2RlOworCisgICAga2FsX2Jvb2wgZWFybHlfY2xhc3NfbWFya19zdXBwb3J0OworICAgIGthbF91aW50OCBtbV9ub25fZHJ4X3RpbWVyX3ZhbHVlOworICAgIGZkZF9jaGFubmVsX21vZGVfc3VwcG9ydGVkX3N0cnVjdCBjaGxfbW9kZV9zdXBwb3J0ZWQ7ICAgLyogc3RydWN0IG9mIHN1cHBvcnRlZCBjaGFubmVsIG1vZGVzICovCisKKyAgICAvKiBFdmVseW4gMjAwODA5MDkgKi8KKyAgICAvKiBMYW5zbG8gMjAwNTAyMTU6IGZvciBzZWxlY3RpbmcgR1BSUyBvciBFR1BSUyBjYXBhYmlsaXR5ICovCisjaWZkZWYgX19FR1BSU19NT0RFX18KKyAgICBrYWxfdWludDggZWdwcnNfbXVsdGlfc2xvdF9jbGFzc19wcmVzZW50OworICAgIGthbF91aW50OCBlZ3Byc19tdWx0aV9zbG90X2NsYXNzOworICAgIGthbF91aW50OCBlZ3Byc19leHRfZHluYW1pY19jYXA7CisgICAgLy9KZWxseSAyMDA5MDYwMiBVc2UgX19FUFNLX1RYX18KKyAgICAvKiBFdmVseW4gMjAwOTA0MjI6IHNldCBkaWZmZXJlbmNlIHBvd2VyIGNsYXNzIG9mIDhQU0sgKi8KKyNpZmRlZiBfX0VQU0tfVFhfXworICAgIGthbF91aW50OCBwb3dlcl9jYXBfOHBza1sxNl07CisjZW5kaWYgLyogX19FUFNLX1RYX18gKi8KKyNlbmRpZiAvKiBfX0VHUFJTX01PREVfXyAqLyAKKworICAgIC8qIEV2ZWx5biAyMDA5MDkwNTogTW9kaWZ5IGZvciBIaWdoIG11bHRpc2xvdCBjbGFzcyAqLworI2lmIGRlZmluZWQgKF9fTVVMVElTTE9UX0NMQVNTXzM0X18pIHx8IGRlZmluZWQgKF9fTVVMVElTTE9UX0NMQVNTXzQ1X18pCisgICAga2FsX3VpbnQ4IGhpZ2hfbXVsdGlfc2xvdF9jbGFzc19wcmVzZW50OworICAgIGthbF91aW50OCBoaWdoX211bHRpX3Nsb3RfY2xhc3M7CisjZW5kaWYKKyAgICAvKiBlbyBMYW5zbG8gKi8KKyAgICAKKyAgICBrYWxfdWludDggZ21za19tdWx0aXNsb3RfcG93ZXJfcHJvZmlsZTsKKyAgICBrYWxfdWludDggZWlnaHRwc2tfbXVsdGlzbG90X3Bvd2VyX3Byb2ZpbGU7CisgICAga2FsX3VpbnQ4IGRvd25saW5rX2FkdmFuY2VkX3JlY2VpdmVyX3BlcmZvcm1hbmNlOworCQorI2lmZGVmIF9fR0VSQU5fUjExX18KKyAgICBrYWxfdWludDggZXh0ZW5kZWRfZWFyZmNuOworICAgIGthbF91aW50OCAgZXV0cmFuX3diX3JzcnE7CisgICAga2FsX3VpbnQ4IHVtdHNfbWZiaTsKKyAgICBrYWxfdWludDggZXV0cmFfbWZiaTsKKyNlbmRpZiAvKiBfX0dFUkFOX1IxMV9fICovIAorCisjaWZkZWYgX19BNV8zX0FORF9HRUFfV0hJTFRFX0xJU1RfXworICAgIGthbF91aW50OCBhNV9kZWZhdWx0X3N1cHBvcnRlZDsKKyAgICBrYWxfdWludDggZ2VhX2RlZmF1bHRfc3VwcG9ydGVkOworI2VuZGlmIC8qIF9fQTVfM19BTkRfR0VBX1dISUxURV9MSVNUX18gKi8KKyNpZmRlZiBfX1ZBTU9TX0NVU1RPTV9DT05GSUdfXworICAgIGthbF91aW50OCB2YW1vc19sZXZlbF9mcm9tX2N1c3RvbV9jb25maWc7CisjZW5kaWYKKworfSBmZGRfbXNfY2FwYWJpbGl0eV9mcm9tX21yc19zdHJ1Y3Q7CisKKy8qIFRoZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBoZXJlLCBidXQgdGhlIHZhcmlhYmxlcyBhcmUgc3RvcmVkIGluIHJyX2NudHhfaW5mby4KKyAgIEJlY2F1c2UgdGhleSBhcmUgb2J0YWluZWQgZnJvbSBSQVRDTSBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmUsIG5vdCBNUlMgLiovCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IG5vbl9kcnhfdGltZXI7CisgICAga2FsX3VpbnQ4IHNwbGl0X29uX2NjY2g7CisgICAga2FsX3VpbnQxNiBzcGxpdF9wZ19jeWNsZTsKK30gZmRkX21zX2NhcGFiaWxpdHlfZnJvbV9uYXNfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgYWNjZXNzX3RlY2hub2xvZ3lfdHlwZV9lbnVtIHNlcnZpbmdfYmFuZDsKKyAgICBrYWxfdWludDggYmFuZF9pbmRpY2F0b3I7CisgICAga2FsX3VpbnQxNiBhcmZjbjsKKyAgICBrYWxfdWludDggYnNpYzsKKyAgICBrYWxfdWludDggbXNjX3I7CisgICAgcnJfbW1fc2dzbnJfZmxhZ19lbnVtIHNnc25fcjsKK30gZmRkX2dhc19zZXJ2aW5nX2NlbGxfaW5mb19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBtcnNfZ3NtX3Bvd2VyX2NsYXNzX2VudW0gIHBvd19jbGFzc19iYW5kNDUwOworICAgIG1yc19nc21fcG93ZXJfY2xhc3NfZW51bSAgcG93X2NsYXNzX2JhbmQ0ODA7CisgICAgbXJzX2dzbV9wb3dlcl9jbGFzc19lbnVtICBwb3dfY2xhc3NfYmFuZDcxMDsKKyAgICBtcnNfZ3NtX3Bvd2VyX2NsYXNzX2VudW0gIHBvd19jbGFzc19iYW5kNzUwOworICAgIG1yc19nc21fcG93ZXJfY2xhc3NfZW51bSAgcG93X2NsYXNzX2JhbmQ4MTA7CisgICAgbXJzX2dzbV9wb3dlcl9jbGFzc19lbnVtICBwb3dfY2xhc3NfYmFuZDg1MDsKKyAgICBtcnNfZ3NtX3Bvd2VyX2NsYXNzX2VudW0gIHBvd19jbGFzc19iYW5kOTAwUDsKKyAgICBtcnNfZ3NtX3Bvd2VyX2NsYXNzX2VudW0gIHBvd19jbGFzc19iYW5kOTAwRTsKKyAgICBtcnNfZ3NtX3Bvd2VyX2NsYXNzX2VudW0gIHBvd19jbGFzc19iYW5kOTAwUjsKKyAgICBtcnNfZ3NtX3Bvd2VyX2NsYXNzX2VudW0gIHBvd19jbGFzc19iYW5kMTgwMDsKKyAgICBtcnNfZ3NtX3Bvd2VyX2NsYXNzX2VudW0gIHBvd19jbGFzc19iYW5kMTkwMDsKK30gZmRkX21yc19nc21fcG93ZXJfY2xhc3Nfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBmZGRfbXNfY2FwYWJpbGl0eV9mcm9tX21yc19zdHJ1Y3QgbXNfY2FwYWJpbGl0eTsKKyAgICBrYWxfdWludDggbXNfY2xhc3NtYXJrM19sZW47ICAgIC8qIFRoZSBiaXQgbGVuZ3RoIG9mIENsYXNzbWFyazMgKi8KKyAgICBrYWxfdWludDggbXNfY2xhc3NtYXJrM19SOThfbGVuOyAgICAvKiBUaGUgYml0IGxlbmd0aCBvZiBDbGFzc21hcmszIHdoZW4gTVMgc3VwcG9ydHMgUmVsZWFzZSA5OCAqLworICAgIGthbF91aW50OCBtc19kZWZhdWx0X2NsYXNzbWFyazJbRkREX1JSX05WUkFNX0NMSzJfTEVOXTsgLyogcmVhZCBmcm9tIG52cmFtIGFuZCBoYXMgYmVlbiBkZWNvZGVkIGFzIHBvd2VyIG9uICovICAgIAorICAgIGthbF91aW50OCBtc19jbGFzc21hcmsyW0ZERF9SUl9OVlJBTV9DTEsyX0xFTl07CisgICAga2FsX3VpbnQ4IG1zX2Z1bGxfY2xhc3NtYXJrMltGRERfUlJfRlVMTF9DTEsyX0xFTl07CisgICAga2FsX3VpbnQ4IG1zX2NsYXNzbWFyazNbRkREX1JSX05WUkFNX0NMSzNfTEVOXTsgICAgCisgICAgcmF0X2VudW0gICByYXRfbW9kZTsKKyAgICAvKiBHU00gc3VwcG9ydGVkIGJhbmQgKi8KKyAgICBrYWxfdWludDggICAgZ3NtX3N1cHBvcnRlZF9iYW5kOworICAgIGthbF9ib29sICAgICBpc190ZXN0X3NpbTsKKyAgICBmZGRfZ2FzX3NlcnZpbmdfY2VsbF9pbmZvX3N0cnVjdCAgc2VydmluZ19jZWxsX2luZm87CisgICAgY2FwYWJpbGl0eV9zd2l0Y2hfZW51bSAgICBnc21fY2FwOworCisjaWZkZWYgX19MVEVfUkFUX18KKyAgICBjYXBhYmlsaXR5X3N3aXRjaF9lbnVtICAgZXV0cmFuX2NhcDsKKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworCisjaWZkZWYgX19VTVRTX0ZERF9NT0RFX18gICAKKyAgICAvKiByZWNvcmQgdGhlIGJpdCBsb2NhdGlvbiBmb3IgVU1UUyBGREQgUkFUIENhcGliaWxpdHk7IHRoaXMgYml0IAorICAgICAqIGlzIHNldCB0byAxIG9ubHkgd2hlbiB0aGUgTVMgaXMgaW4gR1NNK1VNVFMgZHVhbCBtb2RlIAorICAgICAqLyAgICAKKyAgICBrYWxfdWludDggY20zX3VtdHNfZmRkX2JpdF9sb2NhdGlvbjsKKyNlbmRpZiAvKiBfX1VNVFNfRkREX01PREVfXyAqLworCisgICAgLyogcmVjb3JkIHRoZSBiaXQgbG9jYXRpb24gZm9yIFZBTU9TIGxldmVsIHNldHRpbmcuICovCisgICAga2FsX3VpbnQ4IGNtM192YW1vc19iaXRfbG9jYXRpb247CisgICAga2FsX3VpbnQ4IGluamVjdF92YW1vczsKKyAgICBrYWxfdWludDggdmFtb3NfbGV2ZWxfZnJvbV9udnJhbTsKKworI2lmZGVmIF9fR0VSQU5fUjhfXworICAgIC8qIHJlY29yZCB0aGUgYml0IGxvY2F0aW9uIGZvciBSOCBDYXBpYmlsaXR5OyAKKyAgICAgKiB0aGlzIGJpdCBpcyBzZXQgdG8gMSBvbmx5IHdoZW4gdGhlIE1TIGlzIGluIEdTTStMVEUgCisgICAgICogZHVhbCBtb2RlIG9yIEdTTStVTVRTK0xURSB0cmlwbGUgbW9kZQorICAgICAqLyAgICAKKyAgICBrYWxfdWludDggY20zX3I4X2JpdF9sb2NhdGlvbjsgICAgCisjZW5kaWYgLyogX19HRVJBTl9SOF9fICovCisKKyNpZmRlZiBfX0dFUkFOX1I5X18KKyAgICBrYWxfdWludDggY20zX3I5X2NzZ19iaXRfbG9jYXRpb247ICAgIAorI2VuZGlmIC8qIF9fR0VSQU5fUjlfXyAqLworCisvKiBFeHRlbmRlZCBFQVJGQ04gaXMgbGF0ZSBhZGRpdGlvbiB0byBSZWwgMTEgYWxzbyA0NC4wMTggYW5kIDQ0LjA2MCBzcGVjIGhhcyB0aGlzIGZlYXR1cmUgaW4gUkVMMTEsICovCisvKlNvIHJpZ2h0IG5vdyBrZWVwIGNvZGUgY2hhbmdlIHVuZGVyIF9fR0VSQU5fUjExX18sIGlmIG5lZWRlZCBpbiBmdXR1cmUsIGNoYW5nZSB0byBfX0dFUkFOX1IxMl9fKi8KKyNpZmRlZiBfX0dFUkFOX1IxMV9fCisgICAga2FsX3VpbnQ4IGNtM19yMTJfZXh0ZW5kZWRfZWFyZmNuX2JpdF9sb2NhdGlvbjsKKyAgICBrYWxfdWludDggY20zX3IxMV9ldXRyYV93Yl9yc3JxX2xvY2F0aW9uOworICAgIGthbF91aW50OCBjbTNfcjEyX3VtdHNfbWZiaV9iaXRfbG9jYXRpb247CisgICAga2FsX3VpbnQ4IGNtM19yMTJfZXV0cmFfbWZiaV9iaXRfbG9jYXRpb247CisjZW5kaWYgLyogX19HRVJBTl9SMTFfXyAqLworCisjaWYgZGVmaW5lZChfX0VHUFJTX01PREVfXykKKyAgICBrYWxfYm9vbCBpc19lcHNrX3R4X2VuYWJsZWQ7CisjZW5kaWYKKworI2lmZGVmIF9fQUdQU19DT05UUk9MX1BMQU5FX18KKyAgICBrYWxfYm9vbCBhZ3BzX3N1cHBvcnRlZF9pbl9jbGs7CisjZW5kaWYgLyogX19BR1BTX0NPTlRST0xfUExBTkVfXyAqLyAKKworI2lmZGVmIF9fUFNfU0VSVklDRV9fCisgICAga2FsX2Jvb2wgaW5qZWN0X3JhX2NhcF9ub3JtYWxfY29kaW5nOworICAgIC8qIEthdGllIDIwMTMwMzA0OiBhZGQgaW5qZWN0IHRvIHR1cm4gb2ZmIFI4UjkgY2FwYWJpbGl0eSBmb3IgQ1JUVUcgNDQuMi4xMCAqLworICAgIC8qIFRhbmdUZSAyMDE0MDkyOSBjaGFuZ2UgaW5qZWN0X3JhX2NhcF90dXJuX1I4Ujlfb2ZmIGludG8gaW5qZWN0X3JhX2NhcF9zdXBwb3J0X3JlbCwgCisgICAgICAgZGVmYXVsdCB2YWx1ZToyNTUsIHRoZSB2YWx1ZSB3aWxsIHJlcHJlc2VudCB0aGUgcmVsZWFzZSB2ZXJzaW9uKi8KKyAgICBrYWxfdWludDggaW5qZWN0X3JhX2NhcF9zdXBwb3J0X3JlbDsKKyAgICAvKiBUYW5nVGUgMDIxNTAzMTMgYWRkIGZvciByZXBvcnQgMkcgY2FwYWJpbGl0eShBY2Nlc3MgdGVjaG5vbG9neSB0ZXBlIGFuZCBSRiBwb3dlciBDYXBhYmlsaXR5KSB3aGVuIDNHIG9ubHkqLworICAgIGthbF9ib29sIGluamVjdF8yZ19jYXBfaW5fM2dvbmx5OworI2VuZGlmIC8qIF9fUFNfU0VSVklDRV9fICovCisKKyAgICAvKiBzdG9yZSB0aGUgbnZyYW0gQ0xLIGluIGNvbnRleHQgdG8gYWxsb3cgc2V0IGdhcyBiYW5kIHdpdGhvdXQgcmVib290ICovCisgICAga2FsX3VpbnQ4ICptc19jbGFzc21hcmtfaW5fbnZyYW1fcHRyOworICAgIGthbF91aW50OCBtc19jbGFzc21hcmtfaW5fbnZyYW1fbGVuOworCisjaWZkZWYgX19OUl9SQVRfXworICAgIGNhcGFiaWxpdHlfc3dpdGNoX2VudW0gICBucl9jYXA7CisjZW5kaWYgLyogX19OUl9SQVRfXyAqLworCisgIC8qIFRoaXMgQ29udGV4dCB2YXJpYWJsZSB3aWxsIGNvbnRhaW4gZ3NtIEFTIGFuZCBIVyBzdXBwb3J0ZWQgYmFuZCAqLworICAgIGthbF91aW50OCAgZ3NtX2FsbF9zdXBwb3J0ZWRfYmFuZDsKKworICAvKiBUaGlzIHZhcmlhYmxlIGhvbGQgZW5hYmxlIG9yIGRpc2FibGUgb2YgTVQgU01TIGNhcGFiaWxpdHkgc2V0IHRocm91Z2ggQVQgY21kICovICAKKyAgICBnc21fc21zX2NhcF9lbnVtIGdzbV9zbXNfY2FwYWJpbGl0eTsKKyAgICAKK30gZmRkX2dhc19jYXBhYmlsaXR5X2NvbnRleHRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlY2xhcmF0aW9ucyBPZiBFeHBvcnRlZCBHbG9iYWxzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgX19HU01fUkFUX18gCit2b2lkIGZkZF9tcnNfZ2FzX2luaXRfY29udHhfZGVmYXVsdF92YWx1ZSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgZmRkX21yc19nYXNfcmVzZXQodm9pZCk7CisKK2V4dGVybiB2b2lkIGZkZF9tcnNfZ2FzX2dldF9tc19jYXBhYmlsaXR5KE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBmZGRfZ2FzX2NhcGFiaWxpdHlfY29udGV4dF9zdHJ1Y3QgKmdhc19tc19jYXBfcHRyKTsKKworZXh0ZXJuIGthbF91aW50OCAqZmRkX21yc19nYXNfZ2V0X2NsYXNzbWFyazEgKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBNUlNfUkFUX01PREVfVFlQRSByZXF1aXJlZF9yYXQpOworCitleHRlcm4gdm9pZCBmZGRfbXJzX2dhc19nZXRfY2xhc3NtYXJrMyAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGJpdF9zdHJlYW0gKmJzX3B0cik7CisKK2V4dGVybiBrYWxfdWludDggZmRkX21yc19nYXNfZ2V0X2NsYXNzbWFyazNtc2dfbGVuKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworZXh0ZXJuIGthbF9ib29sIGZkZF9tcnNfZ2FzX2dldF91Y3MyX3N1cHBvcnQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCitleHRlcm4gdm9pZCBmZGRfbXJzX2dhc19zZXRfc2ltX3R5cGUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF9ib29sIGlzX3Rlc3Rfc2ltKTsKKworZXh0ZXJuIGthbF91aW50OCBmZGRfbXJzX2dhc19nZXRfZ3NtX2FsZ29fc3VwcG9ydChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKKyNpZmRlZiBfX1BTX1NFUlZJQ0VfXworZXh0ZXJuIGthbF91aW50MTYgZmRkX21yc19nYXNfZ2V0X3JhZGlvX2FjY2Vzc19jYXAgKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDggc3VwcG9ydF9iYW5kLCBrYWxfdWludDggKipyYV9jYXApOworZXh0ZXJuIGthbF91aW50MTYgZmRkX21yc19tYWNfZ2V0X3JhZGlvX2FjY2Vzc19jYXAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCBzdXBwb3J0X2JhbmQsIGthbF91aW50OCAqKnJhX2NhcCwga2FsX2Jvb2wgKmlzX3RydW5jYXRlZCwgY29uc3Qga2FsX2Jvb2wgaXNfZXhjbHVkZV9BNSwgY29uc3Qga2FsX3VpbnQ4IGJpdF9sZW5fbGltaXQpOworI2VuZGlmIC8qIF9fUFNfU0VSVklDRV9fICovCisKK2V4dGVybiBrYWxfYm9vbCBmZGRfbXJzX2dhc19nZXRfMmczX3BzX2hvX2NhcCAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIHJhdF9lbnVtIHJhdF9tb2RlKTsKKworZXh0ZXJuIGthbF9ib29sIGZkZF9tcnNfZ2FzX2dldF8yZzRfcHNfaG9fY2FwIChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgcmF0X2VudW0gcmF0X21vZGUpOworCitleHRlcm4ga2FsX2Jvb2wgZmRkX21yc19nYXNfZ2V0X2lyX3NydmNjX2NhcCAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIHJhdF9lbnVtIHJhdF9tb2RlKTsKKworZXh0ZXJuIHZvaWQgZmRkX21yc19nYXNfdXBkYXRlX3NlcnZpbmdfY2VsbF9pbmZvKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBmZGRfZ2FzX3NlcnZpbmdfY2VsbF9pbmZvX3N0cnVjdCBzZXJ2aW5nX2NlbGxfaW5mbyk7CisKK2V4dGVybiB2b2lkIGZkZF9tcnNfZ2FzX3VwZGF0ZV9jdXJyZW50X3JhdF9tb2RlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCByYXRfZW51bSByYXRfbW9kZSk7CisKK2V4dGVybiBrYWxfYm9vbCBmZGRfbXJzX2dhc192YWxpZGF0ZV9hcmZjbihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQxNiBhcmZjbiwgdGVfZ3NtX2JhbmRfaW5kaWNhdG9yIGJhbmRfaW5kaWNhdG9yKTsKKworZXh0ZXJuIGthbF9ib29sIGZkZF9tcnNfZ2FzX2JhbmRfc2V0dGluZ191cGRhdGUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCAqIGdzbV9iYW5kX3B0cik7CisKK2V4dGVybiBnc21fbndfYmFuZF9lbnVtIGZkZF9tcnNfZ2FzX2dldF9sNGNfYmFuZF9iaXRtYXBfZnJvbV9hcmZjbiAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MTYgYXJmY24sIHRlX2dzbV9iYW5kX2luZGljYXRvciBiYW5kX2luZGljYXRvcik7CisKK2V4dGVybiBnc21fbndfYmFuZF9lbnVtIHJyX21yc19nZXRfbDRjX2dzbV9iYW5kYml0bWFwX2Zyb21fYXJmY24oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MTYgYXJmY24pOworCisjZW5kaWYgLyogX19HU01fUkFUX18gKi8KKworI2lmZGVmIF9fTFRFX1JBVF9fCisKK2V4dGVybiB2b2lkIGZkZF9tcnNfZ2FzX3VwZGF0ZV9kaXNhYmxlX2V1dHJhbl9jYXAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGNhcGFiaWxpdHlfc3dpdGNoX2VudW0gZXV0cmFuX2NhcCk7CitleHRlcm4gdm9pZCBmZGRfbXJzX3NldExURUJhbmQoa2FsX3VpbnQzMiBsdGVfYmFuZCwga2FsX3VpbnQxNiogbHRlX25icl9iYW5kX2xpc3QpOworCisjZW5kaWYgLyogX19MVEVfUkFUX18gKi8gCisKK3ZvaWQgZmRkX21yc19nYXNfcmVhZF9udnJhbV9jbmZfaGFuZGxlcihrYWxfdWludDE2IG52cmFtX2ZpbGVfaWQsIGthbF91aW50OCogZGF0YSwga2FsX3VpbnQxNiBsZW4pOworCitleHRlcm4gdm9pZCBmZGRfbXJzX2dhc19kZWNvZGVfbXNjYXBfZnJvbV9udnJhbShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQ4ICpiaXRfcHRyKTsKKworZXh0ZXJuIHZvaWQgZmRkX21yc19nYXNfZGVjb2RlX21zX2NhcGFiaWxpdHkoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGJpdF9zdHJlYW0gKmJpdF9zdHJlYW1fcHRyLCBrYWxfYm9vbCBpc19keW5tY19jZmcpOworCitleHRlcm4ga2FsX2Jvb2wgZmRkX21yc19nYXNfaXNfUjk5X3N1cHBvcnRlZF9pbl9DUyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKK2V4dGVybiBrYWxfYm9vbCBmZGRfbXJzX2dhc19pc19SOTlfc3VwcG9ydGVkX2luX1BTKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKK2V4dGVybiBrYWxfdWludDggKmZkZF9tcnNfZ2FzX2dldF9jbGFzc21hcmsyIChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgTVJTX1JBVF9NT0RFX1RZUEUgcmVxdWlyZWRfcmF0LCBrYWxfYm9vbCBnZXRfZnVsbF9pZSk7CisKKworZXh0ZXJuIHZvaWQgZmRkX21yc19nYXNfZ2V0X3Bvd2VyY2xhc3MoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGZkZF9tcnNfZ3NtX3Bvd2VyX2NsYXNzX3N0cnVjdCAqZ3NtX3Bvd19jbGFzcyk7CisKK2V4dGVybiBrYWxfYm9vbCBmZGRfbXJzX2dhc19yZXRyaWV2ZV9hcmZjbl9iYW5kKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LGthbF91aW50MTYgYXJmY24sIGthbF91aW50OCAqYmFuZF9wdHIpOworI2lmZGVmIF9fQTVfM19BTkRfR0VBX1dISUxURV9MSVNUX18KK2V4dGVybiB2b2lkIGZkZF9tcnNfc2V0X2E1X2FuZF9nZWFfYWxnbyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgY29uc3Qga2FsX3VpbnQ4ICphNSxjb25zdCAga2FsX3VpbnQ4ICpnZWEsIHBsbW5fbWF0Y2hfZW51bSBwbG1uX21hdGNoKTsKKyNlbmRpZiAvKiBfX0E1XzNfQU5EX0dFQV9XSElMVEVfTElTVF9fICovCisKK2V4dGVybiB2b2lkIGZkZF9tcnNfZ2FzX2FkZF9ibGFja19jZWxsX2xpc3Rfbm90aWZpY2F0aW9uKHZvaWQpOworCitleHRlcm4gdm9pZCBmZGRfbXJzX2dhc19jbGVhcl9ibGFja19jZWxsX2xpc3Rfbm90aWZpY2F0aW9uKHZvaWQpOworCitleHRlcm4gdm9pZCBmZGRfbXJzX3NldF9jdXJyZW50X2NhbXBlZF9wbG1uKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LHBsbW5faWRfc3RydWN0IHBsbW5faWQpOworICAgIAorI2lmZGVmIF9fVkFNT1NfQ1VTVE9NX0NPTkZJR19fCitleHRlcm4gdm9pZCBmZGRfbXJzX3NldF9jdXN0b21fdmFtb3MoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCAqdmFtb3MsIGthbF9ib29sIHBsbW5fbWF0Y2gpOworZXh0ZXJuIGthbF91aW50OCBmZGRfbXJzX2dldF9jdXN0b21fdmFtb3MoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCisjZW5kaWYgLyogX19WQU1PU19DVVNUT01fQ09ORklHX18gKi8KKworZXh0ZXJuIHZvaWQgZmRkX21yc19wcmludF9jbGFzc21hcmsoa2FsX3VpbnQ4ICpic19wdHIsIGthbF91aW50MTYgbGluZV9udW0pOworCitleHRlcm4ga2FsX2Jvb2wgbXJzX2dhc19pc19zdXBwb3J0ZWRfYmFuZChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQxNiBsdGVfYmFuZF9pZHgpOworCisjaWZkZWYgX19OUl9SQVRfXworZXh0ZXJuIHZvaWQgZmRkX21yc19nYXNfdXBkYXRlX2Rpc2FibGVfbnJfY2FwKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBjYXBhYmlsaXR5X3N3aXRjaF9lbnVtIG5yX2NhcCk7CisjZW5kaWYgLyogX19OUl9SQVRfXyAqLworCitleHRlcm4ga2FsX2Jvb2wgZmRkX21yc191cGRhdGVfZ3NtX2JhbmRfc2V0dGluZyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQ4ICpiYW5kX3NldHRpbmcpOworZXh0ZXJuIGthbF9ib29sIGZkZF9tcnNfZ2FzX2JhbmRfc2V0dGluZ191cGRhdGVfYnlfcGxtbihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgbXJzX3BsbW5faWQgY3BsbW4pOworZXh0ZXJuIHZvaWQgZmRkX21yc19nYXNfZ2V0X2dzbV9hbGxfc3VwcG9ydGVkX2JhbmQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCAqZ3NtYmFuZG1hc2spOworZXh0ZXJuIGthbF9ib29sIGZkZF9tcnNfZ2FzX21jY19iYW5kX3NldHRpbmdfdXBkYXRlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDggKiBnc21fYmFuZF9wdHIpOworCitleHRlcm4gdm9pZCBmZGRfbXJzX3NldF9nc21fc21zX2NhcGFiaWxpdHkoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF9ib29sIGdzbV9zbXNfY2FwKTsKK2V4dGVybiB2b2lkIGZkZF9tcnNfZ2FzX3NldF9nc21fY2FwX3VwZGF0ZShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgY2FwYWJpbGl0eV9zd2l0Y2hfZW51bSBnc21fY2FwKTsKK2V4dGVybiBjYXBhYmlsaXR5X3N3aXRjaF9lbnVtIGZkZF9tcnNfZ2FzX2dldF9nc21fY2FwX3VwZGF0ZShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitleHRlcm4ga2FsX2Jvb2wgZmRkX21yc19nYXNfZ3NtX2VuYWJsZWQgKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCByYXRfZW51bSByYXRfbW9kZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBFbmQgb2YgRkREJ3MgcGFydCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2VuZGlmIC8qIF9NUlNfR0FTX0NBUEFCSUxJVFlfSCAqLworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX21tX2NhcGFiaWxpdHkuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfbW1fY2FwYWJpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwN2ExNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX21tX2NhcGFiaWxpdHkuaApAQCAtMCwwICsxLDE1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIG1yc19tbV9jYXBhYmlsaXR5LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTXVsdGltb2RlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhlIE1NIGNhcGFiaWxpdHkgc3RvcmVkIGluIE1SUyBjb250ZXh0LgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX01SU19NTV9DQVBBQklMSVRZX0gKKyNkZWZpbmUgX01SU19NTV9DQVBBQklMSVRZX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJtcnNfYXNfZW51bXMuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX3N0cnVjdC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1hY3JvcyBXaXRob3V0IFBhcmFtZXRlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYWNyb3MgV2l0aCBQYXJhbWV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtcyB3aXRob3V0IHRhZ3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVHlwZSBEZWZpbml0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF9ib29sIGlzcl9zdXBwb3J0OworICAgIGthbF9ib29sIGVwY19jYXBhYmlsaXR5OworICAgIGthbF9ib29sIGluamVjdF9tc19ud19jYXBfZGlzYWJsZV9sdGVfYml0OworICAgIGthbF91aW50OCBzcGVlY2hfdmVyc2lvbjsgICAgICAgICAgICAgIC8qZmlyc3QgYnl0ZSBmb3IgR1NNIHN1cHBvcnRlZCBzcGVlY2ggY29kZWMqLworICAgIGthbF91aW50OCBzcGVlY2hfdmVyc2lvbl9ieXRlMjsgICAgICAgIC8qc2Vjb25kIGJ5dGUgZm9yIEdTTSBzdXBwb3J0ZWQgc3BlZWNoIGNvZGVjKi8KKyAgICBrYWxfdWludDggZmRkX3VtdHNfc3VwcG9ydGVkX3NwZWVjaDsgICAgICAgLypmaXJzdCBieXRlIGZvciBGREQgVU1UUyBzdXBwb3J0ZWQgc3BlZWNoIGNvZGVjKi8KKyAgICBrYWxfdWludDggZmRkX3VtdHNfc3VwcG9ydGVkX3NwZWVjaF9ieXRlMjsgLypzZWNvbmQgYnl0ZSBmb3IgRkREIFVNVFMgc3VwcG9ydGVkIHNwZWVjaCBjb2RlYyovCisgICAga2FsX3VpbnQ4IHRkZF91bXRzX3N1cHBvcnRlZF9zcGVlY2g7ICAgICAgIC8qZmlyc3QgYnl0ZSBmb3IgVEREIFVNVFMgc3VwcG9ydGVkIHNwZWVjaCBjb2RlYyovCisgICAga2FsX3VpbnQ4IHRkZF91bXRzX3N1cHBvcnRlZF9zcGVlY2hfYnl0ZTI7IC8qc2Vjb25kIGJ5dGUgZm9yIFRERCBVTVRTIHN1cHBvcnRlZCBzcGVlY2ggY29kZWMqLworfSBtbV9jYXBhYmlsaXR5X2NvbnRleHRfc3RydWN0OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVjbGFyYXRpb25zIE9mIEV4cG9ydGVkIEdsb2JhbHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbXJzX21tX2luaXRfY29udHhfZGVmYXVsdF92YWx1ZSh2b2lkKTsKK3ZvaWQgbXJzX21tX2dldF9tc19ud19jYXAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIHJhdF9lbnVtIHJhdF9tb2RlLCByYXRfZW51bSBjdXJyZW50X3JhdCwga2FsX3VpbnQ4ICpkYXRhLCBrYWxfdWludDggKmxlbik7CitrYWxfdWludDggbXJzX21tX2dldF9nZWFfc3VwcG9ydGVkKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKK3ZvaWQgbXJzX21tX3JlYWRfbnZyYW1fY25mX2hhbmRsZXIoa2FsX3VpbnQxNiBudnJhbV9maWxlX2lkLCBrYWxfdWludDgqIGRhdGEsIGthbF91aW50MTYgbGVuKTsKK3ZvaWQgbXJzX21tX2dldF9zdXBwb3J0ZWRfY29kZWNfbGlzdChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgcmF0X2VudW0gcmF0X21vZGUsIHBsbW5faWRfc3RydWN0ICpwbG1uX2lkLCBrYWxfdWludDggKmRhdGEsIGthbF91aW50OCAqbGVuKTsKKworI2lmZGVmIF9fTFRFX1JBVF9fCit2b2lkIG1yc19tbV9zZXRfaXNyX3N1cHBvcnQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF9ib29sIGlzX2lzcik7CitrYWxfYm9vbCBtcnNfbW1fZ2V0X2lzcl9zdXBwb3J0KE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKK3ZvaWQgbXJzX21tX3NldF9lcGNfY2FwKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfYm9vbCBpc19lcGMpOwora2FsX2Jvb2wgbXJzX2lzX2VuZF9vZl9jdXN0b21fcGxtbl9hcnJheV90b19kaXNhYmxlX2lzcl9zdXBwb3J0KGNvbnN0IGthbF9jaGFyICpwbG1uX3N0cik7CitrYWxfYm9vbCBtcnNfaXNfc2ltX3BsbW5faW5fY3VzdG9tX2NvbmZpZyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisjZW5kaWYKK2thbF91aW50OCAqbXJzX21tX2dldF9jbGFzc21hcmsxKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBNUlNfUkFUX01PREVfVFlQRSByZXF1aXJlZF9yYXQpOworCisjZW5kaWYgLyogX01SU19NTV9DQVBBQklMSVRZX0ggKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19ucmFzX2NhcGFiaWxpdHkuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfbnJhc19jYXBhYmlsaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0NWQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfbnJhc19jYXBhYmlsaXR5LmgKQEAgLTAsMCArMSw2MTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgTVJTX05SQVNfQ0FQQUJJTElUWV9ICisjZGVmaW5lIE1SU19OUkFTX0NBUEFCSUxJVFlfSAorCisjaW5jbHVkZSAiaXJhdF9jb21tb25fZW51bXMuaCIKKyNpbmNsdWRlICJtcnNfYXNfZW51bXMuaCIKKyNpbmNsdWRlICJtcnNfYXNfc3RydWN0LmgiCisjaW5jbHVkZSAibXJzX2NvbW1vbl9jYXBhYmlsaXR5LmgiCisKKyNpbmNsdWRlICJjdXN0b21fbnJhc19jb25maWcuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgIE1BQ1JPUyAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBOUkFSRkNOX0lOVkFMSUQgMHhGRkZGRkZGRgorI2RlZmluZSBOUkZSRVFfSU5WQUxJRCAwCisvKgorICogTVJTX05SQVNfTUFYX09WRVJMQVBQSU5HX0JBTkRTIHZhbHVlIDggZm9sbG93cyB0aGUgbWF4aW11bSBsZW5ndGgKKyAqIChtYXhOcm9mTXVsdGlCYW5kcykgb2YgSUUgTXVsdGlGcmVxdWVuY3lCYW5kTGlzdE5SLVNJQiBzcGVjaWZpZWQgaW4KKyAqIFRTIDM4LjMzMS4KKyAqLworI2RlZmluZSBNUlNfTlJBU19NQVhfT1ZFUkxBUFBJTkdfQkFORFMgOAorCisjZGVmaW5lIE1SU19OUkFTX01JTl9GUjFfQkFORCAoMSkKKyNkZWZpbmUgTVJTX05SQVNfTUFYX0ZSMV9CQU5EICg4NikKKyNkZWZpbmUgTVJTX05SQVNfTUlOX0ZSMl9CQU5EICgyNTcpCisjZGVmaW5lIE1SU19OUkFTX01BWF9GUjJfQkFORCAoMjYxKQorCisjZGVmaW5lIE1SU19OUkFTX1NFQVJDSF9NQVhfUE9XRVJfU0NBTl9SQU5HRV9OVU0gNTEyCisjZGVmaW5lIE1SU19OUkFTX1NFQVJDSF9NQVhfREVURUNURURfQ0VMTF9OVU0gMjU2CisKKyNkZWZpbmUgTVJTX05SQVNfTUFYX0VVVFJBX0JBTkRfTElTVF9MRU5HVEggMjU2CisKKyNkZWZpbmUgTVJTX05SQVNfR0VNSU5JX1NUQVRVU19OVU0gMworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgIFRZUEUgREVGSU5JVElPTlMgJiBFTlVNUyAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBlbnVtCit7CisgICAgTlJfRFVQTEVYX0ZERCwKKyAgICBOUl9EVVBMRVhfVERELAorICAgIE5SX0RVUExFWF9TREwsCisgICAgTlJfRFVQTEVYX1NVTCwKKyAgICBOUl9EVVBMRVhfSU5WQUxJRAorfSBucl9kdXBsZXhfZW51bTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBOUkFTX1JFQURfTlZSQU1fQ05GLAorICAgIE5SQVNfQkFORF9TRVRUSU5HX1VQREFURSwKKyAgICBOUkFTX01BWF9CQU5EX0NBUF9GT1JfVVNFUiwKKyAgICBOUkFTX0lOVEVSTkFMX0JBTkRfU0VUVElOR19VUERBVEUsCisgICAgQ09NTU9OX0VNX0dFVF9BU19CQU5EX1NFVFRJTkcsCisgICAgQ09NTU9OX0VNX1NFVF9BU19CQU5EX1NFVFRJTkcsCisgICAgTlJBU19CTkFEX0dFVF9DT05URVhUX05WUkFNLAorCU5SQVNfQk5BRF9HRVRfRU5EQ19DT05URVhUX05WUkFNLAorCU5SQVNfQkFORF9TRVRfQ09OVEVYVF9OVlJBTSwKKyAgICBOUkFTX0JBTkRfU0VUX0VORENfQ09OVEVYVF9OVlJBTSwKKyNpZmRlZiBfX05WTV9HTE9CQUxfQ0FCQ19fCisgICAgTlJBU19CQU5EX1NVUFBPUlRfQllfUExNTiwKKyNlbmRpZiAvKiBfX05WTV9HTE9CQUxfQ0FCQ19fICovCisgICAgTlJBU19FTkRDX05SX1NVUFBPUlRFRF9CQU5EX0xJU1RfSU5JVElBTCwKKyAgICBOUkFTX0lOVEVSTkFMX0VORENfQkFORF9TRVRUSU5HX1VQREFURQorfSBucmFzX2JhbmRfcHJpbnRfZnVuY19lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIE5SQVNfRlVOQ19JTlBVVCwKKyAgICBOUkFTX1JGX0ZJTFRFUiwKKyAgICBOUkFTX0JBTkRfUkVBRF9OUl9CQU5EU19GUk9NX1NDU0ksCisgICAgTlJBU19CQU5EX1JFQURfTlJfRU5EQ19CQU5EU19GUk9NX1NDU0ksCisgICAgTlJBU19CQU5EX1NFVF9OUl9CQU5EUywKKyAgICBOUkFTX0JBTkRfU0VUX05SX0VORENfQkFORFMsCisgICAgTlJBU19CQU5EX1NFVF9OUl9CQU5EU19GUk9NX1NDU0ksCisgICAgTlJBU19CQU5EX1NFVF9OUl9FTkRDX0JBTkRTX0ZST01fU0NTSSwKKyAgICBOUkFTX0JBTkRfTlZSQU1fT1VUUFVUX05SX0JBTkRTLCAgIAorCU5SQVNfQkFORF9OVlJBTV9PVVRQVVRfTlJfRU5EQ19CQU5EUywKKyNpZmRlZiBfX05WTV9HTE9CQUxfQ0FCQ19fCisgICAgTlJBU19TQV9CQU5EX1NVUFBPUlQsCisgICAgTlJBU19FTkRDX0JBTkRfU1VQUE9SVCwKKyNlbmRpZiAvKiBfX05WTV9HTE9CQUxfQ0FCQ19fICovCisgICAgTlJBU19SRl9GSUxURVJfRU5EQ19OUl9GVUxMX0NBUCwKKyAgICBOUkFTX1JGX0ZJTFRFUl9FTkRDX05SX0RBVEFfU0lNLAorICAgIE5SQVNfUkZfRklMVEVSX0VORENfTlJfTk9OX0RBVEFfU0lNCit9IG5yYXNfYmFuZF9wcmludF9jaGVja19wb2ludF9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIE5SQVNfTE9XX0NBUlJJRVJfRlJFUSwKKyAgICBOUkFTX01JRF9DQVJSSUVSX0ZSRVEsCisgICAgTlJBU19ISUdIX0NBUlJJRVJfRlJFUQorfSBtcnNfbnJhc19jYXJyaWVyX2ZyZXFfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIE1SU19OUkFTX1NFQVJDSF9SRVNVTFRfTk9UX0ZJTklTSEVELAorICAgIE1SU19OUkFTX1NFQVJDSF9SRVNVTFRfRklOSVNIRUQKK30gbXJzX25yYXNfc2VhcmNoX3Jlc3VsdF9zdGF0dXNfZW51bTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBOUkFTX1NGVERfTUVBU19QU0NFTEwsCisgICAgTlJBU19TRlREX01FQVNfTlJfQ0VMTAorfSBtcnNfbnJhc19zZnRkX21lYXNfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIE1SU19OUkFTX1BMTU5fTUFUQ0hfUkVTVUxUX05PVF9GT1VORCwgIC8qIE5vIFNJQiBpcyBmb3VuZCBvbiB0aGlzIGZyZXF1ZW5jeSAqLworICAgIE1SU19OUkFTX1BMTU5fTUFUQ0hfUkVTVUxUX05PVF9NQVRDSCwgIC8qIEV4aXN0IFNJQiBvbiB0aGlzIGZyZXF1ZW5jeSwgYnV0IFBMTU4gZG9lc24ndCBtYXRjaCAqLworICAgIE1SU19OUkFTX1BMTU5fTUFUQ0hfUkVTVUxUX01BVENIICAgICAgIC8qIEV4aXN0IFNJQiBvbiB0aGlzIGZyZXF1ZW5jeSBhbmQgUExNTiBtYXRjaCBleGFjdGx5Ki8KK30gbXJzX25yYXNfcGxtbl9tYXRjaF9yZXN1bHRfZW51bTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBNUlNfTlJBU19RVUlDS19QT1dFUl9TRUFSQ0hfUkVTVUxUID0gMCwgIAorICAgIE1SU19OUkFTX05PUk1BTF9QT1dFUl9TRUFSQ0hfUkVTVUxUID0gMSwKKyAgICBNUlNfTlJBU19OT1JNQUxfUE9XRVJfU0VBUkNIX1JFU1VMVF9NQVgKK30gbXJzX25yYXNfcG93ZXJfc2Nhbl9yZXN1bHRfcnNzaV90aHJlc2hvbGRfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgTVJTX05SX0JBTkRfRElTQUJMRV9CWV9QTE1OX1NUQVRFX05PTkUsCisgICAgTVJTX05SX0JBTkRfRElTQUJMRV9CWV9QTE1OX1NUQVRFX09ORV9PUl9NT1JFLAorICAgIE1SU19OUl9CQU5EX0RJU0FCTEVfQllfUExNTl9TVEFURV9BTEwsCisgICAgTVJTX05SX0JBTkRfRElTQUJMRV9CWV9QTE1OX1NUQVRFX0lOVkFMSUQKK30gbXJzX25yX2JhbmRfZGlzYWJsZV9ieV9wbG1uX3N0YXRlX2VudW07CisKKyNpZmRlZiBfX0dFTUlOSV9fCit0eXBlZGVmIGVudW0KK3sKKyAgICBNUlNfTlJBU19HRU1JTklfU1RBVFVTX0RSX0RTRFNfU1VQUE9SVEVELAorICAgIE1SU19OUkFTX0dFTUlOSV9TVEFUVVNfRFNEQV9TVVBQT1JURUQsCisgICAgTVJTX05SQVNfR0VNSU5JX1NUQVRVU19NVUxUSV9TSU1fSU5TRVJURUQsICAgIAorICAgIE1SU19OUkFTX0dFTUlOSV9TVEFUVVNfSVNfREFUQV9TSU0sCisgICAgTVJTX05SQVNfR0VNSU5JX1NUQVRVU19JTlZBTElECit9IG1yc19ucmFzX2dlbWluaV9xdWVyeV9vcHRpb25fZW51bTsKKyNlbmRpZgorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggbmVhX3N1cHBvcnQ7IC8qTVNCOiBORUEwLCAxMjgtTkVBMSwgMTI4LU5FQTIsIDEyOC1ORUEzICovCisgICAga2FsX3VpbnQ4IG5pYV9zdXBwb3J0OyAvKk1TQjogTklBMCwgMTI4LU5JQTEsIDEyOC1OSUEyLCAxMjgtTklBMyAqLworICAgIGthbF91aW50OCBucmFzX3Bvd2VyX2NsYXNzOworICAgIGthbF91aW50OCBlbmRjX3N1cHBvcnQ7CisgICAga2FsX3VpbnQ4IG52cmFtX25yX2JhbmRbTVJTX05SX0JBTkRfQklUTUFTS19TSVpFXTsKKyAgICBrYWxfdWludDggbnZyYW1fZW5kY19ucl9iYW5kW01SU19OUl9CQU5EX0JJVE1BU0tfU0laRV07CisjaWZkZWYgX19OVk1fR0xPQkFMX0NBQkNfXworICAgIC8vbXJzX3BsbW5faWRfbGlzdCBzYXZlZF9wbG1uX2lkX2xpc3Q7CisgICAgLy9tcnNfZ2VtaW5pX3N0YXR1c19lbnVtIHNhdmVkX2dlbWluaV9zdGF0dXM7CisgICAgLy9rYWxfYm9vbCBzYXZlZF9zYV9ucl9iYW5kX3ZhbGlkOworICAgIC8va2FsX3VpbnQ4IHNhdmVkX3NhX25yX2JhbmRfYml0bWFza1tNUlNfTlJfQkFORF9CSVRNQVNLX1NJWkVdOworICAgIC8va2FsX2Jvb2wgc2F2ZWRfZW5kY19ucl9iYW5kX3ZhbGlkOworICAgIC8va2FsX3VpbnQ4IHNhdmVkX2VuZGNfbnJfYmFuZF9iaXRtYXNrW01SU19OUl9CQU5EX0JJVE1BU0tfU0laRV07CisjZW5kaWYgLyogX19OVk1fR0xPQkFMX0NBQkNfXyAqLworfSBucmFzX2NhcGFiaWxpdHlfY29udGV4dF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBucl9kdXBsZXhfZW51bSBucl9kdXBsZXg7CisgICAga2FsX3VpbnQxNiBucl9iYW5kOworfSBucmFzX2JhbmRfZHVwbGV4X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyIGJlZ2luOworICAgIGthbF91aW50MzIgZW5kOworfSBtcnNfZnJlcV9yYW5nZV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDE2IGJhbmQ7CisgICAga2FsX3VpbnQzMiBzc2JfYXJmY247CisgICAga2FsX3VpbnQxNiBwY2k7CisgICAga2FsX3VpbnQ4IHN1YmNhcnJpZXJfc3BhY2luZ19zc2I7IC8vIFRoZSBvcmlnaW5hbCB0eXBlIGlzIE5SX1NDU19UWVBFX0UsIGJ1dCBNUlMgZG9lcyBub3QgaW5jbHVkZSBOTDEgaGVhZGVyLCBzbyB1c2UgVTgKKyAgICBtcnNfcGxtbl9pZF9saXN0IHBsbW5fbGlzdDsKKworI2lmIDEvL2RlZmluZWQoX19TS0lQX0JXX18pCisgICAgbXJzX2ZyZXFfcmFuZ2Vfc3RydWN0IGNlbGxfYXJmY25fYmVnaW5fZW5kX3BvaW50czsKKyNlbmRpZiAvKiBfX1NLSVBfQldfXyAqLworfSBtcnNfbnJhc19zZWFyY2hfY2VsbF9zaWJfcmVzdWx0X2VudHJ5X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50MTYgYmFuZDsKKyAgICBrYWxfdWludDMyIGJlZ2luOworICAgIGthbF91aW50MzIgZW5kOworICAgIG1yc19ucl9zY3NfZW51bSBzc2Jfc2NzOworfSBtcnNfbnJhc19zZWFyY2hfY2NzX3Jlc3VsdF9lbnRyeV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0ICB7CisgICAga2FsX3VpbnQzMiBjb250aW51b3VzX2NhcnJpZXJfc2VhcmNoX3Jlc3VsdF9udW07CisgICAgbXJzX25yYXNfc2VhcmNoX2Njc19yZXN1bHRfZW50cnlfc3RydWN0IGNvbnRpbnVvdXNfY2Fycmllcl9zZWFyY2hfcmVzdWx0W01SU19OUkFTX1NFQVJDSF9NQVhfUE9XRVJfU0NBTl9SQU5HRV9OVU1dOworICAgIGthbF91aW50MzIgY2VsbF9zaWJfcmVzdWx0X251bTsKKyAgICBtcnNfbnJhc19zZWFyY2hfY2VsbF9zaWJfcmVzdWx0X2VudHJ5X3N0cnVjdCBjZWxsX3NpYl9yZXN1bHRbTVJTX05SQVNfU0VBUkNIX01BWF9ERVRFQ1RFRF9DRUxMX05VTV07CisgICAga2FsX3VpbnQzMiBub25fY2VsbF9kZWZpbmluZ19zc2JfcmFuZ2VfbnVtOworICAgIG1yc19mcmVxX3JhbmdlX3N0cnVjdCBub25fY2VsbF9kZWZpbmluZ19zc2JfcmFuZ2VbTVJTX05SQVNfU0VBUkNIX01BWF9ERVRFQ1RFRF9DRUxMX05VTV07CisgICAga2FsX3VpbnQzMiBwb3dlcl9zY2FuX3Jlc3VsdF9udW1bTVJTX05SQVNfTk9STUFMX1BPV0VSX1NFQVJDSF9SRVNVTFRfTUFYXTsKKyAgICBtcnNfZnJlcV9yYW5nZV9zdHJ1Y3QgcG93ZXJfc2Nhbl9yZXN1bHRbTVJTX05SQVNfTk9STUFMX1BPV0VSX1NFQVJDSF9SRVNVTFRfTUFYXVtNUlNfTlJBU19TRUFSQ0hfTUFYX1BPV0VSX1NDQU5fUkFOR0VfTlVNXTsKK30gbXJzX25yYXNfc2VhcmNoX2luZm9fc3RydWN0OworCisvKiAKKyAqIExpc3QgaW1wbGVtZW50aW5nIE5SIGJhbmQgc3VwcG9ydCBiaXRtYXNrIHdoZXJlIExTQiBpbiB0aGUgZmlyc3Qgb25lIGJ5dGUKKyAqIChpbmRleCAwKSBvZiBucl9iYW5kX2xpc3QgcmVwcmVzZW50cyBOUiBiYW5kIDEuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggbnJfYmFuZF9saXN0W01SU19OUl9CQU5EX0JJVE1BU0tfU0laRV07Cit9IG1yc19ucl9iYW5kX2xpc3Rfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGNhX2JhbmR3aWR0aF9jbGFzc19ldXRyYV9lbnVtIGNhX2JhbmR3aWR0aF9jbGFzc19kbDsKKyAgICBjYV9iYW5kd2lkdGhfY2xhc3NfZXV0cmFfZW51bSBjYV9iYW5kd2lkdGhfY2xhc3NfdWw7CisgICAga2FsX3VpbnQxNiBldXRyYV9iYW5kOworfSBucmFzX2V1dHJhX2JhbmRfaW5mb19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgbnJhc19ldXRyYV9iYW5kX2luZm9fc3RydWN0CisgICAgICAgIGV1dHJhX2JhbmRfbGlzdFtNUlNfTlJBU19NQVhfRVVUUkFfQkFORF9MSVNUX0xFTkdUSF07CisgICAga2FsX3VpbnQxNiBldXRyYV9iYW5kX2xpc3RfbGVuZ3RoOworfSBucmFzX2V1dHJhX2JhbmRfbGlzdF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgVkFSSUFCTEVTICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRlVOQ1RJT04gREVDTEFSQVRJT05TICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwora2FsX3VpbnQ4IG1yc19ucmFzX2lzX3N1cHBvcnRlZF9kbF9ucmFyZmNuX29uX2FueV9iYW5kKGthbF91aW50MTYgKmJhbmQsCisgICAgTlJBUkZDTiBucl9kbF9hcmZjbiwgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOwora2FsX3VpbnQxNiBtcnNfbnJhc19zdXBwb3J0ZWRfYmFuZF9vZl9kbF9ucmFyZmNuX2dldChOUkFSRkNOIG5yX2RsX2FyZmNuLAorICAgIE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKK2thbF9ib29sIG1yc19ucmFzX2lzX3N1cHBvcnRlZF9kbF9ucmFyZmNuKE5SQVJGQ04gbnJfZGxfYXJmY24sIGthbF91aW50MTYgYmFuZCwKKyAgICBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitrYWxfYm9vbCBtcnNfbnJhc19pc19zdXBwb3J0ZWRfZGxfbnJhcmZjbl9wYXJ0aWFsX2JhbmQoCisgICAgY29uc3QgbXJzX3BsbW5faWQgKnBfbXJzX3BsbW5faWQsCisgICAgTlJBUkZDTiBucl9kbF9hcmZjbiwga2FsX3VpbnQxNiBiYW5kLCBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitrYWxfYm9vbCBtcnNfbnJhc19pc19zdXBwb3J0ZWRfdWxfbnJhcmZjbihOUkFSRkNOIG5yX2RsX2FyZmNuLCBrYWxfdWludDE2IGJhbmQsCisgICAgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOwora2FsX2Jvb2wgbXJzX25yYXNfaXNfc3VwcG9ydGVkX2JhbmQoa2FsX3VpbnQxNiBucl9iYW5kLCBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitrYWxfYm9vbCBtcnNfbnJhc19pc19zdXBwb3J0ZWRfYmFuZF9wdWJsaWMoa2FsX3VpbnQxNiBucl9iYW5kLAorICAgIE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgIGthbF9ib29sIHNob3dfdHJhY2UpOwordm9pZCBtcnNfbnJhc19yZWFkX252cmFtX2NuZl9oYW5kbGVyKGthbF91aW50MTYgbnZyYW1fZmlsZV9pZCwga2FsX3VpbnQ4ICpkYXRhLCBrYWxfdWludDE2IGxlbik7CitrYWxfdWludDggbXJzX25yYXNfZ2V0X3Bvd2VyY2xhc3MoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MTYgbnJfYmFuZCk7CitrYWxfdWludDggbXJzX25yYXNfZ2V0X3Bvd2VyY2xhc3NfdmFsdWUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAga2FsX3VpbnQxNiBucl9iYW5kKTsKK2thbF91aW50MzIgbXJzX25yYXNfZGxfbnJhcmZjbl9waHlfZnJlcV9nZXQoTlJBUkZDTiBkbF9ucmFyZmNuKTsKK2thbF91aW50MzIgbXJzX25yYXNfdWxfbnJhcmZjbl9waHlfZnJlcV9nZXQoTlJBUkZDTiB1bF9ucmFyZmNuKTsKK3ZvaWQgbXJzX25yYXNfZGxfbnJhcmZjbl9kdXBsZXhfdHlwZV9nZXQoTlJBUkZDTiBkbF9ucmFyZmNuLAorICAgIG5yYXNfYmFuZF9kdXBsZXhfc3RydWN0ICpkdXBsZXhfbGlzdCwga2FsX3VpbnQ4ICpkdXBsZXhfbGlzdF9sZW5ndGgpOwordm9pZCBtcnNfbnJhc191bF9ucmFyZmNuX2R1cGxleF90eXBlX2dldChOUkFSRkNOIHVsX25yYXJmY24sCisgICAgbnJhc19iYW5kX2R1cGxleF9zdHJ1Y3QgKmR1cGxleF9saXN0LCBrYWxfdWludDggKmR1cGxleF9saXN0X2xlbmd0aCk7CitrYWxfYm9vbCBtcnNfbnJhc19pc19zcGVjaWZpZWRfbnJfYmFuZChrYWxfdWludDE2IG5yX2JhbmQpOwora2FsX2Jvb2wgbXJzX25yYXNfaXNfZ3Njbl9zdXBwb3J0ZWQoCisgICAgbXJzX25yYXNfY2Fycmllcl9mcmVxX3R5cGVfZW51bSBjYXJyaWVyX2ZyZXFfdHlwZSwKKyAgICBrYWxfdWludDE2IGZyZXFfaW5kZXgsIGthbF9pbnQ4IGZyZXFfb2Zmc2V0KTsKK2thbF9ib29sIG1yc19ucmFzX2lzX2VuZGNfc3VwcG9ydChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitrYWxfdWludDMyIG1yc19ucmFzX2dldF91ZV9ucl9jYXAoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgY29uc3QgbXJzX25yYXNfb2N0ZXRfc3RyaW5nX3N0cnVjdCBmcmVxYmFuZGxpc3RfaWUsCisgICAgY29uc3QgbXJzX25yYXNfb2N0ZXRfc3RyaW5nX3N0cnVjdCBVRV9DYXBhYmlsaXR5UmVxdWVzdEZpbHRlck5SX2llLAorICAgIGNvbnN0IG1yc19wbG1uX2lkX2xpc3QgKnBfcGxtbl9pZF9saXN0LAorICAgIGthbF91aW50OCAqKnBwX3VlX25yX2NhcCwKKyAgICBrYWxfYm9vbCBldXRyYV9ucl9vbmx5LAorICAgIG1yc19nZW1pbmlfc3RhdHVzX2VudW0gZ2VtaW5pX3N0YXR1cywKKyAgICBrYWxfYm9vbCBpc19yZXN0cmljdGlvbl9zaXplX3ZhbGlkLAorICAgIGthbF91aW50MzIgcmVzdHJpY3Rpb25fc2l6ZSwKKyAgICBrYWxfYm9vbCBpc19iY19saXN0X3NldCk7CitrYWxfdWludDMyIG1yc19ucmFzX2dldF91ZV9tcmRjX2NhcChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwKKyAgICBjb25zdCBtcnNfbnJhc19vY3RldF9zdHJpbmdfc3RydWN0IGZyZXFiYW5kbGlzdF9pZSwKKyAgICBjb25zdCBtcnNfbnJhc19vY3RldF9zdHJpbmdfc3RydWN0IFVFX0NhcGFiaWxpdHlSZXF1ZXN0RmlsdGVyTlJfaWUsCisgICAgY29uc3QgbXJzX3BsbW5faWRfbGlzdCAqcF9wbG1uX2lkX2xpc3QsCisgICAga2FsX3VpbnQ4ICoqcHBfdWVfbXJkY19jYXAsCisgICAga2FsX2Jvb2wgZXV0cmFfbnJfb25seSwKKyAgICBtcnNfZ2VtaW5pX3N0YXR1c19lbnVtIGdlbWluaV9zdGF0dXMsCisgICAga2FsX2Jvb2wgaXNfcmVzdHJpY3Rpb25fc2l6ZV92YWxpZCwKKyAgICBrYWxfdWludDMyIHJlc3RyaWN0aW9uX3NpemUsCisgICAga2FsX2Jvb2wgaXNfYmNfbGlzdF9zZXQpOwordm9pZCBtcnNfbnJhc19nZXRfdWVfbnJfYW5kX21yZGNfY2FwKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgIGNvbnN0IG1yc19ucmFzX29jdGV0X3N0cmluZ19zdHJ1Y3QgZnJlcWJhbmRsaXN0X2llLAorICAgIGNvbnN0IG1yc19ucmFzX29jdGV0X3N0cmluZ19zdHJ1Y3QgVUVfQ2FwYWJpbGl0eVJlcXVlc3RGaWx0ZXJOUl9pZSwKKyAgICBjb25zdCBtcnNfcGxtbl9pZF9saXN0ICpwX3BsbW5faWRfbGlzdCwKKyAgICBrYWxfdWludDggKipwcF91ZV9ucl9jYXAsCisgICAga2FsX3VpbnQ4ICoqcHBfdWVfbXJkY19jYXAsCisgICAga2FsX2Jvb2wgZXV0cmFfbnJfb25seSwKKyAgICBtcnNfZ2VtaW5pX3N0YXR1c19lbnVtIGdlbWluaV9zdGF0dXMsCisgICAga2FsX3VpbnQxNiAqbnJfY2FwX3NpemUsCisgICAga2FsX3VpbnQxNiAqbXJkY19jYXBfc2l6ZSwKKyAgICBrYWxfYm9vbCBpc19yZXN0cmljdGlvbl9zaXplX3ZhbGlkLAorICAgIGthbF91aW50MzIgcmVzdHJpY3Rpb25fc2l6ZSwKKyAgICBrYWxfYm9vbCBpc19iY19saXN0X3NldCk7CisgICAgCisvKioKKyAqIEBicmllZiBHZXRzIEVVVFJBTiBmZWF0dXJlIHNldCBJRHMKKyAqIEBwYXJhbVtpbl0gZnJlcWJhbmRsaXN0X2llIEVuY29kZWQgTlIgRnJlcUJhbmRMaXN0IElFIGFzIHNwZWNpZmllZCBpbiBUUyAzOC4zMzEKKyAqIEBwYXJhbVtpbl0gcF9wbG1uX2lkX2xpc3QgUExNTiBJZCBMaXN0IGlzIHVzZWQgZm9yIGJhbmQgZmlsdGVyaW5nIG9yIGN1c3RvbWl6YXRpb24KKyAqIEBwYXJhbVtvdXRdIHBfZXV0cmFuX2ZlYXR1cmVfc2V0cyBQb2ludGVyIHRvIEVVVFJBTiBmZWF0dXJlIHNldCBJRHMKKyAqIEBwYXJhbVtpbl0gc2ltX2luZGV4IFNJTSBpbmRleAorICogQHJldHVybiBOL0EKKyAqLwordm9pZCBtcnNfbnJhc19ldXRyYW5fZmVhdHVyZV9zZXRfaWRzX2dldCgKKyAgICBjb25zdCBtcnNfbnJhc19vY3RldF9zdHJpbmdfc3RydWN0IGZyZXFiYW5kbGlzdF9pZSwKKyAgICBjb25zdCBtcnNfcGxtbl9pZF9saXN0ICpwX3BsbW5faWRfbGlzdCwKKyAgICBtcnNfbnJhc19ldXRyYW5fZmVhdHVyZV9zZXRfaWRzX3N0cnVjdCAqcF9ldXRyYW5fZmVhdHVyZV9zZXRzLAorICAgIE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgIG1yc19nZW1pbmlfc3RhdHVzX2VudW0gZ2VtaW5pX3N0YXR1cywKKyAgICBrYWxfYm9vbCBpc19iY19saXN0X3NldCk7CisKK2thbF91aW50MTYgbXJzX25yYXNfbWF4X2JhbmRfbnVtYmVyX2dldCh2b2lkKTsKK25yX2R1cGxleF9lbnVtIG1yc19ucmFzX2JhbmRfZHVwbGV4X2dldChrYWxfdWludDE2IGJhbmQpOwora2FsX3VpbnQzMiBtcnNfbnJhc19tYXhfdWxfcGh5X2ZyZXFfZ2V0KGthbF91aW50MTYgYmFuZCk7CitrYWxfdWludDMyIG1yc19ucmFzX21pbl91bF9waHlfZnJlcV9nZXQoa2FsX3VpbnQxNiBiYW5kKTsKK2thbF91aW50MzIgbXJzX25yYXNfbWF4X2RsX3BoeV9mcmVxX2dldChrYWxfdWludDE2IGJhbmQpOwora2FsX3VpbnQzMiBtcnNfbnJhc19taW5fZGxfcGh5X2ZyZXFfZ2V0KGthbF91aW50MTYgYmFuZCk7CitrYWxfdWludDMyIG1yc19ucmFzX2FsbF9yYXRfbWF4X2RsX3BoeV9mcmVxX2dldChrYWxfdWludDE2IGJhbmQpOwora2FsX3VpbnQzMiBtcnNfbnJhc19hbGxfcmF0X21pbl9kbF9waHlfZnJlcV9nZXQoa2FsX3VpbnQxNiBiYW5kKTsKK05SQVJGQ04gbXJzX25yYXNfbWF4X2RsX25yX2FyZmNuX2dldChrYWxfdWludDE2IGJhbmQpOworTlJBUkZDTiBtcnNfbnJhc19taW5fZGxfbnJfYXJmY25fZ2V0KGthbF91aW50MTYgYmFuZCk7CitOUkFSRkNOIG1yc19ucmFzX21heF91bF9ucl9hcmZjbl9nZXQoa2FsX3VpbnQxNiBiYW5kKTsKK05SQVJGQ04gbXJzX25yYXNfbWluX3VsX25yX2FyZmNuX2dldChrYWxfdWludDE2IGJhbmQpOworTlJBUkZDTiBtcnNfbnJhc19kbF9waHlfZnJlcV9ucmFyZmNuX2dldChrYWxfdWludDMyIGRsX3BoeV9mcmVxKTsKKyNpZm5kZWYgX19OVk1fR0xPQkFMX0NBQkNfXwora2FsX2Jvb2wgbXJzX25yYXNfbnJfZmRkX3N1cHBvcnRlZChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitrYWxfYm9vbCBtcnNfbnJhc19ucl90ZGRfc3VwcG9ydGVkKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKK2thbF9ib29sIG1yc19ucmFzX25yX2ZyMV9zdXBwb3J0ZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOwora2FsX2Jvb2wgbXJzX25yYXNfbnJfZnIyX3N1cHBvcnRlZChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitrYWxfYm9vbCBtcnNfbnJhc19lbmRjX25yX2ZkZF9zdXBwb3J0ZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOwora2FsX2Jvb2wgbXJzX25yYXNfZW5kY19ucl90ZGRfc3VwcG9ydGVkKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKK2thbF9ib29sIG1yc19ucmFzX2VuZGNfbnJfZnIxX3N1cHBvcnRlZChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitrYWxfYm9vbCBtcnNfbnJhc19lbmRjX25yX2ZyMl9zdXBwb3J0ZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworI2Vsc2UKK2thbF9ib29sIG1yc19ucmFzX25yX2ZkZF9zdXBwb3J0ZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGNvbnN0IG1yc19wbG1uX2lkX2xpc3QgKnBfcGxtbl9pZF9saXN0KTsKK2thbF9ib29sIG1yc19ucmFzX25yX3RkZF9zdXBwb3J0ZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGNvbnN0IG1yc19wbG1uX2lkX2xpc3QgKnBfcGxtbl9pZF9saXN0KTsKK2thbF9ib29sIG1yc19ucmFzX25yX2ZyMV9zdXBwb3J0ZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGNvbnN0IG1yc19wbG1uX2lkX2xpc3QgKnBfcGxtbl9pZF9saXN0KTsKK2thbF9ib29sIG1yc19ucmFzX25yX2ZyMl9zdXBwb3J0ZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGNvbnN0IG1yc19wbG1uX2lkX2xpc3QgKnBfcGxtbl9pZF9saXN0KTsKK2thbF9ib29sIG1yc19ucmFzX2VuZGNfbnJfZmRkX3N1cHBvcnRlZChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgY29uc3QgbXJzX3BsbW5faWRfbGlzdCAqcF9wbG1uX2lkX2xpc3QpOwora2FsX2Jvb2wgbXJzX25yYXNfZW5kY19ucl90ZGRfc3VwcG9ydGVkKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBjb25zdCBtcnNfcGxtbl9pZF9saXN0ICpwX3BsbW5faWRfbGlzdCk7CitrYWxfYm9vbCBtcnNfbnJhc19lbmRjX25yX2ZyMV9zdXBwb3J0ZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGNvbnN0IG1yc19wbG1uX2lkX2xpc3QgKnBfcGxtbl9pZF9saXN0KTsKK2thbF9ib29sIG1yc19ucmFzX2VuZGNfbnJfZnIyX3N1cHBvcnRlZChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgY29uc3QgbXJzX3BsbW5faWRfbGlzdCAqcF9wbG1uX2lkX2xpc3QpOworI2VuZGlmIC8qIF9fTlZNX0dMT0JBTF9DQUJDX18gKi8KKwordm9pZCBtcnNfbnJhc19jbGVhcl9zZWFyY2hfaW5mbyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7Cit2b2lkIG1yc19ucmFzX3NlYXJjaF9jb250aW51b3VzX2NhcnJpZXJfc2VhcmNoX3Jlc3VsdF9hZGQoY29uc3QgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19ucmFzX3NlYXJjaF9jY3NfcmVzdWx0X2VudHJ5X3N0cnVjdCAqaW5wdXQpOwora2FsX3VpbnQzMiBtcnNfbnJhc19zZWFyY2hfY29udGludW91c19jYXJyaWVyX3NlYXJjaF9yZXN1bHRfcXVlcnkoY29uc3QgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19ucmFzX3NlYXJjaF9jY3NfcmVzdWx0X2VudHJ5X3N0cnVjdCAqcF9saXN0KTsKK2thbF91aW50MzIgbXJzX25yYXNfc2VhcmNoX25vbl9jZWxsX2RlZmluaW5nX3NzYl9yYW5nZV9xdWVyeShtcnNfZnJlcV9yYW5nZV9zdHJ1Y3QgKnBfbGlzdCk7Cit2b2lkIG1yc19ucmFzX3NlYXJjaF9jZWxsX3NpYl9yZXN1bHRfYWRkKGNvbnN0IE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBjb25zdCBtcnNfbnJhc19zZWFyY2hfY2VsbF9zaWJfcmVzdWx0X2VudHJ5X3N0cnVjdCAqaW5wdXQpOwordm9pZCBtcnNfbnJhc19zZWFyY2hfbm9uX2NlbGxfZGVmaW5pbmdfc3NiX3JhbmdlX2FkZChjb25zdCBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgY29uc3QgbXJzX2ZyZXFfcmFuZ2Vfc3RydWN0ICppbnB1dCk7CittcnNfbnJhc19wbG1uX21hdGNoX3Jlc3VsdF9lbnVtIG1yc19ucmFzX3NlYXJjaF9wbG1uX2luX3NpYl9vZl9mcmVxKAorICAgIGNvbnN0IE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgIGNvbnN0IGthbF91aW50MzIgbnJhcmZjbiwKKyAgICBjb25zdCBwbG1uX2lkX3N0cnVjdCAqc2VsZWN0ZWRfcGxtbik7CisKK2thbF91aW50MzIgbXJzX25yYXNfc2VhcmNoX2NlbGxfYndfcXVlcnkoCisgICAgY29uc3QgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgbXJzX2ZyZXFfcmFuZ2Vfc3RydWN0ICpyYW5nZV9saXN0KTsKKwordm9pZCBtcnNfbnJhc19zZWFyY2hfcG93ZXJfc2Nhbl9yZXN1bHRfYWRkKGNvbnN0IE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtcnNfZnJlcV9yYW5nZV9zdHJ1Y3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF9ib29sIGlzX3F1aWNrX3NlYXJjaCk7CisKK2thbF91aW50MzIgbXJzX25yYXNfc2VhcmNoX3Bvd2VyX3NjYW5fcmVzdWx0X3F1ZXJ5KGNvbnN0IE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1yc19mcmVxX3JhbmdlX3N0cnVjdCAqcF9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX2Jvb2wgaXNfcXVpY2tfc2VhcmNoKTsKKwordm9pZCBtcnNfbnJhc19zZWFyY2hfcG93ZXJfc2Nhbl9yZXN1bHRfcmVtb3ZlKGNvbnN0IE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtcnNfZnJlcV9yYW5nZV9zdHJ1Y3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF9ib29sIGlzX3F1aWNrX3NlYXJjaCk7CisKK3ZvaWQgbXJzX25yYXNfbXJzX3BsbW5faWRfdG9fcGxtbl9pZChjb25zdCBtcnNfcGxtbl9pZCAqc3JjLCBwbG1uX2lkX3N0cnVjdCAqZHN0KTsKKwora2FsX2Jvb2wgbXJzX25yYXNfc2Z0ZF9tZWFzdXJlbWVudF90eXBlX3N1cHBvcnRlZCgKKyAgICBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwKKyAgICBtcnNfbnJhc19zZnRkX21lYXNfdHlwZV9lbnVtIHNmdGRfbWVhc190eXBlLAorICAgIE5SQVJGQ04gbnJfYXJmY24pOworCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgcmVhZGluZyB0aGUgbGlzdCBvZiB0aGUgTlIgYmFuZHMgc3VwcG9ydGVkIGJ5IFJGLgorICogQHBhcmFtW291dF0gTlIgYmFuZCBsaXN0LgorICovCit2b2lkIG1yc19ucmFzX21heF9iYW5kX2NhcF9mb3JfdXNlcihtcnNfbnJfYmFuZF9saXN0X3N0cnVjdCAqbnJfYmFuZCk7CisKK3ZvaWQgbXJzX25yYXNfbnJfYmFuZF9yZl9jYXBfZm9yX3VzZXIobXJzX25yX2JhbmRfbGlzdF9zdHJ1Y3QgKm5yX3NhX2JhbmQsIG1yc19ucl9iYW5kX2xpc3Rfc3RydWN0ICpucl9lbmRjX2JhbmQpOworCitrYWxfYm9vbCBtcnNfbnJhc19iYW5kX3NldHRpbmdfdXBkYXRlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgIGthbF91aW50OCAqcF9ucl9iYW5kLCBrYWxfYm9vbCB3aXRoX2R1cGxleF9tb2RlKTsKKwora2FsX2Jvb2wgbXJzX25yYXNfZW5kY19iYW5kX3NldHRpbmdfdXBkYXRlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgIG1yc19nZW1pbmlfc3RhdHVzX2VudW0gKmdlbWluaV9zdGF0dXMsIGthbF91aW50OCAqcF9lbmRjX25yX2JhbmQpOworCit2b2lkIG1yc19ucmFzX3ByaW50X2JhbmRfYml0bWFzayhjb25zdCBrYWxfdWludDgqIHBfYmFuZF9tYXNrX2J5dGUsCisgICAgbnJhc19iYW5kX3ByaW50X2Z1bmNfZW51bSBmdW5jX25hbWUsCisgICAgbnJhc19iYW5kX3ByaW50X2NoZWNrX3BvaW50X2VudW0gY2hlY2tfcG9pbnQpOworCit2b2lkIG1yc19ucmFzX2dldF9jb250ZXh0X252cmFtX25yX2JhbmQoa2FsX3VpbnQ4ICpwX25yX2JhbmRfbWFzaywgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCit2b2lkIG1yc19ucmFzX3NldF9jb250ZXh0X252cmFtX25yX2JhbmQoa2FsX3VpbnQ4ICpwX25yX2JhbmRfbWFzaywgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCit2b2lkIG1yc19ucmFzX2dldF9jb250ZXh0X252cmFtX2VuZGNfbnJfYmFuZChrYWxfdWludDggKnBfZW5kY19ucl9iYW5kX21hc2ssIE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKwordm9pZCBtcnNfbnJhc19zZXRfY29udGV4dF9udnJhbV9lbmRjX25yX2JhbmQoa2FsX3VpbnQ4ICpwX2VuZGNfbnJfYmFuZF9tYXNrLCBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKKy8qKgorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIE5SIGJhbmQgYml0IG1hc2sgaW5kaWNhdGluZyB0aGUgTlIgYmFuZHMKKyAqIHN1cHBvcnRlZCBieSB0aGUgVUUgaW4gRU4tREMuCisgKiBAcGFyYW1bb3V0XSBOUiBiYW5kIGJpdCBtYXNrIHdpdGggTUFYX0JZVEVfTlJfQkFORF9CSVRNQVNLIGJ5dGVzLgorICogQHJldHVybiAtCisgKi8KK3ZvaWQgbXJzX25yYXNfZW5kY19ucl9iYW5kX2xpc3RfZ2V0KG1yc19nZW1pbmlfc3RhdHVzX2VudW0gZ2VtaW5pX3N0YXR1cywKKyAgICBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwKKyAgICBrYWxfdWludDggKm5yX2JhbmQpOworCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgTlIgYmFuZCBnaXZlbiBpcyBzdXBwb3J0ZWQgRU5EQyBOUiBiYW5kIGJ5IFVFLgorICogQHBhcmFtW2luXSBnZW1pbmlfc3RhdHVzIEdlbWluaSBzdGF0dXMuCisgKiBAcGFyYW1baW5dIFNJTSBpbmRleAorICogQHBhcmFtW2luXSBOUiBiYW5kCisgKiBAcmV0dXJuIEtBTF9UUlVFIGlmIHRoZSBOUiBiYW5kIGdpdmVuIGluIGlucHV0IGlzIHN1cHBvcnRlZCBFTkRDIE5SIGJhbmQgYnkgVUUuCisgKiBAcmV0dXJuIEtBTF9GQUxTRSBpZiB0aGUgTlIgYmFuZCBnaXZlbiBpbiBpbnB1dCBpcyBub3Qgc3VwcG9ydGVkIEVOREMgTlIgYmFuZCBieSBVRS4KKyAqLworCitrYWxfYm9vbCBtcnNfbnJhc19pc19zdXBwb3J0ZWRfZW5kY19ucl9iYW5kKG1yc19nZW1pbmlfc3RhdHVzX2VudW0gZ2VtaW5pX3N0YXR1cywKKyAgICBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwKKyAgICBrYWxfdWludDE2IG5yX2JhbmQpOworCisvKioKKyAqIEBicmllZiBGdW5jdGlvbiB0byBnZXQgU0EgTlIgYmFuZCBiaXRtYXNrIGlzIHN1cHBvcnRlZCBieSBQTE1OLgorICogQHBhcmFtW2luXSBTSU0gaW5kZXgKKyAqIEBwYXJhbVtvdXRdIHN1cHBvcnQgYmFuZCBiaXRtYXNrCisgKiBAcGFyYW1baW5dIFBMTU4gaWQgbGlzdAorICogQHBhcmFtW2luXSBUcmFjZSBwcmludCBpcyBzaG93biBvciBub3QKKyAqLwordm9pZCBtcnNfbnJhc19zYV9ucl9iYW5kX2JpdG1hc2tfZ2V0X2J5X3BsbW4oCisgICAgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAga2FsX3VpbnQ4ICpwX25yX2JhbmRfYml0bWFzaywKKyAgICBjb25zdCBtcnNfcGxtbl9pZF9saXN0ICpwX3BsbW5faWRfbGlzdCwKKyAgICBrYWxfYm9vbCBzaG93X3RyYWNlKTsKKworLyoqCisgKiBAYnJpZWYgRnVuY3Rpb24gdG8gZ2V0IEVOREMgTlIgYmFuZCBiaXRtYXNrIGlzIHN1cHBvcnRlZCBieSBQTE1OLgorICogQHBhcmFtW2luXSBnZW1pbmlfc3RhdHVzIEdlbWluaSBzdGF0dXMuCisgKiBAcGFyYW1baW5dIFNJTSBpbmRleAorICogQHBhcmFtW291dF0gc3VwcG9ydCBiYW5kIGJpdG1hc2sKKyAqIEBwYXJhbVtpbl0gUExNTiBpZCBsaXN0CisgKiBAcGFyYW1baW5dIFRyYWNlIHByaW50IGlzIHNob3duIG9yIG5vdAorICovCit2b2lkIG1yc19ucmFzX2VuZGNfbnJfYmFuZF9iaXRtYXNrX2dldF9ieV9wbG1uKAorICAgIG1yc19nZW1pbmlfc3RhdHVzX2VudW0gZ2VtaW5pX3N0YXR1cywKKyAgICBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwKKyAgICBrYWxfdWludDggKnBfbnJfYmFuZF9iaXRtYXNrLAorICAgIGNvbnN0IG1yc19wbG1uX2lkX2xpc3QgKnBfcGxtbl9pZF9saXN0LAorICAgIGthbF9ib29sIHNob3dfdHJhY2UpOworCisjaWZkZWYgX19OVk1fR0xPQkFMX0NBQkNfXworLyoqCisgKiBAYnJpZWYgY2hlY2sgaWYgU0EgTlIgYmFuZCBnaXZlbiBpcyBzdXBwb3J0ZWQgYnkgUExNTi4KKyAqIEBwYXJhbVtpbl0gTlIgYmFuZAorICogQHBhcmFtW2luXSBTSU0gaW5kZXgKKyAqIEBwYXJhbVtpbl0gUExNTiBpZCBsaXN0CisgKiBAcGFyYW1baW5dIFRyYWNlIHByaW50IGlzIHNob3duIG9yIG5vdAorICogQHJldHVybiBLQUxfVFJVRSBpZiB0aGUgTlIgYmFuZCBnaXZlbiBpbiBpbnB1dCBpcyBzdXBwb3J0ZWQgYnkgUExNTi4KKyAqIEByZXR1cm4gS0FMX0ZBTFNFIGlmIHRoZSBOUiBiYW5kIGdpdmVuIGluIGlucHV0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgUExNTi4KKyAqLwora2FsX2Jvb2wgbXJzX25yYXNfaXNfc3VwcG9ydGVkX3NhX25yX2JhbmRfcGxtbigKKyAgICBrYWxfdWludDE2IG5yX2JhbmQsCisgICAgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgY29uc3QgbXJzX3BsbW5faWRfbGlzdCAqcF9wbG1uX2lkX2xpc3QsCisgICAga2FsX2Jvb2wgc2hvd190cmFjZSk7CisKKy8qKgorICogQGJyaWVmIGNoZWNrIGlmIEVOREMgTlIgYmFuZCBnaXZlbiBpcyBzdXBwb3J0ZWQgYnkgUExNTi4KKyAqIEBwYXJhbVtpbl0gZ2VtaW5pIHN0YXR1cworICogQHBhcmFtW2luXSBOUiBiYW5kCisgKiBAcGFyYW1baW5dIFNJTSBpbmRleAorICogQHBhcmFtW2luXSBQTE1OIGlkIGxpc3QKKyAqIEBwYXJhbVtpbl0gVHJhY2UgcHJpbnQgaXMgc2hvd24gb3Igbm90CisgKiBAcmV0dXJuIEtBTF9UUlVFIGlmIHRoZSBOUiBiYW5kIGdpdmVuIGluIGlucHV0IGlzIHN1cHBvcnRlZCBieSBQTE1OLgorICogQHJldHVybiBLQUxfRkFMU0UgaWYgdGhlIE5SIGJhbmQgZ2l2ZW4gaW4gaW5wdXQgaXMgbm90IHN1cHBvcnRlZCBieSBQTE1OLgorICovCitrYWxfYm9vbCBtcnNfbnJhc19pc19zdXBwb3J0ZWRfZW5kY19ucl9iYW5kX3BsbW4oCisgICAgbXJzX2dlbWluaV9zdGF0dXNfZW51bSBnZW1pbmlfc3RhdHVzLAorICAgIGthbF91aW50MTYgbnJfYmFuZCwKKyAgICBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwKKyAgICBjb25zdCBtcnNfcGxtbl9pZF9saXN0ICpwX3BsbW5faWRfbGlzdCwKKyAgICBrYWxfYm9vbCBzaG93X3RyYWNlKTsKKyNlbmRpZiAvKiBfX05WTV9HTE9CQUxfQ0FCQ19fICovCisKKy8qKgorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZWFkaW5nIEVVVFJBIGJhbmQgbGlzdCBmcm9tIEZyZXFCYW5kTGlzdAorICogQHBhcmFtW2luXSBFbmNvZGVkIEZyZXFCYW5kTGlzdCBJRSBhcyBzcGVjaWZpZWQgaW4gVFMgMzguMzMxCisgKiBAcGFyYW1bb3V0XSBFVVRSQSBiYW5kIGxpc3QKKyAqIEByZXR1cm4gTi9BCisgKi8KK3ZvaWQgbXJzX25yYXNfZnJlcV9iYW5kX2xpc3RfZXV0cmFfYmFuZHNfcmV0cmlldmUoCisgICAgY29uc3QgbXJzX25yYXNfb2N0ZXRfc3RyaW5nX3N0cnVjdCBmcmVxYmFuZGxpc3RfaWUsCisgICAgbnJhc19ldXRyYV9iYW5kX2xpc3Rfc3RydWN0ICpwX2V1dHJhX2JhbmRfbGlzdCk7CisKK3ZvaWQgbXJzX25yYXNfc2V0X3JhZGlvX2NhcGFiaWxpdHlfZm9yX25nX3Jhbl9jaGFuZ2VkKAorICAgIE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfYm9vbCB2YWx1ZSk7CisgICAgCitrYWxfYm9vbCBtcnNfbnJhc19nZXRfcmFkaW9fY2FwYWJpbGl0eV9mb3JfbmdfcmFuX2NoYW5nZWQoCisgICAgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCitrYWxfYm9vbCBtcnNfbnJhc19iYW5kX3NldHRpbmdfdXBkYXRlX2J5X3BsbW4oZnVuY3Rpb25fY2FsbGVyX2lkX2VudW0gY2FsbGVyX2lkLAorICAgIE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBtcnNfcGxtbl9pZF9saXN0KiBwX3BsbW4sIG1yc19laHBsbW5faWRfbGlzdCogcF9laHBsbW4pOworCittcnNfbnJfYmFuZF9kaXNhYmxlX2J5X3BsbW5fc3RhdGVfZW51bSBtcnNfbnJhc19nZXRfYmFuZF9kaXNhYmxlX2J5X3BsbW5fc3RhdGUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCitmdW5jdGlvbl9jYWxsZXJfaWRfZW51bSBtcnNfbnJhc19nZXRfYmFuZF9kaXNhYmxlX2xhc3RfY2FsbGVyX2lkKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworLyoqCisgKiBAYnJpZWYgQ2hlY2tzIGlmIEVOLURDIGJhbmQgY29tYmluYXRpb24gaXMgc3VwcG9ydGVkIHdpdGggZ2l2ZW4gTFRFL05SIGJhbmRzLgorICogQHBhcmFtW2luXSBzaW1faW5kZXggU0lNIGluZGV4CisgKiBAcGFyYW1baW5dIGx0ZV9iYW5kIExURSBiYW5kCisgKiBAcGFyYW1baW5dIHBfbnJfYmFuZCBQb2ludGVyIHRvIE5SIGJhbmQsIGlmIE5VTEwsIGFueSBOUiBiYW5kIGlzIE9LIGZvciBFTi1EQyBiYW5kIGNvbWJpbmF0aW9uIGNoZWNrCisgKiBAcGFyYW1baW5dIHBfcGxtbl9pZF9saXN0IFBMTU4gSWQgTGlzdCBpcyB1c2VkIGZvciBiYW5kIGZpbHRlcmluZyBvciBjdXN0b21pemF0aW9uCisgKiBAcGFyYW1baW5dIGdlbWluaV9zdGF0dXMgR2VtaW5pIHN0YXR1cy4KKyAqIEByZXR1cm4gVFJVRSBpZiBFTi1EQyBiYW5kIGNvbWJpbmF0aW9uIGZvdW5kLCBvdGhlcndpc2UgRkFMU0UuCisgKi8KK2thbF9ib29sIG1yc19ucmFzX2lzX2VuZGNfY29tYl9zdXBwb3J0ZWRfYmFuZCgKKyAgICBrYWxfdWludDggc2ltX2luZGV4LAorICAgIGthbF91aW50MTYgbHRlX2JhbmQsCisgICAga2FsX3VpbnQxNiogcF9ucl9iYW5kLAorICAgIGNvbnN0IG1yc19wbG1uX2lkX2xpc3QgKnBfcGxtbl9pZF9saXN0LAorICAgIG1yc19nZW1pbmlfc3RhdHVzX2VudW0gZ2VtaW5pX3N0YXR1cyk7CisKKy8qKgorICogQGJyaWVmIEZ1bmN0aW9uIGZvciByZWFkaW5nIEdlbWluaSBzdGF0dXMKKyAqIEBwYXJhbVtpbl0gU0lNIGluZGV4CisgKiBAcmV0dXJuIEdlbWluaSBzdGF0dXMKKyAqLworbXJzX2dlbWluaV9zdGF0dXNfZW51bSBtcnNfbnJhc19nZXRfZ2VtaW5pX3N0YXR1cyhNUlNfU0lNX0lOREVYIHNpbV9pZHgpOworCisvKiBFTi1EQyBlcXVpdmFsZW50cyBmb3Igc29tZSBBUEkgZnVuY3Rpb25zIHRoYXQgY2hlY2sgZm9yIGJhbmQgc3VwcG9ydCAqLwora2FsX3VpbnQ4IG1yc19ucmFzX2lzX3N1cHBvcnRlZF9lbmRjX2RsX25yYXJmY25fb25fYW55X2JhbmQoa2FsX3VpbnQxNiAqYmFuZCwKKyAgICBOUkFSRkNOIG5yX2RsX2FyZmNuLCBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitrYWxfdWludDggbXJzX25yYXNfaXNfc3VwcG9ydGVkX2VuZGNfYW5kX25yX29ubHlfZGxfbnJhcmZjbl9vbl9hbnlfYmFuZChrYWxfdWludDE2ICpiYW5kLAorICAgIE5SQVJGQ04gbnJfZGxfYXJmY24sIE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKK2thbF9ib29sIG1yc19ucmFzX2lzX3N1cHBvcnRlZF9lbmRjX2RsX25yYXJmY24oTlJBUkZDTiBucl9kbF9hcmZjbiwga2FsX3VpbnQxNiBiYW5kLAorICAgIE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKK2thbF9ib29sIG1yc19ucmFzX2lzX3N1cHBvcnRlZF9lbmRjX2RsX25yYXJmY25fcGFydGlhbF9iYW5kKAorICAgIGNvbnN0IG1yc19wbG1uX2lkICpwX21yc19wbG1uX2lkLCBOUkFSRkNOIG5yX2RsX2FyZmNuLCBrYWxfdWludDE2IGJhbmQsCisgICAgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOwora2FsX2Jvb2wgbXJzX25yYXNfaXNfc3VwcG9ydGVkX2VuZGNfdWxfbnJhcmZjbihOUkFSRkNOIG5yX2RsX2FyZmNuLCBrYWxfdWludDE2IGJhbmQsCisgICAgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCisvKioKKyAqIEBicmllZiBSZXF1ZXN0cyBNUlMgdG8gaW5mb3JtIE5MMSBhYm91dCBwb3NzaWJsZSBuZWVkIHRvIG1vZGlmeSBOUiBiYW5kCisgKiAgICAgICAgYmFuZHdpZHRoIGFjY29yZGluZyB0byB0aGUgUExNTi4KKyAqIEBwYXJhbVtpbl0gR0VNSU5JIHN0YXR1cworICogQHBhcmFtW2luXSBQTE1OIElECisgKiBAcGFyYW1baW5dIFNJTSBpbmRleAorICogQHJldHVybiBOL0EKKyAqLwordm9pZCBtcnNfbnJhc19tb2RpZnlfbnJfYncoCisgICAgbXJzX2dlbWluaV9zdGF0dXNfZW51bSBnZW1pbmlfc3RhdHVzLCBtcnNfcGxtbl9pZCBwbG1uX2lkLAorICAgIE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKyAgICAKKyAgICAKKy8qKgorICogQGJyaWVmIENoZWNrcyBpZiBOTDFfQ0FQIGlzIG5vdCBidWlsZGluZyBiYW5kIGNvbWJpbmF0aW9ucyBhbmQgY2FuIHJldHVybiB0aGUgYmFuZCBjb21iaW5hdGlvbnMgaW1tZWRpYXRlbHkgd2hlbiBtcnNfbnJhc19pc19lbmRjX2NvbWJfc3VwcG9ydGVkX2JhbmQgaXMgY2FsbGVkCisgKiBAcGFyYW1baW5dIHNpbV9pbmRleCBTSU0gaW5kZXgKKyAqIEByZXR1cm4gVFJVRSBpZiBOTDFfQ0FQIGlzIHJlYWR5IGFuZCBub3QgYnVpbGRpbmcgYmFuZCBjb21iaW5hdGlvbnMKKyAqLwora2FsX2Jvb2wgbXJzX25yYXNfaXNfbmwxX2JhbmRfY29tYmluYXRpb25fcmVhZHkoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCisvKioKKyAqIEBicmllZiBXaGVuIE5MMV9DQVAgc3RhcnQvZmluaXNoIGJ1aWxkaW5nIGNhcGFiaWxpdHksIGl0IHdpbGwgdXBkYXRlIHRoZSBzdGF0dXMuCisgKiBAcGFyYW1baW5dIHNpbV9pbmRleCBTSU0gaW5kZXgKKyAqIEBwYXJhbVtpbl0gbmwxX2NhcF9idWlsZF9kb25lIE5MMV9DQVAgc3RhdHVzCisgKiBAcmV0dXJuIE4vQQorICovCit2b2lkIG1yc19ucmFzX25sMV9jYXBfc3RhdHVzX3VwZGF0ZShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX2Jvb2wgbmwxX2NhcF9idWlsZF9kb25lKTsKKwora2FsX2Jvb2wgbXJzX25yYXNfaXNfbWF0Y2hlZF9mcm9tX25yX3BhcnRpYWxfYmFuZF90YWJsZShjb25zdCBtcnNfcGxtbl9pZCAqcF9tcnNfcGxtbl9pZCwgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MTYgYmFuZCwKKyAgICBtcnNfbnJhc19wYXJ0aWFsX2ZyZXFfcmFuZ2VfbGlzdF9zdHJ1Y3QgKnBfZnJlcV9yYW5nZV9saXN0KTsKKworLyoqCisgKiBAYnJpZWYgQ2hlY2sgd2hldGhlciBVRSBzdXBwb3J0cyBleHRlbmRlZCBiYW5kIG43NyBpbiBVU0EKKyAqIEBwYXJhbVtpbl0gcF9wbG1uX2lkX2xpc3QgUExNTiBpZCBsaXN0CisgKiBAcGFyYW1baW5dIHNpbV9pZHggU0lNIGluZGV4CisgKiBAcmV0dXJuIGthbF9ib29sIElmIGV4dGVuZGVkIG43NyBpbiBVU0Egc3VwcG9ydGVkLCBLQUxfVFJVRSB3aWxsIGJlIHJldHVybmVkCisgKi8KK2thbF9ib29sIG1yc19ucmFzX2V4dGVuZGVkQmFuZF9uNzdfc3VwcG9ydGVkKGNvbnN0IG1yc19wbG1uX2lkX2xpc3QqIHBfcGxtbl9pZF9saXN0LCBNUlNfU0lNX0lOREVYIHNpbV9pZHgpOworCisjZW5kaWYgLyogTVJTX05SQVNfQ0FQQUJJTElUWV9IICovCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfbnJhc19zZWFyY2guaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfbnJhc19zZWFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODI2NmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc19ucmFzX3NlYXJjaC5oCkBAIC0wLDAgKzEsOTkgQEAKKyNpZm5kZWYgX01SU19OUkFTX1NFQVJDSF9ICisjZGVmaW5lIF9NUlNfTlJBU19TRUFSQ0hfSAorCisjaW5jbHVkZSAibXJzX2NvbW1vbl9jYXBhYmlsaXR5LmgiCisjaW5jbHVkZSAibXJzX2NvbW1vbl9zZWFyY2guaCIKKyNpbmNsdWRlICJtcnNfYXNfc3RydWN0LmgiCisjaW5jbHVkZSAibWNjX3JlY29nX3RyYWluX2RhdGEuaCIKKyNpZmRlZiBVTklUX1RFU1QKKyNpbmNsdWRlICJtY2NfcmVjb2dfdGVzdF9kYXRhLmgiCisjZW5kaWYgLyogVU5JVF9URVNUICovCisKKyNkZWZpbmUgTVJTX05SQVNfTUNDX1JFQ09HX01BWF9TVUJCQU5EX05VTSA2NAorCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MzIgbWluX2dzY247CisgICAga2FsX3VpbnQzMiBtYXhfZ3NjbjsKKyAgICBrYWxfdWludDggc3RlcF9zaXplOworfSBucl9nc2NuX3JhbmdlX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIGthbF91aW50MzIgICAgICAgIGJlZ2luOworICAga2FsX3VpbnQzMiAgICAgICAgZW5kOworfSBucl9mcmVxX3JhbmdlX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgbnJhc19tY2NfcmVjb2dfbWNjX2xpc3QgeworICAgIGthbF91aW50OCBtY2NfbnVtOworICAgIG1yc19tY2NfaWQgbWNjW01DQ19SRUNPR19OUl9NQVhfTUNDX0xFTl07Cit9IG1yc19ucmFzX21jY19yZWNvZ19tY2NfbGlzdF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgbnJfZnJlcV9yYW5nZV9zdHJ1Y3QgICAgICAgICAgICBmcmVxX3JhbmdlOworICAgIGthbF9pbnQxNiAgICAgICAgICAgICAgICAgICAgICAgcnNzaTsgICAgICAgLy8gcWRibSA9IGRibSAqIDQKK30gbXJzX25yYXNfc3ViYmFuZF9yc3NpX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgIGJhbmQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kX251bTsgLy8gVGhlIG51bWJlciBvZiBzdWJiYW5kcyB0byByZXBvcnQuCisgICAgbXJzX25yYXNfc3ViYmFuZF9yc3NpX3N0cnVjdCAgICBzdWJiYW5kX3Jzc2lbTVJTX05SQVNfTUNDX1JFQ09HX01BWF9TVUJCQU5EX05VTV07IAorfSBtcnNfbnJhc19iYW5kX3Jzc2lfZGlzdHJpYnV0aW9uX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFuZF9udW07CisgICAgbXJzX25yYXNfYmFuZF9yc3NpX2Rpc3RyaWJ1dGlvbl9zdHJ1Y3QgIGJhbmRbTUNDX1JFQ09HX05SX0JBTkRfTlVNXTsKK30gbXJzX25yYXNfcnNzaV9kaXN0cmlidXRpb25fc3RydWN0OworCitleHRlcm4gbXJzX25yYXNfbWNjX3JlY29nX21jY19saXN0X3N0cnVjdCBucl9tY2NfbGlzdDsKKwordm9pZCBtcnNfZ2V0X3ByZWRpY3RfbnJhcmZjbl90YWJsZV9ieV9iYW5kKGthbF91aW50MzIgbnJfYmFuZCwgbXJzX2ZyZXFfdGFibGVfc3RydWN0ICpucmFyZmNuX3RhYmxlKTsKK2thbF91aW50MzIgbXJzX25yYXNfZ3Njbl90b19ucmFyZmNuKGthbF91aW50MzIgZ3Njbik7CisKK2thbF91aW50MTYgbXJzX25yYXNfZ2V0X3ByZWRpY3RfZnJlcV9saXN0X2J5X2JhbmQoCisgICAgTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgY29uc3Qga2FsX3VpbnQzMiBiYW5kX2xpc3RfbnVtLAorICAgIGNvbnN0IGthbF91aW50MTYgKmJhbmRfbGlzdCwKKyAgICBjb25zdCBOUkFSRkNOICpza2lwX2ZyZXFfbGlzdCwKKyAgICBjb25zdCBrYWxfdWludDE2IHNraXBfZnJlcV9saXN0X251bSwKKyAgICBOUkFSRkNOICpwcmVkaWN0X2ZyZXFfbGlzdCAgICAvLyBrYWxfdWludDMyIGFycmF5WzY0XQorKTsKKwora2FsX3VpbnQxNiBtcnNfbnJhc19nZXRfcHJlZGljdF9mcmVxX2xpc3RfYnlfcGxtbigKKyAgICBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwKKyAgICBjb25zdCBtcnNfcGxtbl9pZF9saXN0ICpwbG1uX2xpc3QsCisgICAgY29uc3QgTlJBUkZDTiAqc2tpcF9mcmVxX2xpc3QsCisgICAgY29uc3Qga2FsX3VpbnQxNiBza2lwX2ZyZXFfbGlzdF9udW0sCisgICAgTlJBUkZDTiAqcHJlZGljdF9mcmVxX2xpc3QpOworCit2b2lkIG1yc19nZXRfcHJlZGljdF9ucmFyZmNuX3RhYmxlX2J5X2JhbmQoa2FsX3VpbnQzMiBucl9iYW5kLCBtcnNfZnJlcV90YWJsZV9zdHJ1Y3QgKm5yYXJmY25fdGFibGUpOwora2FsX3VpbnQzMiBtcnNfbnJhc19nc2NuX3RvX25yYXJmY24oa2FsX3VpbnQzMiBnc2NuKTsKKwordm9pZCBtcnNfbnJhc19wbG1uX2lkX3RvX21yc19wbG1uX2lkKGNvbnN0IHBsbW5faWRfc3RydWN0ICpzcmMsIG1yc19wbG1uX2lkICpkc3QpOworCitrYWxfdWludDE2IG1yc19ucmFzX2dldF9wcmVkaWN0X2ZyZXFfbGlzdF9ieV9iYW5kKAorICAgIE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgIGNvbnN0IGthbF91aW50MzIgYmFuZF9saXN0X251bSwKKyAgICBjb25zdCBrYWxfdWludDE2ICpiYW5kX2xpc3QsCisgICAgY29uc3QgTlJBUkZDTiAqc2tpcF9mcmVxX2xpc3QsCisgICAgY29uc3Qga2FsX3VpbnQxNiBza2lwX2ZyZXFfbGlzdF9udW0sCisgICAgTlJBUkZDTiAqcHJlZGljdF9mcmVxX2xpc3QgICAgLy8ga2FsX3VpbnQzMiBhcnJheVs2NF0KKyk7CitrYWxfdWludDE2IG1yc19ucmFzX2dldF9wcmVkaWN0X2ZyZXFfbGlzdF9ieV9wbG1uKAorICAgIE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgIGNvbnN0IG1yc19wbG1uX2lkX2xpc3QgKnBsbW5fbGlzdCwKKyAgICBjb25zdCBOUkFSRkNOICpza2lwX2ZyZXFfbGlzdCwKKyAgICBjb25zdCBrYWxfdWludDE2IHNraXBfZnJlcV9saXN0X251bSwKKyAgICBOUkFSRkNOICpwcmVkaWN0X2ZyZXFfbGlzdCk7CQorCQorZG91YmxlIG1yc19ucmFzX21jY19yZWNvZ19jZW50ZXJlZF9jb3NpbmVfZGlzdGFuY2UoY29uc3Qga2FsX2ludDE2ICpkYXRhMSwgY29uc3Qga2FsX2ludDE2ICpkYXRhMiwga2FsX3VpbnQzMiBkYXRhX2xlbik7CitrYWxfYm9vbCBtcnNfbnJhc19tY2NfcmVjb2dfaXNfcmVtYXJrYWJsZV9iYW5kKGthbF91aW50MTYgYmFuZCk7CittcnNfbnJhc19tY2NfcmVjb2dfbWNjX2xpc3Rfc3RydWN0IG1yc19ucmFzX21jY19yZWNvZ19nZXRfbWNjKG1yc19ucmFzX3Jzc2lfZGlzdHJpYnV0aW9uX3N0cnVjdCAqcnNzaV9kaXN0cmlidXRpb24pOworbXJzX25yYXNfbWNjX3JlY29nX21jY19saXN0X3N0cnVjdCBtcnNfbnJhc19tY2NfcmVjb2dfZ2V0X2xhdGVzdF9tY2MoKTsKKyNpZmRlZiBVTklUX1RFU1QKK3ZvaWQgbXJzX25yYXNfbWNjX3JlY29nX3JlZ3Jlc3Npb24oKTsKKyNlbmRpZiAvKiBVTklUX1RFU1QgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc191YXNfY2FwYWJpbGl0eS5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc191YXNfY2FwYWJpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNDhjMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX3Vhc19jYXBhYmlsaXR5LmgKQEAgLTAsMCArMSwyMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDcKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIG1yc191YXNfY2FwYWJpbGl0eS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIE11bHRpbW9kZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgVGhlIFVBUyBjYXBhYmlsaXR5IHN0b3JlZCBpbiBNUlMgY29udGV4dC4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAkTG9nJAorICoKKyAqIDA2IDExIDIwMjAgdmVuZF9tdGJfYXJpdGhhMDAyCisgKiBbTU9MWTAwNTE5NTAwXSA/Pz8/Pz8/MTkxNjU/Pzg2NDAzOTA0MTEwNjU1Mz8/Pz8/Pz8/Pz8/PworICogCQorICogCU5SMTUuUjMuTVAKKyAqCisgKiAxMiAwOSAyMDE5IHZlbmRfbXRiX2FyaXRoYTAwMgorICogW01PTFkwMDQ1ODUwM10gW0NPREUgU1lOQ11bTUg0UC1QT1NdIHBhdGNoIHJlcXVlc3QgYWJvdXQgQUxQUzA0MzA5MDI2CisgKiAJCisgKiAJQmFuZCBDb25maWd1cmF0aW9uIHRvIFZNT0xZCisgKgorICogMTIgMDYgMjAxOCB5ZW5jaGloLnlhbmcKKyAqIFtNT0xZMDAzNzExNTZdIFtWTU9MWV0gTlJSQy1TRUFSQ0ggY2hlY2staW4uCisgKiBGaWxsIHBoeXNpY2FsIGZyZXF1ZW5jeSByYW5nZSBkdXJpbmcgUG93ZXIgU2Nhbi4KKyAqCisgKiAwNCAxOCAyMDE4IGFzaGlrLnRqCisgKiBbTU9MWTAwMzIxMDgwXSA/Pz8/P0FMUFMwMzQ3NDEyOSA/Pz8/Pz8/cGF0Y2gtLT8/Pz9QNDAgYW5kcm9pZCBvPz8KKyAqCisgKiAwMSAyMiAyMDE4IG11bmVlc3dhcmFpYWguZGFtYQorICogW01PTFkwMDMwMjg5N10gW0NPREUgU1lOQ10gQVQgY29tbWFuZCAoK0VTQ0VMTElORk8pIHRvIG1vZGVtIHRvIHF1ZXJ5IHNlcnZpbmcgY2VsbCBiYW5kIGFuZCBhcmZjbiBpbmZvLCB3aGVuIG5lZWRlZC4KKyAqIC4KKyAqCisgKiAxMCAxNCAyMDE2IHdlbmxvbmcuYW4KKyAqIFtNT0xZMDAxNTM1MjRdIFs2MjkxXSBWaXZvIEJsYWNrTGlzdCBmZWF0dXJlCisgKiAudml2byBibGFjayBsaXN0IHN5bmMgdG8gdW1vbHlhCisgKgorICogMDYgMDEgMjAxNSBoZW5yeS5sYWkKKyAqIFtNT0xZMDAwOTI1MDhdIFtNVDYyOTFdW0xURS1DMktdIEFTIEludGVyIFJBVCBmZWF0dXJlCisgKiAuCisgKgorICogMTIgMTYgMjAxNCBldGhhbi5oYW4KKyAqIFtNT0xZMDAwODc4NThdIFtSUkNFXSBVbml2ZXJzYWwgQmluIE1vZGlmaWNhdGlvbgorICogCU1SUy4KKyAqCisgKiAxMiAxNiAyMDE0IGppYWppYS5sdW8KKyAqIFtNT0xZMDAwODc0OTFdIFtVTU9MWV1bVEREXVtVQVNdW1NMQ0UvUlJDRV1zeW5jIFUtQmluIENCciB0byBVTU9MWSBUUlVOQ0suCisgKiAuCisgKiBtcnNfdWFzX2NhcGFiaWxpdHkgKFRERCBSUkNFIHBhcnQpCisgKgorICogMTEgMTcgMjAxNCB5dWhod2FuZy55dQorICogW01PTFkwMDA4NDY3Nl0gW0NJU0VdIFN5bmMgQ1NDRS9DU0UgZnJvbSA2MjkxX0RFViB0byBVTU9MWQorICogLgorICoKKyAqIDAxIDIxIDIwMTQgd2NwdXNlcl9pbnRlZ3JhdG9yCisgKiBbTU9MWTAwMDU0NDc1XSBTR0xURSBvcHRpb24gcmVuYW1lCisgKiAuCisgKgorICogMTEgMTMgMjAxMyBiaXJ1aS5saQorICogW01PTFkwMDA0NjAyN10gW01UNjI5MEUxXVtNTURTX0RDXSBNTURDIGZlYXR1cmUgcGF0Y2ggYmFjayB0byBNT0xZIHRydW5rCisgKiBCMy9CMzkuCisgKgorICogMTEgMTIgMjAxMyBtb3J0b24ubGluCisgKiBbTU9MWTAwMDQ1OTY3XSBbR2VtaW5pXSBBZGQgU0lNIGluZGV4IGluIElOVEVSIFJBVCBIQU5ET1ZFUiBJTkZPIHNldC9nZXQgZnVuY3Rpb24KKyAqIFNJTSBpbmRleCBhcmd1bWVudCBhZGRlZCBpbiBNUlMgSU5URVIgUkFUIEhBTkRPVkVSIElORk8gc2V0L2dldCBmdW5jdGlvbgorICoKKyAqIDEwIDIxIDIwMTMgdmVuZF95dWhod2FuZy55dQorICogW01PTFkwMDA0MDA1MF0gW011bHRpTW9kZV0gRHluYW1pYyBiYW5kIHNlbGVjdGlvbgorICogLgorICoKKyAqIDAzIDE0IDIwMTMgbW9ydG9uLmxpbgorICogW01PTFkwMDAxMTk1N10gW01UNjI5MF1bM0ddW1JSQ0VdIE11bHRpbW9kZSBJVCBDQnIgbWVyZ2UgYmFjayB0byBNT0xZCisgKiBNUlMgVUFTIENhcGFiaWxpdHkgaGVhZGVyCisgKgorICogMDEgMjIgMjAxMyBkYXZpZC5uaXUKKyAqIFtNT0xZMDAwMDkyMDVdIFtNUlNdIENvZGUgY2hlY2tlZC1pbiBmb3IgTU9MWSBicmFuY2gKKyAqIC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX01SU19VQVNfQ0FQQUJJTElUWV9ICisjZGVmaW5lIF9NUlNfVUFTX0NBUEFCSUxJVFlfSAorCisvKiBDT01NT04gSU5DTFVERVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiaXJhdF9jb21tb25fZW51bXMuaCIKKyNpbmNsdWRlICJtcnNfYXNfZW51bXMuaCIKKyNpbmNsdWRlICJtcnNfYXNfaW50ZXJfY29yZV9lbnVtLmgiCisjaW5jbHVkZSAibXJzX2FzX3N0cnVjdC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1hY3JvcyBXaXRob3V0IFBhcmFtZXRlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1hY3JvcyBXaXRoIFBhcmFtZXRlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVudW1zIHdpdGhvdXQgdGFncworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUeXBlIERlZmluaXRpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQzMiAgbGVuZ3RoOworICAgIGthbF91aW50OCAgIHZhbHVlW01BWF9MRU5fVVRSQU5fSEFORE9WRVJfSU5GT19NU0ddOworfSBob19pbmZvX2J1ZjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGhvX2luZm9fYnVmICBmZGRfaVJBVEhPSW5mb19HU007CisgICAgaG9faW5mb19idWYgIGZkZF9pUkFUSE9JbmZvQ29tcGFjdF9HU007CisgICAgaG9faW5mb19idWYgIGZkZF9pUkFUSE9JbmZvX0VVVFJBOworICAgIGhvX2luZm9fYnVmICB0ZGRfaVJBVEhPSW5mb19HU007CisgICAgaG9faW5mb19idWYgIHRkZF9pUkFUSE9JbmZvQ29tcGFjdF9HU007CisgICAgaG9faW5mb19idWYgIHRkZF9pUkFUSE9JbmZvX0VVVFJBOworCisgICAga2FsX3VpbnQxNiBmZGRfdWVhOworICAgIGthbF91aW50MTYgZmRkX3VpYTsKKyAgICBrYWxfdWludDE2IHRkZF91ZWE7CisgICAga2FsX3VpbnQxNiB0ZGRfdWlhOyAgICAKKyAgICBrYWxfdWludDMyIGZkZF91bXRzX3N1cHBvcnRlZF9iYW5kOworCit9IHVhc19jYXBhYmlsaXR5X2NvbnRleHRfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlY2xhcmF0aW9ucyBPZiBFeHBvcnRlZCBHbG9iYWxzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gdm9pZCBtcnNfdWFzX3NldF9pcmF0X2hvX2luZm8oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1vZHVsZV90eXBlIHNyY19tb2QsIGthbF9ib29sIG5lZWRUb05vdGlmeSk7CisKK2V4dGVybiB2b2lkIFRERF9tcnNfdWFzX3NldF9pcmF0X2hvX2luZm8oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1vZHVsZV90eXBlIHNyY19tb2QsIGthbF9ib29sIG5lZWRUb05vdGlmeSk7CisKK2V4dGVybiB2b2lkIG1yc191YXNfZ2V0X2lyYXRfaG9faW5mbyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX2Jvb2wgaXNHU00sIGthbF9ib29sIGlzQ29tcGFjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDMyICpwU2l6ZSwgdm9pZCAqcEN0cmxCdWYpOworCitleHRlcm4gdm9pZCBtcnNfdWFzX3JlYWRfbnZyYW1fY25mX2hhbmRsZXIoa2FsX3VpbnQxNiBudnJhbV9maWxlX2lkLCBrYWxfdWludDgqIGRhdGEsIGthbF91aW50MTYgbGVuKTsKKworZXh0ZXJuIHZvaWQgbXJzX3Vhc19nZXRfdWVhX3VpYShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQxNiAqdWVhLCBrYWxfdWludDE2ICp1aWEpOworI2lmZGVmIF9fVU1UU19GRERfTU9ERV9fCitleHRlcm4gbXJzX3V0cmFfcG93ZXJfY2xhc3NfZW51bSBtcnNfdWFzX2dldF9GRERfcG93ZXJjbGFzcygpOworI2VuZGlmCisjaWZkZWYgX19VTVRTX1RERDEyOF9NT0RFX18KK2V4dGVybiBtcnNfdXRyYV9wb3dlcl9jbGFzc19lbnVtIG1yc191YXNfZ2V0X1RERF9wb3dlcmNsYXNzKCk7CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgbXJzX3Vhc19iYW5kX3NldHRpbmdfdXBkYXRlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDMyKiBkYXRhKTsKKwordm9pZCBtcnNfdGFzX2FkZF9ibGFja19jZWxsX2xpc3Rfbm90aWZpY2F0aW9uKHZvaWQpOwordm9pZCBtcnNfdGFzX2NsZWFyX2JsYWNrX2NlbGxfbGlzdF9ub3RpZmljYXRpb24odm9pZCk7Cit2b2lkIG1yc191YXNfYWRkX2JsYWNrX2NlbGxfbGlzdF9ub3RpZmljYXRpb24odm9pZCk7Cit2b2lkIG1yc191YXNfY2xlYXJfYmxhY2tfY2VsbF9saXN0X25vdGlmaWNhdGlvbih2b2lkKTsKKworI2lmZGVmIF9fVU1UU19SMTFfXwora2FsX3VpbnQxNiBtcnNfdWFzX211bHRpX2JhbmRfY29udmVyc2lvbihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQxNiAgICB1YXJmY24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF9ib29sICAgICAgdXNlUnJjTUZCSUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MTYgICAgYmFuZF9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MTYgICAqYmFuZF9saXN0X3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcE1GQkkpOworI2VuZGlmCisKK2thbF9ib29sIG1yc191YXNfcmV0cmlldmVfZGxfdWFyZmNuX2JhbmQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MTYgZGxfdWFyZmNuLCBrYWxfdWludDggKmJhbmRfcHRyKTsKK2thbF9ib29sIG1yc191YXNfaXNfc3VwcG9ydGVkX0ZERF9iYW5kKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDE2IHVtdHNfYmFuZCk7CitrYWxfYm9vbCBtcnNfdWFzX2lzX3N1cHBvcnRlZF9URERfYmFuZChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQxNiB1bXRzX2JhbmQpOworCitrYWxfYm9vbCBtcnNfdWFzX2JhbmRfc2V0dGluZ191cGRhdGVfYnlfcGxtbihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgbXJzX3BsbW5faWQgY3BsbW4pOworCit2b2lkIG1yc191YXNfcmVzZXRfdWFzX3N1cHBvcnRlZF9iYW5kKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKK2thbF9ib29sIG1yc19pc19iYW5kX2NhcGFiaWxpdHlfdXBkYXRlX25lZWRlZChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQ4IGJhbmRJRCk7Cit2b2lkIG1yc191YXNfcmVzZXRfZGlzYWJsZWRfYmFuZF90b19zY3NpX3Blcl9wbG1uKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDMyIGJhbmQpOworCisjZW5kaWYgLyogX01SU19VQVNfQ0FQQUJJTElUWV9IICovCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfdXRpbGl0eS5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL21yc191dGlsaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0NGViMgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfdXRpbGl0eS5oCkBAIC0wLDAgKzEsODk3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA3CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIG1yc191dGlsaXR5LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgTXVsdGltb2RlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICBEZWNsYXJhdGlvbiBvZiBmdW5jaXRvbnMgb2YgdGhlIHV0aWxpdGllcyBpbiBNUlMuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogJExvZyQKKyAqCisgKiAwMSAyOCAyMDIyIG90X2tyaXNobmEuY2hhcmFuCisgKiBbTU9MWTAwNjg1NDg4XSBjbG9uZWQgZnJvbSBBTFBTMDU2NzcyMTcgIFtCMjEwNjIyLTg3Nl1bPz8/Pz9dVUUgQ1NGQiBDQUxMIE1UPz8/UlI/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8KKyAqCisgKiAwMSAxOCAyMDIyIHRvbS53dQorICogW01PTFkwMDczNTgyOF0gU0JQX01SU19BRlJfVE9fNUdfQ09OVFJPTCByZXR1cm4gZXJyb3IKKyAqIAkKKyAqIAkuCisgKgorICogMTAgMDcgMjAyMCB0ZXJvLm1pZXR0aW5lbgorICogW01PTFkwMDU3MDM4Ml0gW0dlbjk3XUFwcGx5IEJXIGN1c3RvbWl6YXRpb24gc2V0dGluZyBmcm9tIE5WUkFNIHRvIHJlcG9ydCBjYXBhYmlsaXR5CisgKiBbTVJTXSBVcGRhdGUgaW4gQlcgc2V0dGluZyBsaXN0IGhhbmRsaW5nLgorICoKKyAqIDEwIDA3IDIwMjAgYm8teWFvLnRzYWkKKyAqIFtNT0xZMDA1NjU3MzhdIFtNT0RFTV1bQXNzZXJ0XSBBc3NlcnQgZmFpbDogZXJyY19jZWxfY3Njb20uYyA2NTcyIC0gRVJSQworICogCS0gQ2hhbm5lbCBwcm90ZWN0aW9uIGZpeGluZworICoKKyAqIDEwIDAxIDIwMjAgdGVyby5taWV0dGluZW4KKyAqIFtNT0xZMDA1NjAwMzJdID8/Pz9TQT8/PworICogTVJTIC0gUExNTiBiYXNlZCA1RyBiYW5kIGRpc2FibGluZy4KKyAqCisgKiAwOSAyMiAyMDIwIHZlbmRfbXRiX2FyaXRoYTAzMQorICogW01PTFkwMDU2MTg2Ml0gW0dlbjk3XVtNUDddW1Z6V11bQUZSXSBmZWF0dXJlIGNoZWNrLWluLCAgKGNoZWNrLWluIGFwcHJvdmVkOqBpdGVtXzM0NCkKKyAqCisgKiAwOSAyMiAyMDIwIHZlbmRfbXRiX2FyaXRoYTAzMQorICogW01PTFkwMDU2MTg2Ml0gW0dlbjk3XVtNUDddW1Z6V11bQUZSXSBmZWF0dXJlIGNoZWNrLWluLCAgKGNoZWNrLWluIGFwcHJvdmVkOqBpdGVtXzM0NCkKKyAqCisgKiAwOSAxOCAyMDIwIHZlbmRfbXRiX2FyaXRoYTAzMQorICogW01PTFkwMDU2MTg2Ml0gW0dlbjk3XVtNUDddW1Z6V11bQUZSXSBmZWF0dXJlIGNoZWNrLWluLCAgKGNoZWNrLWluIGFwcHJvdmVkOqBpdGVtXzM0NCkKKyAqCisgKiAwOSAxOCAyMDIwIHRvbS53dQorICogW01PTFkwMDU1NDM0OF0gW0NvbGdpbl0gY2VsbCBtZWFzdXJlIGFuZCB3aGl0ZSBjZWxsIGxvY2sgZmVhdHVyZSBkZXZlbG9wbWVudAorICogCQorICogCS4KKyAqCisgKiAwNiAyOSAyMDIwIHZlbmRfbXRiX2FyaXRoYTAwMgorICogW01PTFkwMDUzNjYxNV0gW01DRl0gdXNlciBmbG93IGVuaGFuY2VtZW50CisgKiAJCisgKiAJLgorICoKKyAqIDA2IDEyIDIwMjAgdmVuZF9tdGJfbW9iaXZlaWwwMTUKKyAqIFtNT0xZMDA1MjgzNDRdIFtVUkdFTlRdW1NTSV1bTVQ2ODg1XVtQZXRydXNdW1EwXVtNUDJdW0FUJlRdWzEwNzc2djIwXzFdW1IzTVBdW1BUTl1bc2ltdWxhdGlvbl1baW5ob3VzZV1bUm5TXVtBVFRBQ0gvUkVTVEFSVF1bTFRFLUJUUi0xLTgyMjBdVGVzdCBjYXNlIGZhaWxlZCBkdWUgdG8gIyMgTFRFICMjIFJSQ0Nvbm5lY3Rpb25SZXF1ZXN0IFRpbWVPdXQKKyAqIAkKKyAqIAlbTU9MWTAwNTM1MDg2XSA/RE0/MzRHPz8KKyAqIAkKKyAqIAkuCisgKgorICogMDQgMDQgMjAyMCBmYXJtaW5nLnRzZW5nCisgKiBbTU9MWTAwNTA5NTM0XSBbTVQ2ODc1XVtNYXJnYXV4XVtRMF1bTVAzXVtTUUNdXVtJbnRlcm5hbF1bQ2hpbmFdW1NoZW56aGVuXVtNRFNUXVtTV0lGVF1bQ1UrQ1RdW0Vycm9yVGltZXM6MV1bQVNTRVJUXSBmaWxlOm1jdS9sMS9ubDEvaW50ZXJuYWwvbWQ5Ny9zcmMvcngvbnJfcnhfc2NoZWR1bGVyX3J0Yi5jIGxpbmU6NjA0NQorICogCQorICogCS4KKyAqCisgKiAwMyAyNCAyMDIwIGZhcm1pbmcudHNlbmcKKyAqIFtNT0xZMDA1MDY4MTVdIFtNVDY4NzVdW01hcmdhdXhdW1EwXVtTUUNdW01QM11bR2VtaW5pXVtOK0xdW05UQ19TQV9HZW1pbmlfMDAyMl1NYXJnYXV4IGRvZXNuJ3Qgc3VwcG9ydCBTQStMIERTREEuCisgKgorICogMDEgMDYgMjAyMCBoYXJpc2gucmVkZHkKKyAqIFtNT0xZMDA0Njk1MjhdIFtHZW45N11bVk1PTFldW1NBXVtoVm9sdGVdIGhWb2x0ZSByZXZpc2UgZm9yIFNBCisgKgorICogMTIgMDkgMjAxOSBrdW4tbGluLnd1CisgKiBbTU9MWTAwNDY0MzQ1XSBbR2VuOTddIEdlbWluaSBNUDIvTVAzIGZlYXR1cmVzIHBoYXNlLWluCisgKgorICogMTIgMDkgMjAxOSBqdXR0YS5saXVza2EKKyAqIFtNT0xZMDA0NDg2NTRdIFs2Mjk3XVtOUlJDXSBJbXBsZW1lbnRhdGlvbiBmb3IgVm9OUiBjYXBhYmlsaXRpZXMgYW5kIGVuaGFuY2VtZW50cworICogW01SU10gVm9OUiBlbmhhbmNlbWVudHMKKyAqCisgKiAxMiAwOSAyMDE5IGVsbGUuc3VuCisgKiBbTU9MWTAwNDY0NDQzXSBbRVJSQ11bTVJTXVtOTDFNT0JdIG1vdmUgb3BlcmF0b3IgdGFibGUgdG8gbXJzCisgKiAJCisgKiAJW0VSUkMvTVJTXSBtb3ZlIG9wcmF0b3IgdGFibGUuCisgKgorICogMTIgMDkgMjAxOSB2ZW5kX210Yl9hcml0aGEwMDIKKyAqIFtNT0xZMDA0NTg1MDNdIFtDT0RFIFNZTkNdW01INFAtUE9TXSBwYXRjaCByZXF1ZXN0IGFib3V0IEFMUFMwNDMwOTAyNgorICogCQorICogCUJhbmQgQ29uZmlndXJhdGlvbiB0byBWTU9MWQorICoKKyAqIDEyIDAyIDIwMTkgdmluYXlhay5iYW5kYWdpCisgKiBbTU9MWTAwNDU5OTQ1XSBbR2VuOTddW0FGUl1bUkRJVF0gTkFTLVNWIHJlc2V0IE1SUyBBRlIgQ05UWAorICoKKyAqIDEwIDE0IDIwMTkgcHJpbWUueGlhbworICogW01PTFkwMDQ0NzgzMV0gW1Jvc2VdW1BldHJ1c11CU1ArXVtRMF1UaGUgRUNDIGNhbGwgY2FsbGluZyAzIG1pbnR1ZXMgYW5kIG5vdCBjb25uZWN0ZWQuCisgKiAJCisgKiAJLgorICoKKyAqIDA5IDI2IDIwMTkga3VuLWxpbi53dQorICogW01PTFkwMDQ0MzA2Ml0gW0dlbWluaV0gU0ErTCBEUi1EU0RTL0RTREEKKyAqCisgKiAwNyAxOCAyMDE5IGVtaWx5Lmx1CisgKiBbTU9MWTAwNDIyOTI4XSBbR2VuOTcgUGF0Y2ggYmFja11bRVJSQ19DRUxdIENvZGUgU3luYyB0byBWTU9MWQorICogCQorICogCS5tZXJnZSBDTCM3NzA5NTU2IChNUlMpCisgKgorICogMDcgMDEgMjAxOSBqaWF3ZWkuaGUKKyAqIFtNT0xZMDA0MTU1MDldIFtDT0RFIFNZTkNdW1ZNT0xZXVtNT0xZMDAzNzA0MTFdW01PTFkwMDM3NzYwNV1bTU9MWTAwMzk0MjM0XVtNT0xZMDAzOTcwNDNdW01PTFkwMDM5ODI4MV1lQ1NGQiByZWxhdGVkIHBhdGNoLWJhY2sgZnJvbSBHZW45MworICogCQorICogCS4KKyAqCisgKiAwNSAzMCAyMDE5IGt1bi1saW4ud3UKKyAqIFtNT0xZMDA0MDIwMDNdIFtWTU9MWV0gR0VNSU5JIE4rTCBEU0RTCisgKgorICogMDQgMzAgMjAxOSBtdW5lZXN3YXJhaWFoLmRhbWEKKyAqIFtNT0xZMDA0MDI1OTBdIFtHZW45N10gcmVzZXQgQUZSIHRhcmdldCByYXQgYW5kIG9uZ29pbmcgc3RhdHVzICBieSBzZXJ2aWNlCisgKiAuCisgKgorICogMDQgMTcgMjAxOSBwdW5lZXQudAorICogW01PTFkwMDM5OTM5MF0gW0NPREUgU1lOQ10gW1ZNT0xZXVtFaWdlciBSRCBJVF1bR0VNSU5JICYgQUZSXUxBVSByZXF1ZXN0IGhhcyBiZWVuIHJlamVjdGVkIHdpdGggY2F1c2UgQVNfSU5fU1VTUEVORF9NT0RFIGFuZCBpdCBuZXZlciBjYW1wZWQgb24gMkcuCisgKiAJCisgKiAJR0VNSU5JIFJESVQgY29kZSBjaGFuZ2VzIGluIFZNT0xZIFRSVU5LCisgKgorICogMDQgMTYgMjAxOSBvdHRvLmxpdQorICogW01PTFkwMDM5OTE5MF0gW0dFTjk3XSBHRU45NSB0byBHRU45NyBzeW5jIHBhdGNoCisgKiAJCisgKiAJLgorICoKKyAqIDAyIDE4IDIwMTkgbXVuZWVzd2FyYWlhaC5kYW1hCisgKiBbTU9MWTAwMzg0OTk1XSBbVk1PTFldIEdFTUlOSSAzLjAsIEFGUiwgVW5pZnkgRnJlcXVlbmN5IHNjYW4sIEJHU0VBUkNICisgKiAuCisgKgorICogMTAgMDMgMjAxOCBtdW5lZXN3YXJhaWFoLmRhbWEKKyAqIFtNT0xZMDAzNTYyODZdIFtHZW45N10gYmFja2dyb3VuZCBzZWFyY2ggZmVhdHVyZQorICogLgorICoKKyAqIDA1IDI1IDIwMTggb3R0by5saXUKKyAqIFtNT0xZMDAzMjUyMjhdIFtVTU9MWUVdIFJlbW92ZSBOVlJBTSBncm91cCBoZWFkZXIgZmlsZQorICogCQorICogCS4KKyAqCisgKiAwNSAwOSAyMDE4IGFtaXQuc2hhcm1hCisgKiBbTU9MWTAwMzI1MDk2XSBbR2VuOTVdW0dBU11GQVNUX0lSQ1IgYW5kIExHK1dHIENNQ0MgZmVhdHVyZSBjaGFuZ2UgZm9yIEktUkFUIFJFU0VMIHRvIGJlIG1lcmdlZCBhbmQgcmVwbGFjZWQgYnkgU1RPUkVEIFNJLgorICogLgorICoKKyAqIDA0IDE4IDIwMTggbW9ydG9uLmxpbgorICogW01PTFkwMDMyMDY2Ml0gW0dlbjkzXVtQNDBdW1VNT0xZRV0gR2lvbmVlIGJsYWNrbGlzdCBmZWF0dXJlIC0gTVJTCisgKiBbTVJTXSBHaW9uZWUgQmxhY2tsaXN0IGZlYXR1cmUgcGhhc2UtaW4KKyAqCisgKiAwMSAyMyAyMDE4IG11bmVlc3dhcmFpYWguZGFtYQorICogW01PTFkwMDMwMjU4Ml0gW0dlbjkzXVtIdWF3ZWldW0NIUl0gSW5kZXggOCwgSW5kZXggOSAtIGhlYWRlci8gaW50ZXJmYWNlIGZpbGVzCisgKiAuCisgKgorICogMTAgMzEgMjAxNyBhbWl0LnNoYXJtYQorICogW01PTFkwMDI4NTU0N10gW1AxNzA1MTgtMDQ1ODVdYWlycGxhbmUgbW9kZSBzZWFyY2ggbmV0d29yayB0aW1lcyBmYWlsCisgKiAuCisgKgorICogMDcgMDYgMjAxNyBtb3J0b24ubGluCisgKiBbTU9MWTAwMjYxMzA1XSBbR2VuOTNdIEI3MSBkZXZlbG9wbWVudAorICogTVJTIGFuZCBOVlJBTSBwaGFzZSBpbgorICoKKyAqIDA0IDI2IDIwMTcgcnVqaW5nLnpoYW8KKyAqIFtNT0xZMDAyNDM3NjddIFtUREQgR0FTXVJBQ0ggZmFpbCBiYXIgY2VsbCBmZWF0dXJlIHBhdGNoIGJhY2sgVU1PTFlBCisgKiAuCisgKgorICogMDQgMjUgMjAxNyBtdS5kaW5nCisgKiBbTU9MWTAwMjQ0MzU2XSBbNjI5M11bR2VtaW5pXVtUK1ddIFBoYXNlIDI6IFQrVyBDaGFuZ2VzIENoZWNrIGluCisgKiAJCisgKiAJLgorICoKKyAqIDExIDEwIDIwMTYgdmVuZF9tdGJfYXJpY2VudF8wNQorICogW01PTFkwMDIxMjMxOV0gW01UNjI5M10gQ2hhbm5lbCBMb2NrIGZlYXR1cmUgcG9ydGluZyBhbmQgZW5oYW5jZW1lbnQgLU1SUworICogCQorICogCS4KKyAqCisgKiAxMCAyNCAyMDE2IG1lbmdoYXUud3UKKyAqIFtNT0xZMDAyMDg3NjhdIFtNVDYyOTNdIFtCNjZdIEJhbmQ2NiBwb3J0aW5nIChFUlJDIHBhcnQpCisgKiBjb21wbGVtZW50IG9mIENMIDMwMDg1NTUKKyAqCisgKiAwNiAyNCAyMDE2IGNvb2tpZS5jaGVuCisgKiBbTU9MWTAwMTg1OTAxXSBVTU9MWUEgZXJyYyByZWxldmFudCBsYXRlc3QgY29kZSBzeW5jIGZyb20gVU1PTFkKKyAqIC4KKyAqCisgKiAxMiAxMCAyMDE1IHRpbS5odWFuZworICogW01PTFkwMDE1MDE1N10gVlpfUkVRX0xURURBVEFfMzg0OTggKE1UNjI5MSBWZXJpem9uIEp1bi0yMDE1IGJhc2VsaW5lKQorICogLgorICoKKyAqIDEwIDA3IDIwMTUgdGl0aS53dQorICogW01PTFkwMDE0MTc4Nl0gW01UNjc1NV1bU1JMVEVdW0wrQ10gU3VwcG9ydCBjb25uZWN0aXZpdHkgb2YgQzJLIG9uIGR1YWwgU0lNCisgKiAuCisgKgorICogMDkgMTggMjAxNSBtaW5nLmxlZQorICogW01PTFkwMDE0MDcwN10gW0dBU11bUExNTiBzZWFyY2ggZW5oYW5jZW1lbnQgSUldIFNlYXJjaCBpbmZvIHJldXNlCisgKiAuCisgKgorICogMDggMDYgMjAxNSBjbGF1ZC5saQorICogW01PTFkwMDEyNTYxMl0gW1BTMV1bOTFwbHVzXSBjb3JlIGNoYW5nZSBtb2RpZmljYXRpb24KKyAqIAkxLiBmcm9tIGwxY29yZV9pc190ZXN0X3NpbSB0byBpc190ZXN0X3NpbS4KKyAqIAkyLiBmcm9tIGwxY29yZV9xdWVyeV9wc19zaW1fdHlwZSB0byBzaW1fcXVlcnlfdHlwZQorICogCTMuIHJlbW92ZSBzaGFyZWQgdmFyaWFibGUgImwxY29yZV9zaW1fdHlwZV9pbmZvIiBhbmQgICJsMWNvcmVfaXNfdGVzdF9zaW1faW5mb19yZWFkeSIKKyAqIAk0LiByZW1vdmUgbXJzX3VwZGF0ZV9sMWNvcmVfU0lNX3R5cGUKKyAqIAk1LiBmcm9tIGwxY29yZV9pc19wc19jb25mX3h0YV9tb2RlKCkgdG8gaXNfcHNfY29uZl90ZXN0X3h0YV9tb2RlKCkKKyAqIAk2LiBmcm9tIGwxY29yZV9xdWVyeV9wc19jb25mX3Rlc3RfbW9kZSgpIHRvIHF1ZXJ5X3BzX2NvbmZfdGVzdF9tb2RlKCkKKyAqIAk3LiBmcm9tIGwxY29yZV9xdWVyeV9wc19jb25mX3Rlc3RfcHJvZmlsZV9zZXR0aW5nKCkgdG8gcXVlcnlfcHNfY29uZl90ZXN0X3Byb2ZpbGVfc2V0dGluZygpCisgKiAJOC4gcmVtb3ZlIHNoYXJlZCB2YXJpYWJsZTogImwxY29yZV9wc19jb25mX3Rlc3RfeHRhX21vZGUiLCAibDFjb3JlX2lzX3Rlc3RfbW9kZV9pbmZvX3JlYWR5IiwgImwxY29yZV9wc19jb25mX3Rlc3RfcHJvZmlsZV9zZXR0aW5nIiwgImwxY29yZV9wc19jb25mX3Rlc3RfbW9kZSIKKyAqIAk5LiByZW1vdmUgbXJzX3VwZGF0ZV9sMWNvcmVfdGVzdF9tb2RlKCkKKyAqIAkxMC4gcmVtb3ZlIGwxY29yZV9pc19tbWRjX21vZGUoKQorICoKKyAqIDA4IDA2IDIwMTUgY2xhdWQubGkKKyAqIFtNT0xZMDAxMjU2MTJdIFtQUzFdWzkxcGx1c10gY29yZSBjaGFuZ2UgbW9kaWZpY2F0aW9uCisgKiAJMS4gcmVtb3ZlIGwxY29yZV9pc192c2ltKCkgOiBjb3VsZCB1c2UgTDQvc2ltJ3MgQVBJOiBpc192c2ltX29uKCkKKyAqIAkyLiByZW1vdmUgbDFjb3JlX3Rlc3RfbW9kZV9jb25zaWRlcl9zaW0oKSA6IGNvdWxkIHVzZSBMNC9zaW0ncyBBUEk6IHRlc3RfbW9kZV9jb25zaWRlcl9zaW0oKQorICoKKyAqIDA3IDE0IDIwMTUgYnJ1Y2UubGkKKyAqIFtNT0xZMDAxMjgyNDZdIFtlQ1NGQl1MVSBSZWR1Y3Rpb24gRW5oYW5jZW1lbnQKKyAqIEltcGxlbWVudGVkIDIgZW5oYW5jZW1lbnRzOgorICogMS4gSWYgdGhlcmUgaXMgc3VjY2Vzc2Z1bCBjYWxsIG9uIHRoZSBibGFjayBjZWxsLCBhZGQgaXQgdG8gYmxlYWNoIGxpc3Q7CisgKiAgICB0aGUgcHJpb3JpdHkgb3JkZXIgaXM6IHdoaXRlIGxpc3QgPiBibGVhY2ggbGlzdCA+IGdyYXkgbGlzdCA+IGJsYWNrIGxpc3Q7CisgKiAyLiBJZiB0aGUgZGVjb2RlZCBCU0lDIG9mIHdoaXRlIGNlbGwgb3IgYmxlYWNoIGNlbGwgZG9lcyBub3QgbWF0Y2ggdGhlIHN0b3JlZCwKKyAqICAgIGFkZCBpdCB0byByZXRyeSBsaXN0OyB0aGUgcmV0cnkgbGlzdCB3b3VsZCBiZSB0cmllZCBhZnRlciB3aGl0ZSBsaXN0IGFuZAorICogICAgIGJsZWFjaCBsaXN0IGhhdmUgYmVlbiBkb25lLgorICoKKyAqIDA2IDIxIDIwMTUgYWxhbi5wZW5nCisgKiBbTU9MWTAwMTIyMDQ4XSBbNjc5NV0gUmVxdWVzdCBuZXcgZmVhdHVyZSB0byBpbXByb3ZlIHJlZ2lzdHJhdGlvbiB0aW1lIG9mIHJvYW1pbmcgY2FzZQorICogX01SUyBwYXJ0LgorICoKKyAqIDA1IDI5IDIwMTUgc2hpbi5jaGVuCisgKiBbTU9MWTAwMTE1NjE3XSBbNjI5MV0gRHluYW1pYyBTSU0gc3dpdGNoIHdpdGhvdXQgbW9kZW0gcmVzZXQKKyAqIAkuCisgKgorICogMDUgMTQgMjAxNSBoZW5yeS5sYWkKKyAqIFtNT0xZMDAxMTM2MzBdIFtNVDYyOTFdIEFkZCBJU19URVNUX1NJTSBhbmQgSVNfVlNJTSBmb3IgbDFjb3JlCisgKiAuCisgKgorICogMDQgMjAgMjAxNSBzaGluLmNoZW4KKyAqIFtNT0xZMDAwODc4ODJdIFtVbml2ZXJzYWwgQmluXSBNUlMgZ2VuZXJhbCBkZXZlbG9wZW1lbnQKKyAqIC5SZW1vdmUgdGFicworICoKKyAqIDAyIDE2IDIwMTUgZG91Zy5zaGloCisgKiBbTU9MWTAwMDkxNDYzXSBbTVQ2MjkxXSBFUlJDIFJDTS9NUlMgZGV2ZWxvcG1lbnQKKyAqIE1PTFkgQ1IgQ29kZSBTeW5jIHRvIFVNT0xZIChPQSBkb21haW4pOgorICogW01PTFkwMDA3OTEzMV0gQVQmVCByZXF1aXJlbWVudCBjb25uZWN0aW9uIHJlamVjdAorICogW01PTFkwMDA4MzQyN10gW0VSUkNdW01PQl0gVU1UUyBwcm94aW1pdHkgaW5kaWNhdGlvbgorICogW01PTFkwMDA4NDMyNF0gW1JPSENdIE1vZGVtIGxvYWQgd2l0aCBjb25maWd1cmFibGUgY29tcGlsZSBvcHRpb25zOiBwcm9maWxlIHN1cHBvcnQgYW5kIGNvbnRleHQgbnVtYmVyCisgKiBbTU9MWTAwMDg0NDE2XSBbZUNTRkJdTFUgUmVkdWN0aW9uIGZlYXR1cmUKKyAqIFtNT0xZMDAwOTE5NjddIE1lcmdlIEMySyBJUkFUIGNvZGUgKENUIHNwZWNpZmljIFVFIGNhcCBTQlAgc2V0dGluZykuCisgKgorICogMDEgMjAgMjAxNSBoZW5yeS5sYWkKKyAqIFtNT0xZMDAwODc2NjhdIFtNVDYyOTFdW1VCSU5dIENoZWNrIGluIEVSUkMvQ0VMIG1vZGlmaWNhdGlvbnMKKyAqIAkuCisgKgorICogMTIgMTUgMjAxNCBoZW5yeS5sYWkKKyAqIFtNT0xZMDAwODc2NjhdIFtNVDYyOTFdW1VCSU5dIENoZWNrIGluIEVSUkMvQ0VMIG1vZGlmaWNhdGlvbnMKKyAqIC4KKyAqCisgKiAxMSAxNyAyMDE0IHNoaW4uY2hlbgorICogW01PTFkwMDA4MTE1NF0gW0FUVF9UTU9fREVWXSBBVCZUIHJlcXVpcmVtZW50IG1lcmdlIGJhY2sKKyAqIC4KKyAqCisgKiAxMSAxNCAyMDE0IGhlbnJ5LmxhaQorICogW01PTFkwMDA3OTA3Ml0gW01UNjI5MV0gQ2hhbmdlIEVBUkZDTiBmcm9tIGthbF91aW50MTYgdG8ga2FsX3VpbnQzMiBmb3IgQ0VMIHBhcnQKKyAqIAkuCisgKgorICogMTEgMTIgMjAxNCBjb29wZXIubGluCisgKiBbTU9MWTAwMDY4NzEwXSBbTVQ2MjkxX0RFVl0gU3luYyBNT0xZIHRvIE1UNjI5MV9ERVYKKyAqIE1lcmdlIE1UNjI5MV9ERVYgY29kZSB0byBVTU9MWSB0cnVuay4KKyAqCisgKiAxMSAxMiAyMDE0IGhlbnJ5LmxhaQorICogW01PTFkwMDA3OTA3MV0gW01UNjI5MV1bVTRHXSBMb3cgUG93ZXIgTW9kaWZpY2F0aW9uIGZvciBDRUwgUGFnaW5nCisgKiAuCisgKgorICogMDUgMjMgMjAxNCBhZGVsaW5lLmNoYW5nCisgKiBbTU9MWTAwMDY2MjE0XSBbU0JQXSA0RyBiYWNrZ3JvdW5kIHNlYXJjaAorICogLgorICoKKyAqIDEwIDI5IDIwMTMgYWRlbGluZS5jaGFuZworICogW01PTFkwMDA0MjQ3MV0gW01UNjI5MF0gQ1NGQl9lbmhhbmNlbWVudHMgaW5qZWN0IG1lc3NhZ2UgZXh0ZW5zaW9uCisgKiAuCisgKgorICogMTAgMjEgMjAxMyBhZGVsaW5lLmNoYW5nCisgKiBbTU9MWTAwMDQyNDcxXSBbTVQ2MjkwXSBDU0ZCX2VuaGFuY2VtZW50cyBpbmplY3QgbWVzc2FnZSBleHRlbnNpb24KKyAqIC4KKyAqCisgKiAxMCAxOCAyMDEzIHBlbmcucGFuCisgKiBbTU9MWTAwMDQxNTk1XSBbTVQ2MjkwRTFdW01NRFNfRENdIE1NREMgZmVhdHVyZSBwYXRjaCBiYWNrIHRvIE1PTFkgdHJ1bmsKKyAqIE1SUyBzdXBwb3J0IE1NREMuCisgKgorICogMDggMzAgMjAxMyBhZGVsaW5lLmNoYW5nCisgKiBbTU9MWTAwMDMwMTg3XSBbTVQ2MjkwXSBDU0ZCIEVuaGFuY2VtZW50IEltcGxlbWVudGF0aW9uIGZvciBBdXRvbm9tb3VzIEZhc3QgUmV0dXJuCisgKiBbTVQ2MjkwXSBDU0ZCIEVuaGFuY2VtZW50IEltcGxlbWVudGF0aW9uIGZvciBBdXRvbm9tb3VzIEZhc3QgUmV0dXJuIC0gYWRkIG5ldyBNUlMgQVBJLgorICoKKyAqIDA4IDI2IDIwMTMgYWRlbGluZS5jaGFuZworICogW01PTFkwMDAzMDE4N10gW01UNjI5MF0gQ1NGQiBFbmhhbmNlbWVudCBJbXBsZW1lbnRhdGlvbiBmb3IgQXV0b25vbW91cyBGYXN0IFJldHVybgorICogW01UNjI5MF0gQ1NGQiBFbmhhbmNlbWVudCBJbXBsZW1lbnRhdGlvbiBmb3IgQXV0b25vbW91cyBGYXN0IFJldHVybiAtIGFkZCBTSU0gaW5kZXguCisgKgorICogMDcgMTcgMjAxMyBhZGVsaW5lLmNoYW5nCisgKiBbTU9MWTAwMDMwMTg3XSBbTVQ2MjkwXSBDU0ZCIEVuaGFuY2VtZW50IEltcGxlbWVudGF0aW9uIGZvciBBdXRvbm9tb3VzIEZhc3QgUmV0dXJuCisgKiAuCisgKgorICogMDcgMTcgMjAxMyBhZGVsaW5lLmNoYW5nCisgKiBbTU9MWTAwMDMwMTg3XSBbTVQ2MjkwXSBDU0ZCIEVuaGFuY2VtZW50IEltcGxlbWVudGF0aW9uIGZvciBBdXRvbm9tb3VzIEZhc3QgUmV0dXJuCisgKiAuCisgKgorICogMDMgMTggMjAxMyBqdXN0aW4ubGkKKyAqIFtNT0xZMDAwMDkyMjJdIFtHQVNdW011bHRpLU1vZGUgRGV2ZWxvcG1lbnRdIE1lcmdlIEdBUyBtdWx0aS1tb2RlIGRldmVsb3BtZW50IHRvIE1PTFkKKyAqIC4KKyAqCisgKiAwMiAwNSAyMDEzIHllbmNoaWgueWFuZworICogW01PTFkwMDAwOTE4Nl0gW1NJQkUvVVNJTUUvREJNRV0gTXVsdGktTW9kZSBDQnIgbWVyZ2UgdG8gTU9MWQorICogLgorICoKKyAqIDAxIDIyIDIwMTMgZGF2aWQubml1CisgKiBbTU9MWTAwMDA5MjA1XSBbTVJTXSBDb2RlIGNoZWNrZWQtaW4gZm9yIE1PTFkgYnJhbmNoCisgKiAuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9NUlNfVVRJTElUWV9ICisjZGVmaW5lIF9NUlNfVVRJTElUWV9ICisKKyNpbmNsdWRlICJtcnNfYXNfZW51bXMuaCIKKyNpbmNsdWRlICJtcnNfYXNfc3RydWN0LmgiCisjaW5jbHVkZSAibnZyYW1fZWRpdG9yX2RhdGFfaXRlbS5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAicHNfZW1fZW51bS5oIgorI2luY2x1ZGUgInNpbV9jb21tb25fZW51bXMuaCIKKyNpbmNsdWRlICJnbG9iYWxfdHlwZS5oIgorI2luY2x1ZGUgImJpdHN0cmVhbS5oIgorI2luY2x1ZGUgIm1yc19hc19pbnRlcl9jb3JlX3N0cnVjdC5oIgorI2luY2x1ZGUgImVycmNfbnZyYW1fZWRpdG9yLmgiCisjaW5jbHVkZSAiYXNiYW5kX252cmFtX2VkaXRvci5oIgorI2luY2x1ZGUgInBzX2ludGVyX2NvcmVfcHVibGljLmgiCisKKyNpZmRlZiBfX0NIUl9BQl9JTkZPX18KKyNpbmNsdWRlICJuYnJfcHVibGljX3N0cnVjdC5oIgorI2VuZGlmIC8qIF9fQ0hSX0FCX0lORk9fXyAqLworCisKKy8qIEdMT0JBTCBWQVJJQUJMRSBERUNMQVJBVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIFVOSVRfVEVTVAorZXh0ZXJuIGthbF9ib29sIG1vZGlzX0lUX21vZGU7CisjZW5kaWYKKworLyogIFR5cGUgRGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBNRDNfSU5WQUxJRCAgICAweDAwCisjZGVmaW5lIFNJTTFfTUQzX1ZBTElEIDB4MDEKKyNkZWZpbmUgU0lNMl9NRDNfVkFMSUQgMHgwMgorI2RlZmluZSBTSU0zX01EM19WQUxJRCAweDA0CisjZGVmaW5lIFNJTTRfTUQzX1ZBTElEIDB4MDgKKyNkZWZpbmUgSU5WQUxJRF9QU19JRFggMHhGRgorCisjZGVmaW5lIFNCUF9EQVRBX0FGUl9UT180R19GT0xMT1dfTlZSQU0gMHgwMQorI2RlZmluZSBTQlBfREFUQV9BRlJfVE9fNEdfRU5GT1JDRV9PTiAgIDB4MDIKKyNkZWZpbmUgU0JQX0RBVEFfQUZSX1RPXzRHX0VORk9SQ0VfT0ZGICAweDA0CisKKyNkZWZpbmUgU0JQX0RBVEFfQUZSX1RPXzVHX0ZPTExPV19OVlJBTSAweDAxCisjZGVmaW5lIFNCUF9EQVRBX0FGUl9UT181R19FTkZPUkNFX09OICAgMHgwMgorI2RlZmluZSBTQlBfREFUQV9BRlJfVE9fNUdfRU5GT1JDRV9PRkYgIDB4MDQKKworLyogUFVCTElDIEZVTkNUSU9OIFBST1RPVFlQRVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gdm9pZCBtcnNfc2VuZF9tc2coa2FsX3VpbnQzMiBkZXN0X21vZF9pZCwgc2FwX3R5cGUgc2FwX2lkLCBtc2dfdHlwZSBtc2dfaWQsIGxvY2FsX3BhcmFfc3RydWN0ICpsb2NhbF9wYXJhX3B0ciwgcGVlcl9idWZmX3N0cnVjdCAqcGVlcl9idWZmX3B0cik7CisKKyNpZiBkZWZpbmVkKF9fM0dfQ1NHX1NVUFBPUlRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykKK2V4dGVybiB2b2lkIE5QU0lfbmV3QWNzZ2xGcm9tVVNJTShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQ4IGFjc2dsUmVjTnVtLCBrYWxfdWludDE2IGFjc2dsU2l6ZVBlclJlYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGthbF91aW50OCogYWNzZ2xEYXRhLCBjc2dfd2hpdGVfbGlzdF91cGRhdGVfY2F1c2UgdXBkYXRlX2NhdXNlLCBrYWxfYm9vbCBpc192YWxpZCk7CisKK2V4dGVybiB2b2lkIE5QU0lfbmV3T2NzZ2xGcm9tVVNJTShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQ4IG9jc2dsUmVjTnVtLCBrYWxfdWludDE2IG9jc2dhbFNpemVQZXJSZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBrYWxfdWludDgqICAgb2NzZ2xEYXRhLCBjc2dfd2hpdGVfbGlzdF91cGRhdGVfY2F1c2UgdXBkYXRlX2NhdXNlLCBrYWxfYm9vbCBpc192YWxpZCk7CisKK2V4dGVybiB3aGl0ZV9saXN0X3VwZGF0ZV90eXBlIE5QU0lfdXBkYXRlQ3NnV2hpdGVMaXN0KE1SU19TSU1fSU5ERVggc2ltX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUlNfUkFUX01PREVfVFlQRSAgICByYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzZ191cGRhdGVfdHlwZV9lbnVtIGNzZ191cGRhdGVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXJzX3BsbW5faWQqICAgICAgICAgcGxtbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQzMiAgICAgICAgICAgY3NnX2lkKTsKKworZXh0ZXJuIGthbF91aW50OCogTlBTSV9nZXRFbmNvZGVkQWxsb3dlZENzZ0xpc3QoTVJTX1NJTV9JTkRFWCAgIHNpbV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4KiByZWNOdW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MTYgKnNpemVQZXJSZWMpOworCitleHRlcm4gdm9pZCBOUFNJX2RlbGV0ZUNTR0xpc3QoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCitleHRlcm4ga2FsX3VpbnQ4IE5QU0lfZ2V0VmFsaWRDc2dQbG1uKE1SU19TSU1fSU5ERVggICAgIHNpbV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcnNfcGxtbl9pZCoqICAgIHBsbW5zKTsKKworZXh0ZXJuIGNzZ190eXBlX2VudW0gTlBTSV9jaGVja0NzZ1R5cGUoTVJTX1NJTV9JTkRFWCAgICBzaW1faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1yc19wbG1uX2lkICpwbG1uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDMyICBjc2dfaWQpOworCitrYWxfYm9vbCBOUFNJX2lzQ3NnTGlzdEVtcHR5KE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKwora2FsX3VpbnQxNiBOUFNJX2NoZWNrQ3NnTnVtYmVyUGVyUGxtbihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgbXJzX3BsbW5faWQgKnBsbW5faWQpOworCitleHRlcm4ga2FsX2Jvb2wgbXJzX3dyaXRlX25leHRfY3NnX3JlY29yZF90b19VU0lNKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworZXh0ZXJuIHZvaWQgbXJzX3dyaXRlX3VlX2Jhc2VkX2NzZ190b19udnJhbShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKKworZXh0ZXJuIGthbF9ib29sIG1yc193cml0ZV9jc2dfdG9fVVNJTShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKK2V4dGVybiB2b2lkIG1yc19yZWFkX3VlX2Jhc2VkX252KE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworZXh0ZXJuIHZvaWQgbXJzX2NzZ19yZWFkX252cmFtX2NuZl9oYW5kbGVyKGthbF91aW50OCogZGF0YSwga2FsX3VpbnQxNiBsZW4pOworCisKKyNlbmRpZiAvKiAjaWYgZGVmaW5lZChfX0NTR19TVVBQT1JUX18pIHx8IGRlZmluZWQoX19MVEVfUkFUX18pICovCisKK2V4dGVybiBrYWxfYm9vbCBNUlNfb2NjdXB5X2xsYShNUlNfU0lNX0lOREVYICAgIHNpbV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUlNfUkFUX01PREVfVFlQRSAgICByYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVJTX09DQ1VQWV9QUk9DRURVUkUgcHJvY2VkdXJlKTsKKworZXh0ZXJuIHZvaWQgTVJTX3JlbGVhc2VfbGxhKE1SU19TSU1fSU5ERVggICBzaW1faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICBNUlNfUkFUX01PREVfVFlQRSAgcmF0KTsKKworZXh0ZXJuIGthbF9ib29sIE1SU190ZXN0X29jY3VweV9sbGEoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUlNfT0NDVVBZX1BST0NFRFVSRSBwcm9jZWR1cmUpOworCitleHRlcm4gTVJTX1JBVF9NT0RFX1RZUEUgTVJTX2dldF9sbGFfb2NjdXB5X3JhdChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKK2V4dGVybiBNUlNfU0lNX0lOREVYIG1yc19nZXRfY3VycmVudF9zaW1faW5kZXgodm9pZCk7CisKK2V4dGVybiB2b2lkIG1yc19hZnJfcmVzZXRfYWZyX2xpc3QoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCitleHRlcm4gdm9pZCBtcnNfYWZyX2luc2VydF9mcmVxKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBFQVJGQ04gZWFyZmNuKTsKKworZXh0ZXJuIHZvaWQgbXJzX2Fmcl9nZXRfYWZyX2xpc3QoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19hZnJfbWFpbl9zdHJ1Y3QgKmFmcl9saXN0X3B0cik7CisKK3ZvaWQgbXJzX3NldF9jc2ZiX2VuaGFuY2VtZW50X3N0YXR1cyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgY3NmYl9lbmhhbmNlbWVudF9lbnVtIGVuaGFuY2VtZW50X2l0ZW0sIGthbF9ib29sIGFjdGl2YXRlKTsKKwordm9pZCBtcnNfc2V0X2NzZmJfZW5oYW5jZW1lbnRfc3RhdHVzX2luX3Rlc3RfbW9kZShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgY3NmYl9lbmhhbmNlbWVudF9lbnVtIGVuaGFuY2VtZW50X2l0ZW0sIGthbF9ib29sIGFjdGl2YXRlKTsKKwora2FsX2Jvb2wgbXJzX2dldF9jc2ZiX2VuaGFuY2VtZW50X3N0YXR1cyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgY3NmYl9lbmhhbmNlbWVudF9lbnVtIGVuaGFuY2VtZW50X2l0ZW0pOworCitleHRlcm4gdm9pZCBtcnNfYWZyX3NldF9jc2ZiX3N0YXR1cyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX2Jvb2wgY3NmYl9vbmdvaW5nKTsKKworZXh0ZXJuIGthbF9ib29sIG1yc19hZnJfZ2V0X2NzZmJfc3RhdHVzKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworZXh0ZXJuIHZvaWQgbXJzX3NldF9iYWNrZ3JvdW5kX3NlYXJjaF9zdGF0dXNfaW5fdGVzdF9tb2RlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBiYWNrZ3JvdW5kX3NlYXJjaF9lbnVtIGJhY2tncm91bmRfc2VhcmNoX3R5cGUsIGthbF9ib29sIGFjdGl2YXRlKTsKKworZXh0ZXJuIHZvaWQgbXJzX3NldF9sYXRlc3RfY2FtcF9vbl9yYXQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIE1SU19SQVRfTU9ERV9UWVBFIHJhdCk7CisKK2V4dGVybiB2b2lkIG1yc19jbGVhcl9sYXRlc3RfY2FtcF9vbl9yYXQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MzIgcmF0X2JtcCk7CisKK2V4dGVybiBNUlNfUkFUX01PREVfVFlQRSBtcnNfZ2V0X2xhdGVzdF9jYW1wX29uX3JhdChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQzMiByYXRfdHlwZV9iaXRtYXNrKTsKKworZXh0ZXJuIGthbF9ib29sIG1yc19nZXRfYmFja2dyb3VuZF9zZWFyY2hfc3RhdHVzKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBiYWNrZ3JvdW5kX3NlYXJjaF9lbnVtIGJhY2tncm91bmRfc2VhcmNoX3R5cGUpOworCitleHRlcm4gdm9pZCBtcnNfZWNzZmJfYWRkXzJnX2Fzc29jaWF0aW9uKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDMyIGVhc19jZWxsX2lkLCBtcnNfZ2FzX2NlbGxfaW5mX3N0cnVjdCAqcF9nYXNfY2VsbF9pbmYpOworCitleHRlcm4gdm9pZCBtcnNfZWNzZmJfc2V0XzJnX2Fzc29jaWF0aW9uX2NhbGxfZmxhZyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQzMiBlYXNfY2VsbF9pZCwgbXJzX2dhc19jZWxsX2luZl9zdHJ1Y3QgKnBfZ2FzX2NlbGxfaW5mKTsKKworZXh0ZXJuIGthbF91aW50OCBtcnNfZWNzZmJfZ2V0XzJnX2xhaShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQzMiBlYXNfY2VsbF9pZCwgbXJzX2dhc19jZWxsX2luZl9zdHJ1Y3QgKnBfZ2FzX2NlbGxfaW5mKTsKKworZXh0ZXJuIGthbF91aW50OCBtcnNfZWNzZmJfZ2V0X3NhbWVfbGFpXzJnKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBtcnNfbGFpX3N0cnVjdCAqbGFpLCBrYWxfdWludDMyIHZhbGlkX2R1cmF0aW9uLCBtcnNfZ2FzX2NlbGxfaW5mX3N0cnVjdCAqcF9nYXNfY2VsbCk7CisKK2V4dGVybiB2b2lkIG1yc19lY3NmYl9yZXNldF9hc3NvY2lhdGlvbl9pbmZvKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworZXh0ZXJuIHZvaWQgbXJzX2Zhc3Rfcm9hbWluZ19zZXRfbWNjKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBtcnNfbmFzX21jY19zdHJ1Y3QgKm1yc19uYXNfbWNjKTsKKworZXh0ZXJuIHZvaWQgbXJzX2Zhc3Rfcm9hbWluZ19nZXRfbWNjKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBtcnNfYXNfbWNjX3N0cnVjdCAqbXJzX2FzX21jY19wdHIpOworLyogdXNlZCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyA0RyBjZWxsIGlkIHdoZW4gQ1NGQiB0byAyRyBieSBQTE1OIHNlYXJjaCBzY2VuYXJpbyAqLworZXh0ZXJuIHZvaWQgbXJzX2Vjc2ZiX3NldF80Z19jZWxsX2luZm8oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MzIgZWFzX2NlbGxfaWQpOworZXh0ZXJuIGthbF91aW50MzIgbXJzX2Vjc2ZiX2dldF80Z19jZWxsX2luZm8oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCitleHRlcm4ga2FsX3VpbnQ4IG1yc19lY3NmYl9nZXRfY3VyXzJnX2NlbGxfYXNzb2NpYXRpb24oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MzIgKmVhc19jZWxsX2lkLCBtcnNfZ2FzX2NlbGxfaW5mX3N0cnVjdCAqZ2FzX2NlbGxfaW5mKTsgCisvKiBGYXN0IG1vZGUgc3dpdGNoLiAqLworZXh0ZXJuIHZvaWQgbXJzX2dhc19mYXN0X21vZGVfc3dpdGNoX3NldF9zdGF0dXMoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19nYXNfZmFzdF9tb2RlX3N3aXRjaF9zdGF0dXNfZW51bSBzdGF0dXMpOworZXh0ZXJuIGthbF9ib29sIG1yc19nYXNfZmFzdF9tb2RlX3N3aXRjaF9jaGVja19hbGxvd2VkKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBjb25zdCBrYWxfdWludDMyIG51bV9wbG1uLCBwbG1uX2lkX3N0cnVjdCogcGxtbl9pZF9wdHIpOworZXh0ZXJuIHZvaWQgbXJzX2dhc19mYXN0X21vZGVfc3dpdGNoX3NldF9wbG1uX2lkKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBwbG1uX2lkX3N0cnVjdCogcGxtbik7CitleHRlcm4gdm9pZCBtcnNfZ2FzX2Zhc3RfbW9kZV9zd2l0Y2hfc2V0X2FyZmNuKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDE2IGFyZmNuKTsKK2V4dGVybiB2b2lkIG1yc19nYXNfZmFzdF9tb2RlX3N3aXRjaF9zZXRfYnNpYyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQ4IGJzaWMpOworZXh0ZXJuIGthbF91aW50MTYgbXJzX2dhc19mYXN0X21vZGVfc3dpdGNoX2dldF9hcmZjbihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitleHRlcm4ga2FsX3VpbnQ4IG1yc19nYXNfZmFzdF9tb2RlX3N3aXRjaF9nZXRfYnNpYyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitleHRlcm4ga2FsX3VpbnQ4IG1yc19nYXNfZmFzdF9tb2RlX3N3aXRjaF9nZXRfc2lfYml0bWFwKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKK2V4dGVybiBrYWxfdWludDgqIG1yc19nYXNfZmFzdF9tb2RlX3N3aXRjaF9nZXRfc2lfcmF3X2RhdGEoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCBzaV90eXBlKTsKK2V4dGVybiB2b2lkIG1yc19nYXNfZmFzdF9tb2RlX3N3aXRjaF9zdG9yZV9lc3NlbnRpYWxfc2koTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGJpdF9zdHJlYW0qIGJpdF9zdHJlYW1fcHRyLCBrYWxfdWludDggc2lfYml0bWFwX3Bvcyk7CitleHRlcm4gdm9pZCBtcnNfZ2FzX2Zhc3RfbW9kZV9zd2l0Y2hfY2xlYW5fc3RvcmVkX2Vzc2VudGlhbF9zaShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQ4IHNpX2JpdG1hcF9wb3MpOworLyogRmFzdCBtb2RlIHN3aXRjaC4gKi8KKworLyogU3VwcG9ydCBWelc6IFZaX1JFUV9MVEVEQVRBXzM4NDk4IChNVDYyOTEgVmVyaXpvbiBKdW4tMjAxNSBiYXNlbGluZSkuICovCitleHRlcm4gdm9pZCBtcnNfbmFzX3NldF9yb2FtaW5nX3N0YXR1cyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX2Jvb2wgaXNfcm9hbWluZyk7CitleHRlcm4ga2FsX2Jvb2wgbXJzX25hc19nZXRfcm9hbWluZ19zdGF0dXMoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworLyogU3VwcG9ydCBWelc6IFZaX1JFUV9MVEVEQVRBXzM4NDk4IChNVDYyOTEgVmVyaXpvbiBKdW4tMjAxNSBiYXNlbGluZSkuICovCisKKy8vI2lmZGVmIF9fTFRFX1IxMV9fCit2b2lkIG1yc19sdGVhX3Nvbl9zZXRfcmVlc3RfcHJvY19zdGF0dXMoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF9ib29sIGx0ZV9yZWVzdF9pcl9zZWFyY2gpOwordm9pZCBtcnNfbHRlYV9zb25fc2V0X3NlbGVjdGVkX2NlbGwoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MzIgc2VsZWN0ZWRfYXJmY24sIGthbF91aW50MTYgc2VsZWN0ZWRfcGNpKTsKK3ZvaWQgbXJzX2x0ZWFfc29uX3Jlc2V0X3NlbGVjdGVkX2NlbGwoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOwora2FsX2Jvb2wgbXJzX2x0ZWFfc29uX2dldF9zZWxlY3RlZF9jZWxsKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDMyICpzZWxlY3RlZF9hcmZjbl9wLCBrYWxfdWludDE2ICpzZWxlY3RlZF9wY2lfcCk7CisvLyNlbmRpZgorCisvL0wxIGNhbGwgYmFjayBmdW5jdGlvbgorZXh0ZXJuIGthbF91aW50OCBtcnNfbDFfcXVlcnlfcHNfYzJrX3NpbV9jb25maWcoKTsKKworLyogQ29tbW9uIFRGTyBBUEkgZnVuY3Rpb25zIGZvciBhbGwgUkFUcyAqLwordm9pZCBtcnNfdGZvX2NlbGxfbGlzdF9jbGVhcihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgTVJTX1JBVF9NT0RFX1RZUEUgcmF0X3R5cGUpOworCisvKiBFQVMgc3BlY2lmaWMgVEZPIEFQSSBmdW5jdGlvbnMgKi8KK3ZvaWQgbXJzX3Rmb19jZWxsX2xpc3RfYWRkX2Vhc19jZWxsKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBFQVJGQ04gZWFyZmNuLCBrYWxfdWludDE2IHBjaSwga2FsX3VpbnQxNiB2YWxpZGl0eV90aW1lLCBrYWxfdWludDggb2Zmc2V0KTsKK2thbF91aW50OCBtcnNfdGZvX2NlbGxfbGlzdF9lYXNfY2VsbF9vZmZzZXRfZ2V0KE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBFQVJGQ04gZWFyZmNuLCBrYWxfdWludDE2IHBjaSk7CisKKyNpZmRlZiBfX0NIQU5ORUxfTE9DS19fCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorRGVzY3JpcHRpb246CisgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHdyaXRlIGNoYW5uZWwgbG9jayBpbmZvcm1hdGlvbiB0byBNUlMuCisgICAgICAgIAorUGFyYW1ldGVyczoKKyAgICBjaF9sb2NrX2luZm86IFBvaW50ZXIgdG8gY2hhbm5lbCBsb2NrIGluZm9ybWF0aW9uIHRvIGJlIHN0b3JlZAorICAgIAorUmV0dXJuIFZhbHVlOiBOb25lICAgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIG1yc19jaF9sb2NrX2luZm9fc2V0KCBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgY29uc3QgbXJzX2NoX2xvY2tfaW5mb19zdHJ1Y3QqIHBfY2hfbG9ja19pbmZvKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0Rlc2NyaXB0aW9uOgorICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZWFkIGNoYW5uZWwgbG9jayBpbmZvcm1hdGlvbiBmcm9tIE1SUy4KKyAgICAgICAgCitQYXJhbWV0ZXJzOgorICAgIGNoX2xvY2tfaW5mbzogUG9pbnRlciB0byB3aGVyZSBjaGFubmVsIGxvY2sgaW5mb3JtYXRpb24gc2hhbGwgYmUgY29waWVkCisgICAgCitSZXR1cm4gVmFsdWU6IE5vbmUgICAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBtcnNfY2hfbG9ja19pbmZvX2dldCggTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19jaF9sb2NrX2luZm9fc3RydWN0KiBwX2NoX2xvY2tfaW5mbyApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorRGVzY3JpcHRpb246CisgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYWQgY2hhbm5lbCBsb2NrIHN0YXRlIGZyb20gTVJTLgorICAgICAgICAKK1BhcmFtZXRlcnM6IE5vbmUKKyAgICAKK1JldHVybiBWYWx1ZTogQ2hhbm5lbCBsb2NrIHN0YXRlICAgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK01SU19DSF9MT0NLX1NUQVRFIG1yc19jaF9sb2NrX3N0YXRlX2dldChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitEZXNjcmlwdGlvbjoKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVhZCBjaGFubmVsIGxvY2sgbW9kZSBmcm9tIE1SUy4KKyAgICAgICAgCitQYXJhbWV0ZXJzOiBOb25lCisgICAgCitSZXR1cm4gVmFsdWU6IENoYW5uZWwgbG9jayBtb2RlICAgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF91aW50OCBtcnNfY2hfbG9ja19tb2RlX2dldChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKKworI2lmZGVmIF9fV0hJVEVfQ0VMTF9MT0NLX18KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitEZXNjcmlwdGlvbjoKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gd3JpdGUgd2hpdGUgY2VsbCBsb2NrIGluZm9ybWF0aW9uIHRvIE1SUy4KKyAgICAgICAgCitQYXJhbWV0ZXJzOgorICAgIGNoX2xvY2tfaW5mbzogUG9pbnRlciB0byBjaGFubmVsIGxvY2sgaW5mb3JtYXRpb24gdG8gYmUgc3RvcmVkCisgICAgCitSZXR1cm4gVmFsdWU6IGthbF9ib29sICAgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIG1yc193aF9jZWxsX2xvY2tfaW5mb19zZXQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGNvbnN0IG1yc19jaF9sb2NrX2luZm9fc3RydWN0KiBwX2NoX2xvY2tfaW5mbyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitEZXNjcmlwdGlvbjoKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVhZCB3aGl0ZSBjZWxsIGxvY2sgc3RhdGUgZnJvbSBNUlMuCisgICAgICAgIAorUGFyYW1ldGVyczogTm9uZQorICAgIAorUmV0dXJuIFZhbHVlOiBXaGl0ZSBjZWxsIGxvY2sgc3RhdGUgICAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX3VpbnQ4IG1yc193aF9jZWxsX2xvY2tfc3RhdGVfZ2V0KE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKyNlbmRpZiAvKiBfX1dISVRFX0NFTExfTE9DS19fICovCisKKyNlbmRpZiAvKiBfX0NIQU5ORUxfTE9DSyAqLworLyp0aGUgZm9sbG93aW5nIDIgbXJzIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIFQgKyBXIGZlYXR1cmUqLworZXh0ZXJuIHZvaWQgbXJzX3VwZGF0ZV9nYXNfc3lzdGVtX21vZGUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsa2FsX3VpbnQ4IHN5c3RlbV9tb2RlKTsKKworI2lmZGVmIF9fR0FTX1NUT1JFRF9TSV9GRUFUX18KK3ZvaWQgbXJzX2dhc191cGRhdGVfZ3NtX3N0b3JlZFNJX2xpc3QoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIHJybV9nc21fc3RvcmVkU0lfc3RydWN0ICpnYXNfY2FuZGlkYXRlX2xpc3QpOwordm9pZCBtcnNfZ2FzX3JlYWRfZ3NtX3N0b3JlZFNJX2xpc3QoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIHJybV9nc21fc3RvcmVkU0lfc3RydWN0ICpnYXNfY2FuZGlkYXRlX2xpc3QpOworI2VuZGlmIAorZXh0ZXJuIGthbF91aW50OCBtcnNfZ2V0X2dhc19zeXN0ZW1fbW9kZShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKKyNpZmRlZiBfX0NIUl9BQl9JTkZPX18KKy8vSHVhd2VpIEluZGV4OCByZXF1aXJlbWVudDogSW5pZGljYXRpb24gb2YgcmVhc29uIGZvciBOb3QgbW92aW5nIHRvIDRHLgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorRGVzY3JpcHRpb246CisgICAgVGhpcyBmdW5jdGlvbiBOQVMgaXMgdXNlZCB0byBzZXQgbmFzIHJlYXNvbiBmb3Igbm90IG1vdmluZyB0byBMVEUuCisgICAgICAgIAorUGFyYW1ldGVyczogc2ltX2luZGV4CisgICAgCitSZXR1cm4gVmFsdWU6IG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIG1yc19zZXRfbmFzX3JlYXNvbl9ub3RfbW92aW5nX3RvX2x0ZShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgbmFzX3JlYXNvbl9ub3RfbW92aW5nX3RvX2x0ZV9lbnVtICBuYXNfcmVhc29uKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0Rlc2NyaXB0aW9uOgorICAgIFRoaXMgZnVuY3Rpb24gQVMgaXMgdXNlZCB0byBzZXQgYXMgcmVhc29uIGZvciBub3QgbW92aW5nIHRvIExURS4KKyAgICAgICAgCitQYXJhbWV0ZXJzOiBzaW1faW5kZXgKKyAgICAKK1JldHVybiBWYWx1ZTogbm9uZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbXJzX3NldF9hc19yZWFzb25fbm90X21vdmluZ190b19sdGUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGFzX3JlYXNvbl9ub3RfbW92aW5nX3RvX2x0ZV9lbnVtICBhc19yZWFzb24pOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitEZXNjcmlwdGlvbjoKKyAgICBUaGlzIGZ1bmN0aW9uIEw0QyBpcyB1c2VkIHRvIGdldCBib3RoIG5hcyBhbmQgYXMgcmVhc29uIGZvciBub3QgbW92aW5nIHRvIExURS4KKyAgICAgICAgCitQYXJhbWV0ZXJzOiBzaW1faW5kZXgKKworUmV0dXJuIFZhbHVlOiBJZiByZXR1cm5zIEtBTF9UUlVFIG1lYW4gYXMgcmVhc29uIGlzIHZhbGlkIGFuZCBMNEMgaGFzIHRvIGluZGljYXRlIGluZm8gdG8gQVAuCisgICAgICAgICAgICAgICAgICAgICBJZiByZXR1cm4gS0FMX0ZBTFNFIG1lYW4gQ1NGQiBjYWxsIGlzIG9uZ29pbmcgYW5kIEw0QyBubyBuZWVkIHRvIGlkaWNhdGUgaW5mbyB0byBBUC4KKyAgICAgICAgICAgICAgICAgICAgIHBzX3JlYXNvbjogY29udGFpbnMgYm90aCBOQVMgYW5kIEFTIHJlYXNvbiBmb3Igbm90IG1vdmluZyBMVEUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfYm9vbCBtcnNfZ2V0X3BzX3JlYXNvbl9ub3RfbW92aW5nX3RvX2x0ZShNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgcHNfcmVhc29uX25vdF9tb3ZpbmdfdG9fbHRlX3N0cnVjdCAgKnBzX3JlYXNvbik7CisjZW5kaWYgLyogX19DSFJfQUJfSU5GT19fICovCisKK01SU19SQVRfTU9ERV9UWVBFIG1yc190cmFuc2xhdGVfbnZyYW1fcmF0X21vZGVfdG9fbXJzKGNvbnN0IG52cmFtX3JhdF9lbnVtIG52bV9yYXQpOworbnZyYW1fcmF0X2VudW0gbXJzX3RyYW5zbGF0ZV9tcnNfcmF0X21vZGVfdG9fbnZyYW0oY29uc3QgTVJTX1JBVF9NT0RFX1RZUEUgbXJzX3JhdCk7CisKKy8vLS0tLS0tLS0tLS0tLS1OUi1BRlIgQVBJJ3MtLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIG1yc19hZnJfbnJfaW5pdChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKK2V4dGVybiB2b2lkIG1yc19hZnJfY2xlYXJfYWxsX2Fmcl90YXJnZXRfcmF0KE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworI2lmZGVmIF9fTlJfUkFUX18KK2V4dGVybiB2b2lkIG1yc19hZnJfcmVzZXRfbnJfcHJpb3JpdHlfZnJlcV9saXN0X2Zyb21fbHRlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKKworZXh0ZXJuIHZvaWQgbXJzX2Fmcl9pbnNlcnRfbnJfcHJpb3JpdHlfZnJlcV9saXN0X2Zyb21fbHRlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBtcnNfYWZyX25yX2ZyZXFfbGlzdF9zdHJ1Y3QgKmFmcl9ucl9mcmVxX2xpc3QpOworCitleHRlcm4gdm9pZCBtcnNfYWZyX2dldF9ucl9wcmlvcml0eV9mcmVxX2xpc3RfZnJvbV9sdGUoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19hZnJfbnJfZnJlcV9saXN0X3N0cnVjdCAqYWZyX25yX2ZyZXFfbGlzdCk7CisjZW5kaWYgLyogX19OUl9SQVRfXyAqLworCitleHRlcm4gdm9pZCBtcnNfYWZyX3Jlc2V0X25yX2ZyZXFfbGlzdChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKK2V4dGVybiB2b2lkIG1yc19hZnJfaW5zZXJ0X25yX2ZyZXFfbGlzdChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgbXJzX2Fmcl9ucl9mcmVxX2xpc3Rfc3RydWN0ICphZnJfbnJfZnJlcV9saXN0KTsKKworZXh0ZXJuIHZvaWQgbXJzX2Fmcl9nZXRfbnJfZnJlcV9saXN0KE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBtcnNfYWZyX25yX2ZyZXFfbGlzdF9zdHJ1Y3QgKmFmcl9ucl9mcmVxX2xpc3QpOworCitleHRlcm4gdm9pZCBtcnNfYWZyX3NldF9ucl9zZXJ2aW5nX2ZyZXFfaW5mbyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgbXJzX2Fmcl9ucl9mcmVxX2luZm9fc3RydWN0IG5yX2ZyZXFfaW5mbyk7CisKK2V4dGVybiB2b2lkIG1yc19hZnJfZ2V0X25yX3NlcnZpbmdfZnJlcV9pbmZvKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBtcnNfYWZyX25yX2ZyZXFfaW5mb19zdHJ1Y3QgKnBfbnJfZnJlcV9pbmZvKTsKKwordm9pZCBtcnNfc2V0X2Fmcl9lbmhhbmNlbWVudF9zdGF0dXMoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGFmcl9lbmhhbmNlbWVudF9lbnVtIGVuaGFuY2VtZW50X2l0ZW0sIGthbF9ib29sIGFjdGl2YXRlKTsKKwordm9pZCBtcnNfc2V0X2Fmcl9lbmhhbmNlbWVudF9zdGF0dXNfaW5fdGVzdF9tb2RlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBhZnJfZW5oYW5jZW1lbnRfZW51bSBlbmhhbmNlbWVudF9pdGVtLCBrYWxfYm9vbCBhY3RpdmF0ZSk7CisKK2V4dGVybiBrYWxfYm9vbCBtcnNfZ2V0X2Fmcl9zdXBwb3J0X3N0YXR1cyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQxNiBiaXRtYXNrKTsKKwora2FsX2Jvb2wgbXJzX2dldF9hZnJfZW5oYW5jZW1lbnRfc3RhdHVzKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBhZnJfZW5oYW5jZW1lbnRfZW51bSBlbmhhbmNlbWVudF9pdGVtKTsKKwordm9pZCBtcnNfYWZyX25hc191cGRhdGVfc2VydmljZV90YWJsZV9zdGFydChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgYWZyX3NlcnZpY2VfZW51bSBzZXJ2aWNlLCBNUlNfUkFUX01PREVfVFlQRSB0YXJnZXRfcmF0KTsKKwordm9pZCBtcnNfYWZyX25hc191cGRhdGVfc2VydmljZV90YWJsZV9lbmQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGFmcl9zZXJ2aWNlX2VudW0gc2VydmljZSk7CisKK3ZvaWQgbXJzX2Fmcl9yZXNldF90YWJsZV9ieV9zZXJ2aWNlKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBhZnJfc2VydmljZV9lbnVtIHNlcnZpY2UpOworCit2b2lkIG1yc19hZnJfcmF0X2ZhbGxiYWNrX3RyaWdnZXJyZWQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGFmcl9wcmVfY29uZF9wcm9jX2VudW0gcHJvY2VkdXJlKTsKKwordm9pZCBtcnNfYWZyX3VwZGF0ZV9ieV9oaWdoX3JhdChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgTVJTX1JBVF9NT0RFX1RZUEUgcmF0KTsKKwordm9pZCBtcnNfYWZyX2ZhaWxfdXBkYXRlX2J5X2xvd19yYXQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIE1SU19SQVRfTU9ERV9UWVBFIHJhdCk7CisKK2thbF91aW50MzIgbXJzX2Fmcl9hc19kZXRlcm1pbmVfYWZyX3JhdChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgTVJTX1JBVF9NT0RFX1RZUEUgcmF0LCBrYWxfYm9vbCBza2lwX3ZvaWNlX3N0YXR1cyk7CisKK2thbF91aW50MzIgbXJzX2Fmcl9nZXRfYWZyX3RvXzRnX3RpbWVyKE1SU19TSU1fSU5ERVggc2ltX2luZGV4KTsKK3ZvaWQgbXJzX2Fmcl9zZXRfYWZyX3RvXzRnX3RpbWVyKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDMyIGFmcl90b180Z190aW1lcl92YWwpOworCitrYWxfdWludDMyIG1yc19hZnJfZ2V0X2Fmcl90b181Z190aW1lcihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7Cit2b2lkIG1yc19hZnJfc2V0X2Fmcl90b181Z190aW1lcihNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQzMiBhZnJfdG9fNWdfdGltZXJfdmFsKTsKKwordm9pZCBtcnNfYWZyX3VwZGF0ZV9zdHJpY3RfY29uc3RyYWluX3RyaWdnZXJlZF9ieV9oaWdoX3JhdChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgTVJTX1JBVF9NT0RFX1RZUEUgaGlnaF9yYXQpOworCitrYWxfYm9vbCBtcnNfYWZyX2dldF80Z19jc2ZiX3N0YXR1cyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CitrYWxfYm9vbCBtcnNfYWZyX2dldF81Z19lcHNmYl9zdGF0dXMoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgpOworLy8tLS0tLS0tLS0tLS0tLU5SLUFGUi0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0Rlc2NyaXB0aW9uOgorICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjb3VudCBSQVQgY2hhbmdlIGZvciBJUkFUIFBJTkdQT05HIGRldGVjdGlvbi4KKyAgICAgICAgCitQYXJhbWV0ZXJzOiBzaW1faW5kZXgsIGlyYXRfdHlwZQorCitSZXR1cm4gVmFsdWU6IG5vbmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gdm9pZCBtcnNfc2V0X2lyYXRfcGluZ3BvbmdfaW5mbyhNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgbXJzX2lyYXRfcGluZ3BvbmdfdHlwZV9lbnVtIGlyYXRfdHlwZSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorRGVzY3JpcHRpb246CisgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGp1ZGdlIElSQVQgUElOR1BPTkcgYnkgY291bnQgUkFUIGNoYW5nZSB0aW1lcyBkdXJpbmcgZ2l2ZW4gcGVyaW9kLgorICAgICAgICAKK1BhcmFtZXRlcnM6IHNpbV9pbmRleCwgaXJhdF90eXBlLCBkdXJhdGlvbiAodW5pdDogc2Vjb25kcyksIHRocmVzaG9sZCAoTUFYOiA4KQorCitSZXR1cm4gVmFsdWU6CisgICAgVFJVRTogSVJBVCBQSU5HUE9ORyBkZXRlY3RlZAorICAgIEZBTFNFOiB0aGVyZSdzIG5vIFBJTkdQT05HIG9yIHRoZSBjb3JyZXNwb25kaW5nIFNCUCBpcyBub3QgT04KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4ga2FsX2Jvb2wgbXJzX3F1ZXJ5X2lyYXRfcGluZ3Bvbmdfc3RhdHVzKE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBtcnNfaXJhdF9waW5ncG9uZ190eXBlX2VudW0gaXJhdF90eXBlLGthbF91aW50MzIgZHVyYXRpb24sIGthbF91aW50OCBwaW5ncG9uZ190aHJlcyk7CisKKworLy8gRFItRFNEUy9EU0RBIEFQSXMKKy8qKgorKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IGVhY2ggUlJDIHRvIGNoZWNrIGlmIHRoZSBpbmRpY2F0ZWQgZnJlcXVlbmN5IGNvdWxkIGJlIHNlYXJjaGVkIHdpdGhvdXQgZ2FwIHdpdGggcGVlciBTSU0gY29ubmVjdGlvbiBvbmdvaW5nLgorKiBAcGFyYW1baW5dIHNpbV9pbmRleAorKiBAcGFyYW1baW5dIHJhdAorKiBAcGFyYW1baW5dIGJhbmQKKyogQHBhcmFtW2luXSBhcmZjbjogRm9yIFJBVF9OUiwgaXQgbWVhbnMgTlJBUkZDTi4gRm9yIExURSwgaXQgbWVhbnMgRUFSRkNOCisqIEByZXR1cm4gS0FMX1RSVUU6IGlmIHNlYXJjaCB3L28gR0FQIGlzIHN1cHBvcnRlZC4gS0FMX0ZBTFNFOiBpZiBzZWFyY2ggdy9vIEdBUCBpcyBub3Qgc3VwcG9ydGVkCisqLwora2FsX2Jvb2wgbXJzX2lzX2ZyZXFfc2VhcmNoX2FsbG93ZWRfd2l0aF9wZWVyX3NpbV9jb25uZWN0aW9uICgKKyAgICBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwKKyAgICBNUlNfUkFUX01PREVfVFlQRSByYXQsCisgICAga2FsX3VpbnQxNiBiYW5kLAorICAgIGthbF91aW50MzIgYXJmY24KKyk7CisKKy8qKgorKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBpcyBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBTSU0gY2FyZCBhcmUgaW5zZXJ0ZWQuCisqIEBwYXJhbVtpbl0gbm9uZQorKiBAcmV0dXJuIEtBTF9UUlVFOiBpZiBtb3JlIHRoYW4gb25lIFNJTSBjYXJkIGFyZSBpbnNlcnRlZC4gS0FMX0ZBTFNFOiBpZiBubyBvciBvbmx5IG9uZSBTSU0gY2FyZCBpcyBpbnNlcnRlZC4KKyovCitrYWxfYm9vbCBtcnNfaXNfbXVsdGlfc2ltX2luc2VydGVkKHZvaWQpOworCisvKioKKyogQGJyaWVmIFRoaXMgZnVuY3Rpb24gaXMgdG8gY2hlY2sgd2hldGhlciBEU0RBIGlzIHN1cHBvcnRlZC4KKyogQHBhcmFtW2luXSBwX2NlbGxfY2NfaW5mbzogY2hlY2sgRFNEQSBzdXBwb3J0IHN0YXR1cyBieSBwX2NlbGxfY2NfaW5mbyBhbmQgc3RvcmVkIHBlZXIgU0lNIGNlbGwgY2MgaW5mby4gSWYgcF9jZWxsX2NjX2luZm8gaXMgTlVMTCwgY2hlY2sgRFNEQSBzdGF0dXMgYnkgYWxsIHN0b3JlZCBjZWxsIGNjIGluZm8uCisqIEBwYXJhbVtpbl0gaXNfdGVzdF9yZmRiX3F1ZXJ5OiBJZiBjdXJyZW50IFNJTSBuZWVkIHRvIGNoZWNrIGdlbWluaV9tb2RlIGJ5IHVzaW5nIG1yc19nZW1pbmlfaWVfY2hlY2tfY2VsbF9jY19jb25maWdfZGIKKyogQHBhcmFtW2luXSBwc19pZDogY3VycmVudCBzaW1faW5kZXguIE1SUyBvbmx5IHVzZSB0aGlzIHBhcmFtZXRlciB3aGVuIGlzX3Rlc3RfcmZkYl9xdWVyeSBpcyBUUlVFLgorKiBAcmV0dXJuIG1yc19nZW1pbmlfbW9kZV9lbnVtOiBJZiBEU0RBIHN1cHBvcnQgaXMgcmV0dXJuZWQsIERSLURTRFMgaXMgYWxzbyBzdXBwb3J0ZWQuIElmIERSLURTRFMgaXMgcmV0dXJuZWQsIERTREEgaXMgbm90IHN1cHBvcnRlZC4KKyovCittcnNfZ2VtaW5pX21vZGVfZW51bSBtcnNfcXVlcnlfc3VwcG9ydF9nZW1pbmlfbW9kZShtcnNfY2VsbF9jY19pbmZvX3N0cnVjdCAqcF9jZWxsX2NjX2luZm8sIGthbF9ib29sIGlzX3Rlc3RfcmZkYl9xdWVyeSwgcHJvdG9jb2xfaWRfZW51bSBwc19pZCk7CisKK3ZvaWQgbXJzX3NldF90ZXN0X3JmZGJfdG9fY29uZmlnX3JmZGIocHJvdG9jb2xfaWRfZW51bSBzaW1faW5kZXgpOworCityYXRfZW51bSBtcnNfZ2V0X2FjdGl2ZV9yYXRfZm9yX2RyX2RzZHNfZHNkYShwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKworcHJvdG9jb2xfaWRfZW51bSBtcnNfZ2V0X3BlZXJfc2ltX2luZGV4X2Zvcl9kcl9kc2RzX2RzZGEocHJvdG9jb2xfaWRfZW51bSBwc19pZCk7CisKK2thbF9ib29sIG1yc190YWtlX2NoYW5uZWxfcHJvdGVjdF9zZW0ocHJvdG9jb2xfaWRfZW51bSBwc19pZCwgcmF0X2VudW0gcmF0KTsKKwordm9pZCBtcnNfZ2l2ZV9jaGFubmVsX3Byb3RlY3Rfc2VtKHByb3RvY29sX2lkX2VudW0gcHNfaWQsIHJhdF9lbnVtIHJhdCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitEZXNjcmlwdGlvbjoKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcXVlcnkgaWYgYSBzcGVjaWZpYyBmZWF0dXJlIGlzIHR1cm5lZCBvbi4KKyAgICBGb3IgaW50ZXItUkFUIG9yIGNyb3NzIG1vZHVsZSBmZWF0dXJlcyB0aGF0IG5lZWRzIHRvIGJlIHRyaWdnZXJlZCBieSB0aGUgb3RoZXIgbW9kdWxlcywgdGhpcyBBUEkgY291bGQgYmUgYXBwbGllZC4KKyAgICAgICAgCitQYXJhbWV0ZXJzOiAKKyAgICBbc2ltX2luZGV4XSBTSU0gaW5kZXgKKyAgICBbZmVhdHVyZV9lbnVtXSBUaGUgZW51bSB2YWx1ZSBvZiB0aGUgcXVlcnlpbmcgZmVhdHVyZQorICAgIAorUmV0dXJuIFZhbHVlOiAKKyAgICBUUlVFOiBmZWF0dXJlIE9OCisgICAgRkFMU0U6IGZlYXR1cmUgT0ZGCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgbXJzX2dldF9mZWF0dXJlX3N0YXR1c19ieV9zaW0oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19mZWF0dXJlX2VudW0gZmVhdHVyZV9lbnVtKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0Rlc2NyaXB0aW9uOgorICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgaWYgYSBzcGVjaWZpYyBmZWF0dXJlIGlzIHR1cm5lZCBvbi4KKyAgICBGb3IgaW50ZXItUkFUIG9yIGNyb3NzIG1vZHVsZSBmZWF0dXJlcyB0aGF0IG5lZWRzIHRvIGJlIGV4ZWN1dGVkIGJ5IHRoZSBvdGhlciBtb2R1bGVzLCB0aGlzIEFQSSBjb3VsZCBiZSBhcHBsaWVkLgorICAgICAgICAKK1BhcmFtZXRlcnM6IAorICAgIFtzaW1faW5kZXhdIFNJTSBpbmRleAorICAgIFtmZWF0dXJlX2VudW1dIFRoZSBlbnVtIHZhbHVlIG9mIHRoZSBxdWVyeWluZyBmZWF0dXJlCisgICAgW3ZhbHVlXSBUaGUgc3RhdXMgd2UncmUgZ29pbmcgdG8gc2V0IGZvciB0aGlzIGZlYXR1cmUgKFRSVUU6IE9OIC8gRkFMU0U6IE9GRikKKyAgICAKK1JldHVybiBWYWx1ZTogdm9pZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgbXJzX3NldF9mZWF0dXJlX3N0YXR1c19ieV9zaW0oTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIG1yc19mZWF0dXJlX2VudW0gZmVhdHVyZV9lbnVtLCBrYWxfYm9vbCBzdGF0dXMpOworCitrYWxfYm9vbCBtcnNfY2hlY2tfZGlzYWJsZV9mYXN0X3BsbW5fbGlzdChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKK3ZvaWQgbXJzX2w0Y19zZW5kX2NhcGFiaWxpdHlfdXBkYXRlX2luZChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7Cit2b2lkIG1yc19zYXZlX3ByZXZpb3VzX3JlZ2lvbl90b19udnJhbSh2b2lkKTsKK2thbF9ib29sIG1yc191bXRzX3VwZGF0ZV9kZXRlY3RlZF9iYW5kX2Zvcl9wbG1uX3JlZ2lvbihtcnNfcGxtbl9pZCAgcGxtbl9pZCwga2FsX3VpbnQzMiBiYW5kSURCbXApOwora2FsX2Jvb2wgbXJzX2dzbV91cGRhdGVfZGV0ZWN0ZWRfYmFuZF9mb3JfcGxtbl9yZWdpb24obXJzX3BsbW5faWQgIHBsbW5faWQsIGthbF91aW50OCBiYW5kSURCbXApOwora2FsX2Jvb2wgbXJzX2x0ZV91cGRhdGVfZGV0ZWN0ZWRfYmFuZF9mb3JfcGxtbl9yZWdpb24oIG1yc19wbG1uX2lkICBwbG1uX2lkLCBrYWxfdWludDggKmJhbmRJRCk7CitrYWxfYm9vbCBtcnNfZ2V0X2FsbF90aGVfbHRlX3N1cHBvcnRlZF9iYW5kc19wZXJfcmVnaW9uKG1yc19wbG1uX2lkICBwbG1uX2lkLCBrYWxfdWludDggKmJhbmRJRCk7Cit2b2lkIG1yc19jb3B5X21yc19jb250ZXh0X3RvX252cmFtKG52cmFtX2VmX2JhbmRfc2V0dGluZ19wZXJfcmVnaW9uX2luZm9fcmVjb3JkX3N0cnVjdCAqcG52cmFtX2JhbmQpOwora2FsX2Jvb2wgbXJzX2dldF9tY2NfcmVnaW9uX3VtdHNfYmFuZHMobXJzX3BsbW5faWQgIHBsbW5faWQsIGthbF91aW50MzIgKlVCYW5kQml0bWFza19GREQpOwora2FsX2Jvb2wgbXJzX2dldF9tY2NfcmVnaW9uX2dzbV9iYW5kcyhtcnNfcGxtbl9pZCAgcGxtbl9pZCwga2FsX3VpbnQ4ICpnc21CYW5kQml0bWFzayk7Cit2b2lkIG1yc19hc19iYW5kX3NldHRpbmdfdXBkYXRlX2J5X3BsbW4oIE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCBmdW5jdGlvbl9jYWxsZXJfaWRfZW51bSBjYWxsZXJfaWQsIG1yc19wbG1uX2lkKiBocGxtbiwgbXJzX3BsbW5faWRfbGlzdCogY3BsbW4pOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorRGVzY3JpcHRpb246CisgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBvcGVyYXRvciBJRCBmb3IgdGhlIFBMTU4uCisKK1BhcmFtZXRlcnM6IAorICAgIFtvcGVyYXRvcl9lbnVtXSBvcGVyYXRvciBpZCAoaW5wdXQpCisgICAgW3BfcGxtbl0gUG9pbnRlciB0byBQTE1OIGNvZGUgKGlucHV0KQorCitSZXR1cm4gVmFsdWU6IAorICAgIFRSVUU6IHBsbW4gbWF0Y2ggb3BlcmF0b3IgaWQKKyAgICBGQUxTRTogcGxtbiBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBvcGVyYXRvcgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgbXJzX2NoZWNrX2lmX3BsbW5fbWF0Y2hfb3BlcmF0b3JfaWQob3BlcmF0b3JfaWRfZW51bSBvcGVyYXRvcl9lbnVtLCBjb25zdCBwbG1uX2lkX3N0cnVjdCAqcF9wbG1uKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0Rlc2NyaXB0aW9uOgorICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgb3BlcmF0b3IgSUQgZm9yIHRoZSBQTE1OLgorCitQYXJhbWV0ZXJzOiAKKyAgICBbcF9wbG1uXSBQb2ludGVyIHRvIFBMTU4gY29kZQorCitSZXR1cm4gVmFsdWU6IE9wZXJhdG9yIElECisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworb3BlcmF0b3JfaWRfZW51bSBtcnNfZ2V0X29wZXJhdG9yX2lkX29mX3BsbW4oY29uc3QgcGxtbl9pZF9zdHJ1Y3QgKnBfcGxtbik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitEZXNjcmlwdGlvbjoKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgTVJTIHRhc2sgaW5pdCwgdG8gY2hlY2sgZm9yIE9UQSBVcGRhdGUKKworUGFyYW1ldGVyczogCisgICAgTm9uZQorCitSZXR1cm4gVmFsdWU6IHZvaWQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gdm9pZCBtcnNfc2V0X290YV91cGRhdGVfZHVyaW5nX2luaXQoKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0Rlc2NyaXB0aW9uOgorICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZXNldCB0aGUgTlZSQU0gdmFsdWVzIHRvIHRocm91Z2ggT1RBIGR1cmluZyBJbml0LgorCitQYXJhbWV0ZXJzOiAKKyAgICAgTElEIE5hbWUgYW5kIFNJWkUKKworUmV0dXJuIFZhbHVlOiB2b2lkCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCAgbXJzX3VwZGF0ZV9udnJhbV93aXRoX290YV92YWx1ZXMoa2FsX3VpbnQxNiBudnJhbV9pZCwga2FsX3VpbnQzMiBzaXplKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0Rlc2NyaXB0aW9uOgorICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBTQlAgYml0IHN0YXRlLgorCitQYXJhbWV0ZXJzOiAKKyAgICBbZmVhdHVyZV0gRmVhdHVyZSB3aG9zZSBTQlAgYml0IGlzIGNoZWNrZWQKKyAgICBbc2ltX2luZGV4XSBNUlMgU0lNIGluZGV4CisKK1JldHVybiBWYWx1ZToKKyAgICBLQUxfVFJVRTogIGlmIGZlYXR1cmUgaXMgdHVybmVkIG9uCisgICAgS0FMX0ZBTFNFOiBpZiBmZWF0dXJlIGlzIHR1cm5lZCBvZmYKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfYm9vbCBtcnNfc2JwX3F1ZXJ5X21kX2ZlYXR1cmVfYnlfcHMoc2JwX21kX2ZlYXR1cmVfZW51bSBmZWF0dXJlLCBNUlNfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitEZXNjcmlwdGlvbjoKKyAgICBUaGlzIGZ1bmN0aW9uIGNvbXBhcmVzIHR3byBQTE1Ocy4KKworUGFyYW1ldGVyczogCisgICAgW21zX3BsbW5faWRdIFBMTU4gSUQKKyAgICBbYmNjaF9wbG1uX2lkXSBQTE1OIElECisKK1JldHVybiBWYWx1ZToKKyAgICBLQUxfVFJVRTogIFBMTU5zIGFyZSB0aGUgc2FtZQorICAgIEtBTF9GQUxTRTogUExNTnMgYXJlIGRpZmZlcmVudAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIG1yc19pc19wbG1uX2lkX21hdGNoX3dpdGhfYmNjaF9wbG1uX2lkKGNvbnN0IHBsbW5faWRfc3RydWN0ICptc19wbG1uX2lkLCBjb25zdCBwbG1uX2lkX3N0cnVjdCAqYmNjaF9wbG1uX2lkKTsKKworI2VuZGlmIC8qIF9NUlNfVVRJTElUWV9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX3ZnbmFzX2NhcGFiaWxpdHkuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9tcnNfdmduYXNfY2FwYWJpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NDk0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbXJzX3ZnbmFzX2NhcGFiaWxpdHkuaApAQCAtMCwwICsxLDE1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE4CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBNUlNfVkdOQVNfQ0FQQUJJTElUWV9ICisjZGVmaW5lIE1SU19WR05BU19DQVBBQklMSVRZX0gKKworI2luY2x1ZGUgIm1yc19hc19pcmF0X2VudW1zLmgiCisjaW5jbHVkZSAibDNfaW5jX2VudW1zX3B1YmxpYy5oIgorI2luY2x1ZGUgInBzX3B1YmxpY19lbnVtLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgIE1BQ1JPUyAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBSQVRfQU5ZICAgICAgMHhGRgorI2RlZmluZSBPUFRJT05fQU5ZICAgMFhGRgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICBUWVBFIERFRklOSVRJT05TICYgRU5VTVMgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogTlZSQU1fRUZfTjFfTU9ERV9DQVBfTElEICYgTlZSQU1fRUZfTlJfQ0FQX0xJRAorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF9ib29sICBuMV9tb2RlOyAgICAgICAgICAgLy8gMjQuMzAxIFVFIG5ldHdvcmsgY2FwYWJpbGl0eSBJRTogTjEgbW9kZSBzdXBwb3J0ZWQgKE4xIG1vZGUpCisgICAga2FsX2Jvb2wgIGhvX2F0dGFjaDsgICAgICAgICAvLyA1R01NIGNhcGFiaWxpdHkgSUU6IGF0dGFjaCByZXF1ZXN0IG1lc3NhZ2UgY29udGFpbmluZyBQRE4gY29ubmVjdGl2aXR5IHJlcXVlc3Qgd2l0aCByZXF1ZXN0IHR5cGUgaGFuZG92ZXIgdG8gdHJhbnNmZXIgUERVIHNlc3Npb24gZnJvbSBOMSBtb2RlIHRvIFMxIG1vZGUgc3VwcG9ydGVkIChITyBhdHRhY2gpCisgICAga2FsX3VpbnQ4IHVlXzVnc19lbmNfYWxnbzsgICAvLyBVRSBzZWN1cml0eSBjYXBhYmlsaXR5IElFOiA1R1MgZW5jcnlwdGlvbiBhbGdvcml0aG0gc3VwcG9ydGVkCisgICAga2FsX3VpbnQ4IHVlXzVnc19pbnRfYWxnbzsgICAvLyBVRSBzZWN1cml0eSBjYXBhYmlsaXR5IElFOiA1R1MgaW50ZWdyaXR5IGFsZ29yaXRobSBzdXBwb3J0ZWQKKworfSB2Z25hc19jYXBhYmlsaXR5X2NvbnRleHRfc3RydWN0OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgVkFSSUFCTEVTICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRlVOQ1RJT04gREVDTEFSQVRJT05TICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCisKKy8qKgorICogQGJyaWVmICAgIEluaXRpYWxpemVzIE1SUyA1RyBOQVMgY29udGV4dAorICogQHJldHVybiAgIHZvaWQKKyAqLwordm9pZCBtcnNfdmduYXNfaW5pdF9jb250ZXh0X2RlZmF1bHRfdmFsdWUodm9pZCk7CisKKy8qKgorICogQGJyaWVmICAgICAgIEluaXRpYWwgcHJvY2VkdXJlIHRvIHNldCBNUlMgNUcgTkFTIGNvbnRleHQgYnkgZGF0YSByZXRyaWV2ZWQgZnJvbSBOVlJBTQorICogQHJldHVybiAgICAgIHZvaWQKKyAqIEBwYXJhbVtJTl0gICBudnJhbV9maWxlX2lkOiBOVlJBTV9FRl9OUl9DQVBfTElELCBOVlJBTV9FRl9OMV9DQVBfTElECisgKiBAcGFyYW1bSU5dICAgZGF0YTogb2YgbnZyYW1fZmlsZV9pZAorICogQHBhcmFtW0lOXSAgIGxlbjogb2YgZGF0YQorICovCit2b2lkIG1yc192Z25hc19yZWFkX252cmFtX2NuZl9oYW5kbGVyKGthbF91aW50MTYgbnZyYW1fZmlsZV9pZCwga2FsX3VpbnQ4ICpkYXRhLCBrYWxfdWludDE2IGxlbik7CisKKy8qKgorICogQGJyaWVmICAgICAgIEEgZnVuY3Rpb24gdGhhdCBzZXRzIDVnYyBuYXMobjEgbW9kZSkgc3VwcG9ydGVkCisgKiBAcGFyYW1baW5dICAgc2ltX2luZGV4IGluZGljYXRlcyB0aGUgcHJvdG9jb2wgd2hpY2ggaXMgc2VsZWN0ZWQKKyAqIEBwYXJhbVtpbl0gICBuMV9tb2RlIGlzIHVzZWQgZm9yIHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24uCisgKiBAcmV0dXJuICAgICAgS0FMX1RSVUUgaWYgbjFfbW9kZSBzZXQgc3VjZXNzZnVsbHkuCisgKgorICogdGhlIG4xIG1vZGUgaXMgdXNlZCBmb3IgdWUgbmV0d29yayBjYXBhYmlsaXR5IElFIGFuZCBkZWZpbmVkIGluIFRTIDI0LjMwMQorICovCitrYWxfYm9vbCBtcnNfdmduYXNfc2V0X2NhcF81Z2NfbmFzX3N1cHBvcnQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF9ib29sIG4xX21vZGUpOworCisvKioKKyAqIEBicmllZiAgICAgICBBIGZ1bmN0aW9uIHRoYXQgZ2V0cyA1Z2MgbmFzKG4xIG1vZGUpIHN1cHBvcnRlZAorICogQHBhcmFtW2luXSAgIHNpbV9pbmRleCBpbmRpY2F0ZXMgdGhlIHByb3RvY29sIHdoaWNoIGlzIHNlbGVjdGVkCisgKiBAcGFyYW1baW5dICAgcmF0X21vZGUgaXMgdXNlZCBmb3IgY2hlY2tpbmcgaWYgd2UgY291bGQgZ2V0IHRoZSBuMV9tb2RlIGNvbmZpZ3VyYXRpb24uCisgKiBAcmV0dXJuICAgICAgS0FMX1RSVUUgaWYgZXBjIG5hcyhuMV9tb2RlKSBpcyBzdXBwb3J0ZWQuCisgKgorICogdGhlIG4xIG1vZGUgaXMgdXNlZCBmb3IgdWUgbmV0d29yayBjYXBhYmlsaXR5IElFIGFuZCBkZWZpbmVkIGluIFRTIDI0LjMwMQorICovCitrYWxfYm9vbCBtcnNfdmduYXNfZ2V0X2NhcF81Z2NfbmFzX3N1cHBvcnQoTVJTX1NJTV9JTkRFWCBzaW1faW5kZXgsIHJhdF9lbnVtIHJhdF9tb2RlKTsKKworLyoqCisgKiBAYnJpZWYgICAgICAgR2V0IE1FJ3Mgc2V0dGluZyBvbiBITyBhdHRhY2ggc3VwcG9ydGVkCisgKiBAcmV0dXJuICAgICAgS0FMX1RSVUU6IHN1cHBvcnRlZDsgS0FMX0ZBTFNFOiBub3Qgc3VwcG9ydGVkCisgKiBAcGFyYW1bSU5dICAgc2ltX2luZGV4OiBmb3Igd2hpY2ggcHJvdG9jb2wKKyAqIEBwYXJhbVtJTl0gICByYXRfbW9kZTogY3VycmVudCByYXQgbW9kZQorICoKKyAqIHJlc3VsdCBpcyBmaWx0ZXJlZCBieSByYXRfbW9kZSwgaW5wdXQgcmF0X21vZGU9UkFUX0FOWSB0byBieS1wYXNzIGZpbHRlcmluZworICovCitrYWxfYm9vbCBtcnNfdmduYXNfZ2V0X2NhcF9ob19hdHRhY2hfc3VwcG9ydChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgcmF0X2VudW0gcmF0X21vZGUpOworCisvKioKKyAqIEBicmllZiAgICAgICBHZXQgTUUncyBzZXR0aW5nIG9uIDVHUyBlbmNyeXB0aW9uIGFsZ29yaXRobXMgc3VwcG9ydGVkCisgKiBAcmV0dXJuICAgICAga2FsX3VpbnQ4OiBiaXQgbWFwIChiaXQgOCBpcyA1Ry1FQTAsIGJpdCA3IGlzIDEyOC01Ry1FQTEsIC4uLgorICogICAgICAgICAgICAgIGJpdCAxIGlzIDVHLUVBNyksIGVhY2ggYml0IGlzIGVpdGhlciAwIGZvciBub3Qgc3VwcG9ydGVkIG9yIDEKKyAqICAgICAgICAgICAgICBmb3Igc3VwcG9ydGVkCisgKiBAcGFyYW1bSU5dICAgc2ltX2luZGV4OiBmb3Igd2hpY2ggcHJvdG9jb2wKKyAqIEBwYXJhbVtJTl0gICBvcHRpb246IGN1cnJlbnQgNUcgYXJjaGl0ZWN0dXJlIG9wdGlvbgorICoKKyAqIDVHLUVBIGlzIHVzZWQgZm9yOgorICogVUUgc2VjdXJpdHkgY2FwYWJpbGl0eSBJRSBhbmQgZGVmaW5lZCBpbiBUUyAyNC41MDEKKyAqLwora2FsX3VpbnQ4IG1yc192Z25hc19nZXRfY2FwXzVnc19lbmNyeXB0aW9uX2FsZ29fc3VwcG9ydChNUlNfU0lNX0lOREVYIHNpbV9pbmRleCwgdmdfb3B0aW9uX2VudW0gb3B0aW9uKTsKKworLyoqCisgKiBAYnJpZWYgICAgICAgR2V0IE1FJ3Mgc2V0dGluZyBvbiA1R1MgaW50ZWdyaXR5IGFsZ29yaXRobXMgc3VwcG9ydGVkCisgKiBAcmV0dXJuICAgICAga2FsX3VpbnQ4OiBiaXQgbWFwIChiaXQgOCBpcyA1Ry1JQTAsIGJpdCA3IGlzIDEyOC01Ry1JQTEsIC4uLgorICogICAgICAgICAgICAgIGJpdCAxIGlzIDVHLUlBNyksIGVhY2ggYml0IGlzIGVpdGhlciAwIGZvciBub3Qgc3VwcG9ydGVkIG9yIDEKKyAqICAgICAgICAgICAgICBmb3Igc3VwcG9ydGVkCisgKiBAcGFyYW1bSU5dICAgc2ltX2luZGV4OiBmb3Igd2hpY2ggcHJvdG9jb2wKKyAqIEBwYXJhbVtJTl0gICBvcHRpb246IGN1cnJlbnQgNUcgYXJjaGl0ZWN0dXJlIG9wdGlvbgorICoKKyAqIDVHLUlBIGlzIHVzZWQgZm9yOgorICogVUUgc2VjdXJpdHkgY2FwYWJpbGl0eSBJRSBhbmQgZGVmaW5lZCBpbiBUUyAyNC41MDEKKyAqLwora2FsX3VpbnQ4IG1yc192Z25hc19nZXRfY2FwXzVnc19pbnRlZ3JpdHlfYWxnb19zdXBwb3J0KE1SU19TSU1fSU5ERVggc2ltX2luZGV4LCB2Z19vcHRpb25fZW51bSBvcHRpb24pOworCisKKyNlbmRpZiAvKiBNUlNfVkdOQVNfQ0FQQUJJTElUWV9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbmFzX3N2X3JhdGRtX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL25hc19zdl9yYXRkbV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTNiZGUxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL25hc19zdl9yYXRkbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDk4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTgKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIEZpbGVuYW1lOgorKiAtLS0tLS0tLS0KKyogbmFzX3N2X3JhdGRtX3N0cnVjdC5oCisqCisqIFByb2plY3Q6CisqIC0tLS0tLS0tCisqICAgVU1PTFlBCisqCisqIERlc2NyaXB0aW9uOgorKiAtLS0tLS0tLS0tLS0KKyoKKyogQXV0aG9yOgorKiAtLS0tLS0tCisgKiAtLS0tLS0tCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX05BU19TVl9SQVRETV9TVFJVQ1RfSF8KKyNkZWZpbmUgX05BU19TVl9SQVRETV9TVFJVQ1RfSF8KKworCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJwc19wdWJsaWNfZW51bS5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorI2luY2x1ZGUgIm1jZF9sM19pbmNfc3RydWN0LmgiCisKKyNpbmNsdWRlICJsM19pbmNfbG9jYWwuaCIKKworI2luY2x1ZGUgImdtc3NfcHVibGljLmgiCisjaW5jbHVkZSAibW1fbW1pX2VudW1zLmgiCisjaW5jbHVkZSAibW1pMm1tX3N0cnVjdC5oIgorCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAic2ltX3B1YmxpY19lbnVtLmgiCisjaW5jbHVkZSAiZ2xvYmFsX3R5cGUuaCIKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAiZ21zc19wdWJsaWMuaCIKKyAgICAKK3R5cGVkZWYgZW51bSB7CisgICAgUkFURE1fTk9fUkFULAorICAgIFJBVERNX0dTTV9SQVQsICAKKyAgICBSQVRETV9XQ0RNQV9SQVQsCisgICAgUkFURE1fTFRFX1JBVCwKKyAgICBSQVRETV9DMktfUkFULAorICAgIFJBVERNX05SX1JBVCwKK30gcmF0ZG1fcmF0X2VudW07CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHJhdGRtX3JhdF9lbnVtICAgIGRzdF9yYXQ7Cit9IG5hc19zdl9yYXRkbV9yYXRfY2hhbmdlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHVtdHNfZHVwbGV4X21vZGVfdHlwZSBzb3VyY2VfdW10c19kdXBsZXhfbW9kZTsKKyAgICB1bXRzX2R1cGxleF9tb2RlX3R5cGUgdGFyZ2V0X3VtdHNfZHVwbGV4X21vZGU7CisgICAgbHRlX2R1cGxleF9tb2RlX3R5cGUgc291cmNlX2x0ZV9kdXBsZXhfbW9kZTsKKyAgICBsdGVfZHVwbGV4X21vZGVfdHlwZSB0YXJnZXRfbHRlX2R1cGxleF9tb2RlOworfSBuYXNfc3ZfcmF0ZG1fZHVwbGV4X21vZGVfY2hhbmdlX3JlcV9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfTldTRUxfUkFURE1fU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ub25fc3RkX2xsY19wZWVyLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbm9uX3N0ZF9sbGNfcGVlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMWI3MmEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbm9uX3N0ZF9sbGNfcGVlci5oCkBAIC0wLDAgKzEsMTEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICBub25fc3RkX2xsY19wZWVyLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX05PTl9TVERfTExDX1BFRVJfSF8KKyNkZWZpbmUgX05PTl9TVERfTExDX1BFRVJfSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgVEVTVF9UT09MCisjaW5jbHVkZSAidHRfZGVmcy5oIgorI2Vsc2UKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2VuZGlmCisKKworI2luY2x1ZGUgImwzX2luYy5oIgorI2luY2x1ZGUgImxsY192YXJzdHIuaCIKKyNpbmNsdWRlICJsbGNfcGVlcl9pbnRlcmZhY2UuaCIKKworI2luY2x1ZGUgImFzbl9sbGNfcGVlci5oIgorI2luY2x1ZGUgIm5vbl9zdGRfbGxjX3BlZXJfc3RydWN0LmgiCisjaW5jbHVkZSAibm9uX3N0ZF9sbGNfcGVlcl9wdW4uaCIKKworI2lmZGVmIFRPT0wKKyNpbmNsdWRlICJzZXRfbm9uX3N0ZF9sbGNfcGVlci5oIgorI2luY2x1ZGUgImdldF9ub25fc3RkX2xsY19wZWVyLmgiCisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ucnJjX3JzdmFfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbnJyY19yc3ZhX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNWYyMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbnJyY19yc3ZhX3N0cnVjdC5oCkBAIC0wLDAgKzEsODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE4CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9OUlJDX1JTVkFfU1RSVUNUX0hfCisjZGVmaW5lIF9OUlJDX1JTVkFfU1RSVUNUX0hfCisKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorCisjaWYgZGVmaW5lZChfX0dFTUlOSV9fKSAmJiBkZWZpbmVkKF9fTlJfUkFUX18pCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlJSQyAoU0VBUkNIKSB0byBSU1ZBIChSU1ZBTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIHN0cnVjdCB7ICAgIAorICAgIExPQ0FMX1BBUkFfSERSCisgICAgbnJyY19mcmVxX3NjYW5fdHlwZV9lbnVtIGZyZXFfc2Nhbl90eXBlOworICAgIGthbF9ib29sIGlzX2Z1bGxfYmFuZDsKKyAgICBrYWxfdWludDggc2lkOyAvKiBzZXNzaW9uIGlkICovCit9bnJyY19yc3Zhbl9mcmVxdWVuY3lfc2Nhbl9zdGFydF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBucnJjX2ZyZXFfc2Nhbl9zdG9wX2NhdXNlX2VudW0gY2F1c2U7CisgICAgLyogcHJlZW1wdGlvbiBzZXNzaW9uIGlkLCBvbmx5IHVzZWQgd2hlbiBjYXVzZT1OUkFTX0ZSRVFfU0NBTl9QUkVFTVBURUQgKi8KKyAgICAvKiBhbHdheXMgcmVsZWFzZSB0aGUgcmVzb3VyY2Ugd2hlbiBjYXVzZT1OUkFTX0ZSRVFfU0NBTl9GSU5JU0hFRCAqLworICAgIGthbF91aW50OCBzaWQ7Cit9bnJyY19yc3Zhbl9mcmVxdWVuY3lfc2Nhbl9zdG9wX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsgICAgCisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBucnJjX2ZyZXFfc2Nhbl90eXBlX2VudW0gZnJlcV9zY2FuX3R5cGU7CisgICAga2FsX2Jvb2wgaXNfZnVsbF9iYW5kOworICAgIGthbF91aW50OCBzaWQ7IC8qIHNlc3Npb24gaWQgKi8KK31ucnJjX3JzdmFuX2ZyZXF1ZW5jeV9zY2FuX21vZGlmeV9yZXFfc3RydWN0OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU1ZBIChSU1ZBTikgdG8gTlJBUyAoU0VBUkNIKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNpZDsgLyogc2Vzc2lvbiBpZCAqLworfXJzdmFuX25ycmNfZnJlcXVlbmN5X3NjYW5fYWNjZXB0X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzaWQ7IC8qIHByZWVtcHRpb24gc2Vzc2lvbiBpZCAqLworfXJzdmFuX25ycmNfZnJlcXVlbmN5X3NjYW5fcHJlZW1wdF9pbmRfc3RydWN0OworCisjZW5kaWYgLyogaWYgZGVmaW5lZChfX0dFTUlOSV9fKSAmJiBkZWZpbmVkKF9fTlJfUkFUX18pICovCisjZW5kaWYgLyogX05SUkNfUlNWQV9TVFJVQ1RfSF8gKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ud3NlbF9tbV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ud3NlbF9tbV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWQ2YWViCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL253c2VsX21tX3N0cnVjdC5oCkBAIC0wLDAgKzEsMzk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgbndzZWxfbW1fc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9OWkEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogVGhpcyBmaWxlIGRlZmluZSB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSB1c2VkIGJ5IE5XU0VMX01NIFNBUAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIE5XU0VMX01NX1NUUlVDVF9ICisjZGVmaW5lIE5XU0VMX01NX1NUUlVDVF9ICisKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX3N0cnVjdC5oIgorI2luY2x1ZGUgImwzX2luY19sb2NhbC5oIgorI2luY2x1ZGUgImFzMm5hc19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX2dwcnNfc3RydWN0LmgiCisjaW5jbHVkZSAicHNfcHVibGljX2VudW0uaCIKKyNpbmNsdWRlICJyc3Zhc19lbnVtLmgiCisjaW5jbHVkZSAibW1fbW1pX2VudW1zLmgiCisjaW5jbHVkZSAibW1fcmF0Y21fZW51bXMuaCIKKyNpbmNsdWRlICJnbXNzX253c2VsX3N0cnVjdC5oIgorCit0eXBlZGVmIHN0cnVjdCAKK3sgCisgICAgTE9DQUxfUEFSQV9IRFIgCisgICAga2FsX3VpbnQ4IG11bHRpX3BsbW5fY291bnQ7IAorICAgIHBsbW5faWRfc3RydWN0IG11bHRpX3BsbW5faWRbTUFYX05VTV9NVUxUSV9QTE1OXTsgCisgICAgYXNfY2VsbF90eXBlX2VudW0gbXVsdGlfY2VsbF90eXBlW01BWF9OVU1fTVVMVElfUExNTl07CisgICAgcmF0X2VudW0gcmF0OworICAgIC8vLyBzb3VyY2UgZnJvbSBjZWxsIHJlc2VsZWN0aW9uIG9yIHNlYXJjaCAKKyAgICBmb3VuZF9pbmRfc291cmNlX2VudW0gc291cmNlOworfSBud3NlbF9tbV9wbG1uX2ZvdW5kX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUiAgCisgICAga2FsX2Jvb2wgaXNfcGxtbl9zZWFyY2hfbHRlX29uZ29pbmc7CisgICAgYXNfY2VsbF90eXBlX2VudW0gY2VsbF90eXBlOyAgICAgICAgICAgICAgIC8vIDRHIGNhbXBlZCBvbiBjZWxsIHR5cGUKK30gbndzZWxfbW1fc2VhcmNoX3N0YXR1c191cGRhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSICAKKyAgICBrYWxfdWludDE2IGdpYmlfdGFnOworICAgIHJhdF9lbnVtIHJhdDsKKyAgICBrYWxfYm9vbCBpc19kYXRhX3BlbmRpbmc7CisgICAga2FsX2Jvb2wgaXNfc3lzX2luZm9fcHJlc2VudDsKKyAgICBocGxtbl9zdGF0dXNfZW51bSBocGxtbl9zdGF0dXM7CisgICAgZnBsbW5fc3RhdHVzX2VudW0gZnBsbW5fc3RhdHVzOworICAgIGthbF9ib29sIGlzX2luX2VxX3BsbW5fbGlzdDsKKyAgICBtbV9jZWxsX2NoYW5nZV9lbnVtIGFibm9ybWFsX2NlbGxfY2hhbmdlOworICAgIG1tX2NlbGxfY2hhbmdlX2VudW0gYWJub3JtYWxfcmFpX2NlbGxfY2hhbmdlOworICAgIHBsbW5faWRfc3RydWN0IHBsbW5faWQ7CisgICAga2FsX3VpbnQ4IGxhX2NvZGVbMl07CisgICAga2FsX3VpbnQ4IHJhX2NvZGU7CisgICAga2FsX3VpbnQzMiBjZWxsX2lkOyAvL210azAyNDc1OiBleHRlbmRlZCBjZWxsIGlkIGluIFVNVFMKKyAgICBrYWxfYm9vbCBjZWxsX3N1cHBvcnRfY3M7CisgICAga2FsX2Jvb2wgY2VsbF9zdXBwb3J0X3BzOyAvKiBpZiBGQUxTRSwgbm1vIGFuZCByYV9jb2RlIHNob3VsZCBub3QgcmVmZXIuICovCisgICAga2FsX2Jvb2wgaXNfYWNjX2NsYXNzX3ByZXNlbnQ7CisgICAga2FsX3VpbnQxNiBhY2NfY2xhc3M7CisgICAga2FsX3VpbnQ4IGV4dHJhX2luZm9fYml0bWFzazsgLyogbXRrMDI0NzU6IGZvciBEU0FDL2RhdGFfc3BlZWRfc3VwcG9ydCB1cGRhdGUgaW4gY29ubmVjdGVkIG1vZGUqLworI2lmIGRlZmluZWQgKF9fUjZfRFNBQ19fKSB8fCBkZWZpbmVkIChVTklUX1RFU1QpCisgICAga2FsX2Jvb2wgaXNfZHNhY19wcmVzZW50OworICAgIGthbF91aW50MTYgY3NfZHNhYzsKKyAgICBrYWxfdWludDE2IHBzX2RzYWM7CisjZW5kaWYKKyAgICBrYWxfdWludDggdDMyMTJfdGltZXJfdmFsOworICAgIG5ldHdvcmtfbW9kZV9lbnVtIG5tbzsKKyAgICBhc19jZWxsX3R5cGVfZW51bSBjZWxsX3R5cGU7CisgICAgYXR0X2ZsYWdfZW51bSBhdHRfZmxhZzsKKyAgICBrYWxfYm9vbCBtc2NyOworICAgIHJyX21tX3Nnc25yX2ZsYWdfZW51bSBzZ3NucjsKKyNpZmRlZiBfX1BTX1NFUlZJQ0VfXworICAgIGRhdGFfc3BlZWRfc3VwcG9ydF9lbnVtIGNlbGxfZGF0YV9zcGVlZF9zdXBwb3J0OyAvKiBNQVVJXzAyMzYxMjIxOiBmb3IgZWdwcnMgYW5kIGhzcGEgKi8KKyNlbmRpZgkKKworI2lmIGRlZmluZWQgKF9fUFBBQ1JfU1VQUE9SVF9fKSB8fCBkZWZpbmVkIChVTklUX1RFU1QpCisgICAga2FsX2Jvb2wgaXNfcHBhY3JfcHJlc2VudDsKKyAgICBwcGFjcl9pbmZvX3N0cnVjdCBwcGFjcl9pbmZvOworI2VuZGlmCisKKyAgICBjc2dfYWNjZXNzX21vZGVfZW51bSBjc2dfYWNjZXNzX21vZGU7CisgICAgY3NnX2luZm9fc3RydWN0IGNzZ19pbmZvOworCisjaWZkZWYgX19MVEVfUkFUX18KKyAgICBrYWxfYm9vbCBpc19ncHJzX2luZm9faW5fc2kxM19kZWZlcnJlZDsKKyNlbmRpZgorICAgIGthbF91aW50OCBiYW5kOworfSBud3NlbF9tbV9zeXNfaW5mb191cGRhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmF0X2VudW0gcmF0OworICAgIGthbF91aW50MzIgY2VsbF9pZDsKKyAgICBrYWxfYm9vbCAgaXNfbGFfdmFsaWQ7CisgICAga2FsX3VpbnQ4IGxhX2NvZGVbMl07CisgICAga2FsX2Jvb2wgIGlzX3JhX3ZhbGlkOworICAgIGthbF91aW50OCByYV9jb2RlOworICAgIHBsbW5faWRfc3RydWN0IHBsbW5faWQ7CisgICAga2FsX2Jvb2wgaXNfb25faHBsbW47Cit9IG53c2VsX21tX2NlbGxfZ2xvYmFsX2lkZW50aXR5X2luZm9fdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgbW1fY2VsbF9nbG9iYWxfaWRlbnRpdHlfaW5mb19pbmRfc3RydWN0IG53c2VsX21tX2NlbGxfZ2xvYmFsX2lkZW50aXR5X2luZm9faW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgbW9kZV9zd2l0Y2hfY2F1c2VfZW51bSAgY2F1c2U7Cit9IG53c2VsX21tX2dsb2JhbF9tb2RlX2NoYW5nZV9zdGFydF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmF0X3R5cGVfZW51bSAgICB0YXJnZXRfcmF0OworICAgIGthbF91aW50OCAgICAgICAgZnJlcV9udW07CisgICAga2FsX3VpbnQzMiAgICAgICByZWRpcmVjdF9mcmVxW01BWF9SRURJUkVDVF9GUkVRX05VTV07CisgICAgbXRfY3NmYl90eXBlX2VudW0gICBtdF9jc2ZiX3R5cGU7Cit9IG53c2VsX21tX25lZWRfZHVwbGV4X21vZGVfY2hnX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19hc19wbG1uX2xpc3RfcHJlc2VudDsKKyAgICBhc19wbG1uX2xpc3Rfc3RydWN0IGFzX3BsbW5fbGlzdDsKKyNpZmRlZiBfX0dFTUlOSV9fCisgICAgYXNfc3VzcGVuZF9tb2RlX3JlYXNvbl9lbnVtIGNhdXNlOyAvKiBmb3IgUlIgc3VzcGVuZCBtb2RlICovCisjZW5kaWYgLyogX19HRU1JTklfXyAqLworICAgIGNzZmJfaW5kaWNhdG9yX2VudW0gY3NmYl9pbmQ7CisgICAga2FsX2Jvb2wgaXNfbmFzX2NzZmJfb25nb2luZzsKKyAgICBwbG1uX2xvc3NfcmVhc29uX2VudW0gcGxtbl9sb3NzX3JlYXNvbjsKK30gbndzZWxfbW1fcGxtbl9sb3NzX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUiAgIAorICAgIHJhdF9lbnVtIHJhdDsKKyAgICBrYWxfYm9vbCBpc19tYW51YWxfbGlzdDsKKyAgICBzY2FuX3R5cGVfZW51bSBzY2FuX3R5cGU7CisgICAga2FsX3VpbnQ4IHBsbW5fY291bnQ7IAorICAgIHBsbW5faWRfc3RydWN0IHBsbW5faWRbTUFYX05VTV9TRUFSQ0hfUExNTl07CisgICAgZm91bmRfbWNjX2luZm9fc3RydWN0IGZvdW5kX21jY19pbmZvOworfSBud3NlbF9tbV9wbG1uX2xpc3RfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX3VzZXJfcGxtbl9saXN0X29uZ29pbmc7Cit9IG53c2VsX21tX3BsbW5fbGlzdF9zdGF0dXNfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUiAgIAorICAgIGthbF9ib29sIGlzX3Vhc19wbG1uX2xpc3RfcHJlc2VudDsKKyAgICBhc19wbG1uX2xpc3Rfc3RydWN0IHVhc19wbG1uX2xpc3Q7CisgICAga2FsX2Jvb2wgaXNfZ2FzX3BsbW5fbGlzdF9wcmVzZW50OworICAgIGFzX3BsbW5fbGlzdF9zdHJ1Y3QgZ2FzX3BsbW5fbGlzdDsKKyAgICBzY2FuX3R5cGVfZW51bSBzY2FuX3R5cGU7CisgICAgcGxtbl9saXN0X3Jlc3VsdF9lbnVtIGNhdXNlOworfSBud3NlbF9tbV9wbG1uX2xpc3RfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmF0X2VudW0gcmF0OworICAgIGthbF91aW50OCBwbG1uX2NvdW50OworICAgIHBsbW5faWRfc3RydWN0IHBsbW5faWRbTUFYX05VTV9FUV9QTE1OXTsKK30gbndzZWxfbW1fY3NnX2xpc3RfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgLy9rYWxfYm9vbCBpc191YXNfY3NnX2xpc3RfcHJlc2VudDsKKyAgICBhc19jc2dfbGlzdF9zdHJ1Y3QgdWFzX2NzZ19saXN0OworfSBud3NlbF9tbV9jc2dfbGlzdF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIgCisJYXJhbF9vcF9lbnVtIG9wX2NvZGU7CisgICAgcGxtbl9pZF9zdHJ1Y3QgcGxtbjsKKyAgICByYXRfZW51bSByYXQ7CisgICAga2FsX3VpbnQ4IGFyYV9zdGFydFsyXTsKKyAgICBrYWxfdWludDggYXJhX2VuZFsyXTsKK31ud3NlbF9tbV9hcmFsX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIgCisgICAgcmVnbl9wcm9jX3N0YXR1c19lbnVtIG53c2VsX3Byb2Nfc3RhdHVzOworICAgIHBsbW5fc2VhcmNoX3N0YXR1c19lbnVtIHBsbW5fc2VhcmNoX3N0YXR1czsgCisgICAgcGxtbl9zZWFyY2hfdHlwZV9lbnVtIHBsbW5fc2VhcmNoX3R5cGU7CS8qIG5ldyBwbG1uIHNlYXJjaCB0eXBlICovCisgICAga2FsX2Jvb2wgaXNfc2VuZF90b19hczsKK30gbndzZWxfbW1fcmVnbl9zdGF0dXNfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKKyNpZmRlZiBfX0RZTkFNSUNfQkFORF9TRUxfXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgYmFuZF9zZWxlY3Rpb25fZW51bSBnc21fYmFuZDsgLyogcmVmZXIgdG8gYmFuZF9zZWxlY3Rpb25fZW51bSB2YWx1ZSovIAorICAgIGthbF9ib29sIGlzX2dzbV9iYW5kX3ByZXNlbnQ7ICAKKyAgICBrYWxfdWludDggdW10c19mZGRfYmFuZFsyXTsgICAgLyogM0cgYmFuZCBjaGFuZ2UgKi8KKyAgICBrYWxfYm9vbCBpc191bXRzX2JhbmRfcHJlc2VudDsgLyogM0cgYmFuZCBjaGFuZ2UgKi8KK31ud3NlbF9tbV9zZXRfcHJlZmVycmVkX2JhbmRfcmVxX3N0cnVjdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBscl9yZXN1bHRfZW51bSBscl9yZXN1bHQ7CisgICAgbW1fY2F1c2VfZW51bSBscl9jYXVzZTsKKyAgICBtbV9wcm9jX2VudW0gbW1fcHJvYzsKKyAgICBrYWxfdWludDggYXR0ZW1wdF9jb3VudGVyOyAvL3VwZGF0ZSBvbmx5IHdoZW4gbHJfcHJvYyBuZWVkZWQKKyAgICBwbG1uX2lkX3N0cnVjdCBycGxtbjsgLy9mcm9tIHN0b3JlZCBsYWkuIFZhbGlkIHdoZW4gTFJfQUNDRVBUICYgTFJfQUNDRVBUX1BTX09OTFkKKyAgICBrYWxfYm9vbCBmb3JiaWRkZW5fcGxtbl91cGRhdGVfbm90X2FsbG93ZWQ7IC8qTU0gbWF5IGNoYW5nZSBOVyByZWplY3QgY2F1c2UsIGFuZCBubyBuZWVkIHRvIGFkZCBmb3JiaWRkZW4gUExNTiAqLworICAgIGthbF9ib29sIGlzX3VwZGF0ZV9lcV9wbG1uX25lZWRlZDsgLyogYWx3YXlzIGNoZWNrOyBpbmRpY2F0ZSBpZiBOV1NFTCBuZWVkIHRvIHVwZGF0ZSBFUExNTiAqLworICAgIGthbF91aW50OCBlcV9wbG1uX2J5dGVfY291bnQ7CisgICAga2FsX3VpbnQ4IGVxX3BsbW5faWRbTUFYX05VTV9FUV9QTE1OKjNdOyAvKiB0aGUgRVBMTU4gbGlzdCBmcm9tIE5XOyAzIGlzIE5XU0VMX1BMTU5fTEVOICovCisgICAga2FsX2Jvb2wgaXNfYmFja190b19hYm5vcm1hbF9sYTsKKyAgICBrYWxfYm9vbCBpc19yYXVfcGVyZm9ybWVkOworICAgIGthbF9ib29sIGlzX3N0b3JlZF9sYWlfc2FtZV9hc19jdXJyZW50OworICAgIGthbF9ib29sIHN0b3JlZF9sYWlfdmFsaWQ7CisgICAga2FsX2Jvb2wgc3RvcmVkX3JhaV92YWxpZDsKKyAgICBnc21fc3RhdGVfZW51bSBnc21fYXR0YWNoX3N0YXRlOworICAgIGdwcnNfc3RhdGVfZW51bSBncHJzX2F0dGFjaF9zdGF0ZTsKKyAgICBnc21fdXBkYXRlX3N0YXR1c19lbnVtIGdzbV91cGRhdGVfc3RhdHVzOworICAgIGdwcnNfdXBkYXRlX3N0YXR1c19lbnVtIGdwcnNfdXBkYXRlX3N0YXR1czsKKyAgICBtbV9jaGVja19lY2FsbF9zdGF0dXNfZW51bSBlY2FsbF9zdGF0dXM7CisJa2FsX2Jvb2wgaXNfbW9iaWxpdHlfcmF1OyAvKlRvIGNoZWNrIHdoZXRoZXIgdXBkYXRlX3R5cGUgaXMgcGVyaW9kaWMgcmF1IG9yIG1vYmlsaXR5IHJhdSAqLworICAgIGludGVnX3Byb3RlY3Rfc3RhdHVzX2VudW0gIGlzX2ludGVnX3Byb3RlY3RlZDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICBpbnZhbGlkX2NzX3NpbV9jb3VudGVyOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgIGludmFsaWRfcHNfc2ltX2NvdW50ZXI7Cit9IG53c2VsX21tX3JlZ25fcmVzdWx0X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGRvbWFpbl9pZF9lbnVtIGNvbm5fZG9tYWluOworfSBud3NlbF9tbV9vdXRfb2Zfc2VydmljZV9pbmRfc3RydWN0OworCisjaWZkZWYgX19HRU1JTklfXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgYXNfc3VzcGVuZF9tb2RlX3JlYXNvbl9lbnVtIGNhdXNlOworfSBud3NlbF9tbV9zdXNwZW5kX2luZF9zdHJ1Y3Q7CisKKy8vbXRrMDI0NzU6IGxvY2FsIHBhcmFtIHN0cnVjdCBpcyBvbmx5IGV4aXN0IGluIEdFTUlOSSAyLjAgcHJvamVjdAordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfdmlydHVhbF9pZGxlX21vZGU7Cit9IG53c2VsX21tX3Jlc3VtZV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc192aXJ0dWFsX2lkbGVfbW9kZTsKKwlrYWxfYm9vbCBpc19pbl9jb25uZWN0ZWQ7CisJLypOYW1pbmcgaXMgImlzX2luX2Nvbm5lY3RlZCBidXQgaXQgaXMgZXhwZWN0ZWQgdGhhdCBHTU0gdXBkYXRlcyBvbmx5IAorCXZpcnR1YWxfY29ubmVjdGVkIHN0YXRlIHRvIE5XU0VMIiovCit9IG53c2VsX21tX3ZpcnR1YWxfbW9kZV9pbmRfc3RydWN0OworI2VuZGlmIC8qIF9fR0VNSU5JX18gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgbW1fZXZlbnRfdHlwZV9lbnVtIGV2ZW50OworfSBud3NlbF9tbV9ldmVudF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgICBrYWxfdWludDggcGxtbl9pZF9jb3VudDsKKyAgICBwbG1uX2lkX3N0cnVjdCBwbG1uX2lkW01EMV9NQVhfTlVNX0hQTE1OXTsgLy9NQVhfTlVNX0hQTE1OOiA0CisgICAga2FsX3VpbnQ4IGhvbWVfY291bnRyeV9tY2NbM107Cit9IG53c2VsX21tX2hwbG1uX2luZm9fdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGV1dHJhbl9jYXBfZW51bSBldXRyYW5fY2FwOworICAgIGthbF9ib29sIGlzX2V1Y2FwX3N5c2luZm9fdHJpZ2dlcmVkOworfSBud3NlbF9tbV9ldXRyYW5fY2FwX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19zdWNjZXNzZnVsOworfSBud3NlbF9tbV9ldXRyYW5fY2FwX3VwZGF0ZV9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICB2b2ljZV9kb21haW5fcHJlZmVyZW5jZV9lbnVtIHV0cmFuX3ZvaWNlX2RvbWFpbl9wcmVmZXJlbmNlOworICAgIGthbF9ib29sIGlzX2V1dHJhbl9wYXJhbV91cGRhdGVkOyAvKiBpZiBGQUxTRSwgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkICovCisgICAga2FsX2Jvb2wgaXNfZXV0cmFuX3ZkcF9vcl91ZV91c2FnZV9jaGFuZ2VkOworICAgIHZvaWNlX2RvbWFpbl9wcmVmZXJlbmNlX2VudW0gZXV0cmFuX3ZvaWNlX2RvbWFpbl9wcmVmZXJlbmNlOworICAgIHVlX3VzYWdlX3NldHRpbmdfZW51bSB1ZV91c2FnZV9zZXR0aW5nOworCWV1dHJhbl9jYXBfdXBkYXRlX3dhaXRfc3RhdHVzX2VudW0gZXV0cmFuX2NhcF91cGRhdGVfd2FpdF9zdGF0dXM7Cit9IG53c2VsX21tX3ZvaWNlX3ByZWZlcl91ZV91c2FnZV91cGRhdGVfcmVxX3N0cnVjdDsKKworLyogMjQuMDA4IENSIyAyMTA5IFN0YXJ0ICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19tYW51YWxfc2VsOworfSBud3NlbF9tbV9tYW51YWxfbW9kZV91cGRhdGVfcmVxX3N0cnVjdDsKKy8qIDI0LjAwOCBDUiMgMjEwOSBFbmQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmF0X2VudW0gICAgICAgICAgICAgICByYXQ7ICAgCisgICAgcGxtbl9pZF9zdHJ1Y3QgICAgICAgICBwbG1uX2lkOworICAgIGthbF91aW50MTYgICAgICAgICAgICAgYXJmY247CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICByZXF1ZXN0ZWRfYmFuZDsKK30gbndzZWxfbW1fc2V0X21ydV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBzZXRfbXJ1X3Jlc3VsdF9lbnVtIHJlc3VsdDsgIAorfSBud3NlbF9tbV9zZXRfbXJ1X2NuZl9zdHJ1Y3Q7CisKKy8qIFZ6VyByZXF1aXJlbWVudCBmb3IgTVJVL1JBTCwgb25seSBiYW5kL2NoYW5uZWwgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGNlbGxfYmFuZF9pbmZvX3R5cGVfZW51bSAgICB0eXBlOworICAgIHJhdF9lbnVtICAgICAgICAgICAgICAgICAgICByYXQ7ICAgIAorICAgIHBsbW5faWRfc3RydWN0ICAgICAgICAgICAgICBwbG1uX2lkOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBiYW5kOyAKK30gbndzZWxfbW1fY2VsbF9iYW5kX2luZm9fdXBkYXRlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHJhdF9lbnVtICAgICAgICAgICAgICAgICAgICByYXQ7ICAgIAorICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBudW1fb2Zfbnc7CisgICAgZW1jX2ZvcmJpZGRlbl9ud19saXN0X3N0cnVjdCBud19saXN0W01BWF9GT1JCSURERU5fTkVUV09SS19OVU1dOworfSBud3NlbF9tbV9lbWNfZm9yYmlkZGVuX253X2xpc3RfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgY2FsbF9zdGF0dXNfZW51bSBjYWxsX3N0YXR1czsKKyAgICBjYWxsX3R5cGVfaW5kaWNhdGlvbl9lbnVtIGNhbGxfdHlwZTsKK30gbndzZWxfbW1fY2FsbF9zdGF0dXNfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBnbXNzX253c2VsX3JhdF9kaXNhYmxlX2NvbmZpZ19yZXFfc3RydWN0IG53c2VsX21tX3JhdF9kaXNhYmxlX2NvbmZpZ19yZXFfc3RydWN0OworCit0eXBlZGVmIGdtc3NfbndzZWxfaW5hY3RpdmVfbW9kZV9jb25maWd1cmF0aW9uX3JlcV9zdHJ1Y3QgbndzZWxfbW1faW5hY3RpdmVfbW9kZV9jb25maWd1cmF0aW9uX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfb3Zlcl9pbmFjdGl2ZV9tb2RlX3RocmVzaG9sZDsgLy8gVHJ1ZTogcmVjb3ZlcnkgY291bnRlciA+IG5vcm1hbF9vb3NfcmVjb3Zlcnlfcm91bmQKK30gbndzZWxfbW1fc2VydmljZV9yZWNvdmVyeV9yb3VuZF91cGRhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAgTE9DQUxfUEFSQV9IRFIKKwlyYXRfZW51bSByYXQ7CisgICAgbmV0d29ya19zY2FuXzIzZ191bmlvbiBud19zY2FuXzIzZ19vdXRwdXQ7Cit9bndzZWxfbW1fcGxtbl9zY2FuX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcGxtbl9pZF9zdHJ1Y3QgICAgICAgICAgICAgIHBsbW5faWQ7Cit9IG53c2VsX21tX3BsbW5faW5mb191cGRhdGVfcmVxX3N0cnVjdDsKKworCisjZW5kaWYgLyogTldTRUxfTU1fU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ud3NlbF9wYW1fc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbndzZWxfcGFtX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNDg0MmIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbndzZWxfcGFtX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogTldTRUxfUEFNX1NUUlVDVC5ICisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIAorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgTldTRUxfUEFNX1NUUlVDVF9ICisjZGVmaW5lIE5XU0VMX1BBTV9TVFJVQ1RfSAorCisvKiBlbnVtICovCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKworLyogc3RydWN0ICovCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAibWNkX2wzX2luY19zdHJ1Y3QuaCIKKworLyoqIE1PRF9OV1NFTCAtPiBNT0RfUEFNOiBVcGRhdGUgZXEtcGxtbi1saXN0W10gd2hlbiByZWdpc3RlcmVkIHRvIFBTIGRvbWFpbi4gCisgKiAgRGVzaWduIGFzc3VtcHRpb24KKyAqICA9PT09PT09PT09PT09PT09PQorICogIC0gMjNHOiBTaW5jZSBHTU0gYWx3YXlzIGNvbXBsZXRlcyBpdHMgUFMtQVRUQUNIIChSRUcpIGJlZm9yZSBQRFAtQUNULVJFUSBwcm9jZWR1cmUsIAorICogICAgICAgICBmb3IgdGhlIHJlamVjdGlvbiBjYXNlIGJlbG93LCBQQU0gYWx3YXlzIGhhcyBhIGN1cnJlbnRfZXFfcGxtbl9saXN0W10gdG8gdXNlIAorICogIC0gNEcgOiBTaW5jZSBQRE4tQ09OTi1SRVEgd291bGQgYmUgZW1iZWRkZWQgaW4gQVRUQUNILVJFUSwgCisgKiAgICAgICAgIGZvciA0RyBhdHRhY2gtcmVqZWN0IGNhc2UsIHRoZSBwbG1uIGluZm8gd291bGQgYmUgc2VudCBmcm9tIEVNTSAtPiBFU00gLT4gUEFNCisgKiAgLSBOb3RlOiBOV1NFTCBhbHdheXMgdXBkYXRlcyBlcS1wbG1uLWxpc3RbXSB0byBQQU0sIG5vIG1hdHRlciBpdCBpcyAyM0cgb3IgNEcgbm93CisgKgorICogIEhvdyB0byB1c2UgCisgKiAgPT09PT09PT09PQorICogIC0gMTogV2hlbiByZWNlaXZpbmcgdGhpcyBtZXNzYWdlLCBQQU0gc2F2ZXMgZXFfcGxtbl9pZFtdIGludG8gaXRzIGNvbnRleHQ6IGN1cnJlbnRfZXFfcGxtbl9saXN0W10gCisgKiAgLSAyOiBXaGVuIHJlY2VpdmluZyBQRFAtQUNULVJFSiBmcm9tIFNNLCAKKyAqICAgICAgIFBBTSByZWZlcnMgY3VycmVudF9lcV9wbG1uX2xpc3RbXSBhbmQgc2F2ZXMgYm90aCBjdXJyZW50LXBsbW4gYW5kIGVxLXBsbW5zIGludG8gdGhlIGFyYml0cmF0aW9uIHRhYmxlCisgKiAgLSAzOiBXaGVuIHJlY2VpdmluZyBhIG5ldyBQRFAtQUNULVJFUSBmcm9tIFRDTSwgCisgKiAgICAgICBQQU0gY2hlY2tzIGN1cnJlbnRfZXFfcGxtbl9saXN0WzBdIGFnYWluc3QgdGhlIGFyYml0cmF0aW9uIHRhYmxlIAorICogICAgICAgLSBJZiBjdXJyZW50X2VxX3BsbW5fbGlzdFswXSBleGlzdHMsIHRoZW4gUEFNIHJlamVjdHMgdGhlIGluY29taW5nIFBEUC1BQ1QtUkVRCisgKiAgLiAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICBrYWxfdWludDggZXFfcGxtbl9jb3VudDsKKyAgICAKKyAgICAvKiogVGhlIGVxX3BsbW5faWRbMF0gd291bGQgYmUgUmVnaXN0ZXJlZCBQTE1OLiAqLworICAgIHBsbW5faWRfc3RydWN0IGVxX3BsbW5faWRbTUFYX05VTV9FUV9QTE1OXTsgCit9IG53c2VsX3BhbV9lcV9wbG1uX2xpc3RfdXBkYXRlX2luZF9zdHJ1Y3Q7CisKKy8qKiBNT0RfTldTRUwgLT4gTU9EX1BBTTogaW5kaWN0cyB0aGVyZSBpcyBubyBhdmFpbGFibGUgUEROIGZvciBjdXJyZW50IFBMTU4gCisgKiAgRGVzaWduIGFzc3VtcHRpb24KKyAqICA9PT09PT09PT09PT09PT09PQorICogIC0gNEcgOiBUbyByZXBsYWNlIEVNTSByZXBvcnQgRVZFTlQgdG8gbm90aWZ5IE5XU0VMIG5vIGF2YWlsYWJsZSBQRE4sIAorICogICAgICAgICAgICBpbiBvcmRlciB0byBhdm9pZCA0RyBza2lwIGJ1dCAzRzQgSVJDUiBpbmZpbml0ZSBsb29wLiBEaXNhYmxlIEVVVFJBTiBmb3IgMzM5NiBydW5uaW5nIGlzIG5lY2Nlc2FyeQorICoKKyAqICBIb3cgdG8gdXNlIAorICogID09PT09PT09PT0KKyAqICAtIDE6IElmIHRoZXJlIGlzIDMzOTYgKGZvciBWelcsIHRoZXJlIGFyZSB0d28gUEROcyBpbnRlcm5ldCAmIElNUywgdXNlIHNob3J0ZXIgb25lIGFmdGVyIGFsbCB0cmllZCkgCisgKiAgICAgICAgIFBBTSBnaXZlIHRoZSB0aW1lciBhbmQgTldTRUwgc3RhcnQgYSBQTE1OIGJhc2UgdGltZXIgdG8gZGlzYWJsZSBFVVRSQU4KKyAqICAtIDI6IElmIHRoZXJlIGlzIG5vIDMzOTYsIGp1c3QgZm9sbG93IG9yaWdpbmFsIGRlc2lnbiBza2lwIGN1cnJlbnQgNEcgYW5kIHJvbGxiYWNrIGFmdGVyIHNlYXJjaCByb3VuZAorICogIC0gMzogQVBOIGNoYW5nZXMgUEFNIHdpbGwgbm90aWZ5IE5XU0VMIHRvIGNsZWFyIGFsbCByZWNvcmRzLgorICogIC0gNDogTm8gbmVlZCB0byBrZWVwIGluIE5WUkFNLCByZXRyeSBhbGwgbmV0d29yayBhZnRlciBwb3dlciBjeWNsZQorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHBkbl91cGRhdGVfZXZlbnRfZW51bSB0eXBlOworICAgIGthbF91aW50MzIgdGltZV92YWx1ZTsKK30gbndzZWxfcGFtX3Bkbl9hdmFpbGFiaWxpdHlfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBwbG1uX2lkX3N0cnVjdCBwbG1uX2lkOworCisgICAgLyogVGhlIGFwbl90eXBlIGlzIGJpdG1hcCBmb3JtYXQuIEFuIEFQTiBtYXkgaGF2ZSBtdWx0aXBsZSB0eXBlIGF0dHJpYnV0ZSwgc28gaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBtb3JlCisgICAgICAgdGhhbiBvbmUgYml0IGFzICcxJy4gZm9yIGV4YW1wbGUsIHRoZSBDSFQgZW1vbWUgQVBOIGhhcyAiZGVmYXVsdCIgdHlwZSArICJtbXMiIHR5cGUuKi8KKyAgICBwYW1fbndzZWxfYXBuX3R5cGVfZW51bSBhcG5fdHlwZTsKKworICAgIHJhdF9lbnVtIHJlamVjdF9yYXQ7CisgICAga2FsX2Jvb2wgdGltZXJfaXNfZGVhY3RpdmF0ZWQ7CisgICAga2FsX3VpbnQzMiB0aHJvdHRsaW5nX3RpbWVzdGFtcDsKK30gdGhyb3R0bGluZ19hcG5fYmxvY2tfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggdGhyb3R0bGluZ19hcG5fYmxvY2tfY291bnQ7CisgICAgdGhyb3R0bGluZ19hcG5fYmxvY2tfc3RydWN0IHRocm90dGxpbmdfYXBuX2Jsb2NrW01BWF9USFJPVFRMSU5HX0FQTl9CTE9DS19OVU1dOworICAgIGthbF9ib29sIGlzX2xhc3RfcmVqZWN0X3JhdF9ucjsgLy8gSW5kaWNhdGUgTVNHX05XU0VMX1BBTV9USFJPVFRMSU5HX0FQTl9VUERBVEVfSU5EIGlzIHRyaWdnZXJkIGR1ZSB0byA1RyBSZWplY3QgQ2F1c2UgaXMgcmVjZWl2ZWQuCit9IG53c2VsX3BhbV90aHJvdHRsaW5nX2Fwbl91cGRhdGVfaW5kX3N0cnVjdDsKKworI2VuZGlmIC8qIE5XU0VMX1BBTV9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL253c2VsX3JhdGNtX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL253c2VsX3JhdGNtX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZWJlNDUKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbndzZWxfcmF0Y21fc3RydWN0LmgKQEAgLTAsMCArMSw5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIG53c2VsX3JhdGNtX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTlpBCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqIFRoaXMgZmlsZSBkZWZpbmUgdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgdXNlZCBieSBOV1NFTF9SQVRDTSBTQVAKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBOV1NFTF9SQVRDTV9TVFJVQ1RfSAorI2RlZmluZSBOV1NFTF9SQVRDTV9TVFJVQ1RfSAorCisjaW5jbHVkZSAibDNfaW5jX2VudW1zLmgiCisjaW5jbHVkZSAibWNkX2wzX2luY19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJsM19pbmNfbG9jYWwuaCIKKyNpbmNsdWRlICJhczJuYXNfc3RydWN0LmgiCisjaW5jbHVkZSAibWNkX2wzX2luY19ncHJzX3N0cnVjdC5oIgorI2luY2x1ZGUgInBzX3B1YmxpY19lbnVtLmgiCisjaW5jbHVkZSAicnN2YXNfZW51bS5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggZXFfcGxtbl9jb3VudDsKKyAgICBwbG1uX2lkX3N0cnVjdCBlcV9wbG1uX2lkW01BWF9OVU1fRVFfUExNTl07IC8qIFRoZSBlcV9wbG1uX2lkWzBdIHNob3VsZCBiZSBSUExNTiAqLworfSBud3NlbF9yYXRjbV9lcV9wbG1uX2xpc3RfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKKy8qIGFic3RyYXRlZCBmcm9tIG1tX3JhdGNtX3JlZ25fc3RhdHVzX3JlcSAqLworI2lmZGVmIF9fUkVMOF9fCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIgIAorICAgIGthbF91aW50OCByX2VxX3BsbW5fY291bnQ7CisgICAgcGxtbl9pZF9zdHJ1Y3Qgcl9lcV9wbG1uX2lkW01BWF9OVU1fRVFfUExNTl07Cit9IG53c2VsX3JhdGNtX3JwbG1uX2VxX3BsbW5fbGlzdF91cGRhdGVfcmVxX3N0cnVjdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcGxtbl9pZF9jb3VudDsKKyAgICBwbG1uX2lkX3N0cnVjdCBwbG1uX2lkW01EMV9NQVhfTlVNX0hQTE1OXTsgLy8gTUQxX01BWF9OVU1fSFBMTU4KK30gbndzZWxfcmF0Y21faHBsbW5faW5mb191cGRhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmF0X2VudW0gcmF0OworfSBud3NlbF9yYXRjbV9zaWduYWxfYXBwZWFyX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHJhdF9lbnVtIHJhdDsKK30gbndzZWxfcmF0Y21fY2VsbF9jaGFuZ2VfZmluaXNoX2luZF9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBOV1NFTF9SQVRDTV9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL253c2VsX3JhdGRtX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL253c2VsX3JhdGRtX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDFiZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvbndzZWxfcmF0ZG1fc3RydWN0LmgKQEAgLTAsMCArMSw1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIG53c2VsX3JhdGRtX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIAorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9OV1NFTF9SQVRETV9TVFJVQ1RfSAorI2RlZmluZSBfTldTRUxfUkFURE1fU1RSVUNUX0gKKyNpbmNsdWRlICJuYXNfc3ZfcmF0ZG1fc3RydWN0LmgiCisKKyNlbmRpZiAvKiBfTldTRUxfUkFURE1fU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9vYmV4X2FwcF9lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL29iZXhfYXBwX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzMjc2OAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9vYmV4X2FwcF9lbnVtcy5oCkBAIC0wLDAgKzEsMTI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBvYmV4X2FwcF9lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBFbnVtIHZhbHVlIGJldHdlZW4gT0JFWCBhbmQgQVBQLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX09CRVhfQVBQX0VOVU1TX0gKKyNkZWZpbmUgX09CRVhfQVBQX0VOVU1TX0gKKworI2RlZmluZSBJUkRBX01BWF9VU0VSX0RBVEEgNTEyIC8qIE9CRVggKyBUVFAgKyBMTVAgKi8KKyNkZWZpbmUgSVJEQV9NQVhfREVDTEFSRURfT0JFWF9QS1RfU0laRSAzMjY3MiAvKiBGb2xsb3cgUEMgZGV2aWNlICovCisvLyNkZWZpbmUgSVJEQV9NQVhfVVNFUl9EQVRBIDEyOCAvKiBPQkVYICsgVFRQICsgTE1QICovIC8qIDA0LjAyLjIzIENoYW5nZSBmcm9tIDI1NiB0byAxMjggKi8KKworI2RlZmluZSBUVFBfSEVBREVSX1NJWkUgMQorI2RlZmluZSBMTVBfSEVBREVSX1NJWkUgMgorI2RlZmluZSBPQkVYX01BWF9QS1RfU0laRSBJUkRBX01BWF9VU0VSX0RBVEEgLSBUVFBfSEVBREVSX1NJWkUgLSBMTVBfSEVBREVSX1NJWkUKKyNkZWZpbmUgT0JFWF9NQVhfQVBQX0RBVEEgT0JFWF9NQVhfUEtUX1NJWkUgLSA2IC8qIDYgPSBPQkVYIFBVVCBoZWFkZXIoMykgYW5kIEJPRFkgaGVhZGVyKDMpICovCisKKyNkZWZpbmUgSVJDT01NX01BWF9QS1RfU0laRSBJUkRBX01BWF9VU0VSX0RBVEEgLSBUVFBfSEVBREVSX1NJWkUgLSBMTVBfSEVBREVSX1NJWkUKKyNkZWZpbmUgSVJDT01NX01BWF9BUFBfREFUQSBPQkVYX01BWF9QS1RfU0laRSAtIDEgLyogMSA9IElyQ09NTSBjb250cm9sIGxlbiBmaWVsZCAqLworCit0eXBlZGVmIGVudW0KK3sKKyAgIE9CRVhfQ0xPU0UsCisgICBPQkVYX0NPTk5FQ1RFRCwKKyAgIE9CRVhfT1BFTgorfSBvYmV4X3N0YXRlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgT0JFWF9JQVNfQ0xPU0UsCisgICBPQkVYX0lBU19XQUlUSSwKKyAgIE9CRVhfSUFTX09QRU4KK30gb2JleF9pYXNfc3RhdGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICBPQkVYX0VSUl9MTVBfRkFJTEVELAorICAgT0JFWF9FUlJfSUFTX0ZBSUxFRCwKKyAgIE9CRVhfRVJSX1RUUF9GQUlMRUQsCisgICBPQkVYX0VSUl9PQkVYX0ZBSUxFRAorfSBvYmV4X2Vycl9jYXVzZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sgICAgCisgICAgT0JFWF9BUFBfUkVTX0NPTlRJTlVFX0Y9MHg5MCwgCisgICAgT0JFWF9BUFBfUkVTX1NVQ0NFU1NfRj0weEEwLAorICAgIE9CRVhfQVBQX1JFU19GQUlMRURfRj0weEM0Cit9IG9iZXhfYXBwX3JzcF9jb2RlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgT0JFWF9GSVJTVF9QS1QsCisJT0JFWF9OT1JNQUxfUEtULAorCU9CRVhfRklOQUxfUEtUCit9IG9iZXhfcGt0X3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICBPQkVYX1RSQU5TTUlTU0lPTl9GSU5JU0hFRCwKKyAgIE9CRVhfVVNFUl9DQU5DRUxMRUQKK30gb2JleF9kaXNjb25uZWN0X3JlYXNvbl9lbnVtOworCisjZW5kaWYgLyogfl9PQkVYX0FQUF9FTlVNU19IICovCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3AycF9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9wMnBfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM0YmY0NwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9wMnBfc3RydWN0LmgKQEAgLTAsMCArMSw5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgcDJwX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgY29tbW9uIHN0cnVjdCBvZiBMTEMgYW5kIExheWVyMy4gCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9QMlBfU1RSVUNUX0gKKyNkZWZpbmUgX1AyUF9TVFJVQ1RfSAorCisjaWZkZWYgX19QMlBfU1VQUE9SVF9fCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggcmVmX2NvdW50OworICAgIGthbF91aW50MTYgbXNnX2xlbjsKKyAgICBrYWxfdWludDggc3RhcnRfaW5kOworfSBwMnBfc2VuZF91bF9kYXRhX2luZF9zdHJ1Y3Q7CisKKyNlbmRpZgorCisjZW5kaWYgCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3BhbV9tc2dfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcGFtX21zZ19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTc5YTg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3BhbV9tc2dfc3RydWN0LmgKQEAgLTAsMCArMSwyMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiBQQU1fTVNHX1NUUlVDVC5ICisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIAorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBQQU1fTVNHX1NUUlVDVF9ICisjZGVmaW5lIFBBTV9NU0dfU1RSVUNUX0gKKworLyogc3RydWN0ICovCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisKKyNpbmNsdWRlICJud3NlbF9ldmFsX3N0cnVjdC5oIgorCisvKiBNdWx0aW1vZGUgKi8KKyNpbmNsdWRlICJpcmF0X2NvbW1vbl9zdHJ1Y3QuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX2dwcnNfc3RydWN0LmgiCisjaW5jbHVkZSAibDNfaW5jX2VudW1zLmgiCisjaW5jbHVkZSAibWNkX2wzX2luY19zdHJ1Y3QuaCIKKworI2lmbmRlZiBNQVhfQkVBUkVSX0NUWFRfTlVNCisjZGVmaW5lIE1BWF9CRUFSRVJfQ1RYVF9OVU0gMTEKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIgICAgCit9IHRjbV9wYW1fc3RhcnRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSICAgIAorfSB0Y21fcGFtX2F0dGFjaF9jb250ZXh0X2RlZmluZWRfbm90aWZ5X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUiAgICAKKyAgICBrYWxfYm9vbCAgICBpc191ZV92b2ljZV9jZW50cmljIDsgICAgICAgICAgIC8qIENvbmZpZ3VyZWQgYnkgQVQrQ0VVUyAodm9pY2UvZGF0YSBjZW50cmljKSAqLworICAgIGthbF9ib29sICAgIGlzX2ltc19yb2FtaW5nX3N1cHBvcnRlZCA7ICAgICAgLyogQ29uZmlndXJlZCBieSBJTVMgKi8KKyAgICBrYWxfYm9vbCAgICBpc19tb2JpbGVfZGF0YV9vbiA7ICAgICAgICAgICAgIC8qIENvbmZpZ3VyZWQgYnkgQVQrRUNOQ0ZHIChmcm9tIEFuZHJvaWQgVUkpICovCisgICAga2FsX2Jvb2wgICAgaXNfbW9iaWxlX2RhdGFfcm9hbWluZ19vbiA7ICAgICAvKiBDb25maWd1cmVkIGJ5IEFUK0VDTkNGRyAoZnJvbSBBbmRyb2lkIFVJKSAqLworICAgIAorICAgIGthbF9ib29sICAgIGlzX3Z6d19pbXNfdGVzdF9tb2RlX29uIDsgICAgICAgLyogSU1TIFRlc3QgTW9kZSBpcyBkZWZpbmVkIGJ5IFZaVyByZXF1aXJlbWVudHMgKi8KK30gdGNtX3BhbV9jZWxsdWxhcl9uZXR3b3JrX2NvbmZpZ19yZXFfc3RydWN0IDsKKwordHlwZWRlZiBpYV9hcG5fY2hhbmdlX3JlcV9zdHJ1Y3QgdGNtX3BhbV9pYV9hcG5fY2hhbmdlX3JlcV9zdHJ1Y3Q7IAorCisvKiogVXNlZCBieSBFU00vU00sIHRvIG5vdGlmeSBQQU0gc3RvcHBpbmcgYWxsIFQzMzk2IHRpbWVycy4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUiAKK30gcGFtX3N0b3BfYWxsX3QzMzk2X2luZF9zdHJ1Y3Q7CisKKy8qKiBVc2VkIGJ5IEVTTS9TTSwgdG8gbm90aWZ5IFBBTSB0aGF0IFBEUCBudW1iZXJzIGlzIGN1cnJlbnRseSBzeW5jJ2Qgd2l0aCBOVy4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUiAKK30gcGFtX3BkcF9zeW5jZWRfaW5kX3N0cnVjdDsKKworCisvKioqKiogVlpXKE9QMTIpIG1lc3NhZ2Ugc3RydWN0dXJlICoqKioqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgaXNfdmFsaWRfYXZhaWxhYmxlX2Fwbl9udW07CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlX2Fwbl9udW07CisgICAgcGxtbl9pZF9zdHJ1Y3QgICAgICAgICAgICAgY3VycmVudF9wbG1uX2lkOworfSBwYW1fZXNtX2F2YWlsYWJsZV9hcG5faW5mb19yZXFfc3RydWN0OyAvLyBfX1ZaV19fIF9fVlpXXzJfXworCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHBsbW5faWRfc3RydWN0ICAgICAgICAgICAgIGN1cnJlbnRfcGxtbl9pZDsKK30gcGFtX2VzbV90MzQwMl9zdG9wX2luZF9zdHJ1Y3Q7IC8vIF9fVlpXX18gX19WWldfM19fCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICAvLyBJbmRpY2F0ZXMgdGhlIGJlbG93IGN1cnJlbnRfcGxtbl9pZCBzaG91bGQgYmUgdXNlZCBvciBub3QuIAorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgIGlzX3ZhbGlkX2N1cnJlbnRfcGxtbl9pZDsKKyAgICAvLyBjdXJyZW50X3BsbW5faWQgZm9yIHN0b3BwaW5nIHRocm90dGxpbmcgdGltZXIKKyAgICBwbG1uX2lkX3N0cnVjdCAgICAgICAgICAgICBjdXJyZW50X3BsbW5faWQ7Cit9IHBhbV9lc21fc3RvcF9hbGxfcGRuX3Rocm90dF90aW1lcl9pbmRfc3RydWN0OyAvLyBfX1ZaV19fIF9fVlpXXzEwX18KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgIGViaV9lc3RfbnVtOyAgICAgICAgICAgICAgICAgICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICBlYmlfZXN0X2xpc3RbTUFYX0JFQVJFUl9DVFhUX05VTV07CisgICAgLy8gSW5kaWNhdGVzIHRoZSBiZWxvdyBjdXJyZW50X3BsbW5faWQgc2hvdWxkIGJlIHVzZWQgb3Igbm90LiAKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICBpc192YWxpZF9jdXJyZW50X3BsbW5faWQ7CisgICAgLy8gY3VycmVudF9wbG1uX2lkIGZvciBjb25uZWN0aW9uIChEUkIpIGVzdGFibGlzaAorICAgIHBsbW5faWRfc3RydWN0ICAgICAgICAgICAgIGN1cnJlbnRfcGxtbl9pZDsKK30gcGFtX2VzbV9jb25uX2VzdF9pbmRfc3RydWN0OyAvLyBfX1ZaV19fIF9fVlpXXzRfXworCisvKioqKiogQVQmVChPUDA3KSBtZXNzYWdlIHN0cnVjdHVyZSAqKioqKi8KK3R5cGVkZWYgbndzZWxfZXZhbF90MzQwMl9jaGFuZ2VfaW5kX3N0cnVjdCAgcGFtX2VzbV90MzQwMl9jaGFuZ2VfaW5kX3N0cnVjdDsKKworI2VuZGlmIC8qIFBBTV9NU0dfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYWNfZ2FzX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmFjX2dhc19lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYjVhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmFjX2dhc19lbnVtcy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICByYWNfZ2FzX2VudW1zLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9OWkEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6Qm8ud3UKKyAqIC0tLS0tLS0KKyAqICAgCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogJExvZzokCisgKgorICogMDEgMjEgMjAxNCB3Y3B1c2VyX2ludGVncmF0b3IKKyAqIFtNT0xZMDAwNTQ0NzVdIFNHTFRFIG9wdGlvbiByZW5hbWUKKyAqIC4KKyAqCisKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmFjX2dhc19zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYWNfZ2FzX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZWEzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmFjX2dhc19zdHJ1Y3QuaApAQCAtMCwwICsxLDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDcKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgcmFjX2dhc19zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT05aQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjpCby53dQorICogLS0tLS0tLQorICogICAKKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogJExvZzokCisgKgorICogMDEgMjEgMjAxNCB3Y3B1c2VyX2ludGVncmF0b3IKKyAqIFtNT0xZMDAwNTQ0NzVdIFNHTFRFIG9wdGlvbiByZW5hbWUKKyAqIC4KKyAqCisgKiBBZGQgY29weXJpZ2h0IGhlYWRlci4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhY19tcnNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmFjX21yc19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGMxYzFmCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhY19tcnNfc3RydWN0LmgKQEAgLTAsMCArMSw5MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA3CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJhY19tcnNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTXVsdGltb2RlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICRMb2c6JAorICoKKyAqIDEwIDA3IDIwMTUgdGl0aS53dQorICogW01PTFkwMDE0MTc4Nl0gW01UNjc1NV1bU1JMVEVdW0wrQ10gU3VwcG9ydCBjb25uZWN0aXZpdHkgb2YgQzJLIG9uIGR1YWwgU0lNCisgKiAuCisgKgorICogMDUgMjkgMjAxNSBzaGloLWNoZS5jaG91CisgKiBbTU9MWTAwMTE1NjE3XSBbNjI5MV0gRHluYW1pYyBTSU0gc3dpdGNoIHdpdGhvdXQgbW9kZW0gcmVzZXQKKyAqIFJBQyBwYXJ0CisgKgorICogMTIgMTcgMjAxNCBzaGluLmNoZW4KKyAqIFtNT0xZMDAwODc4ODJdIFtVbml2ZXJzYWwgQmluXSBNUlMgZ2VuZXJhbCBkZXZlbG9wZW1lbnQuCisgKgorICogMDEgMjIgMjAxMyBkYXZpZC5uaXUKKyAqIFtNT0xZMDAwMDkyMDVdIFtNUlNdIENvZGUgY2hlY2tlZC1pbiBmb3IgTU9MWSBicmFuY2gKKyAqIC4KKyAqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1JBQ19NUlNfU1RSVUNUX0gKKyNkZWZpbmUgX1JBQ19NUlNfU1RSVUNUX0gKKworLyogUkFDIHVzZXMgdGhpcyBwcmltaXRpdmUgdG8gaW5pdGlhbGl6ZSBNUlMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAgLy8gVEJEOiBjYXBhYmlsaXR5IHRvIGluaXRpYWxpemUgM0cgSW50ZXJSQVQgSE8gSW5mbyBhbmQgMkcgY2xhc3NtYXJrCisKKyAgICBoc3BhX3ByZWZlcmVuY2VfZW51bSBmZGRfaHNwYV9wcmVmZXJlbmNlOyAgLy8gc3RvcmUgdG8gTVJTIGNvbnRleHQKKyAgICBoc3BhX3ByZWZlcmVuY2VfZW51bSB0ZGRfaHNwYV9wcmVmZXJlbmNlOyAgCisgICAgaW5pdF9jYXVzZV9lbnVtIGluaXRfY2F1c2U7Cit9IHJhY19tcnNfaW5pdF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBlbWRzdGF0dXNfbWRfY29uZmlnX2VudW0gbWRfY29uZmlnOworICAgIGVtZHN0YXR1c19zaW1fY29uZmlnX2VudW0gc2ltX2NvbmZpZzsKK30gcmFjX21yc19tZF9zaW1fY29uZmlnX3JlcV9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfUkFDX01SU19TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGFkcF9zdGF0cy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGFkcF9zdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYTI4NWQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0YWRwX3N0YXRzLmgKQEAgLTAsMCArMSw4OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJhdGFkcF9zdGF0cy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogIFJBVEFEUCBzdGF0aXN0aWNzCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqICAgCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogICAgICAgRmlsZW5hbWU6ICByYXRhZHBfc3RhdHMuaAorICoKKyAqICAgIERlc2NyaXB0aW9uOiAgUkFUQURQIEVNIFN0YXRzLgorICoKKyAqICAgICAgICBDcmVhdGVkOiAgMjAxMy8wNS8yNyAgMTE6Mzg6MTAKKyAqICAgICAgICBBdXRob3I6ICBtdGswMTY0MSAobW9qYSkKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaWZuZGVmICBSQVRBRFBfU1RBVFNfSU5DCisjZGVmaW5lICBSQVRBRFBfU1RBVFNfSU5DCisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIGthbF91aW50MzIgbHRtX2hvb2tfdGltZXM7CisgICAga2FsX3VpbnQzMiByYXRkbV9ob29rX3RpbWVzOworICAgIGthbF91aW50MzIgdWdfcmVhZHlfaW5kX3RpbWVzOworCisgICAga2FsX3VpbnQzMiByYXRkbV9yb2xsYmFja190aW1lczsKKyAgICBrYWxfdWludDMyIHJhdGRtX2RsdnJfZGxfdGltZXM7CisgICAga2FsX3VpbnQzMiB1bF90b19yYXRkbV90aW1lczsKKyAgICBrYWxfdWludDMyIHVsX3RvX2R1bW15X3RpbWVzOworCisgICAga2FsX3VpbnQzMiBsZWF2ZV9yYXRkbV90aW1lczsKKyAgICBrYWxfdWludDMyIG90aGVyX3RvX2x0bV90aW1lczsKKyAgICBrYWxfdWludDMyIG90aGVyX3RvX3JhdGRtX3RpbWVzOworfXJhdGFkcF9zdGF0c190OworI2VuZGlmICAgLyogLS0tLS0gI2lmbmRlZiBSQVRBRFBfU1RBVFNfSU5DICAtLS0tLSAqLworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fYXNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fYXNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMwNmNkMQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9hc19zdHJ1Y3QuaApAQCAtMCwwICsxLDExMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA3CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJhdGNtX2FzX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIAorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFN0cnVjdHVyZSBkZWNsYXJhdGlvbiB3aGljaCBhcmUgY29tbW9uIGZvciBHQVMgYW5kIFVBUworICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogcmVtb3ZlZCEKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUkFUQ01fQVNfU1RSVUNUX0gKKyNkZWZpbmUgX1JBVENNX0FTX1NUUlVDVF9ICisKKy8qIE1BVUlfMDI4MjgyMTAsIHJlZHVuZGFudCBoZWFkZXIgcmVtb3ZhbCAqLworLy8jaW5jbHVkZSAicmF0Y21fdWFzX2VudW1zLmgiCisvLyNpbmNsdWRlICJyYXRjbV91YXNfc3RydWN0LmgiCisvLyNpbmNsdWRlICJyYXRjbV9jc2NlX2VudW1zLmgiCisjaW5jbHVkZSAibDNfaW5jX2xvY2FsLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorI2luY2x1ZGUgIm1jZF9sM19pbmNfc3RydWN0LmgiCisjaW5jbHVkZSAicHNfcHVibGljX2VudW0uaCIKKyNpbmNsdWRlICJwc19wdWJsaWNfc3RydWN0LmgiCisjaW5jbHVkZSAibmFzX3N2X3N0cnVjdC5oIgorCisKKy8qU25pZmZlciByZWxhdGVkIFJBVENNIHRvIEFTIHN0cnVjdHVyZXMqLwordHlwZWRlZiBzdHJ1Y3QgeworCUxPQ0FMX1BBUkFfSERSCisgICAgYXNfc25pZmZlcl9yZXFfc2VydmljZV9lbnVtIGFzX3NuaWZmZXJfc2VydmljZTsKKwlhc19zbmlmZmVyX3BsbW5fbGlzdF9vcGVyYXRlX3R5cGVfZW51bSBwbG1uX2xpc3Rfb3BlcmF0ZV90eXBlOworCWthbF91aW50OCAgICAgICAgICAgICAgICAgICBwbG1uX2lkX2NvdW50OworICAgIHBsbW5faWRfc3RydWN0ICAgICAgICAgICAgICBwbG1uX2lkW01BWF9OVU1fU05JRkZFUl9QTE1OXTsKK31yYXRjbV9hc19zbmlmZmVyX3N0YXJ0X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlMT0NBTF9QQVJBX0hEUgorfXJhdGNtX2FzX3NuaWZmZXJfc3RvcF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisJTE9DQUxfUEFSQV9IRFIKK31yYXRjbV9hc19zaWduYWxfYXBwZWFyX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlMT0NBTF9QQVJBX0hEUiAgCit9cmF0Y21fYXNfY2hlY2tfYWN0aXZlX3JhdF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisJTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19hY3RpdmVfcmF0OworfXJhdGNtX2FzX2NoZWNrX2FjdGl2ZV9yYXRfY25mX3N0cnVjdDsKKworLy9NU0dfSURfUkFUQ01fVUFTX1NFVF9BQ1RJVkVfUkFUX1JFUSwKK3R5cGVkZWYgc3RydWN0IHsKKwlMT0NBTF9QQVJBX0hEUgorfXJhdGNtX2FzX3NldF9hY3RpdmVfcmF0X3JlcV9zdHJ1Y3Q7CisKKy8vTVNHX0lEX1JBVENNX1VBU19TRVRfQUNUSVZFX1JBVF9DTkYKK3R5cGVkZWYgc3RydWN0IHsKKwlMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX3N1Y2Nlc3M7Cit9cmF0Y21fYXNfc2V0X2FjdGl2ZV9yYXRfY25mX3N0cnVjdDsKKworI2VuZGlmIC8qIF9SQVRDTV9BU19TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX2JtY19zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9ibWNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQwMGU3MAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9ibWNfc3RydWN0LmgKQEAgLTAsMCArMSwxNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICByYXRjbV9ibWNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9OWkEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1JBVENNX0JNQ19TVFJVQ1RfSAorI2RlZmluZSBfUkFUQ01fQk1DX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgInBzX3B1YmxpY19lbnVtLmgiCisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX2Nic19yZXF1aXJlZDsKK30gcmF0Y21fYm1jX2NiY2hfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MTYgY2JtaVtDQl9NQVhfTVNHX0NCTUlfTlVNXTsKKyAgICBrYWxfdWludDE2IGNibWRbQ0JfTUFYX01TR19DQk1JRF9OVU1dOyAgICAKKyAgICBrYWxfdWludDE2IGNibXJbQ0JfTUFYX01TR19DQk1JUl9OVU1dOworICAgIGthbF91aW50MTYgZGNzW0NCX01BWF9MQU5HX05VTV07CisgICAga2FsX2Jvb2wgaXNfYWxsX2xhbmd1YWdlX29uOworICAgIGw0Y19jYl9zZXRfdHlwZV9lbnVtICAgIHNldF90eXBlOworfSByYXRjbV9ibWNfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MTYgbWk7ICAgIAorICAgIGthbF91aW50MTYgc247Cit9IHJhdGNtX2JtY19jYl9tc2dfcmVtb3ZhbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQxNiBtc2dpZDsKKyAgICBrYWxfdWludDE2IHNlcmlhbF9OdW07CisgICAga2FsX3VpbnQ4IGRjczsKKyAgICBrYWxfYm9vbCBpc19taWRzOworfSByYXRjbV9ibWNfZGF0YV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgY2JfZ2VvZ3JhcGh5X2VudW0gZ2VvZ3JhcGh5X3R5cGU7Cit9IHJhdGNtX2JtY19jYl9nc19jaGFuZ2VfaW5kX3N0cnVjdDsKKwordHlwZWRlZiByYXRjbV9ibWNfY2JfbXNnX3JlbW92YWxfcmVxX3N0cnVjdCByYXRjbV9ibWNfY2JfZHVwX2RldF90aW1lcl9zdG9wX2luZF9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfUkFUQ01fQk1DX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fY3NjZV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9jc2NlX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNzQ1NzAKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fY3NjZV9zdHJ1Y3QuaApAQCAtMCwwICsxLDkwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA3CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJhdGNtX2NzY2Vfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9OWkEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1JBVENNX0NTQ0VfU1RSVUNUX0gKKyNkZWZpbmUgX1JBVENNX0NTQ0VfU1RSVUNUX0gKKworLyogTUFVSV8wMjgyODIxMCwgcmVkdW5kYW50IGhlYWRlciByZW1vdmFsICovCisvLyNpbmNsdWRlICJyYXRjbV91YXNfZW51bXMuaCIKKy8vI2luY2x1ZGUgInJhdGNtX3Vhc19zdHJ1Y3QuaCIKKy8vI2luY2x1ZGUgInJhdGNtX2NzY2VfZW51bXMuaCIKKyNpbmNsdWRlICJsM19pbmNfbG9jYWwuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAibDNfaW5jX2VudW1zLmgiCisjaW5jbHVkZSAibWNkX2wzX2luY19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJwc19wdWJsaWNfZW51bS5oIgorI2luY2x1ZGUgInBzX3B1YmxpY19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJuYXNfc3Zfc3RydWN0LmgiCisjaW5jbHVkZSAicmF0Y21fYXNfc3RydWN0LmgiCisjaW5jbHVkZSAibW1pMm1tX3N0cnVjdC5oIgorI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJBVENNX0NTQ0VfQVJBTF9VUERBVEVfUkVRCisgKgorICogU2VudCBmcm9tIFJBVENNIHRvIENTQ0UgdG8gdG8gbm90aWZ5IHVhcyBhbHJlYWR5IGVudGVyZWQgIE5TLUlPVCBUQworICogYW5kIGxldCB1YXMgY2xlYXIgYWJvdXQgY2VsbCBpbiB3aGljaCBMQShSQSkgaXMgYWxsb3dhYmxlIHRvIGNhbXAgb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAordHlwZWRlZiBzdHJ1Y3R7CisJTE9DQUxfUEFSQV9IRFIKKwlhcmFsX29wX2VudW0JCW9wX2NvZGU7CisJcGxtbl9pZF9zdHJ1Y3QJCXBsbW47Ly9yZWNvcmQgTlNJT1QgcGxtbgorCWthbF91aW50OAkJCWFyYV9zdGFydFsyXTsvL0FsbG93ZWQgTEEgdXBwZXIgYm91bmRyeQorCWthbF91aW50OAkJCWFyYV9lbmRbMl07IAkvLyBsb3dlciBib3VuZHJ5Cit9cmF0Y21fY3NjZV9hcmFsX3VwZGF0ZV9yZXFfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJBVENNX0NTQ0VfSU5JVF9SRVEKKyAqCisgKiBTZW50IGZyb20gUkFUQ00gdG8gQ1NDRSB0byBpbml0aWFsaXNlIFVBUyAKKyAqIDEuSU1FSSBudW1iZXIuCisgKiAyLnByZWZlcnJlZF9HU01fYmFuZCBpcyB0aGUgd29ya2luZyBiYW5kIGluZm8gZnJvbSBOVlJBTS4KKyAqIDMud29ya2luZ19VTVRTX0ZERF9iYW5kIGlzIHRoZSB3b3JraW5nIGJhbmQgaW5mbyB0cmFuc2ZlcnJlZCBmcm9tIAorICogVXBwZXIgbGF5ZXIgYWxzbyB3aXRoIGJ5dGUgMCBpbmRpY2F0ZXMgdGhlIGJhbmQgaW5mbyBvZiBiYW5kIEkgLSBWSUlJLgorICogd2hlcmUgc2Vjb25kIGJ5dGUgaW5kaWNhdGVzIHRoZSBiYW5kIGluZm8gb2YgYmFuZCBJWCAtIFguCisgKiAoTFNCIG9mIGJ5dGUgMSBpcyB1c2VkIGZvciBiYW5kIElYIGFuZCBYKQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIGthbF91aW50OCAgaW1laXN2X3ZhbHVlX2RpZ2l0MDsKKyAgICBrYWxfdWludDggIGltZWlzdl92YWx1ZV9kaWdpdF9ieXRlWzhdOworCisgICAgLyogcmVtb3ZlIHJlcXVlc3RlZF9nc21fYmFuZCwgcmVxdWVzdGVkX3VtdHNfYmFuZCwgYW5kIGhzcGFfcHJlZmVyZW5jZSAKKyAgICAgKiBiZWNhdXNlIHRoZXkgYXJlIGluaXRpYWxpemVkIHRvIE1SUyBkaXJlY3RseSAKKyAgICAgKi8KKyAgICAKKyAgICBpbml0X2NhdXNlX2VudW0gaW5pdF9jYXVzZTsKK31yYXRjbV9jc2NlX2luaXRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX3VpbnQ4ICBpbWVpc3ZfdmFsdWVfZGlnaXQwOworICAgIGthbF91aW50OCAgaW1laXN2X3ZhbHVlX2RpZ2l0X2J5dGVbOF07Cit9cmF0Y21fY3NjZV9zZXRfaW1laV9yZXFfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSQVRDTV9DU0NFX0lOSVRfQ05GICovCisvKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBObyBsb2NhbCBwYXJhbWV0ZXIgZm9yIHRoaXMgcHJpbWl0aXZlCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJBVENNX0NTQ0VfUExNTl9TRUFSQ0hfUkVRICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU2NlbmFyaW8gMTogUExNTiBTZWxlY3Rpb24sIGF1dG9tYXRpYyBtb2RlLCBub3JtYWwgY2FzZQorICAgUExNTlNlYXJjaFR5cGUgPT0gU0lOR0xFX1BMTU4KKworICAgQXQgcG93ZXItb24sIHRoZSBub24tYWNjZXNzIHN0cmF0dW0gKE5BUykgc2VsZWN0cyB0aGUgUExNTiB3aXRoCisgICBoaWdoZXN0IHByaW9yaXR5LCBwb3NzaWJseSB0aGUgbGFzdCBQTE1OIHN0b3JlZCBwcmlvciB0byBwcmV2aW91cworICAgcG93ZXIgb2ZmLiBUaGUgYWNjZXNzIHN0cmF0dW0gKEFTKSBpcyByZXF1ZXN0ZWQgdG8gZmluZCBhIGNlbGwKKyAgIGJlbG9uZ2luZyB0byB0aGF0IFBMTU4uCisKKyAgIFdoZW4gc2VhcmNoaW5nIGZvciB0aGUgcmVxdWVzdGVkIFBMTU4gYW5kIGluIG9yZGVyIHRvIHNwZWVkIHVwIHRoZQorICAgc2VhcmNoLCBBUyBtYXkgdXNlIGEgbGlzdCBvZiBjZWxsIGluZm9ybWF0aW9uIHN0b3JlZCBwcmlvciB0bworICAgcHJldmlvdXMgcG93ZXItb2ZmLiBXaGVuIGEgY2VsbCBiZWxvbmdpbmcgdG8gdGhlIHJlcXVlc3RlZCBQTE1OIGlzCisgICBmb3VuZCwgdGhhdCBjZWxsIGlzIHNlbGVjdGVkIGFuZCBOQVMgaXMgbm90aWZpZWQgdGhhdCB0aGUgUExNTiB3YXMKKyAgIGZvdW5kIChyZWY6IFsyNS4zMDQ7MTAuNF0pLgorCisgICBJbml0aWF0ZXMgc2VhcmNoIGZvciBjZWxsIHdpdGggZ2l2ZW4gUExNTiBJZGVudGl0eSwgKG9yIG9uZSBvZiBpdHMgZXF1aXZhbGVudCksCisgICBvciBhbnkgUExNTi5PbiByZWNlaXB0IG9mIGEgbmV3IFBMTU4gaWRlbnRpdHkgbGlzdCwgdGhlIHByZXZpb3VzbHkgc3RvcmVkIGVxdWl2YWxlbnQKKyAgIFBMTU4gbGlzdCBpcyBkaXNjYXJkZWQuVGhlIHNlYXJjaCB0eXBlIGFsc28gYWxsb3dzIGEgc2VhcmNoIGZvciBhIGdpdmVuIFBMTU4gdG8gYmUgbWFkZQorICAgZXhjbHVkaW5nIG9yIGFsbG93aW5nIGNlbGxzIGZyb20gRm9yYmlkZGVuIExBcy4gIEZvcmJpZGRlbiBMQXMgYXJlIG5vdCB0YWtlbiBpbnRvCisgICBhY2NvdW50IGZvciBhIFBMTU4gc2VhcmNoIG9mIHR5cGUgImFueSIuIElmIGZvcmJpZGRlbiBMQXMgYXJlIGFsbG93ZWQgdGhlbiBBUyBjYW4KKyAgIGNhbXAgb24gYSBjZWxsIHJlZ2FyZGxlc3Mgd2hldGhlciBpdCBpcyBpbiBhIGZvcmJpZGRlbiBMb2NhdGlvbiBBcmVhIG9yIG5vdCBhbmQgdGhpcworICAgd2lsbCBjb250aW51ZSB1bnRpbCBlaXRoZXIgYSBuZXcgVUdDLUNFTEwtU0VMRUNUSU9OX0NPTlRST0wgX1JFUSBvciBhIG5ldworICAgR0MtUExNTi1TRUFSQ0gtUkVRIGlzIGlzc3VlZC4KKyAqLworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB0cnhfaWQ7CisgICAgcGxtbl9zZWFyY2hfdHlwZV9lbnVtIHBsbW5fc2VhcmNoX3R5cGU7ICAgIAorICAgIGthbF91aW50OCBwbG1uX2lkX2NvdW50OworICAgIHBsbW5faWRfc3RydWN0IHBsbW5faWRbTUFYX05VTV9TRUFSQ0hfUExNTl07ICAgCisgICAgc2VhcmNoX3BhcmFtX2NvbnRhaW5lcl9zdHJ1Y3QgYXNfcGFyYW1fY29udGFpbmVyOyAKKyAgICB1bXRzX3NlYXJjaF9wYXJhbV9jb250YWluZXJfc3RydWN0IHVtdHNfcGFyYW07Cit9cmF0Y21fY3NjZV9wbG1uX3NlYXJjaF9yZXFfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUkFUQ01fQ1NDRV9QTE1OX1NFQVJDSF9DTkYgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBOb3RlOiB0aGUgR0MgUExNTiBTZWFyY2ggQ29uZmlybSBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gdGhlCisgICByZXF1ZXN0ZWQgUExNTiBJZCBpcyBmb3VuZC4gIFRoZSBmYWlsdXJlIGNhc2UgdXNlIGEgdGhlIGxpc3QKKyAgIHByaW1pdGl2ZS4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgIGlzX3BsbW5fbGlzdF92YWxpZDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgIHRyeF9pZDsKKyAgICBwbG1uX3NlYXJjaF9yZXN1bHRfZW51bSAgIHJlc3VsdDsKKworICAgIGFzX2NlbGxfdHlwZV9lbnVtICAgICAgICAgbXVsdGlfc2VsZWN0ZWRfY2VsbF90eXBlW01BWF9OVU1fTVVMVElfUExNTl07CisgICAgYXNfY2VsbF90eXBlX2VudW0gICAgICAgICBzZWxlY3RlZF9jZWxsX3R5cGU7IC8vMjAwODEwMjc6IFF1aWNrIFBMTU4gUmVjb3ZlcnkgQU5ZIFBMTU4gb24gSC9SLVBMTU4gY2VsbAorCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICBtdWx0aV9wbG1uX2NvdW50OworICAgIC8qIFJhbmdlOiAxIHRvIE1BWF9OVU1fTVVMVElfUExNTiwgb25seSB2YWxpZCBpZiByZXN1bHQgPT0gUExNTl9GT1VORCAqLworICAgIHBsbW5faWRfc3RydWN0ICAgICAgICAgICAgbXVsdGlfc2VsZWN0ZWRfcGxtbltNQVhfTlVNX01VTFRJX1BMTU5dOworICAgIHBsbW5faWRfc3RydWN0ICAgICAgICAgICAgc2VsZWN0ZWRfcGxtbjsgICAgLyogb25seSB2YWxpZCBpZiByZXN1bHQgPT0gUExNTl9GT1VORCAqLy8qIFJlc2VydmVkIGZvciBiZWZvcmUgUjYqLworICAgIGFzX3BsbW5fbGlzdF9zdHJ1Y3QgICAgICAgcGxtbl9saXN0OworICAgIHNjYW5fdHlwZV9lbnVtIHNjYW5fdHlwZTsKKyAgICBrYWxfYm9vbCBpc19zdG9yZWRfbGlzdF9leGlzdDsgLy8gb25seSBmb3Igc3RvcmVkIHNlYXJjaCBub3QgZm9yIGZ1bGxiYW5kICsgZnVsbGJhbmQgYW5kIHN0b3JlZAorICAgIGZ1bGxiYW5kX3Jlc3VsdF9lbnVtIGlzX2Z1bGxiYW5kX2ZpbmlzaGVkOworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgaXNfcXVpY2tfc2VhcmNoOworfSByYXRjbV9jc2NlX3BsbW5fc2VhcmNoX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreyAKKyAgICBMT0NBTF9QQVJBX0hEUiAKKyAgICBrYWxfdWludDggbXVsdGlfcGxtbl9jb3VudDsgCisgICAgcGxtbl9pZF9zdHJ1Y3QgbXVsdGlfcGxtbl9pZFtNQVhfTlVNX01VTFRJX1BMTU5dOyAKKyAgICBhc19jZWxsX3R5cGVfZW51bSBtdWx0aV9jZWxsX3R5cGVbTUFYX05VTV9NVUxUSV9QTE1OXTsKKyAgICAvLy8gc291cmNlIGZyb20gY2VsbCByZXNlbGVjdGlvbiBvciBzZWFyY2ggCisgICAgZm91bmRfaW5kX3NvdXJjZV9lbnVtIHNvdXJjZTsKK30gcmF0Y21fY3NjZV9wbG1uX2ZvdW5kX2luZF9zdHJ1Y3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJBVENNX0NTQ0VfU1RBUlRfVElNRVJfT1VUX09GX1NFUlZJQ0VfSU5EICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gTm8gbG9jYWwgcGFyYW1ldGVyIGZvciB0aGlzIHByaW1pdGl2ZQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUkFUQ01fQ1NDRV9QTE1OX0xPU1NfSU5EICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFRoaXMgcHJpbWl0aXZlIGlzIHVzZWQgd2hlbiB0aGUgc2VsZWN0ZWQgUExNTiBpcyBMT1NUICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgY3NmYl9pbmRpY2F0b3JfZW51bSBjc2ZiX2luZGljYXRvcjsgLyogQWRkZWQgYnkgTXVsdGltb2RlICovCisgICAgYXNfcGxtbl9saXN0X3N0cnVjdCBwbG1uX2xpc3Q7CisgICAgcGxtbl9sb3NzX3JlYXNvbl9lbnVtIHBsbW5fbG9zc19yZWFzb247Cit9IHJhdGNtX2NzY2VfcGxtbl9sb3NzX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSQVRDTV9DU0NFX1JSQ19ERUFDVElWQVRFX1JFUSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCitSRVE6IFNpZ25hbHMgdGhhdCBVTVRTIFJSQyBtdXN0IGJlY29tZSBpbmFjdGl2ZS4KK05vdGU6IFRoaXMgcHJpbWl0aXZlIG1heSBiZSByZWNlaXZlZCBpbiBpZGxlIG1vZGUsCitzdWJzZXF1ZW50bHkgdG8gYSBOQVMgcmVxdWVzdCBmb3IgYSBQTE1OIHNlYXJjaCBvbiBhbm90aGVyIFJBVAorKi8KKy8vIE5vIGxvY2FsIHBhcmFtZXRlciBmb3IgdGhpcyBwcmltaXRpdmUKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJBVENNX0NTQ0VfUlJDX0RFQUNUSVZBVEVfQ05GICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gTm8gbG9jYWwgcGFyYW1ldGVyIGZvciB0aGlzIHByaW1pdGl2ZQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJBVENNX0NTQ0VfUExNTl9MSVNUX1JFUSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUaGlzIHNlcnZpY2UgcHJvdmlkZXMgdGhlIGxpc3Qgb2YgY3VycmVudGx5IGF2YWlsYWJsZSBQTE1OLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX21hbnVhbF9saXN0OyAgCisgICAgc2Nhbl90eXBlX2VudW0gc2Nhbl90eXBlOworICAgIGthbF91aW50OCBwbG1uX2NvdW50OyAKKyAgICBwbG1uX2lkX3N0cnVjdCBwbG1uX2lkW01BWF9OVU1fU0VBUkNIX1BMTU5dOworICAgIGZvdW5kX21jY19pbmZvX3N0cnVjdCBmb3VuZF9tY2NfaW5mbzsKKwlrYWxfdWludDMyICAgICAgICAgICAgICAgICAgbnVtX29mX2JhbmQ7IC8vbnVtYmVyIG9mIHZhbGlkIHJlY29yZHMgaW4gYmFuZCBsaXN0CisgICAgLypCYW5kIGxpc3QgZm9yIE1DQyBCYW5kIGZvciBQTE1OIGxpc3Qgb3B0aW1pemF0aW9uKi8KKwlrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgYmFuZF9saXN0W01BWF9TRUFSQ0hfQkFORF9MSVNUX1NJWkVdOworICAgIHVzZXJfbGlzdF90eXBlX2VudW0gdXNlcl9saXN0X3R5cGU7CisgICAga2FsX3VpbnQ4IGdpdmVuX251bWJlcl9vZl9wbG1uOyAgLy8gdXNlZCBmb3IgdGhlIFVTRVJfTElTVF9UWVBFX0dJVkVOX1RJTUVSX05VTUJFUi4gV2hlbiB4QVMgZm91bmQgdGhlIGdpdmVuIG51bWJlciBvZiBwbG1uLCB4QVMgcmV0dXJuIFBMTU5fTElTVF9DTkYuIFdoZW4gdmFsdWUgaXMgMCBtZWFucyB4QVMgZG8gY29tcGxldGUgbGlzdCwgbm8gbmVlZCBjYXJlIGl0LgorICAgIG5ldHdvcmtfc2Nhbl9pbnB1dF9zdHJ1Y3QgIG5ldHdvcmtfc2Nhbl9pbnB1dDsKKworfSByYXRjbV9jc2NlX3BsbW5fbGlzdF9yZXFfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJBVENNX0NTQ0VfUExNTl9MSVNUX1NUQVRVU19VUERBVEVfUkVRICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFRoaXMgbXNnIHRvIGluZm9ybSBhcyB0aGF0IHVzZXIgbGlzdCBpcyBvbmdvaW5nIHRvIHBlcnNldmUgc2Nhbm5lZCByZXN1bHQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfdXNlcl9wbG1uX2xpc3Rfb25nb2luZzsKK30gcmF0Y21fY3NjZV9wbG1uX2xpc3Rfc3RhdHVzX3VwZGF0ZV9yZXFfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUkFUQ01fQ1NDRV9QTE1OX0xJU1RfU1RPUF9SRVEgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIFRoZSBOQVMgbWF5IHN0b3AgdGhlIHNlYXJjaCBmb3IgUExNTiBvbiB0aGUgcmVzdAorICogIG9mIHRoZSBjYXJyaWVycy4KKyAqLworLy8gTm8gbG9jYWwgcGFyYW1ldGVyIGZvciB0aGlzIHByaW1pdGl2ZQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUkFUQ01fQ1NDRV9BRERfRk9SQklEREVOX0xBX1JFUSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU2NlbmFyaW86IE5BUyBDb250cm9sbGVkIENlbGwgU2VsZWN0aW9uCisKKyAgIE5BUyBtYXkgaW5mbHVlbmNlIHRoZSBjZWxsIHNlbGVjdGlvbiBhbmQgcmVzZWxlY3Rpb24gYnkgc2VuZGluZworICAgY29udHJvbCBpbmZvcm1hdGlvbiB0byBBUy4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gaW5jbHVkZSwgZm9yCisgICBleGFtcGxlLCBsaXN0cyBvZiBmb3JiaWRkZW4gcmVnaXN0cmF0aW9uIGFyZWFzIGFuZCBhIGxpc3Qgb2YgTkFTCisgICBkZWZpbmVkIHNlcnZpY2UgYXJlYXMgaW4gcHJpb3JpdHkgb3JkZXIuIFRoZSBjb250cm9sIGluZm9ybWF0aW9uIGlzCisgICB1c2VkIGJ5IEFTIGluIGNlbGwgc2VsZWN0aW9uIGFuZCByZXNlbGVjdGlvbjoKKworICAgLSBDZWxscyBiZWxvbmdpbmcgdG8gYSBmb3JiaWRkZW4gcmVnaXN0cmF0aW9uIGFyZWEgd2lsbCBvbmx5IGJlCisgICBzZWxlY3RlZCBpZiBubyBiZXR0ZXIgY2VsbCBpcyBmb3VuZC4gQXQgdGhpcyBwb2ludCwgdGhlIHNlcnZpY2VzCisgICBwcm92aWRlZCB0aGUgVUUgbWlnaHQgYmUgbGltaXRlZC4KKworICAgLSBDZWxscyBiZWxvbmdpbmcgdG8gYSBOQVMgZGVmaW5lZCBzZXJ2aWNlIGFyZWEgd2l0aCBoaWdoZXIKKyAgIHByaW9yaXR5IHRoYW4gY3VycmVudCBzZXJ2aWNlIGFyZWEgd2lsbCBiZSBjb25zaWRlcmVkIGJldHRlciB0aGFuCisgICB0aGUgY2VsbCBjdXJyZW50bHkgY2FtcGVkIG9uLiBEZXBlbmRpbmcgb24gcmFkaW8gYWNjZXNzIG1vZGUsIHRoZQorICAgbW9zdCBzdWl0YWJsZSBjZWxsIGluIGlkbGUgbW9kZSBtYXkgbm90IGJlIHRoZSBtb3N0IHN1aXRhYmxlIGNlbGwKKyAgIGluIGNvbm5lY3RlZCBtb2RlLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICAgICAgICAgbGFfY29kZVsyXTsKKyAgICBmb3JiaWRkZW5fbGFfdHlwZV9lbnVtIGZvcmJpZGRlbl9sYV90eXBlOworICAgIHBsbW5faWRfc3RydWN0ICAgICAgICAgcGxtbl9pZDsKK30gcmF0Y21fY3NjZV9hZGRfZm9yYmlkZGVuX2xhX3JlcV9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJBVENNX0NTQ0VfREVMX0ZPUkJJRERFTl9MQV9SRVEgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggICAgICAgICAgICAgIGxhX2NvZGVbMl07CisgICAgcGxtbl9pZF9zdHJ1Y3QgICAgICAgICBwbG1uX2lkOworICAgIGthbF9ib29sICAgICAgICAgICAgICAgZGVsZXRlX2FsbDsKK30gcmF0Y21fY3NjZV9kZWxfZm9yYmlkZGVuX2xhX3JlcV9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJBVENNX0NTQ0VfRVFfUExNTl9MSVNUX1VQREFURV9SRVEgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCitUaGlzIHByaW1pdGl2ZSBpcyBzZW50IGJ5IE5BUyB3aGVuZXZlciBpdCBvYnRhaW5zIHRoZSBlcXVpdmFsZW50IFBMTU4gbGlzdC4KK1RoZSBQTE1OIElkZW50aXR5IGxpc3QgY29udGFpbnMgdGhlIFBMTU4gSWQgb2YgdGhlIGN1cnJlbnQgUExNTi5BIG5ldyBsaXN0CitvdmVycmlkZXMgdGhlIHByZXZpb3VzbHkgc3RvcmVkICJlcXVpdmFsZW50IFBMTU4iIGxpc3QuIFRoaXMgcHJpbWl0aXZlIG1heQorYmUgcmVjZWl2ZWQgYXQgYW55IHRpbWUsIHdoaWxlIHRoZSBVTVRTIFJBVCBpcyBlaXRoZXIgYWN0aXZlIG9yIGluYWN0aXZlLgorCitUbyBkZWxldGUgdGhlIFBMTU4gSUQgTGlzdCwgTkFTIHdpbGwgc2VuZCBhIGxpc3QgY29udGFpbmluZyAxIFBMTU4gSUQsIGkuZS4KK2N1cnJlbnRseSBhY3RpdmUgb25lLgorVGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGFycmF5IG9mIGVxX3BsbW5faWQgaXMgcnBsbW4uCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICAgZXFfcGxtbl9jb3VudDsvKiBSYW5nZTogMSB0byBNQVhfTlVNX0VRX1BMTU4uICovCisgICAgcGxtbl9pZF9zdHJ1Y3QgICBlcV9wbG1uX2lkW01BWF9OVU1fRVFfUExNTl07Cit9cmF0Y21fY3NjZV9lcV9wbG1uX2xpc3RfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUkFUQ01fQ1NDRV9TRVRfUkFUX01PREVfUkVRICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByYXRfZW51bSAgIHJhdDsKKyAgICByYXRfZW51bSAgIHJlcG9ydGVkX3JhdDsKK31yYXRjbV9jc2NlX3NldF9yYXRfbW9kZV9yZXFfc3RydWN0OworCisvKgorWW9uZ2ppYW8gMjAxMDA2MTIgTUFVSV8yMDU0MjIzMAorQWRkICBSQVRDTV9DU0NFX1NFVF9SQVRfTU9ERV9DTkYgdG8gcmVzb2x2ZSAyR18zR19MMSBjb25mbGljdAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUkFUQ01fQ1NDRV9TRVRfUkFUX01PREVfQ05GICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKK31yYXRjbV9jc2NlX3NldF9yYXRfbW9kZV9jbmZfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSQVRDTV9DU0NFX1JGT05fUkVRICovCisvKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBObyBsb2NhbCBwYXJhbWV0ZXIgZm9yIHRoaXMgcHJpbWl0aXZlCisKKy8qKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJBVENNX0NTQ0VfUkZPTl9DTkYgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIE5vIGxvY2FsIHBhcmFtZXRlciBmb3IgdGhpcyBwcmltaXRpdmUKKworLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJBVENNX0NTQ0VfUkZPRkZfUkVRICovCisvKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gTm8gbG9jYWwgcGFyYW1ldGVyIGZvciB0aGlzIHByaW1pdGl2ZQorCisvKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUkFUQ01fQ1NDRV9SRk9GRl9SRVEgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBObyBsb2NhbCBwYXJhbWV0ZXIgZm9yIHRoaXMgcHJpbWl0aXZlCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJFR05fU1RBVFVTX1VQREFURV9SRVEgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogR2licmFuIDIwMDgwMzIwOiBNT05aQTAwMDA2ODUxCisgKiBOQVMgd2lsbCBkaXJlY3RseSBzZW5kIFJFR05fU1RBVFVTX1VQREFURV9SRVEgdG8gQ1NDRQorICogc2luY2UgUlJDRSB3aWxsIHNhdmUgUkVHTl9TVEFUVVNfVVBEQVRFX1JFUSAKKyAqIHdoZW4gaXQgaXMgY29uZmlndXJpbmcgbG93ZXIgbGF5ZXIuIAorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcGxtbl9zZWFyY2hfc3RhdHVzX2VudW0gICBwbG1uX3NlYXJjaF9zdGF0dXM7CisgICAgcGxtbl9zZWFyY2hfdHlwZV9lbnVtICAgICBwbG1uX3NlYXJjaF90eXBlOworCisgICAgLyogVmlvbGEgMjAwOTAzMDIKKyAgICAgKiBBZGQgcHJvY19zdGF0dXMgdG8gaW5mb3JtIENTQ0UgY3VycmVudCBOQVMgcHJvY2VkdXJlLgorICAgICAqIENTQ0UgbWFpbmx5IGNhcmVzIDUgcHJvY2VkdXJlcywKKyAgICAgKiBBVFRBQ0hfUFJPQ0VEVVJFX1NVQ0NFU1MsIFJBVV9QUk9DRURVUkVfU1VDQ0VTUywgTFVfUFJPQ0VEVVJFX1NVQ0NFU1MsIE1TX0lOX0xJTUlURURfU0VSVklDRSwgTVNfSU5fTk9fU0VSVklDRSAgICAgICAgIAorICAgICAqLworICAgIHJlZ25fcHJvY19zdGF0dXNfZW51bSAgICAgcHJvY19zdGF0dXM7CisKKyAgIC8qIFJhY2hlbCAyMDEzMDcyMgorICAgICogSW4gUjkgYW5kIGxhdGVyLCBUUyAyNS4zMDQgNS4yLjYuMS40YSBjaGFuZ2VkIHRoZSBkZXNjcmlwdGlvbnMgYXMgZm9sbG93aW5nOgorICAgICogVUUgc3BlY2lmaWMgcHJpb3JpdGllcyBzaGFsbCBiZSBjbGVhcmVkIHdoZW4gdGhlIHZhbGlkaXR5IHRpbWUgb2YgdGhlIFVFIHNlcGVjaWZpYyBwcmlvcml0eSBleHBpcmVzLCAKKyAgICAqICBvciB3aGVuIGEgUExNTiBzZWxlY3Rpb24gaXMgcGVyZm9ybWVkIG9uIHJlcXVlc3QgYnkgTkFTLgorICAgICogVGhlcmVmb3JlLCBSUExNTiBpbmZvIGlzIG5vdCByZXF1aXJlZCBmb3IgQ1NDRSBhbnltb3JlLgorICAgICovCisjaWYgMCAvL2RlZiBfX1JFTDhfXworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCit9cmF0Y21fY3NjZV9yZWduX3N0YXR1c191cGRhdGVfcmVxX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUkFUQ01fQ1NDRV9FSFBMTU5fSU5GT19VUERBVEVfUkVRICovCisvKiBUaGlzIG1lc3NhZ2UgaXMgdXNlZCBieSBSQVRDTSB0byBmb3J3YXJkIEVIUExNTiBsaXN0IHRvIENTQ0UgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcGxtbl9pZF9jb3VudDsKKyAgICBwbG1uX2lkX3N0cnVjdCBwbG1uX2lkW01EMV9NQVhfTlVNX0hQTE1OXTsKKyAgICBrYWxfdWludDggaG9tZV9jb3VudHJ5X21jY1szXTsKK31yYXRjbV9jc2NlX2hwbG1uX2luZm9fdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKKyNpZiBkZWZpbmVkKF9fM0dfQ1NHX1NVUFBPUlRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJBVENNX0NTQ0VfVVBEQVRFX0FMTE9XRURfQ1NHX0xJU1RfUkVRICovCisvKiBUaGlzIG1lc3NhZ2UgaXMgdXNlZCBieSBSQVRDTSB0byBhZGQvZGVsZXRlIEFsbG93ZWQgQ1NHIHRvIENTQ0UgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGNzZ191cGRhdGVfdHlwZV9lbnVtIGNzZ191cGRhdGVfdHlwZTsKKyAgICBwbG1uX2lkX3N0cnVjdCBwbG1uX2lkOworICAgIGthbF91aW50MzIgY3NnX2lkOworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorfSByYXRjbV9jc2NlX3VwZGF0ZV93aGl0ZV9saXN0X3JlcV9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJBVENNX0NTQ0VfQ1NHX0xJU1RfUkVRICovCisvKiBUaGlzIG1lc3NhZ2UgaXMgdXNlZCBieSBSQVRDTSB0byByZXF1ZXN0IENTQ0UgdG8gZG8gbWFudWFsIENTRyBsaXN0ICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCit0eXBlZGVmIG53c2VsX25hc19zdl9jc2dfbGlzdF9yZXFfc3RydWN0IHJhdGNtX2NzY2VfY3NnX2xpc3RfcmVxX3N0cnVjdDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSQVRDTV9DU0NFX0NTR19MSVNUX1NUT1BfUkVRICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8gTm8gbG9jYWwgcGFyYW1ldGVyIGZvciB0aGlzIHByaW1pdGl2ZQorI2VuZGlmIC8qIF9fQ1NHX1NVUFBPUlRfXyAqLworCisjaWZkZWYgX19HRU1JTklfXworLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUkFUQ01fQ1NDRV9TSU1fU1RBVFVTX1VQREFURV9SRVEgKi8KKy8qIFRoaXMgbWVzc2FnZSBpcyB1c2VkIGJ5IE5BUyB0byBpbmZvcm0gQ1NDRSBjdXJyZW50IFNJTSBTdGF0dXMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBzaW1fY29uZmlnX3N0YXR1c19lbnVtIHNpbV9jb25maWdfc3RhdHVzOworICAgIHNpbV9pbnNlcnRfc3RhdHVzX2VudW0gc2ltX2luc2VydF9zdGF0dXM7Cit9IHJhdGNtX2NzY2Vfc2ltX3N0YXR1c191cGRhdGVfcmVxX3N0cnVjdDsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHBsbW5faWRfc3RydWN0ICAgICAgICAgcGxtbl9pZDsgCisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICBhcmZjbjsKK30gcmF0Y21fY3NjZV9zZXRfbXJ1X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBzZXRfbXJ1X3Jlc3VsdF9lbnVtIHJlc3VsdDsKK30gcmF0Y21fY3NjZV9zZXRfbXJ1X2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBjYWxsX3N0YXR1c19lbnVtIGNhbGxfc3RhdHVzOworICAgIGNhbGxfdHlwZV9pbmRpY2F0aW9uX2VudW0gY2FsbF90eXBlOworfSByYXRjbV9jc2NlX2NhbGxfc3RhdHVzX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICB1ZV9jYXBhYmlsaXR5X3N0cnVjdCBjYXBhYmlsaXR5OyAKK30gcmF0Y21fY3NjZV9jYXBfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19zdWNjZXNzZnVsOworfSByYXRjbV9jc2NlX2NhcF91cGRhdGVfY25mX3N0cnVjdDsKKworI2lmZGVmIF9fTFRFX1JBVF9fCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBudW1fb2Zfbnc7CisgICAgZW1jX2ZvcmJpZGRlbl9ud19saXN0X3N0cnVjdCBud19saXN0W01BWF9GT1JCSURERU5fTkVUV09SS19OVU1dOworfSByYXRjbV9jc2NlX2VtY19mb3JiaWRkZW5fbndfbGlzdF91cGRhdGVfcmVxX3N0cnVjdDsKKworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcGxtbl9pZF9zdHJ1Y3QgICAgICAgICAgICAgIHBsbW5faWQ7Cit9IHJhdGNtX2NzY2VfcGxtbl9pbmZvX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgZWxldmF0b3JfbW9kZV9lbnVtIGVsZXZhdG9yX21vZGU7Cit9IHJhdGNtX2NzY2VfZWxldmF0b3JfbW9kZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByYXRfZW51bSBkaXNhYmxlX3JhdDsKK30gcmF0Y21fY3NjZV9kaXNhYmxlX3JhdF9jb25maWdfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisJa2FsX3VpbnQzMiBudW1fb2ZfZGV0ZWN0ZWRfYmFuZDsKKwlrYWxfdWludDE2IGRldGVjdGVkX2JhbmRfbGlzdFtNQVhfU0VBUkNIX0JBTkRfTElTVF9TSVpFXTsKK30gcmF0Y21fdWFzX3NpZ25hbF9hcHBlYXJfaW5kX3N0cnVjdDsKKworLypTbmlmZmVyIHJlbGF0ZWQgbWVzc2FnZSBzdHJ1Y3R1cmVzKi8KKworLy9NU0dfSURfUkFUQ01fVUFTX1NOSUZGRVJfU1RBUlRfUkVRCit0eXBlZGVmIHJhdGNtX2FzX3NuaWZmZXJfc3RhcnRfcmVxX3N0cnVjdCByYXRjbV91YXNfc25pZmZlcl9zdGFydF9yZXFfc3RydWN0OworCisvL01TR19JRF9SQVRDTV9VQVNfU05JRkZFUl9TVE9QX1JFUQordHlwZWRlZiByYXRjbV9hc19zbmlmZmVyX3N0b3BfcmVxX3N0cnVjdCByYXRjbV91YXNfc25pZmZlcl9zdG9wX3JlcV9zdHJ1Y3Q7CisKKy8vTVNHX0lEX1JBVENNX1VBU19TSUdOQUxfQVBQRUFSX0lORAorLy90eXBlZGVmIHJhdGNtX2FzX3NpZ25hbF9hcHBlYXJfaW5kX3N0cnVjdCByYXRjbV91YXNfc2lnbmFsX2FwcGVhcl9pbmRfc3RydWN0OworCisvL01TR19JRF9SQVRDTV9VQVNfQ0hFQ0tfQUNUSVZFX1JBVF9SRVEsCit0eXBlZGVmIHJhdGNtX2FzX2NoZWNrX2FjdGl2ZV9yYXRfcmVxX3N0cnVjdCByYXRjbV91YXNfY2hlY2tfYWN0aXZlX3JhdF9yZXFfc3RydWN0OworCisvL01TR19JRF9SQVRDTV9VQVNfQ0hFQ0tfQUNUSVZFX1JBVF9DTkYKK3R5cGVkZWYgcmF0Y21fYXNfY2hlY2tfYWN0aXZlX3JhdF9jbmZfc3RydWN0IHJhdGNtX3Vhc19jaGVja19hY3RpdmVfcmF0X2NuZl9zdHJ1Y3Q7CisKKy8vTVNHX0lEX1JBVENNX1VBU19TRVRfQUNUSVZFX1JBVF9SRVEsCit0eXBlZGVmIHJhdGNtX2FzX3NldF9hY3RpdmVfcmF0X3JlcV9zdHJ1Y3QgcmF0Y21fdWFzX3NldF9hY3RpdmVfcmF0X3JlcV9zdHJ1Y3Q7CisKKy8vTVNHX0lEX1JBVENNX1VBU19TRVRfQUNUSVZFX1JBVF9DTkYKK3R5cGVkZWYgcmF0Y21fYXNfc2V0X2FjdGl2ZV9yYXRfY25mX3N0cnVjdCByYXRjbV91YXNfc2V0X2FjdGl2ZV9yYXRfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sICAgIG5vcm1hbF9vb3NfcmVjb3Zlcnlfcm91bmRfcHJlc2VudDsKKyAgICBrYWxfdWludDggICBub3JtYWxfb29zX3JlY292ZXJ5X3JvdW5kOyAgICAgICAgICAgICAvKiBkZWZhdWx0IHZhbHVlID0gNSwgcmFuZ2UgWzIsIDEwXSAqLworICAgIGthbF9ib29sICAgIGluYWN0aXZlX2Z1bGxiYW5kX3BlcmlvZF9wcmVzZW50OworICAgIGthbF91aW50MTYgIGluYWN0aXZlX2Z1bGxiYW5kX3BlcmlvZDsgICAgICAgICAgICAgIC8qIGRlZmF1bHQgPSAyMDBzLCByYW5nZTogWzkwLCAzNjBdICovCisgICAga2FsX2Jvb2wgICAgaW5hY3RpdmVfc25pZmZlcl9wZXJpb2RfcHJlc2VudDsgICAgCisgICAga2FsX3VpbnQ4ICAgaW5hY3RpdmVfc25pZmZlcl9wZXJpb2Q7ICAgICAgICAgICAgICAgLyogZGVmYXVsdCA9IDMwcywgcmFuZ2U6IFsxMCwgNjBdICovCisgICAga2FsX2Jvb2wgICAgaXNfaW5hY3RpdmVfbW9kZV9wcmVzZW50OworICAgIGthbF9ib29sICAgIGlzX2luYWN0aXZlX21vZGU7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRydWU6IGVudGVyIGluYWN0aXZlIG1vZGUsIEZhbHNlOiBsZWF2ZSBpbmFjdGl2ZSBtb2RlICovCit9IHJhdGNtX2NzY2VfaW5hY3RpdmVfbW9kZV9jb25maWd1cmF0aW9uX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCAgICBpc19vdmVyX2luYWN0aXZlX21vZGVfdGhyZXNob2xkOyAvKiBUcnVlOiByZWNvdmVyeSBjb3VudGVyID4gbm9ybWFsX29vc19yZWNvdmVyeV9yb3VuZCAqLworfSByYXRjbV9jc2NlX3NlcnZpY2VfcmVjb3Zlcnlfcm91bmRfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKK30gcmF0Y21fY3NjZV9lbmRfcHNfZGF0YV9zZXNzaW9uX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgZ21tcmVnX2x0ZV9ub3JtYWxfc2VydmljZV9sb3NzX3VwZGF0ZV9yZXFfc3RydWN0IHJhdGNtX2NzY2VfbHRlX25vcm1hbF9zZXJ2aWNlX2xvc3NfdXBkYXRlX3JlcV9zdHJ1Y3QgOworI2VuZGlmIC8qIFJBVENNX0NTQ0VfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9jc2VfZW51bXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9jc2VfZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjg1ZmZlCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX2NzZV9lbnVtcy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgcmF0Y21fY3NlX2VudW1zLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9OWkEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogJExvZzokCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIEFkZCBjb3B5cmlnaHQgaGVhZGVyLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUkFUQ01fQ1NFX0VOVU1TX0gKKyNkZWZpbmUgX1JBVENNX0NTRV9FTlVNU19ICisKKworI2VuZGlmIC8qIF9SQVRDTV9DU0VfRU5VTVNfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX2NzZV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9jc2Vfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJkZGU3NgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9jc2Vfc3RydWN0LmgKQEAgLTAsMCArMSwxOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICByYXRjbV9jc2Vfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9OWkEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1JBVENNX0NTRV9TVFJVQ1RfSAorI2RlZmluZSBfUkFUQ01fQ1NFX1NUUlVDVF9ICisKKy8qIE1BVUlfMDI4MjgyMTAsIHJlZHVuZGFudCBoZWFkZXIgcmVtb3ZhbCAqLworI2luY2x1ZGUgInJhdGNtX2NzZV9lbnVtcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX3N0cnVjdC5oIgorI2luY2x1ZGUgImwzX2luY19sb2NhbC5oIgorI2luY2x1ZGUgIm5hc19zdl9zdHJ1Y3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAgcGxtbl9pZF9zdHJ1Y3QgcGxtbl9pZDsKK30gcmF0Y21fY3NlX3BsbW5fbGlzdF91cGRhdGVfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAgYXNfcGxtbl9saXN0X3N0cnVjdCBwbG1uX2xpc3Q7CisgICAgc2Nhbl90eXBlX2VudW0gc2Nhbl90eXBlOworICAgIHBsbW5fbGlzdF9yZXN1bHRfZW51bSBjYXVzZTsJCisJa2FsX2Jvb2wgaXNfY29tcGxldGU7ICAvLyBJZiBsaXN0IG5vdCBjb21wbGV0ZSwgdGhlIGF2YWlsYWJsZSBsaXN0IGlzIG5vdCBjb21wbGV0ZSB0b28uCisJa2FsX2Jvb2wgaXNfcGxtbl9saXN0X2Fib3J0ZWQ7IC8vaW5kaWNhdGUgaWYgdGhlIFBMTU4gTGlzdCBpcyBhYm9ydGVkIGJ5IFBMTU5fTElTVF9BQk9SVF9SRVEKKwkKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKK30gcmF0Y21fY3NlX3BsbW5fbGlzdF9jbmZfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IAoreyAKKyAgICBMT0NBTF9QQVJBX0hEUiAKKyAgICBrYWxfdWludDggbXVsdGlfcGxtbl9jb3VudDsgCisgICAgcGxtbl9pZF9zdHJ1Y3QgbXVsdGlfcGxtbl9pZFtNQVhfTlVNX01VTFRJX1BMTU5dOyAKKyAgICBhc19jZWxsX3R5cGVfZW51bSBtdWx0aV9jZWxsX3R5cGVbTUFYX05VTV9NVUxUSV9QTE1OXTsKKyAgICBmb3VuZF9pbmRfc291cmNlX2VudW0gc291cmNlOworCWNlbGxfaWRfdW5pb24gY2VsbF9pZDsKK30gcmF0Y21fY3NlX3BsbW5fZm91bmRfaW5kX3N0cnVjdDsKKworCisvKiBKZXRocm86IFNpbmNlIFJBVENNX0NTRV9QTE1OX0xJU1RfU1RPUF9DTkYgaXMgYW4gZW1wdHkgbWVzc2FnZSwgbm8gc3RydWN0dXJlIGlzIHJlcXVpcmVkIGZvciB0aGlzIG1lc3NhZ2UuICovCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fM0dfQ1NHX1NVUFBPUlRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIGFzX2NzZ19saXN0X3N0cnVjdCBjc2dfbGlzdDsKK30gcmF0Y21fY3NlX2NzZ19saXN0X2NuZl9zdHJ1Y3Q7CisjZW5kaWYKKworCit0eXBlZGVmIHN0cnVjdCAKK3sgCisgICAgTE9DQUxfUEFSQV9IRFIgCisgICAgbmV0d29ya19zY2FuXzNnX291dHB1dF9zdHJ1Y3Qgbndfc2Nhbl8zZ19vdXRwdXQ7CQkKK30gcmF0Y21fY3NlX3BsbW5fc2Nhbl9pbmRfc3RydWN0OworCisKKyNlbmRpZiAvKiBfUkFUQ01fQ1NFX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fY3NyX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX2Nzcl9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTExNGNiCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX2Nzcl9zdHJ1Y3QuaApAQCAtMCwwICsxLDIxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA3CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJhdGNtX2Nzcl9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT05aQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogJExvZzokCisgKgorICogMDEgMDQgMjAxMyBhbmRyZXcud3UKKyAqIFtNT0xZMDAwMDgzMjhdIFtDU1IvUERDUF1maXggVVQgdGVzdCBjb2RlCisgKiBVVCB0ZXN0Y29kZSBidWdzIGZpeAorICogCisgKiAxMCAwMSAyMDEyIGFuZHJldy53dQorICogW01PTFkwMDAwNDIzNl0gW2ludGVyZmFjZV1bc2VydmljZV1ba2FsXXJlbW92ZSBzdGFja19sdGxjb20uaAorICogCisgKiBSZW1vdmUgc3RhY2tfbHRsY29tLmgKKyAqCisgKiAwMSAxMiAyMDEyIGFuZHJldy53dQorICogcmVtb3ZlZCEKKyAqIDxzYXZlZCBieSBQZXJmb3JjZT4KKyAqCisgKiAxMSAxMSAyMDExIGFuZHJldy53dQorICogcmVtb3ZlZCEKKyAqIDxzYXZlZCBieSBQZXJmb3JjZT4KKyAqCisgKiAxMiAxNCAyMDEwIG1heC55aW4KKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTIgMTQgMjAxMCBjb3NpbmUuamhlbmcKKyAqIHJlbW92ZWQhCisgKiBJbnRlZ3JhdGlvbiBjaGFuZ2UuCisgKgorICogMTAgMTggMjAxMCBtYXgueWluCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIEFkZCBjb3B5cmlnaHQgaGVhZGVyLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgUkFUQ01fQ1NSX1NUUlVDVF9ICisjZGVmaW5lIFJBVENNX0NTUl9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIgLy9rYWwgYXBpIGNoYW5nZSAjaW5jbHVkZSAic3RhY2tfbHRsY29tLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJhc19jb21tb24uaCIKKwordHlwZWRlZiBlbnVtCit7CisgICBDU19ST1VURV9OT05FPTAsCisgICBDU19ST1VURV9BVURJT19DT0RFQywKKyAgIENTX1JPVVRFX0NTX0RBVEEsCisgICBDU19ST1VURV9WVF9EQVRBLAorICAgQ1NfUk9VVEVfU1lOQ19IRExDX0RBVEEgIC8qIE1BVUlfMDIzNzU5MTEgKi8KK30gdENTUl9UYXJnZXRFbnRpdHk7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIExPQ0FMX1BBUkFfSERSCisgICAKKyAgIFU4ICAgICAgICAgICAgICAgICAgIFN0cmVhbUlkOworICAgdENTUl9UYXJnZXRFbnRpdHkgICAgVGFyZ2V0RW50aXR5OworfWNzcl9zZXRfcm91dGluZ19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIAorICAgVTggICAgICAgICAgICAgICAgICAgICAgIFN0cmVhbUlkOworICAgVTggICAgICAgICAgICAgICAgICAgICAgIGZyYW1lVHlwZTsKKyAgIFU4ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTGVuOworICAgVTE2ICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSW5kZXg7Cit9Y3NyX2NvZGVjX2RhdGFfcmVxX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAKKyAgICBVOCAgICBGcmFtZVR5cGU7Cit9Y3NyX3NwM2dfc2V0X2ZyYW1lX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgIAorICAgIFU4ICAgICAgICAgZXZlbnQ7CisgICAgVTggICAgICAgICBkYXRhWzMyXTsKK31jc3Jfc3AzZ19jYWxsYmFja19yZXFfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgCisgICBVOCAgICBmcmFtZVR5cGU7CisgICBVOCAgICBkYXRhTGVuOworICAgVTE2ICAgZnJhbWVJbmRleDsKKyAgIFU4ICAgIHZvaWNlRGF0YVszMl07Cit9Y3NyX3NwM2dfZ2V0X2ZyYW1lX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgCisgICBVOCAgICBzdWJGbG93SUQ7CisgICBVOCAgICBmcmFtZVR5cGU7CisgICBVOCAgICBDUkNTdGF0dXM7CisgICBVOCAgICB2b2ljZURhdGFbMzJdOworfWNzcl9zcDNnX3B1dF9mcmFtZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIAorICAgVTggICAgc2l6ZTsKKyAgIFU4ICAgIENTRF9kYXRhWzcwXTsKK31jc3JfcmF0Y21fZGF0YV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIAorICAgVTggICAgc2l6ZTsKKyAgIFU4ICAgIFZUX2RhdGFbODBdOworfWNzcl92dF9kYXRhX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorCisgICBVOCAgICBtYXhDc0RlbGF5OworfWNzcl9zcDNnaHNwYV9zZXRfY3NkZWxheV9pbmRfc3RydWN0OworCisvKiBmb3IgQ1Mgb25seSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiBEb250IHRvdWNoIHRoaXMgcGFydCAqLworICAgIC8vTV9TSEFRX0VMTVRfSEVBREVSICAgIAorCisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICAKKyAgICBrYWxfdWludDE2ICAgcGR1X2xlbjsgICAgICAgICAgIFwKKyAgICBrYWxfdWludDggICAgX19yZWZfY291bnQ7ICAgICAgICAgXAorICAgIGthbF91aW50OCAgICBwYl9yZXN2ZXJlZDsgICAgICAgXAorICAgIGthbF91aW50MTYgICBmcmVlX2hlYWRlcl9zcGFjZTsgXAorICAgIGthbF91aW50MTYgICBmcmVlX3RhaWxfc3BhY2U7CisgICAgc3RydWN0IFNIQVFfcUVsbXRIZWFkZXIgKm5leHRfc2hhcUVsbXQ7IAorICAgIC8qIEhhbmRzIG9mZiBwbGVhc2UgKi8KKwkJCisgICAga2FsX3VpbnQxNiAgICAgIGJpdExlbmd0aDsgICAgCisgICAga2FsX3VpbnQxNiAgICAgIGZyYW1lX2luZGV4OworICAgICAgICAgICAgCisgICAgRXh0ZW5kZWRSYklkICAgIFJCSWQ7CisgICAga2FsX2Jvb2wgICAgICAgX19hbGlnbl8wMDsKKyAgICBrYWxfdWludDE2ICAgICAgZHVtbXk7CisgICAgCit9IGNzcl9zaGFxX2RhdGFfcmVxX3N0cnVjdDsgICAKKworI2VuZGlmIC8qIFJBVENNX0NTUl9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX2dhc19lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX2dhc19lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZWJjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fZ2FzX2VudW1zLmgKQEAgLTAsMCArMSw4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgcmF0Y21fZ2FzX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgICBNT05aQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9SQVRDTV9HQVNfRU5VTVNfSAorI2RlZmluZSBfUkFUQ01fR0FTX0VOVU1TX0gKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKwordHlwZWRlZiBlbnVteworICAgIEdBU19CQU5EX05PTkUgICAgICAgID0gMHgwMCwKKyAgICBHQVNfQkFORF9QR1NNOTAwICAgICA9IDB4MDEsCisgICAgR0FTX0JBTkRfRUdTTTkwMCAgICAgPSAweDAyLAorICAgIEdBU19CQU5EX1JHU005MDAgICAgID0gMHgwNCwKKyAgICBHQVNfQkFORF9EQ1MxODAwICAgICA9IDB4MDgsCisgICAgR0FTX0JBTkRfUENTMTkwMCAgICAgPSAweDEwLAorICAgIEdBU19CQU5EX0dTTTQ1MCAgICAgID0gMHgyMCwKKyAgICBHQVNfQkFORF9HU000ODAgICAgICA9IDB4NDAsCisgICAgR0FTX0JBTkRfR1NNODUwICAgICAgPSAweDgwLAorICAgIEdTTV9CQU5EXzkwMF8xODAwICAgID0gMHgwYSwKKyAgICBHU01fQkFORF84NTBfMTkwMCAgICA9IDB4OTAsCisgICAgR1NNX0JBTkRfOTAwX1RSSVBQTEUgPSAweDFhLAorICAgIEdTTV9CQU5EXzg1MF9UUklQUExFID0gMHg5OCwKKyAgICBHU01fQkFORF9RVUFEICAgICAgICA9IDB4OWEKK31nc21fYmFuZF9lbnVtOworCisjZW5kaWYgLyogX1JBVENNX0dBU19FTlVNU19IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fZ2FzX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX2dhc19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmM1YzAxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX2dhc19zdHJ1Y3QuaApAQCAtMCwwICsxLDczOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgcmF0Y21fZ2FzX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgICBNT05aQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9SQVRDTV9HQVNfU1RSVUNUX0gKKyNkZWZpbmUgX1JBVENNX0dBU19TVFJVQ1RfSAorCisKKyNpZmRlZiBfX0dFTUlOSV9fCisjaW5jbHVkZSAicnN2YXNfZW51bS5oIgorI2VuZGlmCisKKy8qIGFkZCBSSFIgKi8KKyNpbmNsdWRlICJyYXRjbV9nYXNfZW51bXMuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX3N0cnVjdC5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorI2luY2x1ZGUgImwzX2luY19sb2NhbC5oIgorI2luY2x1ZGUgInJyX21wYWxfaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibDNsbGNfZW51bXMuaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgInBzX3B1YmxpY19lbnVtLmgiCisjaW5jbHVkZSAibmFzX2FzX2ludGVyX2NvcmVfZW51bS5oIgorI2luY2x1ZGUgImdtc3NfcHVibGljLmgiCisjaW5jbHVkZSAicmF0Y21fYXNfc3RydWN0LmgiCisKKyNpbmNsdWRlICJuYXNfc3Zfc3RydWN0LmgiCisjaW5jbHVkZSAibW1pMm1tX3N0cnVjdC5oIgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZS1kZWZpbmUgc3RydWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBUyB0byBSQVRDTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcGxtbl9pZF9zdHJ1Y3QgcGxtbl9pZDsKKyAgICBrYWxfdWludDE2IGFyZmNuOworICAgIGthbF91aW50OCByZXF1ZXN0X2JhbmQ7Cit9cmF0Y21fZ2FzX3NldF9tcnVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBzZXRfbXJ1X3Jlc3VsdF9lbnVtIHJlc3VsdDsKK31yYXRjbV9nYXNfc2V0X21ydV9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGRvbWFpbl9pZF9lbnVtIGNuX2RvbWFpbl9pZDsKKyAgICBhc19lc3RfY25mX2NhdXNlX2VudW0gcmVzdWx0OworICAgIGthbF9ib29sIHdhaXRfZ2liaV9mbGFnOworICAgIGthbF9ib29sIGlzX3JyY19jb25uX2FscmVhZHlfZXhpc3RlZDsKK31yYXRjbV9nYXNfY29ubl9lc3RfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19zdWNjZXNzZnVsOworICAgIGRvbWFpbl9pZF9lbnVtIGNuX2RvbWFpbl9pZDsKKyAgICBrYWxfYm9vbCBpc190MzEyNl9leHBpcnk7Cit9cmF0Y21fZ2FzX2Nvbm5fZXN0X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfc3VjY2Vzc2Z1bDsKKyAgICBkb21haW5faWRfZW51bSBjbl9kb21haW5faWQ7CisgICAga2FsX2Jvb2wgcHNfcmVzdW1lX2ZsYWc7CisgICAga2FsX2Jvb2wgd2FpdF9naWJpX2ZsYWc7Cit9cmF0Y21fZ2FzX2Nvbm5fcmVsX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgZG9tYWluX2lkX2VudW0gY25fZG9tYWluX2lkOworICAgIGthbF9ib29sIHBzX3Jlc3VtZV9mbGFnOworICAgIGthbF9ib29sIHdhaXRfZ2liaV9mbGFnOworfXJhdGNtX2dhc19jb25uX3JlbF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIERDX1ByaW9yaXR5IHNhcGk7CisgICAga2FsX3VpbnQ4IG11aTsKKyAgICBrYWxfYm9vbCBpc19zdWNjZXNzZnVsOworfXJhdGNtX2dhc19kYXRhX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgZG9tYWluX2lkX2VudW0gY25fZG9tYWluX2lkOworfXJhdGNtX2dhc19kYXRhX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgYXNfcGxtbl9saXN0X3N0cnVjdCBwbG1uX2xpc3Q7CisgICAgc2Nhbl90eXBlX2VudW0gc2Nhbl90eXBlOworICAgIHBsbW5fbGlzdF9yZXN1bHRfZW51bSBjYXVzZTsKKwlrYWxfYm9vbCBpc19jb21wbGV0ZTsgLy8gSWYgbGlzdCBub3QgY29tcGxldGUsIHRoZSBhdmFpbGFibGUgbGlzdCBpcyBub3QgY29tcGxldGUgdG9vLgorICAgIGthbF9ib29sIGlzX3BsbW5fbGlzdF9hYm9ydGVkOyAvL2luZGljYXRlIGlmIHRoZSBQTE1OIExpc3QgaXMgYWJvcnRlZCBieSBQTE1OX0xJU1RfQUJPUlRfUkVRCit9cmF0Y21fZ2FzX3BsbW5fbGlzdF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorI2lmZGVmIF9fTFRFX1JBVF9fCisgICAgY3NmYl9pbmRpY2F0b3JfZW51bSBjc2ZiX2luZGljYXRvcjsKKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworICAgIGFzX3BsbW5fbGlzdF9zdHJ1Y3QgcGxtbl9saXN0OworICAgIHBsbW5fbG9zc19yZWFzb25fZW51bSBwbG1uX2xvc3NfcmVhc29uOworfXJhdGNtX2dhc19wbG1uX2xvc3NfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBkb21haW5faWRfZW51bSBjbl9kb21haW5faWQ7CisgICAgdWVfaWRfdHlwZV9lbnVtIHVlX2lkX3R5cGU7CisgICAga2FsX3VpbnQ4IHVlX2lkZW50aXR5WzldOworfXJhdGNtX2dhc19wYWdlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHRyeF9pZDsKKyAgICBwbG1uX3NlYXJjaF9yZXN1bHRfZW51bSByZXN1bHQ7CisgICAgcGxtbl9pZF9zdHJ1Y3Qgc2VsZWN0ZWRfcGxtbjsKKyAgICBrYWxfYm9vbCBpc19wbG1uX2xpc3RfdmFsaWQ7CisgICAgYXNfcGxtbl9saXN0X3N0cnVjdCBwbG1uX2xpc3Q7CisgICAgc2Nhbl90eXBlX2VudW0gc2Nhbl90eXBlOworICAgIGthbF9ib29sIGlzX3N0b3JlZF9saXN0X2V4aXN0OyAvLyBvbmx5IGZvciBzdG9yZWQgc2VhcmNoIG5vdCBmb3IgZnVsbGJhbmQgKyBmdWxsYmFuZCBhbmQgc3RvcmVkCisgICAgZnVsbGJhbmRfcmVzdWx0X2VudW0gaXNfZnVsbGJhbmRfZmluaXNoZWQ7CisgICAga2FsX2Jvb2wgaXNfcXVpY2tfc2VhcmNoOworfXJhdGNtX2dhc19wbG1uX3NlYXJjaF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCAKK3sgCisgICAgTE9DQUxfUEFSQV9IRFIgCisgICAgcGxtbl9pZF9zdHJ1Y3QgcGxtbl9pZDsgCisgICAgYXNfY2VsbF90eXBlX2VudW0gY2VsbF90eXBlOworICAgIC8vLyBzb3VyY2UgZnJvbSBjZWxsIHJlc2VsZWN0aW9uIG9yIHNlYXJjaCAKKyAgICBmb3VuZF9pbmRfc291cmNlX2VudW0gc291cmNlOworCWNlbGxfaWRfdW5pb24gY2VsbF9pZDsKK30gcmF0Y21fZ2FzX3BsbW5fZm91bmRfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByZWFkeV90aW1lcl9zdGF0dXNfZW51bSBzdGF0dXM7Cit9cmF0Y21fZ2FzX3JlYWR5X3RpbWVyX3VwZGF0ZV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHN5bmNfaW5kX2NhdXNlX2VudW0gY2F1c2U7CisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hhbm5lbF90eXBlOworICAgIGNoYW5uZWxfbW9kZV9lbnVtIGNoYW5uZWxfbW9kZTsKKyAgICBrYWxfYm9vbCBpc19jaXBoZXJpbmdfb247Cit9cmF0Y21fZ2FzX3N5bmNfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDE2IGdpYmlfdGFnOworICAgIHBsbW5faWRfc3RydWN0IHBsbW5faWQ7CisgICAga2FsX3VpbnQxNiBjZWxsX2lkOworICAgIGFzX2NlbGxfdHlwZV9lbnVtIGNlbGxfdHlwZTsKKyAgICBrYWxfdWludDE2IGFjY2Vzc19jbGFzczsKKyAgICBrYWxfYm9vbCBjZWxsX3N1cHBvcnRfcHM7CisgICAga2FsX2Jvb2wgY2VsbF9zdXBwb3J0X2NzOworICAgIGthbF91aW50OCBsYV9jb2RlWzJdOworICAgIGthbF91aW50OCByYV9jb2RlOworICAgIGthbF91aW50OCBhdHRfZmxhZzsKKyAgICBrYWxfdWludDggdDMyMTJfdGltZXJfdmFsOworICAgIGthbF91aW50OCBubW87CisgICAga2FsX3VpbnQ4IG1zY3I7CisgICAga2FsX3VpbnQ4IHNnc25yOworICAgIGthbF91aW50OCBjZWxsX3N1cHBvcnRfZWdwcnM7CisjaWZkZWYgX19MVEVfUkFUX18KKyAgICBrYWxfYm9vbCBpc19ncHJzX2luZm9faW5fc2kxM19kZWZlcnJlZDsKKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworICAgIGthbF91aW50OCBiYW5kOworfXJhdGNtX2dhc19zeXNfaW5mb19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHBsbW5faWRfc3RydWN0IHBsbW5faWQ7CisgICAga2FsX3VpbnQ4IGxhX2NvZGVbMl07CisgICAga2FsX3VpbnQxNiBjZWxsX2lkOworfXJhdGNtX2dhc19jZWxsX2dsb2JhbF9pZGVudGl0eV9pbmZvX2luZF9zdHJ1Y3Q7CisKKyNpZiBkZWZpbmVkKF9fVU1UU19SQVRfXykgfHwgZGVmaW5lZCAoX19MVEVfUkFUX18pCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGRvbWFpbl9pZF9lbnVtIGNvbm5lY3Rpb25fZG9tYWluOworICAgIHJhdF90eXBlX2VudW0gYWN0aXZlX3JhdDsKK30gcmF0Y21fZ2FzX2NlbGxfY2hhbmdlX2ZpbmlzaF9pbmRfc3RydWN0OworI2VuZGlmIC8qIGRlZmluZWQoX19VTVRTX1JBVF9fKSB8fCBkZWZpbmVkIChfX0xURV9SQVRfXykqLworCisjaWZkZWYgX19HRU1JTklfXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGlzX3N1Y2Nlc3M7IC8qVFJVRSBpZiBzZXNzaW9uIGNhbiBiZSBzdGFydGVkKi8KKyAgICBrYWxfdWludDggcmVxX2lkOworfSByYXRjbV9nYXNfcHNfc2Vzc2lvbl9zdGFydF9jbmZfc3RydWN0OworI2VuZGlmCisKKyNpZmRlZiBfX0xURV9SQVRfXwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBpcmF0X3R5cGVfZW51bSBpcmF0X3R5cGU7CisgICAgcmF0X3R5cGVfZW51bSBzb3VyY2VfcmF0OworICAgIHJhdF90eXBlX2VudW0gdGFyZ2V0X3JhdDsKKyAgICB2b2lkKiBhc19pbmZvX3B0cjsKK31yYXRjbV9nYXNfcmF0X2NoYW5nZV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBpcmF0X3R5cGVfZW51bSBpcmF0X3R5cGU7CisgICAgcmF0X3R5cGVfZW51bSBzb3VyY2VfcmF0OworICAgIHJhdF90eXBlX2VudW0gdGFyZ2V0X3JhdDsKKyAgICBpcmF0X3Jlc3VsdF9lbnVtIGlyYXRfcmVzdWx0OworICAgIHZvaWQqIGFzX2luZm9fcHRyOworICAgIGRvbWFpbl9pZF9lbnVtIGNvbm5lY3Rpb25fZG9tYWluOworfSByYXRjbV9nYXNfcmF0X2NoYW5nZV9jbmZfc3RydWN0OworCisKKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHVlX2NhcGFiaWxpdHlfc3RydWN0IGNhcGFiaWxpdHk7IAorfSByYXRjbV9nYXNfY2FwX3VwZGF0ZV9yZXFfc3RydWN0OyAKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19zdWNjZXNzZnVsOyAvKiBJbmRpY2F0ZXMgd2hldGhlciBlbmFibGluZyBvciBkaXNhYmxpbmcgY2FwYWJpbGl0eSBpcyBzdWNjZXNzZnVsLiAqLworfSByYXRjbV9nYXNfY2FwX3VwZGF0ZV9jbmZfc3RydWN0OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFUQ00gdG8gR0FTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19zaW1faW5zZXJ0ZWQ7CisKKyAgICAvKiBBTFBTMDE2MTIwNTc6IEluIG9yZ2luaWFsIGRlc2lnbiwgTU0gd2lsbCBxdWV1ZSBTSU1fRVJST1IgZHVyaW5nIFBMTU4gc2VhcmNoLCAKKyAgICAgICBidXQgdGhpcyBjYXVzZXMgU0lNIHN0YXR1cyB1bnN5bmNlZCBiZXR3ZWVuIEFTL05BUy4gQmVjYXVzZSBTSU1fUkVBRFkgaXMgc2VudCAKKyAgICAgICBmcm9tIFNJTSB0byBSUiB3aGVyZWFzIFNJTV9FUlJPUiBpcyBzZW50IG9ubHkgZnJvbSBTSU0gdG8gTU0uIE1NIHByb3Bvc2VzIHRoZQorICAgICAgIHNvbHV0aW9uOiBkZWxldGUgcGVuZGluZyBTSU1fUkVBRFkgdG8gc3luYyBBUy9OQVMgc2ltIHN0YXR1cy4gKi8KKyAgICBrYWxfYm9vbCBpc19kZWxldGVfcGVuZGluZzsKK31yYXRjbV9nYXNfc2ltX2luZm9fcmVzZXRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKK31yYXRjbV9nYXNfY2xlYXJfbXJ1X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGxhX2NvZGVbMl07CisgICAgZm9yYmlkZGVuX2xhX3R5cGVfZW51bSBmb3JiaWRkZW5fbGFfdHlwZTsKKyAgICBwbG1uX2lkX3N0cnVjdCBwbG1uX2lkOworfXJhdGNtX2dhc19hZGRfZm9yYmlkZGVuX2xhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG11aTsKKyAgICBrYWxfdWludDE2IGdpYmlfdGFnOworICAgIGRvbWFpbl9pZF9lbnVtIGNuX2RvbWFpbl9pZDsKKyAgICBnYXNfZXN0X2NhdXNlX2VudW0gZXN0Yl9jYXVzZTsKKyNpZmRlZiBfX0xURV9SQVRfXworICAgIGNzZmJfaW5kaWNhdG9yX2VudW0gY3NmYl9pbmRpY2F0b3I7CisgICAgY3NmYl9zZXJ2aWNlX3R5cGVfZW51bSBjc2ZiX3NlcnZpY2VfdHlwZTsKKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworICAgIGthbF9ib29sIGlzX2ltc2lfZGV0YWNoOworfXJhdGNtX2dhc19jb25uX2VzdF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGRvbWFpbl9pZF9lbnVtIGNuX2RvbWFpbl9pZDsKK31yYXRjbV9nYXNfY29ubl9yZWxfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbXVpOworICAgIGthbF91aW50MTYgZ2liaV90YWc7CisgICAgZG9tYWluX2lkX2VudW0gY25fZG9tYWluX2lkOworICAgIGthbF9ib29sIGlzX2ltc2lfZGV0YWNoOworfXJhdGNtX2dhc19kYXRhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGxhX2NvZGVbMl07CisgICAgcGxtbl9pZF9zdHJ1Y3QgcGxtbl9pZDsKKyAgICBrYWxfYm9vbCBkZWxldGVfYWxsOworfXJhdGNtX2dhc19kZWxfZm9yYmlkZGVuX2xhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGVxX3BsbW5fY291bnQ7CisgICAgcGxtbl9pZF9zdHJ1Y3QgZXFfcGxtbl9pZFtNQVhfTlVNX0VRX1BMTU5dOworfXJhdGNtX2dhc19lcV9wbG1uX2xpc3RfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgLy9rYWxfdWludDggcmVxdWVzdGVkX2JhbmQ7IC8qIHJlZmVyIHRvIGdzbV9iYW5kX2VudW0gKi8KKyAgICBrYWxfdWludDggZHJ4X3BhcmFbMl07IC8qIGZvciBzcGxpdCBwYWdpbmcgY3ljbGUgYW5kIG5vbi1kcnggdGltZXIgKi8KKyAgICBrYWxfdWludDggaW1laXN2X3ZhbHVlX2RpZ2l0MDsKKyAgICBrYWxfdWludDggaW1laXN2X3ZhbHVlX2RpZ2l0X2J5dGVbOF07CisjaWZkZWYgX19NT05JVE9SX1BBR0VfRFVSSU5HX1RSQU5TRkVSX18KKyAgICBncHJzX3RyYW5zZmVyX3ByZWZlcmVuY2VfZW51bSBwcmVmZXI7CisjZW5kaWYgLyogX19NT05JVE9SX1BBR0VfRFVSSU5HX1RSQU5TRkVSX18gKi8KKyAgICBpbml0X2NhdXNlX2VudW0gaW5pdF9jYXVzZTsKK31yYXRjbV9nYXNfaW5pdF9yZXFfc3RydWN0OworCisjaWZkZWYgX19EWU5BTUlDX0JBTkRfU0VMX18KKy8qIE1BVUlfMDE5NzI5MjAgKi8KK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGdzbV9iYW5kOyAvKiByZWZlciB0byBiYW5kX3NlbGVjdGlvbl9lbnVtIHZhbHVlKi8gCit9cmF0Y21fZ2FzX3NldF9wcmVmZXJyZWRfYmFuZF9yZXFfc3RydWN0OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfdG1zaV9sYWlfcHJlc2VudDsKKyAgICBrYWxfdWludDggdG1zaVs0XTsKKyAgICBsYWlfc3RydWN0IHJlZ19sYWk7CisgICAga2FsX2Jvb2wgaXNfcHRtc2lfcmFpX3ByZXNlbnQ7CisgICAga2FsX3VpbnQ4IHB0bXNpWzRdOworICAgIHJhaV9zdHJ1Y3QgcmVnX3JhaTsKK31yYXRjbV9nYXNfcGFnaW5nX3BhcmFtX2Fzc2lnbl9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX21hbnVhbF9saXN0OworICAgIHNjYW5fdHlwZV9lbnVtIHNjYW5fdHlwZTsKKyAgICBrYWxfdWludDggcGxtbl9jb3VudDsgCisgICAgcGxtbl9pZF9zdHJ1Y3QgcGxtbl9pZFtNQVhfTlVNX1NFQVJDSF9QTE1OXTsgICAKKyAgICBmb3VuZF9tY2NfaW5mb19zdHJ1Y3QgZm91bmRfbWNjX2luZm87CisJa2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgIG51bV9vZl9iYW5kOyAvL251bWJlciBvZiB2YWxpZCByZWNvcmRzIGluIGJhbmQgbGlzdAorICAgIC8qQmFuZCBsaXN0IGZvciBNQ0MgQmFuZCBmb3IgUExNTiBsaXN0IG9wdGltaXphdGlvbiovCisJa2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgIGJhbmRfbGlzdFtNQVhfU0VBUkNIX0JBTkRfTElTVF9TSVpFXTsKKyAgICB1c2VyX2xpc3RfdHlwZV9lbnVtIHVzZXJfbGlzdF90eXBlOworICAgIGthbF91aW50OCBnaXZlbl9udW1iZXJfb2ZfcGxtbjsgIC8vIHVzZWQgZm9yIHRoZSBVU0VSX0xJU1RfVFlQRV9HSVZFTl9USU1FUl9OVU1CRVIuIFdoZW4geEFTIGZvdW5kIHRoZSBnaXZlbiBudW1iZXIgb2YgcGxtbiwgeEFTIHJldHVybiBQTE1OX0xJU1RfQ05GLiBXaGVuIHZhbHVlIGlzIDAgbWVhbnMgeEFTIGRvIGNvbXBsZXRlIGxpc3QsIG5vIG5lZWQgY2FyZSBpdC4KKyNpZmRlZiBfX0lQQ19ORVRXT1JLX1NDQU5fXworCW5ldHdvcmtfc2Nhbl9pbnB1dF9zdHJ1Y3QgICBuZXR3b3JrX3NjYW5faW5wdXQ7CisjZW5kaWYgCit9cmF0Y21fZ2FzX3BsbW5fbGlzdF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfdXNlcl9wbG1uX2xpc3Rfb25nb2luZzsKK30gcmF0Y21fZ2FzX3BsbW5fbGlzdF9zdGF0dXNfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHRyeF9pZDsKKyAgICBwbG1uX3NlYXJjaF90eXBlX2VudW0gcGxtbl9zZWFyY2hfdHlwZTsgICAgCisgICAga2FsX3VpbnQ4IHBsbW5faWRfY291bnQ7CisgICAgcGxtbl9pZF9zdHJ1Y3QgcGxtbl9pZFtNQVhfTlVNX1NFQVJDSF9QTE1OXTsgICAKKyAgICBzZWFyY2hfcGFyYW1fY29udGFpbmVyX3N0cnVjdCBhc19wYXJhbV9jb250YWluZXI7IAorICAgIGdzbV9zZWFyY2hfcGFyYW1fY29udGFpbmVyX3N0cnVjdCBnc21fcGFyYW07Cit9cmF0Y21fZ2FzX3BsbW5fc2VhcmNoX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisJcmF0X2VudW0gcmF0X2luZm87Cit9cmF0Y21fZ2FzX3BsbW5fbG9zc19pbmZvX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGFjdGlvbl9vbl9yZWFkeV90aW1lcl9lbnVtIGFjdGlvbjsKKyAgICBnbW1fbXNfc3RhdGVfZW51bSBuZXdfc3RhdGU7CisgICAga2FsX3VpbnQzMiB2YWx1ZTsKK31yYXRjbV9nYXNfcmVhZHlfdGltZXJfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmVnbl9wcm9jX3N0YXR1c19lbnVtIHByb2Nfc3RhdHVzOworICAgIGthbF91aW50MzIgdDMyMTJfb3JfdDMzMDI7CisgICAgZ21tX21zX3N0YXRlX2VudW0gbXNfc3RhdGU7CisgICAgbW1hc19yZWduX3N0YXR1c19lbnVtIHJlZ25fc3RhdHVzOworICAgIHBsbW5fc2VhcmNoX3N0YXR1c19lbnVtIHBsbW5fc2VhcmNoX3N0YXR1czsKKyAgICBwbG1uX3NlYXJjaF90eXBlX2VudW0gcGxtbl9zZWFyY2hfdHlwZTsKKyAgICAvKiBfX0FVVEhfRkFJTF9CQVJfQ0VMTF9fICovCisgICAgbGFpX3N0cnVjdCBsYWk7IC8qIGZvciBiYXIgY2VsbCBsaXN0ICovCisgICAga2FsX3VpbnQzMiBjZWxsX2lkOyAvKiBmb3IgYmFyIGNlbGwgbGlzdCAoYXJndW1lbnQgdHlwZSBzeW5jLiB3aXRoIFVBUykgKi8KKyAgICAvKiBfX0FVVEhfRkFJTF9CQVJfQ0VMTF9fICovCit9cmF0Y21fZ2FzX3JlZ25fc3RhdHVzX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCByX2VxX3BsbW5fY291bnQ7CisgICAgcGxtbl9pZF9zdHJ1Y3Qgcl9lcV9wbG1uX2lkW01BWF9OVU1fRVFfUExNTl07Cit9IHJhdGNtX2dhc19ycGxtbl9lcV9wbG1uX2xpc3RfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfZ3Byc19yZXF1aXJlZDsKK31yYXRjbV9nYXNfc2VydmljZV9jaGFuZ2VfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByYXRfZW51bSByYXQ7CisgICAgcmF0X2VudW0gcmVwb3J0ZWRfcmF0OworfXJhdGNtX2dhc19zZXRfcmF0X21vZGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIG9sZF90bGxpOworICAgIGthbF91aW50MzIgbmV3X3RsbGk7CisgICAgdGxsaV91cGRhdGVfdHlwZV9lbnVtIHN0YXR1c190bGxpOworICAgIHJhaV9zdHJ1Y3QgcmFpOworfXJhdGNtX2dhc190bGxpX2Fzc2lnbl9yZXFfc3RydWN0OworCisjaWZkZWYgX19NT05JVE9SX1BBR0VfRFVSSU5HX1RSQU5TRkVSX18KK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgZ3Byc190cmFuc2Zlcl9wcmVmZXJlbmNlX2VudW0gcHJlZmVyOworfXJhdGNtX2dhc19zZXRfZ3Byc190cmFuc2Zlcl9wcmVmZXJlbmNlX3JlcV9zdHJ1Y3Q7CisjZW5kaWYgLyogX19NT05JVE9SX1BBR0VfRFVSSU5HX1RSQU5TRkVSX18gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgY2JjaF9yZXE7Cit9IHJhdGNtX2dhc19jYmNoX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MTYgY2JtaVtDQl9NQVhfTVNHX0NCTUlfTlVNXTsKKyAgICBrYWxfdWludDE2IGNibWlkW0NCX01BWF9NU0dfQ0JNSURfTlVNXTsKKyAgICBrYWxfdWludDE2IGNibWlyW0NCX01BWF9NU0dfQ0JNSVJfTlVNXTsKKyAgICBrYWxfdWludDE2IGRjc1tDQl9NQVhfTEFOR19OVU1dOworICAgIGthbF9ib29sIGlzX2FsbF9sYW5ndWFnZV9vbjsgICAgCisgICAgbDRjX2NiX3NldF90eXBlX2VudW0gc2V0X3R5cGU7Cit9IHJhdGNtX2dhc19jYl91cGRhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQxNiBtaTsgICAgCisgICAga2FsX3VpbnQxNiBzbjsKK30gcmF0Y21fZ2FzX2NiX21zZ19yZW1vdmFsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MTYgc247CisgICAga2FsX3VpbnQxNiBtaTsKKyAgICBrYWxfdWludDggZGNzOworICAgIGthbF91aW50OCBwYWdlOworICAgIGthbF91aW50OCBwYWdlczsKKyAgICBrYWxfdWludDggaXNfbWlkczsKKyAgICBrYWxfdWludDggbWlfaW5kZXg7CisgICAga2FsX3VpbnQ4IHBhZ2VfZGF0YVtDQl9NQVhfREFUQV9OVU1fUEVSX1BBR0VdOworCQorICAgIGthbF91aW50OCB2YWxpZF9ibGtfbnVtOworfSByYXRjbV9nYXNfY2JfcGFnZV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBjYl9nZW9ncmFwaHlfZW51bSBnZW9ncmFwaHlfdHlwZTsKK30gcmF0Y21fZ2FzX2NiX2dzX2NoYW5nZV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19leHBpcnk7IC8qS0FMX1RSVUU6IFQzMTIyIGV4cGlyZXMsIE1NIHdpbGwgcmV0cnkgTFUgaW1tZWRpYXRlbHkKKwkJCQkJCSAgS0FMX0ZBTFNFOiBUMzEyMiBpcyBzdG9wcGVkICovCit9IHJhdGNtX2dhc190MzEyMl90aW1lb3V0X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX2V4cGlyeTsgLypLQUxfVFJVRTogQ0NPIGFjdGl2YXRpb24gdGltZXIgZXhwaXJlcywgTU0gd2lsbCByZXRyeSBMVSBpbW1lZGlhdGVseQorCQkJCQkJICBLQUxfRkFMU0U6IENDTyBhY3RpdmF0aW9uIHRpbWVyIGlzIHN0b3BwZWQgKi8KK30gcmF0Y21fZ2FzX2Njb19hY3RpdmF0aW9uX3RpbWVfdGltZW91dF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgICBrYWxfdWludDggcGxtbl9pZF9jb3VudDsKKyAgICBwbG1uX2lkX3N0cnVjdCBwbG1uX2lkW01EMV9NQVhfTlVNX0hQTE1OXTsgLyogTUFYX05VTV9IUExNTjogNCAqLworICAgIGthbF91aW50OCBob21lX2NvdW50cnlfbWNjWzNdOworfSByYXRjbV9nYXNfaHBsbW5faW5mb191cGRhdGVfcmVxX3N0cnVjdDsgLy9tdGswMjQ3NTogZm9yIE1BVUlfMDI0NTY5NjQKKworI2lmIGRlZmluZWQoX19HRU1JTklfXykKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNpbV9jb25maWdfc3RhdHVzOworICAgIGthbF91aW50OCBzaW1faW5zZXJ0X3N0YXR1czsKK30gcmF0Y21fZ2FzX3NpbV9zdGF0dXNfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfX0dFTUlOSV9fIHx8IF9fU0dMVEVfXyAqLworCisjaWZkZWYgX19HRU1JTklfXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCit9IHJhdGNtX2dhc19zdXNwZW5kX2luZF9zdHJ1Y3Q7CisKKworLyogTUFVSV8wMjg2NTY5MyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgYXNfZ2VtaW5pX3N0YXR1c19lbnVtIGFzX2dlbWluaV9zdGF0dXM7IAorfSByYXRjbV9nYXNfdmlydHVhbF9tb2RlX2luZF9zdHJ1Y3Q7CisKKy8qIE1BVUlfMDI4NzcxOTEsIHRoaXMgbWVzc2FnZSBjb250YWlucyBubyBsb2NhbF9wYXJhbSBleGNlcHQgZm9yIEdFTUlOSTIuMCAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgYXNfZ2VtaW5pX3N0YXR1c19lbnVtIGFzX2dlbWluaV9zdGF0dXM7IAorfSByYXRjbV9nYXNfcmVzdW1lX2luZF9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfX0dFTUlOSV9fICovCisKKyNpZiBkZWZpbmVkKF9fR0VNSU5JX18pICYmIGRlZmluZWQoIF9fVU1UU19SQVRfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorfSByYXRjbV9nYXNfbm9faXJfc2lnX3Byb2NfcmVxX3N0cnVjdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGltZWlzdl92YWx1ZV9kaWdpdDA7CisgICAga2FsX3VpbnQ4IGltZWlzdl92YWx1ZV9kaWdpdF9ieXRlWzhdOworfXJhdGNtX2dhc19zZXRfaW1laV9yZXFfc3RydWN0OworCisjaWYgZGVmaW5lZChfX0dFTUlOSV9fKSAmJiBkZWZpbmVkKCBfX0xURV9SQVRfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGNzX3N0YXR1c19lbnVtIHN0YXR1czsKK30gcmF0Y21fZ2FzX2NzX3N0YXR1c191cGRhdGVfcmVxX3N0cnVjdDsKKyNlbmRpZgorCisjaWZkZWYgX19MVEVfUkFUX18KK3R5cGVkZWYgc3RydWN0eyAgICAKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGlyYXRfdHlwZV9lbnVtIGlyYXRfdHlwZTsKKyAgICByYXRfdHlwZV9lbnVtIHNvdXJjZV9yYXQ7CisgICAgcmF0X3R5cGVfZW51bSB0YXJnZXRfcmF0OworICAgIHZvaWQqIGFzX2luZm9fcHRyOworICAgIHJhdGNtX2dhc19zZWN1cml0eV9tb2RlX3JlcV9zdHJ1Y3Qgc2VjdXJpdHlfbW9kZV9pbmZvOworICAgIGNzZmJfaW5kaWNhdG9yX2VudW0gY3NmYl9pbmRpY2F0b3I7CisgICAga2FsX2Jvb2wgaXNfbGFpX3ZhbGlkOworICAgIGxhaV9zdHJ1Y3QgbGFpOworfXJhdGNtX2dhc19yYXRfY2hhbmdlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGlyYXRfdHlwZV9lbnVtIGlyYXRfdHlwZTsKKyAgICByYXRfdHlwZV9lbnVtIHNvdXJjZV9yYXQ7CisgICAgcmF0X3R5cGVfZW51bSB0YXJnZXRfcmF0OworICAgIGlyYXRfcmVzdWx0X2VudW0gaXJhdF9yZXN1bHQ7CisgICAgaXJhdF9yZWplY3RfY2F1c2VfZW51bSBpcmF0X3JlamVjdF9jYXVzZTsgLy9SZWplY3QgY2F1c2Ugd2hlbiBpcmF0X3Jlc3VsdCBpcyBlcXVhbCB0byBJUl9SRVNVTFRfUkVKRUNULgorICAgIHZvaWQqIGFzX2luZm9fcHRyOworfSByYXRjbV9nYXNfcmF0X2NoYW5nZV9yc3Bfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsgICAgCisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBwYWdpbmdfdHlwZV9lbnVtIHBhZ2luZ190eXBlOworICAgIGNzZmJfc2VydmljZV90eXBlX2VudW0gcGFnaW5nX3NlcnZpY2U7CisgICAga2FsX2Jvb2wgaXNfcGFnaW5nX3JldHJ5OworfXJhdGNtX2dhc19wYWdlX3JlcV9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdHsgICAgCisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBhcmFsX29wX2VudW0gICAgICBvcF9jb2RlOworCXBsbW5faWRfc3RydWN0ICAgIHBsbW47CisJa2FsX3VpbnQ4ICAgICAgICAgYXJhX3N0YXJ0WzJdOworCWthbF91aW50OCAgICAgICAgIGFyYV9lbmRbMl07Cit9cmF0Y21fZ2FzX2FyYWxfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBudW1fb2Zfbnc7CisgICAgZW1jX2ZvcmJpZGRlbl9ud19saXN0X3N0cnVjdCBud19saXN0W01BWF9GT1JCSURERU5fTkVUV09SS19OVU1dOworfSByYXRjbV9nYXNfZW1jX2ZvcmJpZGRlbl9ud19saXN0X3VwZGF0ZV9yZXFfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX3BnY2hlY2tfb247ICAgICAKK30gcmF0Y21fZ2FzX3NldF9wZ2NoZWNrX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBjYWxsX3N0YXR1c19lbnVtIGNhbGxfc3RhdHVzOworICAgIGNhbGxfdHlwZV9pbmRpY2F0aW9uX2VudW0gY2FsbF90eXBlOworfSByYXRjbV9nYXNfY2FsbF9zdGF0dXNfaW5kX3N0cnVjdDsKKworLypTbmlmZmVyIHJlbGF0ZWQgbWVzc2FnZSBzdHJ1Y3R1cmVzKi8KKy8vTVNHX0lEX1JBVENNX0dBU19TTklGRkVSX1NUQVJUX1JFUQordHlwZWRlZiByYXRjbV9hc19zbmlmZmVyX3N0YXJ0X3JlcV9zdHJ1Y3QgcmF0Y21fZ2FzX3NuaWZmZXJfc3RhcnRfcmVxX3N0cnVjdDsKKworLy9NU0dfSURfUkFUQ01fR0FTX1NOSUZGRVJfU1RPUF9SRVEKK3R5cGVkZWYgcmF0Y21fYXNfc25pZmZlcl9zdG9wX3JlcV9zdHJ1Y3QgcmF0Y21fZ2FzX3NuaWZmZXJfc3RvcF9yZXFfc3RydWN0OworCisvL01TR19JRF9SQVRDTV9HQVNfU0lHTkFMX0FQUEVBUl9JTkQKK3R5cGVkZWYgcmF0Y21fYXNfc2lnbmFsX2FwcGVhcl9pbmRfc3RydWN0IHJhdGNtX2dhc19zaWduYWxfYXBwZWFyX2luZF9zdHJ1Y3Q7CisKKy8vTVNHX0lEX1JBVENNX0dBU19DSEVDS19BQ1RJVkVfUkFUX1JFUSwKK3R5cGVkZWYgcmF0Y21fYXNfY2hlY2tfYWN0aXZlX3JhdF9yZXFfc3RydWN0IHJhdGNtX2dhc19jaGVja19hY3RpdmVfcmF0X3JlcV9zdHJ1Y3Q7CisKKy8vTVNHX0lEX1JBVENNX0dBU19DSEVDS19BQ1RJVkVfUkFUX0NORgordHlwZWRlZiByYXRjbV9hc19jaGVja19hY3RpdmVfcmF0X2NuZl9zdHJ1Y3QgcmF0Y21fZ2FzX2NoZWNrX2FjdGl2ZV9yYXRfY25mX3N0cnVjdDsKKworLy9NU0dfSURfUkFUQ01fR0FTX1NFVF9BQ1RJVkVfUkFUX1JFUSwKK3R5cGVkZWYgcmF0Y21fYXNfc2V0X2FjdGl2ZV9yYXRfcmVxX3N0cnVjdCByYXRjbV9nYXNfc2V0X2FjdGl2ZV9yYXRfcmVxX3N0cnVjdDsKKworLy9NU0dfSURfUkFUQ01fR0FTX1NFVF9BQ1RJVkVfUkFUX0NORgordHlwZWRlZiByYXRjbV9hc19zZXRfYWN0aXZlX3JhdF9jbmZfc3RydWN0IHJhdGNtX2dhc19zZXRfYWN0aXZlX3JhdF9jbmZfc3RydWN0OworCisjaWZkZWYgX19HRU1JTklfXwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKwlrYWxfYm9vbCBpc19kYXRhX2FsbG93ZWQ7Cit9cmF0Y21fZ2FzX2RhdGFfYWxsb3dfcmVxX3N0cnVjdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorCXBsbW5fYmFuZF9zdHJ1Y3QgcGxtbl9iYW5kOworfXJhdGNtX2dhc19wbG1uX2JhbmRfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmZvZmZfY2F1c2VfZW51bSByZm9mZl9jYXVzZTsKK30gcmF0Y21fZ2FzX3Jmb2ZmX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19hdXRoX2Rvd25sb2FkX29uZ29pbmc7Cit9IHJhdGNtX2dhc19yc2ltX2F1dGhfZG93bmxvYWRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sICAgIG5vcm1hbF9vb3NfcmVjb3Zlcnlfcm91bmRfcHJlc2VudDsKKyAgICBrYWxfdWludDggICBub3JtYWxfb29zX3JlY292ZXJ5X3JvdW5kOyAgLy8gZGVmYXVsdCB2YWx1ZSA9IDUsIHJhbmdlIFsyLCAxMF0KKyAgICBrYWxfYm9vbCAgICBpbmFjdGl2ZV9mdWxsYmFuZF9wZXJpb2RfcHJlc2VudDsKKyAgICBrYWxfdWludDE2ICBpbmFjdGl2ZV9mdWxsYmFuZF9wZXJpb2Q7ICAgLy8gZGVmYXVsdCA9IDIwMHMsIHJhbmdlOiBbOTAsIDM2MF0KKyAgICBrYWxfYm9vbCAgICBpbmFjdGl2ZV9zbmlmZmVyX3BlcmlvZF9wcmVzZW50OyAgICAKKyAgICBrYWxfdWludDggICBpbmFjdGl2ZV9zbmlmZmVyX3BlcmlvZDsgICAgLy8gZGVmYXVsdCA9IDMwcywgcmFuZ2U6IFsxMCwgNjBdCisgICAga2FsX2Jvb2wgICAgaXNfaW5hY3RpdmVfbW9kZV9wcmVzZW50OworICAgIGthbF9ib29sICAgIGlzX2luYWN0aXZlX21vZGU7CQkvLyBUcnVlOiBlbnRlciBpbmFjdGl2ZSBtb2RlLCBGYWxzZTogbGVhdmUgaW5hY3RpdmUgbW9kZQorfSByYXRjbV9nYXNfaW5hY3RpdmVfbW9kZV9jb25maWd1cmF0aW9uX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCAgICBpc19vdmVyX2luYWN0aXZlX21vZGVfdGhyZXNob2xkOyAvLyBUcnVlOiByZWNvdmVyeSBjb3VudGVyID4gbm9ybWFsX29vc19yZWNvdmVyeV9yb3VuZAorfSByYXRjbV9nYXNfc2VydmljZV9yZWNvdmVyeV9yb3VuZF91cGRhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgZWxldmF0b3JfbW9kZV9lbnVtIGVsZXZhdG9yX21vZGU7Cit9IHJhdGNtX2dhc19lbGV2YXRvcl9tb2RlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGNzZmJfcGFnZV9jb25maWdfZW51bSBjc2ZiX3BhZ2VfY29uZmlnOworfXJhdGNtX2dhc19jc2ZiX3BhZ2VfY29uZmlnX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreyAKKyAgICBMT0NBTF9QQVJBX0hEUiAKKyAgICBuZXR3b3JrX3NjYW5fMmdfb3V0cHV0X3N0cnVjdCBud19zY2FuXzJnX291dHB1dDsJCit9IHJhdGNtX2dhc19wbG1uX3NjYW5faW5kX3N0cnVjdDsKKworCit0eXBlZGVmIGdtbXJlZ19sdGVfbm9ybWFsX3NlcnZpY2VfbG9zc191cGRhdGVfcmVxX3N0cnVjdCByYXRjbV9nYXNfbHRlX25vcm1hbF9zZXJ2aWNlX2xvc3NfdXBkYXRlX3JlcV9zdHJ1Y3QgOworCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHBsbW5faWRfc3RydWN0ICAgICAgICAgICAgICBwbG1uX2lkOworfSByYXRjbV9nYXNfcGxtbl9pbmZvX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHJhdGNtX2dhc19jYl9tc2dfcmVtb3ZhbF9yZXFfc3RydWN0IHJhdGNtX2dhc19jYl9kdXBfZGV0X3RpbWVyX3N0b3BfaW5kX3N0cnVjdDsKKworI2VuZGlmIC8qIF9SQVRDTV9HQVNfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9sbGNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fbGxjX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3Y2JkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fbGxjX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgcmF0Y21fbGxjX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTlpBCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1JBVENNX0xMQ19TVFJVQ1RfSAorI2RlZmluZSBfUkFUQ01fTExDX1NUUlVDVF9ICisKKyNpbmNsdWRlICJtY2RfbDNfaW5jX2dwcnNfc3RydWN0LmgiCisjaW5jbHVkZSAiYXMybmFzX3N0cnVjdC5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAibDNsbGNfZW51bXMuaCIKKyNpbmNsdWRlICJpcmF0X2NvbW1vbl9lbnVtcy5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIG9sZF90bGxpOworICAgIGthbF91aW50MzIgbmV3X3RsbGk7CisgICAgdGxsaV91cGRhdGVfdHlwZV9lbnVtIHRsbGlfdXBkYXRlX3R5cGU7IC8qIHRsbGlfdXBkYXRlX3R5cGVfZW51bSAqLworICAgIGthbF91aW50OCBjaXBoZXJfYWxnbzsgLyogMD1ubyBjaXBoZXJpbmcsIDE9R0VBMSwgMj1HRUEyLCAzPUdFQTMqLworICAgIGthbF91aW50OCBpc19ncHJzX2NpcGhlcl9rZXlfaW5mb19wcmVzZW50OyAvKiBpZiBHUFJTIGNpcGhlciBrZXkgcHJlc2VudCAqLworICAgIGthbF91aW50OCBncHJzX2NpcGhlcl9rZXlfaW5mb1tLQ19MRU5dOyAvKiBHUFJTIGNpcGhlciBrZXkgKEtjKSAqLyAgICAKKyAgICBrYWxfdWludDggaXNfZ3Byc19jaXBoZXJfa2V5MTI4X2luZm9fcHJlc2VudDsgLyogaWYgR1BSUyBjaXBoZXIga2V5MTI4IHByZXNlbnQgKi8KKyAgICBrYWxfdWludDggZ3Byc19jaXBoZXJfa2V5MTI4X2luZm9bS0MxMjhfTEVOXTsgLyogR1BSUyBjaXBoZXIga2V5MTI4IChLYykgKi8KK30gcmF0Y21fbGxjX2Fzc2lnbl9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIHRsbGk7IC8qIHh5eiovCit9IHJhdGNtX2xsY19yZXN1bWVfcmVxX3N0cnVjdDsgLyogU2hvdWxkIGJlIHNhbWUgYXMgbW1fcmF0Y21fbGxjX3Jlc3VtZV9yZXFfc3RydWN0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgdGxsaTsgLyogeHl6Ki8KK30gcmF0Y21fbGxjX3N1c3BlbmRfcmVxX3N0cnVjdDsgLyogU2hvdWxkIGJlIHNhbWUgYXMgbW1fcmF0Y21fbGxjX3N1c3BlbmRfcmVxX3N0cnVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIHRsbGk7CisgICAga2FsX3VpbnQ4IGNhdXNlOworfSByYXRjbV9sbGNfc3RhdHVzX2luZF9zdHJ1Y3Q7IC8qIFNob3VsZCBiZSBzYW1lIGFzIG1tX3JhdGNtX2xsY19zdGF0dXNfaW5kX3N0cnVjdCAqLworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgdGxsaTsgLyogeHl6Ki8KKyAgICBrYWxfdWludDggY2F1c2U7IC8qIHJlc19yZXFfY2F1c2UgKi8KKyAgICBrYWxfdWludDggY2VsbF91cGRhdGVfdHlwZTsgLyogUjk5IGZlYXR1cmU6IGxsZ21tX2NlbGxfdXBkYXRlX3R5cGVfZW51bSAqLworfSByYXRjbV9sbGNfdHJpZ2dlcl9yZXFfc3RydWN0OyAvKiBTaG91bGQgYmUgc2FtZSBhcyBtbV9yYXRjbV9sbGNfdHJpZ2dlcl9yZXFfc3RydWN0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBpOworICAgIGthbF91aW50OCByYWRpb19wcmlvcml0eTsKKyAgICBrYWxfdWludDggY2lwaGVyX2luZDsKKyAgICBrYWxfdWludDggbXNnX3R5cGU7CisgICAga2FsX3VpbnQ4IG5zYXBpOworICAgIGthbF91aW50MzIgdGxsaTsKKyAgICBrYWxfdWludDggcGZpOyAvKiBSOTkgZmVhdHVyZSAqLworICAgIGNvbmNpc2VfcW9zX3N0cnVjdCBxb3NfcGFyYW07CisgICAgcGVlcl9tc2dfaWRfc3RydWN0IHBlZXJfbXNnX2lkOyAgICAKK30gcmF0Y21fbGxjX3VuaXRkYXRhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBpOworICAgIGthbF9ib29sIGNpcGhlcl9pbmQ7CisgICAga2FsX3VpbnQzMiB0bGxpOworfSByYXRjbV9sbGNfdW5pdGRhdGFfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB0eF9zdGF0dXM7ICAvKiBNQVVJXzAyMzg4NDg5ICovCisgICAgcGVlcl9tc2dfaWRfc3RydWN0IHBlZXJfbXNnOworfSByYXRjbV9sbGNfYXNfbmFzX2RhdGFfY25mX3N0cnVjdDsKKwordHlwZWRlZiByYXRjbV9sbGNfYXNzaWduX3JlcV9zdHJ1Y3QgbGxjX2dtbV9hc3NpZ25fcmVxX3N0cnVjdDsgCit0eXBlZGVmIHJhdGNtX2xsY190cmlnZ2VyX3JlcV9zdHJ1Y3QgbGxjX2dtbV90cmlnZ2VyX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIHJhdGNtX2xsY19zdXNwZW5kX3JlcV9zdHJ1Y3QgbGxjX2dtbV9zdXNwZW5kX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIHJhdGNtX2xsY19yZXN1bWVfcmVxX3N0cnVjdCBsbGNfZ21tX3Jlc3VtZV9yZXFfc3RydWN0OwordHlwZWRlZiByYXRjbV9sbGNfc3RhdHVzX2luZF9zdHJ1Y3QgbGxjX2dtbV9zdGF0dXNfaW5kX3N0cnVjdDsgCisKKyNlbmRpZiAvKiBSQVRDTV9MTENfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9yYXRkbV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9yYXRkbV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWU0ODUzCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX3JhdGRtX3N0cnVjdC5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICByYXRjbV9yYXRkbV9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT05aQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9SQVRDTV9SQVRETV9TVFJVQ1RfSAorI2RlZmluZSBfUkFUQ01fUkFURE1fU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAibndzZWxfcmF0ZG1fc3RydWN0LmgiCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmF0ZG1fcmF0X2VudW0gICAgY3VycmVudF9yYXQ7Cit9IHJhdGNtX3JhdGRtX3JlZ2Fpbl9jb3ZlcmFnZV9yZXFfc3RydWN0OworCisjaWZkZWYgX19HRU1JTklfXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgYXNfZ2VtaW5pX3N0YXR1c19lbnVtIGFzX2dlbWluaV9zdGF0dXM7Cit9IHJhdGNtX3JhdGRtX3ZpcnR1YWxfbW9kZV9pbmRfc3RydWN0OworI2VuZGlmCisKKworI2VuZGlmIC8qIF9SQVRDTV9SQVRETV9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX3JyY2VfZW51bXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9ycmNlX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwYjQxMwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9ycmNlX2VudW1zLmgKQEAgLTAsMCArMSwzMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICByYXRjbV9ycmNlX2VudW0uaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT05aQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUkFUQ01fUlJDRV9FTlVNU19ICisjZGVmaW5lIF9SQVRDTV9SUkNFX0VOVU1TX0gKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisvKgordHlwZWRlZiBlbnVtCit7CisJUEFHRV9UWVBFX0lOVkFMSUQgPSAwLAorCVBBR0VfVFlQRV9JTVNJLAorCVBBR0VfVFlQRV9UTVNJLAorCVBBR0VfVFlQRV9QVE1TSQorfSBQYWdpbmdJZFR5cGU7CisqLworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKK3R5cGVkZWYgZW51bQoreworICAgSElHSF9Qcmlvcml0eSA9IDAsCisgICBMT1dfUHJpb3JpdHkgPSAxLAorICAgQk9USCA9IDIKK30gU1JCX1ByaW9yaXR5OworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisKKworLyogRU5VTUVSQVRFRCBFc3RhYmxpc2htZW50Q2F1c2UgKi8KK3R5cGVkZWYgZW51bQoreworICAgb3JpZ2luYXRpbmdDb252ZXJzYXRpb25hbENhbGwsICAgICAgICAgICAgICAgICAgICAgICAKKyAgIG9yaWdpbmF0aW5nU3RyZWFtaW5nQ2FsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBvcmlnaW5hdGluZ0ludGVyYWN0aXZlQ2FsbCwgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgb3JpZ2luYXRpbmdCYWNrZ3JvdW5kQ2FsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIG9yaWdpbmF0aW5nU3Vic2NyaWJlZFRyYWZmaWNDYWxsLCAgICAgICAgICAgICAgICAgICAgCisgICBFc3RhYmxpc2htZW50Q2F1c2VfdGVybWluYXRpbmdDb252ZXJzYXRpb25hbENhbGwsICAgIAorICAgRXN0YWJsaXNobWVudENhdXNlX3Rlcm1pbmF0aW5nU3RyZWFtaW5nQ2FsbCwgICAgICAgICAKKyAgIEVzdGFibGlzaG1lbnRDYXVzZV90ZXJtaW5hdGluZ0ludGVyYWN0aXZlQ2FsbCwgICAgICAgCisgICBFc3RhYmxpc2htZW50Q2F1c2VfdGVybWluYXRpbmdCYWNrZ3JvdW5kQ2FsbCwgICAgICAgIAorICAgZW1lcmdlbmN5Q2FsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIGludGVyUkFUX0NlbGxSZXNlbGVjdGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBpbnRlclJBVF9DZWxsQ2hhbmdlT3JkZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgcmVnaXN0cmF0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIGRldGFjaCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBvcmlnaW5hdGluZ0hpZ2hQcmlvcml0eVNpZ25hbGxpbmcsICAgICAgICAgICAgICAgICAgIAorICAgb3JpZ2luYXRpbmdMb3dQcmlvcml0eVNpZ25hbGxpbmcsICAgICAgICAgICAgICAgICAgICAKKyAgIGNhbGxSZV9lc3RhYmxpc2htZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBFc3RhYmxpc2htZW50Q2F1c2VfdGVybWluYXRpbmdIaWdoUHJpb3JpdHlTaWduYWxsaW5nLAorICAgRXN0YWJsaXNobWVudENhdXNlX3Rlcm1pbmF0aW5nTG93UHJpb3JpdHlTaWduYWxsaW5nLCAKKyAgIEVzdGFibGlzaG1lbnRDYXVzZV90ZXJtaW5hdGluZ0NhdXNlVW5rbm93biwKKyAgIEVzdGFibGlzaG1lbnRDYXVzZV9tYm1zX1JlY2VwdGlvbiwvL1I2CisgICBFc3RhYmxpc2htZW50Q2F1c2VfbWJtc19QVFBfUkJfUmVxdWVzdCwvL1I2CisgICBvcmlnaW5hdGluZ0NTVmlkZW9DYWxsIC8vUjYKK30KK1JBVENNX1JSQ19Fc3RhYmxpc2htZW50Q2F1c2U7CisKKyNlbmRpZiAvKiBfUkFUQ01fUlJDRV9FTlVNU19IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fcnJjZV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9ycmNlX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMjllNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fcnJjZV9zdHJ1Y3QuaApAQCAtMCwwICsxLDYzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJhdGNtX3JyY2Vfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9OWkEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUkFUQ01fUlJDRV9TVFJVQ1RfSAorI2RlZmluZSBfUkFUQ01fUlJDRV9TVFJVQ1RfSAorCisvKiBNQVVJXzAyODI4MjEwLCByZWR1bmRhbnQgaGVhZGVyIHJlbW92YWwgKi8KKyNpbmNsdWRlICJyYXRjbV9ycmNlX2VudW1zLmgiCisjaW5jbHVkZSAibWNkX2wzX2luY19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJyYXRjbV91YXNfc3RydWN0LmgiCisvLyNpbmNsdWRlICJhcHBfbHRsY29tLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorCisvL21vdmUgTEFDIHRvIHJhdGNtX3Vhc19zdHJ1Y3QuaCBzaW5jZSBDU0NFIHdpbGwgYWxzbyBuZWVkIGl0LgorLy90eXBlZGVmIGthbF91aW50MTYgTEFDOworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisvL3R5cGVkZWYga2FsX3VpbnQ4IE5BU19NVUk7CisKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorLy9VREMKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisKKyAgIGthbF9ib29sIGlzX3Rtc2lfbGFpX3ByZXNlbnQ7CisgICAvKk5vdGUgdGhhdCBiaXQgOCBvZiB0bXNpWzBdIGlzIE1TQiBhbmQgYml0IDEgb2YgdG1zaVszXSBpcyBMU0Igb2YgVE1TSSAqLworICAga2FsX3VpbnQ4IHRtc2lbNF07CisgICBrYWxfYm9vbCBpc19sYWlfYWJub3JtYWw7ICAvKiBNQVVJXzAxOTU5NDk1Ki8KKyAgIGxhaV9zdHJ1Y3QgICByZWdfbGFpOworICAga2FsX2Jvb2wgIGlzX3B0bXNpX3JhaV9wcmVzZW50OworICAgLypOb3RlIHRoYXQgYml0IDggb2YgcHRtc2lbMF0gaXMgTVNCIGFuZCBiaXQgMSBvZiBwdG1zaVszXSBpcyBMU0Igb2YgUC1UTVNJKi8KKyAgIGthbF91aW50OCBwdG1zaVs0XTsKKyAgIGthbF9ib29sIGlzX3JhaV9hYm5vcm1hbDsgIC8qIE1BVUlfMDE5NTk0OTUgKi8KKyAgIHJhaV9zdHJ1Y3QgcmVnX3JhaTsKKyAgIGthbF91aW50OCAgIFBTX0NOU3BlY2lmaWNEUlhfQ0xDOworfSByYXRjbV9ycmNlX3BhZ2luZ19wYXJhbV9hc3NpZ25fcmVxX3N0cnVjdCA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBtbWFzX3JlZ25fc3RhdHVzX2VudW0gICByZWduX3N0YXR1czsKKyAgICBrYWxfYm9vbCAgIFBvd2VyT2ZmOworfXJhdGNtX3JyY2VfcmVnbl9zdGF0dXNfdXBkYXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorCisgICBSQVRDTV9SUkNfUGFnaW5nQ2F1c2UgcGFnaW5nQ2F1c2U7CisgICAvKiBEZXNjcmlwdGlvbjogSWRlbnRpZmllcyB0aGUgdHlwZSBvZiBjb3JlIG5ldHdvcmsgZG9tYWluLiBUaGlzIGFuCisgICAgICBlbnVtZXJhdGVkIHR5cGUgKFJSQ19DTl9Eb21haW5JZGVudGl0eV9jc19kb21haW4sIFJSQ19DTl9Eb21haW5JZGVudGl0eV9wc19kb21haW4pLiAqLworICAgZG9tYWluX2lkX2VudW0gY25fRG9tYWluSWRlbnRpdHk7CisgICB1ZV9pZF90eXBlX2VudW0gICAgICAgIHBhZ2luZ0lkVHlwZTsKK30gcmF0Y21fcnJjZV9wYWdlX2luZF9zdHJ1Y3QgOworCisvKjIwMTMvMDMvMjYsIGxvY2FsIHJlbGVhc2UgZW5oYW5jZW1lbnQqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisKKyAgIFJBVENNX1JSQ19Mb2NhbFJlbGVhc2VUeXBlIGxvY2FsUmVsZWFzZVR5cGU7CisgICBrYWxfdWludDE2IGxvY2FsbHlfcmVsZWFzZWRfUFNfUkFCX2JpdG1hcDsKK30gcmF0Y21fcnJjZV9sb2NhbF9yZWxlYXNlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgCisvLyAgIE5BU19NVUkgICAgICAgICAgICAgICAgICAgICAgIE1VSTsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgTVVJOworICAgZ2liaV90YWdfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgZ2liaVRhZzsgICAKKyAgIGRvbWFpbl9pZF9lbnVtICAgICAgICAgY25Eb21haW5JRDsKKyAgIFJBVENNX1JSQ19Fc3RhYmxpc2htZW50Q2F1c2UgICAgICAgIGNhdXNlOworICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgaXNfc2VydmljZV9yZXE7CisjaWZkZWYgX19SNl9EU0FDX18gIAorICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgaXNEc2FjUHJlc2VudDsKKyAgIGthbF91aW50MTYgICAgICAgICAgICAgc2VsZWN0ZWREc2FjSW5mbzsKKyNlbmRpZgorICAgcGxtbl9pZF9zdHJ1Y3QgICAgICAgICAgc2VsZWN0ZWRwbG1uOworI2lmZGVmIF9fUFBBQ1JfU1VQUE9SVF9fCisgICBwcGFjX2NoZWNrZWRfdHlwZV9lbnVtICAgUFBBQ0NoZWNrZWRUeXBlOworICAga2FsX3VpbnQxNiAgICAgICAgICAgICBzZWxlY3RlZFBQQUNJbmZvOyAvL3VzZWQgYnkgUFBBQ19MUl9BTExPV0VECisjZW5kaWYKKyNpZmRlZiBfX0xURV9SQVRfXyAgCisgICBrYWxfYm9vbCAgIGlzX2NzZmI7IC8qIEl2eSBJdnkgKi8KKyAgIGNzZmJfaW5kaWNhdG9yX2VudW0gY3NmYl9pbmRpY2F0b3I7IC8vIEZvciBBVCZUIHJlcXVpcmVtZW50OiBDU0ZCX1JFSkVDVAorI2VuZGlmIC8qIF9fTFRFX1JBVF9fKi8KKyAgIHVtdHNfc2VydmljZV9wcmlvcml0eV9lbnVtIHNlcnZpY2VfcHJpb3JpdHk7IC8vIFtHZW1pbmldW1R3byBQUyBhdHRhY2hdCit9IHJhdGNtX3JyY2VfY29ubl9lc3RfcmVxX3N0cnVjdCA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorCisgICBkb21haW5faWRfZW51bSBjbkRvbWFpbklEIDsKKyAgIGFzX2VzdF9jbmZfY2F1c2VfZW51bSAgIHN0YXR1czsgIC8qIHN0YXR1cyBvZiB0aGUgUlJDIGNvbm5lY3Rpb24gKi8KKyAgIGthbF9ib29sICAgd2FpdF9naWJpX2ZsYWc7CisgICBrYWxfYm9vbCAgaXNfcnJjX2Nvbm5fYWxyZWFkeV9leGlzdGVkOworfSByYXRjbV9ycmNlX2Nvbm5fZXN0X2NuZl9zdHJ1Y3QgOworCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIAorICAgLy8gICBOQVNfTVVJICAgICAgICAgICAgICAgICAgICAgICBNVUk7CisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIE1VSTsKKyAgIGdpYmlfdGFnX3R5cGUgICAgICAgICAgICAgICBnaWJpVGFnOyAgIAorICAgZG9tYWluX2lkX2VudW0gY25Eb21haW5JRCA7CisgICBEQ19Qcmlvcml0eSAgICAgICAgICAgcHJpb3JpdHkgOworICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgaXNfc2VydmljZV9yZXE7Cit9IHJhdGNtX3JyY2VfZGF0YV90cmFuc2Zlcl9yZXFfc3RydWN0IDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisKKyAgIGRvbWFpbl9pZF9lbnVtIGNuRG9tYWluSUQgOworICAgLyogVGhpcyBmbGFnIGlzIHVzZWQgdG8gaW5mb3JtIFJBVENNIHRoYXQgdGhlIGludGVncml0eSBpcyBhcHBsaWVkIG9uIHRoaXMgTkFTIG1lc3NhZ2UuIE5vdGUgdGhhdCBhdCB0aGlzIHRpbWUsIAorICAgaXQgaXMgcG9zc2libGUgUlJDRSBoYXMgbm90IHNlbnQgUkFUQ01fUlJDRV9TRUNVUklUWV9NT0RFX0NPTVBMRVRFX0lORC4qLworICAga2FsX2Jvb2wgICBpbnRlZ3JpdHlBcHBsaWVkOworfSByYXRjbV9ycmNlX2RhdGFfdHJhbnNmZXJfaW5kX3N0cnVjdCA7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgCisgICAvLyAgIE5BU19NVUkgICAgICAgICAgICAgICAgICAgICAgIE1VSTsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgTVVJOworICAgRENfU3RhdHVzICAgICAgICAgICAgIHN0YXR1czsKKyAgIGRvbWFpbl9pZF9lbnVtIGNuRG9tYWluSUQgOworICAgRENfUHJpb3JpdHkgICAgICAgICAgIHByaW9yaXR5IDsKK31yYXRjbV9ycmNlX2RhdGFfdHJhbnNmZXJfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisKKyAgIGRvbWFpbl9pZF9lbnVtIGNuRG9tYWluSUQgOworICAgYXNfcmVsX3Njb3BlX2VudW0gICAgICAgc2NvcGU7CisgICBjb25uX3JlbF9jYXVzZV9lbnVtIGNhdXNlOworfSByYXRjbV9ycmNlX2Nvbm5fcmVsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorCisgICBkb21haW5faWRfZW51bSBjbkRvbWFpbklEIDsKKyAgIFJBVENNX1JSQ19SZWxlYXNlQ2F1c2UgICAgICBjYXVzZTsgLyogY2F1c2Ugb2YgdGhlIGNvbm5lY3Rpb24gcmVsZWFzZSAqLworICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgIHdhaXRHaWJpRmxhZzsKKyAgIGthbF9ib29sIHdhaXRGb3JSZWxlYXNlSW5kOyAvKkluZm9ybSBOQVMgdG8gd2FpdCBmb3IgY29ubmVjdGlvbiBSZWxlYXNlIGlmIE5ldHdvcmsgcmVsZWFzZXMgdGhlIGxhc3Qgc2lnbmFsbGluZyBjb25uZWN0aW9uKi8KK30gcmF0Y21fcnJjZV9jb25uX3JlbF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKworICAga2FsX2Jvb2wgICAgICBpc19yc3ZhX2Fib3J0OworfSByYXRjbV9ycmNlX2Nvbm5fbG9zc19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKworICAgZG9tYWluX2lkX2VudW0gY25Eb21haW5JRCA7CisgICBhc19yZWxfc2NvcGVfZW51bSAgICAgIHNjb3BlOworICAgLyogVHJ1ZSBtZWFucyB0aGUgc2lnbmFsaW5nIGNvbm5lY3Rpb24gb2YgdGhpcyBkb21haW4gaGFzIGJlZW4gcmVsZWFzZWQgc3VjY2Vzc2Z1bGx5LiAKKyAgIE90aGVyd2lzZSwgaXQgbWVhbnMgdGhlIHJlbGVhc2UgZmFpbHMuIEN1cnJlbnRseSwgaXQgd2lsbCByZXBvcnQgImZhaWx1cmUiIG9ubHkgZHVyaW5nIGludGVyLVJBVCBwcm9jZWR1cmUuIAorICAgUkFUQ00gc2hvdWxkIG5vdCByZXNlbmQgdGhlIHJlbGVhc2Ugb2YgY29ubmVjdGlvbiB1bnRpbCB0aGUgY29tcGxldGlvbiBvZiBpbnRlci1SQVQgcHJvY2VkdXJlLiovCisgICBrYWxfYm9vbCBJc19zdWNjZXNzZnVsOworICAga2FsX2Jvb2wgIHdhaXRHaWJpRmxhZzsKKyAgIGthbF9ib29sIHdhaXRGb3JSZWxlYXNlSW5kOyAvKkluZm9ybSBOQVMgdG8gd2FpdCBmb3IgY29ubmVjdGlvbiBSZWxlYXNlKi8KK30gcmF0Y21fcnJjZV9jb25uX3JlbF9jbmZfc3RydWN0OworCisvKgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisKK30gcmF0Y21fcnJjZV9jb25uX2xvc3NfaW5kX3N0cnVjdDsKKyovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgCisgICBTUkJfUHJpb3JpdHkgICAgICAgICAgcHJpb3JpdHk7CisgICBkb21haW5faWRfZW51bSAgICBjbkRvbWFpbklEOworfXJhdGNtX3JyY2VfcmJfcmVfZXN0YWJsaXNobWVudF9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKworICAgU1JCX1ByaW9yaXR5ICAgICAgICAgIHByaW9yaXR5OworICAgZG9tYWluX2lkX2VudW0gICAgY25Eb21haW5JRDsKK31yYXRjbV9ycmNlX3JiX3JlX2VzdGFibGlzaG1lbnRfcnNwX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisKKyAgIGthbF9ib29sICAgICAgICAgICBuZXdLZXlzOworICAgdW10c19zZWN1cml0eV9rZXkgIHNlY3VyaXR5X2tleTsKKyAgIGthbF9ib29sICAgICAgICAgICBpc19wb3dlcl9vbjsKKyAgIGthbF91aW50OCAgICAgICAgICBja3NuOworfSByYXRjbV9ycmNlX3NlY3VyaXR5X21vZGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisKKyAgIGRvbWFpbl9pZF9lbnVtIGNuRG9tYWluSUQ7CisgICBrYWxfYm9vbCAgICAgICAgICBpbnRlZ3JpdHlFbmFibGVkOworICAgQ2lwaGVyaW5nX1N0YXR1cyAgICAgICAgICBjaXBoZXJpbmdTdGF0dXM7CisgICBrYWxfdWludDggc2VydmljZV9yZXFfbXVpOworfSByYXRjbV9ycmNlX3NlY3VyaXR5X21vZGVfY29tcGxldGVfaW5kX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKworICAgZG9tYWluX2lkX2VudW0gY25Eb21haW5JRDsKKyAgIENpcGhlcmluZ19TdGF0dXMgIGNpcGhlcmluZ1N0YXR1czsKK30gcmF0Y21fcnJjZV9zZWN1cml0eV9tb2RlX2NoYW5nZV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIAorICAga2FsX2Jvb2wgICAgICAgICAgIGNzX0RvbWFpbl9SZXNldEtleXM7CisgICBrYWxfYm9vbCAgICAgICAgICAgcHNfRG9tYWluX1Jlc2V0S2V5czsKK30gcmF0Y21fcnJjZV9yZXNldF9rZXlzX2luZF9zdHJ1Y3Q7CisKKyNpZmRlZiBfX1RDN19fQ1NfX1NVUFBPUlRfXworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKKwlrYWxfYm9vbCBpc0ZvcmNlTGF1OworfXJhdGNtX3JyY2VfY2VsbF9jaGFuZ2Vfc3RhcnRfaW5kX3N0cnVjdDsKKyNlbmRpZgorCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorfSByYXRjbV9ycmNlX2ZvcmNlX3JlbF9yZXFfc3RydWN0OworCisKKyNpZiBkZWZpbmVkKF9fTk9fUFNEQVRBX1NFTkRfU0NSSV9fKSB8fCBkZWZpbmVkKF9fRkFTVF9ET1JNQU5DWV9fKQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisKKyAgIGthbF9ib29sICAgICAgICAgICAgICAgICBmb3JjZV9zZW5kX1NDUkk7CisgICBlbmRfc2Vzc2lvbl9jYXVzZV9lbnVtICAgY2F1c2U7Cit9IHJhdGNtX3JyY2VfZW5kX3BzX2RhdGFfc2Vzc2lvbl9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIAorICAgZW5kX3Nlc3Npb25fcmVzdWx0X2VudW0gICAgICAgICAgIHJlc3VsdDsKK30gcmF0Y21fcnJjZV9lbmRfcHNfZGF0YV9zZXNzaW9uX2NuZl9zdHJ1Y3Q7CisjZW5kaWYgLyogX19OT19QU0RBVEFfU0VORF9TQ1JJX18gfHwgX19GQVNUX0RPUk1BTkNZX18gKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisKKyAgIGNzX3N0YXR1c19lbnVtICBzdGF0dXM7Cit9IHJhdGNtX3JyY2VfY3Nfc3RhdHVzX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKworICAga2FsX2Jvb2wgaXNfcGNoX3N0YXRlOworfSByYXRjbV9ycmNlX3JyY19zdGF0ZV9pbmRfc3RydWN0OworCisjaWZkZWYgX19HRU1JTklfXwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisKKyAgIG5hc19yZXFfZ2VtaW5pX3BzX2hpZ2hfc2VtX2VudW0gZ2VtaW5pX3BzX2hpZ2hfc2VtX3N0YXR1czsKK30gcmF0Y21fdWFzX2dlbWluaV9wc19oaWdoX3NlbV9yZXFfc3RydWN0OworCisvL21lZGl1bSBwcwordHlwZWRlZiBzdHJ1Y3R7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX2Jvb2wgaXNfZGF0YV9hbGxvd2VkOworfXJhdGNtX3Vhc19kYXRhX2FsbG93X3JlcV9zdHJ1Y3Q7CisjZW5kaWYgLy9fX0dFTUlOSV9fCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfYm9vbCBpc19wZ2NoZWNrX29uOworfSByYXRjbV9ycmNlX3NldF9wZ2NoZWNrX3JlcV9zdHJ1Y3Q7CisKKy8vTVNHX0lEX1JBVENNX1JSQ0VfTk9fREFUQV9ERVRFQ1RfSU5ECit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCit9cmF0Y21fcnJjZV9ub19jY19kYXRhX2RldGVjdF9pbmRfc3RydWN0OworCisKKyNlbmRpZiAvKiBfUkFUQ01fUlJDRV9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX3NsY2VfZW51bXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9zbGNlX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRjZDdkZQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9zbGNlX2VudW1zLmgKQEAgLTAsMCArMSw3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA3CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJhdGNtX3NsY2Vfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9OWkEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogJExvZzokCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIEFkZCBjb3B5cmlnaHQgaGVhZGVyLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUkFUQ01fU0xDRV9FTlVNU19ICisjZGVmaW5lIF9SQVRDTV9TTENFX0VOVU1TX0gKKworCit0eXBlZGVmIGVudW0gQ1JDX0FwcGVuZF9DbWR7CisgICAgICBVTU9OSVRPUl9OT19DUkMsCisgICAgICBVTU9OSVRPUl9BUFBFTkRfQ1JDCit9Q1JDX0FwcGVuZF9DbWQ7CisKKworI2VuZGlmIC8qIF9SQVRDTV9TTENFX0VOVU1TX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9zbGNlX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX3NsY2Vfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2YWVjNQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV9zbGNlX3N0cnVjdC5oCkBAIC0wLDAgKzEsMjE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDcKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgcmF0Y21fc2xjZV9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT05aQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogJExvZzokCisgKgorICogMDYgMTEgMjAyMCB2ZW5kX210Yl9hcml0aGEwMDIKKyAqIFtNT0xZMDA1MTk1MDBdID8/Pz8/Pz8xOTE2NT8/ODY0MDM5MDQxMTA2NTUzPz8/Pz8/Pz8/Pz8/CisgKiAJCisgKiAJTlIxNS5SMy5NUAorICoKKyAqIDA0IDE2IDIwMTUgZWxsZS5zdW4KKyAqIFtNT0xZMDAwODc3ODhdIFtVbml2ZXJzYWwgQmluXSBGREQgU0xDRSBDaGVjay1pbgorICogCVVCSU4gUGhhc2UyIC0gc2V0IFJBVCBhbmQgbW9kZSBzd2l0Y2guCisgKiAKKyAqIDA5IDI4IDIwMTIgYmFvLmhhbgorICogW01PTFkwMDAwNDIzNl0gW2ludGVyZmFjZV1bc2VydmljZV1ba2FsXXJlbW92ZSBzdGFja19sdGxjb20uaAorICogLgorICogCisgKiAwOSAyOCAyMDEyIGF1c3Rpbi50c2FpCisgKiBbTU9MWTAwMDA0MjM2XSBbaW50ZXJmYWNlXVtzZXJ2aWNlXVtrYWxdcmVtb3ZlIHN0YWNrX2x0bGNvbS5oCisgKiAuCisgKgorICogMTEgMDkgMjAxMSBlbGxlLnN1bgorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAxMiAxNCAyMDEwIGNvc2luZS5qaGVuZworICogcmVtb3ZlZCEKKyAqIEludGVncmF0aW9uIGNoYW5nZS4KKyAqCisgKiAxMCAyMCAyMDEwIGNvc2luZS5qaGVuZworICogcmVtb3ZlZCEKKyAqIFtSQVRDTV1bUkhSXUNoZWNrIGluIHJhdGNtIGZpbGUgaW4gdWFzXGludGVyZmFjZQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiBBZGQgY29weXJpZ2h0IGhlYWRlci4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9SQVRDTV9TTENFX1NUUlVDVF9ICisjZGVmaW5lIF9SQVRDTV9TTENFX1NUUlVDVF9ICisKKy8qIE1BVUlfMDI4MjgyMTAsIHJlZHVuZGFudCBoZWFkZXIgcmVtb3ZhbCAqLworI2luY2x1ZGUgInJhdGNtX3NsY2VfZW51bXMuaCIKKy8vI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisvLyNpbmNsdWRlICJhcHBfbHRsY29tLmgiICBFbGxlMjAxMTEwMTEgLSBNU0JCIHByaXZhdGUgaGVhZGVyIGluIEJTUCBjbGVhbmluZworI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiLy9BdXN0aW46IHJlbW92ZSBzdGFja19sdGxjb20uaCBhbmQgcmVwbGFjZSB0byBrYWxfcHVibGljX2FwaS5oCisjaW5jbHVkZSAibDNfaW5jX2VudW1zLmgiCisjaW5jbHVkZSAidWFzX2NvbW1vbl9lbnVtcy5oIgorI2luY2x1ZGUgImdtc3NfcHVibGljLmgiCisKK3R5cGVkZWYga2FsX3VpbnQ4IFJBQl9JZGVudGl0eTsKK3R5cGVkZWYga2FsX3VpbnQ4ICBOQVNfU3luY2hyb25pc2F0aW9uX0luZGljYXRvcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgdmFsaWRpdHk7CisgICAKKyAgIFJBQl9JZGVudGl0eSAgICAgICAgICAgICAgIHJhYklkOyAgLyogUmFuZ2UgZnJvbSA1fjE1ICovCisgICBjaGFubmVsX21vZGVfZW51bSAgICAgICAgICByYWJfbW9kZTsKKyAgIE5BU19TeW5jaHJvbmlzYXRpb25fSW5kaWNhdG9yICAgIG5hc1N5bmNJbmRpY2F0b3I7CisKK30gdWRjX3JhYl9nZW5lcmljX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBVRENfUkFCX0VTVEFCTElTSE1FTlQgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZXNjcmlwdGlvbjogVGhlc2Ugb3BlcmF0aW9ucyBhbGxvdyB0aGUgdHJhbnNmZXIgb2YgY29udHJvbAorICAgbWVzc2FnZXMgZm9yIHJhZGlvIGFjY2VzcyBiZWFyZXIgZXN0YWJsaXNobWVudCBiZXR3ZWVuIG5vbi1hY2Nlc3MKKyAgIHN0cmF0YSBlbGVtZW50cyBvbiBlYWNoIHNpZGUgb2YgdGhlIGFjY2VzcyBpbnRlcmZhY2UuIFRoZQorICAgb3BlcmF0aW9ucyBhbGxvdyB0aGUgSUYgc2lkZSB0byBpbml0aWFsaXNlIGEgcmFkaW8gYWNjZXNzCisgICBiZWFyZXIuIFRoZSBvcGVyYXRpb24gYWxzbyBpbXBsaWVzIGEgcmVxdWVzdCB0byB0aGUgQVMgdG8gYWxsb2NhdGUKKyAgIHRyYW5zbWlzc2lvbiByZXNvdXJjZXMgdG8gdGhlIHJhZGlvIGFjY2VzcyBiZWFyZXIuCisKKyAgIEEgcmFkaW8gYWNjZXNzIGJlYXJlciBpZGVudGlmaWNhdGlvbiB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSByYWRpbworICAgYWNjZXNzIGJlYXJlci4gSXQgaXMgdXNlZCBpbiBhbGwgcHJpbWl0aXZlcyB0aGF0IHBlcnRhaW4gdG8gdGhlCisgICByYWRpbyBhY2Nlc3MgYmVhcmVyLiBJdCBhbHNvIHNlcnZlcyBhcyB0aGUgYmluZGluZyB0byBhIE5BUyBjYWxsLgorCisgICBUaGUgSXUgYmVhcmVyIGlkZW50aWZpY2F0aW9uIGlkZW50aWZpZXMgdGhlIEl1IGNvbm5lY3Rpb24uICBBCisgICBxdWFsaXR5IG9mIHNlcnZpY2UgcmVxdWVzdCBzcGVjaWZpZXMgdGhlIGJlYXJlciBjaGFyYWN0ZXJpc3RpY3MKKyAgIHRoYXQgYXBwbHkgdG8gdGhlIHJhZGlvIGFjY2VzcyBiZWFyZXIgKHJlZjogWzIzLjExMDs2LjIuMi4zLjRdKS4KKyovCit0eXBlZGVmIHVkY19yYWJfZ2VuZXJpY19pbmRfc3RydWN0IHJhdGNtX3NsY2VfcmFiX2VzdGFibGlzaG1lbnRfaW5kX3N0cnVjdCA7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBVRENfUkFCX01PRElGWSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlc2NyaXB0aW9uOiBUaGVzZSBvcGVyYXRpb25zIGFsbG93IHRoZSB0cmFuc2ZlciBvZiBjb250cm9sCisgICBtZXNzYWdlcyBmb3IgcmFkaW8gYWNjZXNzIGJlYXJlciBtb2RpZmljYXRpb24gYmV0d2VlbiBub24tYWNjZXNzCisgICBzdHJhdGEgZWxlbWVudHMgb24gZWFjaCBzaWRlIG9mIHRoZSBhY2Nlc3MgaW50ZXJmYWNlLiBUaGUKKyAgIG9wZXJhdGlvbnMgYWxsb3cgdGhlIElGIHNpZGUgdG8gbW9kaWZ5IGEgcmFkaW8gYWNjZXNzCisgICBiZWFyZXIuCisgICBBIHJhZGlvIGFjY2VzcyBiZWFyZXIgaWRlbnRpZmljYXRpb24gdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgcmFkaW8KKyAgIGFjY2VzcyBiZWFyZXIuIEl0IGlzIHVzZWQgaW4gYWxsIHByaW1pdGl2ZXMgdGhhdCBwZXJ0YWluIHRvIHRoZQorICAgcmFkaW8gYWNjZXNzIGJlYXJlci4gSXQgYWxzbyBzZXJ2ZXMgYXMgdGhlIGJpbmRpbmcgdG8gYSBOQVMgY2FsbC4KKyovCit0eXBlZGVmIHVkY19yYWJfZ2VuZXJpY19pbmRfc3RydWN0IHJhdGNtX3NsY2VfcmFiX21vZGlmeV9pbmRfc3RydWN0IDsKKworLyoqKioqKioqKioqKioqKioqKi8KKy8qIFVEQ19SQUJfUkVMRUFTRSAqLworLyoqKioqKioqKioqKioqKioqKi8KKy8qIERlc2NyaXB0aW9uOiBUaGVzZSBvcGVyYXRpb25zIGFsbG93IHRoZSB0cmFuc2ZlciBvZiByYWRpbyBhY2Nlc3MKKyAgIGJlYXJlciByZWxlYXNlIG1lc3NhZ2VzIGJldHdlZW4gbm9uLWFjY2VzcyBzdHJhdGEgZWxlbWVudHMgb24gZWFjaAorICAgc2lkZSBvZiB0aGUgYWNjZXNzIGludGVyZmFjZS4gVGhlIG9wZXJhdGlvbnMgYWxsb3cgSUYgc2lkZSB0bworICAgcmVsZWFzZSBhIHJhZGlvIGFjY2VzcyBiZWFyZXIgKHJlZjogWzIzLjExMDs2LjIuMi4zLjVdKS4KKworICAgVGhpcyBwcmltaXRpdmUgaW5kaWNhdGVzIHRoZSByZWxlYXNlIG9mIHRoZSByYWRpbyBhY2Nlc3MgYmVhcmVyIHRvIHVwcGVyIGxheWVycy4gKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisKKyAgIFJBQl9JZGVudGl0eSAgICAgICAgICAgICAgIHJhYklkOyAgICAgLyogUmFuZ2UgZnJvbSA1fjE1ICovCisgICByYWJfcmVsZWFzZV9jYXVzZV9lbnVtICAgIHJlbF9jYXVzZTsKKyAgIAorfXJhdGNtX3NsY2VfcmFiX3JlbGVhc2VfaW5kX3N0cnVjdCA7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAgQ1JDX0FwcGVuZF9DbWQgICBjbWQ7Cit9cmF0Y21fc2xjZV9tb25pdG9yaW5nX2Nsb3NlX2xvb3BfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCit9cmF0Y21fc2xjZV9tb25pdG9yaW5nX2Nsb3NlX2xvb3BfY25mX3N0cnVjdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUkFUQ01fU0xDRV9NT05JVE9SSU5HX0NMT1NFX0xPT1BfSU5ECisgKgorICogU2VudCBieSBTTENFIHRvIFJBVENNIHRvIGluZGljYXRlIHRoYXQgdGhlIGxvb3AgdGVzdCBtb2RlIDIgaGFzIGJlZW4gc3RvcHBlZCBieSBsb3dlciBsb3dlciBsYXllci4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgCQorfSByYXRjbV9zbGNlX21vbml0b3JpbmdfY2xvc2VfbG9vcF9pbmRfc3RydWN0IDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICB1bXRzX2R1cGxleF9tb2RlX3R5cGUgc291cmNlX3VtdHNfZHVwbGV4X21vZGU7CisgICAgdW10c19kdXBsZXhfbW9kZV90eXBlIHRhcmdldF91bXRzX2R1cGxleF9tb2RlOworICAgIGx0ZV9kdXBsZXhfbW9kZV90eXBlIHNvdXJjZV9sdGVfZHVwbGV4X21vZGU7CisgICAgbHRlX2R1cGxleF9tb2RlX3R5cGUgdGFyZ2V0X2x0ZV9kdXBsZXhfbW9kZTsKKyAgICBtb2RlX3N3aXRjaF9jYXVzZV9lbnVtICBjYXVzZTsKK30gcmF0Y21fc2xjZV9kdXBsZXhfbW9kZV9jaGFuZ2VfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCByZXN1bHQ7Cit9IHJhdGNtX3NsY2VfZHVwbGV4X21vZGVfY2hhbmdlX2NuZl9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfUkFUQ01fU0xDRV9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX3Vhc19lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX3Vhc19lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZjQ3MGEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fdWFzX2VudW1zLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICByYXRjbV91YXNfZW51bS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTlpBCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9SQVRDTV9VQVNfRU5VTVNfSAorI2RlZmluZSBfUkFUQ01fVUFTX0VOVU1TX0gKKworI2RlZmluZSBJU19WQUxJRF9DTl9Eb21haW5TeXNJbmZvTGlzdChwdHIpIFwKKyhJU19JTlJBTkdFKChwdHIpLT5jb3VudCwgMCwgTUFYX0NOX0RPTUFJTikpCisKKyNkZWZpbmUgSVNfVkFMSURfUlJDX05BU19TeXN0ZW1JbmZvcm1hdGlvbkdTTV9NQVAocHRyKSBcCisoKHB0ciktPm51bU9jdGV0czw9OCkKKworI2RlZmluZSBNQVhfUExNTl9JRF9ESUdJVAkoMykKKyNkZWZpbmUgTUFYX0NOX0RPTUFJTiAoMikKKyNkZWZpbmUgTUFYX0dJQklfVEFHIDB4MDFGRgorI2RlZmluZSBNSU5fR0lCSV9UQUcgMHgwMTAwCisKK3R5cGVkZWYgZW51bQoreworICAgQUNDRVNTX0NMQVNTX0VNRVJHRU5DWV9CTE9DS0VEID0gMCwKKyAgIEFDQ0VTU19DTEFTU19OT1JNQUxfQkxPQ0tFRCwKKyAgIEFDQ0VTU19DTEFTU19CT1RIX0JMT0NLRUQsCisgICBBQ0NFU1NfQ0xBU1NfQk9USF9BTExPV0VELAorICAgQUNDRVNTX0NMQVNTX05PVF9DSEVDS0VECit9IGFjY2Vzc19jbGFzc19zdGF0dXNfZW51bTsKKyNkZWZpbmUgSVNfVkFMSURfQUNDRVNTX0NMQVNTX1NUQVRVUyhzdGF0dXMpIFwKKyhJU19JTlJBTkdFKChzdGF0dXMpLCBBQ0NFU1NfQ0xBU1NfRU1FUkdFTkNZX0JMT0NLRUQsIEFDQ0VTU19DTEFTU19OT1RfQ0hFQ0tFRCkpCisKKyNkZWZpbmUgSVNfVkFMSURfQ2VsbElkZW50aXR5KGlkKSAoKGlkKTw9MHgwRkZGRkZGRikKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisjZW5kaWYgLyogX1JBVENNX1VBU19FTlVNU19IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fdWFzX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX3Vhc19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGNlOWRhCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX3Vhc19zdHJ1Y3QuaApAQCAtMCwwICsxLDUzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJhdGNtX3Vhc19zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT05aQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1JBVENNX1VBU19TVFJVQ1RfSAorI2RlZmluZSBfUkFUQ01fVUFTX1NUUlVDVF9ICisKKy8qIE1BVUlfMDI4MjgyMTAsIHJlZHVuZGFudCBoZWFkZXIgcmVtb3ZhbCAqLworI2luY2x1ZGUgInJhdGNtX3Vhc19lbnVtcy5oIgorI2luY2x1ZGUgIm1jZF9sM19pbmNfc3RydWN0LmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgInBzX3B1YmxpY19lbnVtLmgiCisjaW5jbHVkZSAibDNfaW5jX2xvY2FsLmgiCisjaW5jbHVkZSAicHNfcHVibGljX3N0cnVjdC5oIgorI2luY2x1ZGUgImlyYXRfY29tbW9uX3N0cnVjdC5oIgorCit0eXBlZGVmIGthbF91aW50MTYgTEFDOwordHlwZWRlZiBrYWxfdWludDE2IGdpYmlfdGFnX3R5cGU7CisvKnR5cGVkZWYga2FsX3VpbnQ4IFBMTU5fSWRlbnRpdHlbTUFYX1BMTU5fSURfRElHSVRdOyovCit0eXBlZGVmIGthbF91aW50MzIgY2VsbF9pZGVudGl0eV90eXBlOworCit0eXBlZGVmIHN0cnVjdCBuYXNfc3lzX2luZm9fZ3NtX21hcF9zdHJ1Y3QKK3sKKyAgIGthbF91aW50OCBudW1PY3RldHM7CisgICBrYWxfdWludDggc3RyaW5nRGF0YVs4XTsKK30gbmFzX3N5c19pbmZvX2dzbV9tYXBfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCBDTl9Eb21haW5TeXNJbmZvCit7CisgICAvKiBEZXNjcmlwdGlvbjogSWRlbnRpZmllcyB0aGUgdHlwZSBvZiBjb3JlIG5ldHdvcmsgZG9tYWluLiBUaGlzIGFuCisgICAgICBlbnVtZXJhdGVkIHR5cGUgKFJSQ19DTl9Eb21haW5JZGVudGl0eV9jc19kb21haW4sIFJSQ19DTl9Eb21haW5JZGVudGl0eV9wc19kb21haW4pLiAqLworICAgZG9tYWluX2lkX2VudW0gICAgICAgICAgICAgICAgY25fRG9tYWluSWRlbnRpdHk7CisgICAvKiBEZXNjcmlwdGlvbjogTkFTIHN5c3RlbSBpbmZvcm1hdGlvbiAoR1NNLU1BUCkgVGhpcyBpbmZvcm1hdGlvbgorICAgICAgZWxlbWVudCBjb250YWlucyBzeXN0ZW0gaW5mb3JtYXRpb24gdGhhdCBiZWxvbmdzIHRvIHRoZQorICAgICAgbm9uLWFjY2VzcyBzdHJhdHVtIGZvciBhIEdTTS1NQVAgdHlwZSBvZiBQTE1OLiBUaGlzIGluZm9ybWF0aW9uCisgICAgICBpcyB0cmFuc3BhcmVudCB0byBSUkMuIEl0IG1heSBjb250YWluIGVpdGhlciBpbmZvcm1hdGlvbgorICAgICAgc3BlY2lmaWMgdG8gb25lIENOIGRvbWFpbiAoQ1Mgb3IgUFMpIG9yIGluZm9ybWF0aW9uIGNvbW1vbiBmb3IKKyAgICAgIGJvdGggQ04gZG9tYWlucyAoUmVmOiBbMjUuMzMxOzEwLjMuMS45XSkuCisgICAgICBSUkNfTkFTX1N5c3RlbUluZm9ybWF0aW9uR1NNX01BUCBpbmZvcm1hdGlvbiBlbGVtZW50IGRlc2NyaXB0aW9uOgorICAgICAgIC0gbGVuZ3RoICAgLSBOdW1iZXIgb2YgYnl0ZXMKKyAgICAgICAtIHZhbHVlWzhdIC0gQXJyYXkgb2YgYnl0ZXMgKG1heGltdW0gaXMgOCkuICovCisgICBuYXNfc3lzX2luZm9fZ3NtX21hcF9zdHJ1Y3QgICBjbl9zcGVjaWZpY0dTTV9NQVBfTkFTX1N5c0luZm87Cit9IENOX0RvbWFpblN5c0luZm87CisKK3R5cGVkZWYgc3RydWN0IENOX0RvbWFpblN5c0luZm9MaXN0Cit7CisgICBrYWxfdWludDggICAgICAgIGNvdW50OworICAgQ05fRG9tYWluU3lzSW5mbyB2YWx1ZVtNQVhfQ05fRE9NQUlOXTsKK30gQ05fRG9tYWluU3lzSW5mb0xpc3Q7CisKKy8qIFVNVFMgc2VjdXJpdHkga2V5cyBkYXRhIHN0cnVjdHVyZSBvcmlnaW5hbGx5IHVzZWQgYnkgUkFUQ00gYW5kIFJSQ0UuCisgKiBOb3cgaXQncyByZXVzZWQgaW4gbXVsdGltb2RlIGRldmVsb3BtZW50LgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgZG9tYWluX2lkX2VudW0gIGNuRG9tYWluSUQ7CisgICAga2FsX3VpbnQ4ICAgICAgIHVtdHNfY2lwaGVyaW5nS2V5W0NLX0xFTl07CisgICAga2FsX3VpbnQ4ICAgICAgIHVtdHNfaW50ZWdyaXR5S2V5W0lLX0xFTl07Cit9IHVtdHNfc2VjdXJpdHlfa2V5OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBrYWxfYm9vbCAgICAgICBpc192YWxpZDsKKyAgICBnaWJpX3RhZ190eXBlICBnaWJpX3RhZzsgCit9IGdpYmlUYWdfaW5mbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBVR0NfSU5GT1JNQVRJT05fQlJPQURDQVNUICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlc2NyaXB0aW9uOiB0aGlzIG9wZXJhdGlvbiBjb25zaXN0cyBpbiB0aGUgYnJvYWRjYXN0IGZyb20gSUYKKyAqIHRvd2FyZCBVc2VyIEVxdWlwbWVudCBvZiBzb21lIGluZm9ybWF0aW9uIGluIHNvbWUgZ2VvZ3JhcGhpY2FsCisgKiBhcmVhLgorICoKKyAqIGEgR0MgSW5mb3JtYXRpb24gYnJvYWRjYXN0IGluZGljYXRpb24gcHJpbWl0aXZlIGlzIGlzc3VlZCB0byB0aGUKKyAqIE5BUyBlbnRpdHkgVUUgb3ZlciB0aGUgR2VuZXJhbCBDb250cm9sIChHQykgU0FQIHdoZW4gdGhlIFJSQyBsYXllcgorICogZmluZHMgb3V0IHRoYXQgdGhlIG5vbi1hY2Nlc3MgcGFydCBvZiB0aGUgc3lzdGVtIGluZm9ybWF0aW9uIGhhcworICogYmVlbiBjaGFuZ2VkLgorICoKKyAqIFRoaXMgaW5mb3JtYXRpb24gaXMgdG8gYmUgdXNlZCBieSB0aGUgVXNlciBFcXVpcG1lbnQgZm9yIGluc3RhbmNlCisgKiB0byBjaG9vc2UgYW1vbmcgYWNjZXNzIHBvaW50cyBvciB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQgZHVyaW5nCisgKiBpbml0aWFsIGFjY2Vzcy4gVGhlIGluZm9ybWF0aW9uIGNhbiBhbHNvIGJlIGRlc3RpbmF0ZWQgdG8gYW4KKyAqIGFwcGxpY2F0aW9uLgorICoKKyAqIFVHQyBJbmZvcm1hdGlvbiBicm9hZGNhc3QgaXMgc2VudCB0byB0aGUgTkFTIHdoZW5ldmVyIHRoZSBVRSwgaW4gaWRsZSBtb2RlLAorICogaGFzIHN0YXJ0ZWQgY2FtcGluZyBvbiBhIGNlbGwsIGFuZCBoYXMgc3VmZmljaWVudCBTSUJzIGZvciBhIGNvbm5lY3Rpb24sIG9yIAorICogaWYgdGhlIE5BUyBkYXRhIGluIFNJQiAxIGNoYW5nZXMuSW4gYWRkaXRpb24gTkFTIHVwZGF0ZXMgb3B0aW9uYWxseSBjb250YWluZWQKKyAqIGluIFJhZGlvIEJlYXJlciBTZXR1cCwgQWN0aXZlIFNldCBVcGRhdGUsIGV0Yy4gc2hhbGwgYmUgcmVwb3J0ZWQgdXNpbmcgdGhpcyAKKyAqIHByaW1pdGl2ZS4gVGhlIHByaW1pdGl2ZSBpcyBhbHNvIHVzZWQgc3Vic2VxdWVudGx5IHRvIGFuIEludGVyLVJBVCBjZWxsIHJlLQorICogc2VsZWN0aW9uIC8gY2hhbmdlIG92ZXIgb3IgSW50ZXItUkFUIGhhbmRvdmVyIHRvIFVNVFMuIEluIHRoYXQgY2FzZSwgdGhlIAorICogcHJpbWl0aXZlIG1heSBiZSBpc3N1ZWQgd2l0aCAiYWRkaXRpb25hbCBpbmZvIGZsYWc9IEZBTFNFIiB0byBpbmRpY2F0ZSB0aGF0IAorICogbm8gQ04gaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQuCisgKgorICogTm90ZSAxOiBHU00tTUFQIE5BUyBjb250YWlucyBMQUMgJiBSQUMgd2l0aCB0aGUgUExNTiBpZCBhbmQgVVRSQU4gY2VsbCBpZC4KKyAqIFRoZSBOQVMgc2hvdWxkIGJlIGFibGUgdG8gbWFwIFVUUkFOIGNlbGwgaWQgYW5kIExvY2F0aW9uIEFyZWEvUm91dGluZyBBcmVhLgorICoKKyAqIE5vdGUgMjogSW4gY29ubmVjdGVkIG1vZGUsIGUuZy4gc3Vic2VxdWVudGx5IHRvIGEgY2VsbCByZXNlbGVjdGlvbiwgQ04gQ29tbW9uCisgKiBHU01fTUFQIE5BUyBTeXNJbmZvIGlzIG5vdCBmb3J3YXJkZWQgdG8gdXBwZXIgbGF5ZXIuCisgKiBSZWY6IFsyMy4xMTAtMzQwOzYuMi4yLjEuMV0gJiBbMjUuMzA0OzEwLjEsMTAuMl0uCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIGdpYmlfdGFnX3R5cGUgICAgICAgICAgICAgICAgZ2liaV90YWc7CisgICAgY2VsbF9pZGVudGl0eV90eXBlICAgICAgICAgICBjZWxsX2lkOworCisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgICB1cGRhdGVfYml0bWFzazsKKyAgICAKKyAgICAjZGVmaW5lIElORk9fQklUTUFTS19DTl9JTkZPIDB4MDAwMQorICAgICNkZWZpbmUgSU5GT19CSVRNQVNLX0RBVEFfU1BFRURfU1VQUE9SVCAweDAwMDIKKyAgICAjZGVmaW5lIElORk9fQklUTUFTS19BQyAweDAwMDQKKyAgICAjZGVmaW5lIElORk9fQklUTUFTS19EU0FDIDB4MDAwOAorICAgICNkZWZpbmUgSU5GT19CSVRNQVNLX1BQQUNSIDB4MDAxMAorICAgICNkZWZpbmUgSU5GT19CSVRNQVNLX0NTR19JTkZPIDB4MDAyMAorICAgICNkZWZpbmUgSU5GT19CSVRNQVNLX0JBTkRfSU5GTyAweDAwNDAKKyAgICAKKyAgICAvKiBDTl9JTkZPICovCisgICAga2FsX3VpbnQ4IGNuX2luZm9fdmFsaWRpdHk7CisKKyAgICAjZGVmaW5lIENOX0luZm9fcGxtbl9jZWxsVHlwZV92YWxpZCAweDAxCisgICAgI2RlZmluZSBDTl9JbmZvX2NuX0NvbW1vbkdTTV9NQVBfTkFTX1N5c0luZm9fdmFsaWQgMHgwMgorICAgICNkZWZpbmUgQ05fSW5mb19jbl9Eb21haW5JbmZvcm1hdGlvbkxpc3RfdmFsaWQgMHgwNAorCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICBtdWx0aV9wbG1uX2NvdW50OyAgICAgICAgICAgCisgICAgLyogUmFuZ2U6IDEgdG8gTUFYX05VTV9NVUxUSV9QTE1OLiAqLworICAgIHBsbW5faWRfc3RydWN0ICAgICAgICAgICAgICAgbXVsdGlfcGxtbl9pZFtNQVhfTlVNX01VTFRJX1BMTU5dOworICAgIGFzX2NlbGxfdHlwZV9lbnVtICAgICAgICAgICAgbXVsdGlfcGxtbl9jZWxsX3R5cGVbTUFYX05VTV9NVUxUSV9QTE1OXTsKKyAgICBhc19jZWxsX3R5cGVfZW51bSAgICAgICAgICAgIGNlbGxfdHlwZTsgIC8qIFJlc2VydmVkIGZvciBiZWZvcmUgUjYgY29tcGF0aWJsZSAqLworICAgIHBsbW5faWRfc3RydWN0ICAgICAgICAgICAgICAgcGxtbl9pZDsgIC8qIFJlc2VydmVkIGZvciBiZWZvcmUgUjYgY29tcGF0aWJsZSAqLworICAgIAorICAgIG5hc19zeXNfaW5mb19nc21fbWFwX3N0cnVjdCAgY25fQ29tbW9uR1NNX01BUF9OQVNfU3lzSW5mbzsKKyAgICBDTl9Eb21haW5TeXNJbmZvTGlzdCAgICAgICAgIGNuX0RvbWFpblN5c0luZm9MaXN0OworICAgIC8qIEVORCBDTl9JTkZPICovCisgICAgCisgICAgZGF0YV9zcGVlZF9zdXBwb3J0X2VudW0gICAgICBkYXRhX3NwZWVkX3N1cHBvcnQ7IC8qIE1BVUlfMDIzNjEyMjE6IEgtaWNvbiBkaXNwbGF5ICovCisgICAgCisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgICBhY2Nlc3NfY2xhc3M7CisgICAgCisjaWZkZWYgX19SNl9EU0FDX18gICAgCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICBkc2FjX3BsbW5fYml0bWFzazsKKyAgICAvKiAiMSIgaW4gTFNCIGJpdCBmb3IgMXN0IFBMTU4gQ1MvUFMgZG9tYWluIERTQUMgdmFsaWQgKi8KKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgIGNzX2RzYWNbTUFYX05VTV9NVUxUSV9QTE1OXTsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgIHBzX2RzYWNbTUFYX05VTV9NVUxUSV9QTE1OXTsgICAgCisjZW5kaWYKKyAgICAKKyNpZmRlZiBfX1BQQUNSX1NVUFBPUlRfXworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgcHBhY3JfcGxtbl9iaXRtYXNrOworICAgIHBwYWNyX2luZm9fc3RydWN0ICAgICAgICAgICAgcHBhY3JfaW5mb19wbG1uX2xpc3RbTUFYX05VTV9NVUxUSV9QTE1OXTsKKyNlbmRpZgorICAgIAorICAgIGNzZ19hY2Nlc3NfbW9kZV9lbnVtICAgICAgICBjc2dfYWNjZXNzX21vZGU7CisgICAgY3NnX2luZm9fc3RydWN0ICAgICAgICAgICAgIGNzZ19pbmZvOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBiYW5kOworfSByYXRjbV91YXNfc3lzX2luZm9faW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUiAKKworICAgIGNlbGxfaWRlbnRpdHlfdHlwZSAgICAgICAgICAgICAgY2VsbF9pZDsKKyAgICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIG11bHRpX3BsbW5fY291bnQ7ICAgICAgICAgICAKKyAgICAvKiBSYW5nZTogMSB0byBNQVhfTlVNX01VTFRJX1BMTU4uICovCisgICAgcGxtbl9pZF9zdHJ1Y3QgICAgICAgICAgICAgICAgICBtdWx0aV9wbG1uX2lkW01BWF9OVU1fTVVMVElfUExNTl07CisgICAgCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBjbl9Db21tb25HU01fTUFQX05BU19TeXNJbmZvX3ByZXNlbnQ7CisgICAgbmFzX3N5c19pbmZvX2dzbV9tYXBfc3RydWN0ICAgICBjbl9Db21tb25HU01fTUFQX05BU19TeXNJbmZvOworICAgIENOX0RvbWFpblN5c0luZm9MaXN0ICAgICAgICAgICAgY25fRG9tYWluU3lzSW5mb0xpc3Q7Cit9IHJhdGNtX3Vhc19jZWxsX2dsb2JhbF9pZGVudGl0eV9pbmZvX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIgCisKKyAgIGRhdGFfc3BlZWRfc3VwcG9ydF9lbnVtIGRhdGFfc3BlZWRfc3VwcG9ydDsKK30gcmF0Y21fdWFzX3VwZGF0ZV9jYXBhYmlsaXR5X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIgCisKKyAgICBrYWxfYm9vbCBpc191c2ltX2luc2VydGVkOworICAgIGthbF9ib29sIGlzX2RlbGV0ZV9wZW5kaW5nOworfSByYXRjbV91YXNfdXNpbV9pbmZvX3Jlc2V0X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIgCisgICAgZG9tYWluX2lkX2VudW0gY29ubmVjdGlvbl9kb21haW47CisgICAgcmF0X3R5cGVfZW51bSAgYWN0aXZlX3JhdDsKKworICAgIC8qIDIwMTQwNzE1IE1pbmc6IEFkZCB0aGlzIGZpZWxkIGluIENFTExfQ0hBTkdFX0ZJTklTSF9JTkQgYW5kIFJBVF9DSEFOR0VfQ05GCisgICAgICogdG8gc3luYyB0aGUgZ2liaV90YWcgdmFsdWUgYmV0d2VlbiBOQVMgYW5kIEFTIGFmdGVyIGludGVyUkFUIHByb2NlZHVyZS4KKyAgICAgKiAoQXZvaWQgTkFTIHNlbmRzIHByZXZpb3VzIHJhdCdzIGdpYmlfdGFnIHRvIGN1cnJlbnQgcmF0KQorICAgICAqIAorICAgICAqIFJlbGF0ZWQgaXNzdWVzOiBNT0xZMDAwNTEwNjUsIEFMUFMwMTQ2MTQ2NyBhbmQgQUxQUzAxNTM3Mzk3CisgICAgICoKKyAgICAgKiBOb3RlIHRoYXQgc2luY2Ugb25seSBwcm9ibGVtcyBtYXkgaGFwcGVuIGFmdGVyIHhHM0hPIG5vdywgb25seSBSUkNFIGNhcnJpZXMgdGhpcyBmaWVsZC4KKyAgICAgKi8KKyAgICBnaWJpVGFnX2luZm8gIGdpYmlUYWdfc3luYzsKK30gcmF0Y21fcnJjZV9jZWxsX2NoYW5nZV9maW5pc2hfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisJTE9DQUxfUEFSQV9IRFIKKwlrYWxfdWludDggcGxtbl9iYW5kX2NvdW50OworCXBsbW5fYmFuZF9zdHJ1Y3QgcGxtbl9iYW5kW01BWF9QTE1OX0JBTkRfTlVNXTsKK31yYXRjbV91YXNfcGxtbl9iYW5kX2luZF9zdHJ1Y3Q7CisKKyNpZmRlZiBfX0dFTUlOSV9fCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSIAorfSByYXRjbV9ycmNlX25vX2lyX3NpZ19wcm9jX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGFzX2dlbWluaV9zdGF0dXNfZW51bSBhc19nZW1pbmlfc3RhdHVzOyAKK30gcmF0Y21fdWFzX3ZpcnR1YWxfbW9kZV9pbmRfc3RydWN0OworI2VuZGlmIC8qIF9fR0VNSU5JX18gICovCisKKyNpZmRlZiBfX0xURV9SQVRfXworLyogUkFUQ00gLT4gUlJDRSAqLworLyogQ1NDRSBhbmQgUlJDRSB1c2VzIHJhdGNtX3Vhc19yYXRfY2hhbmdlX3JlcV9zdHJ1Y3Qgam9pbnRseSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgaXJhdF90eXBlX2VudW0gICAgICAgaXJhdF90eXBlOworICAgIHJhdF90eXBlX2VudW0gICAgICAgIHNvdXJjZV9yYXQ7CisgICAgcmF0X3R5cGVfZW51bSAgICAgICAgdGFyZ2V0X3JhdDsKKyAgICB2b2lkICAgICAgICAgICAgICAgICphc19pbmZvX3B0cjsKKyAgICB1bXRzX3NlY3VyaXR5X2tleSAgICBzZWN1cml0eV9rZXlbMl07CisgICAgY3NmYl9pbmRpY2F0b3JfZW51bSAgY3NmYl9pbmRpY2F0b3I7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgaXNfbGFpX3ZhbGlkOyAgLy9DU0ZCIGVuaGFuY2VtZW50CisgICAgbGFpX3N0cnVjdCAgICAgICAgICAgbGFpOyAgICAgICAgICAgLy9DU0ZCIGVuaGFuY2VtZW50CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgaXNfbWFwcGVkX3JhaV92YWxpZDsgLy8gRm9yIDRHMyBITywgQVMgbWF5IG5vdCBoYXZlIHZhbGlkIHBsbW4gaWQuIEFTIHdpbGwgZGVyaXZlIHBsbW4gaWQgZnJvbSBtYXBwZWQgcmFpLgorICAgIHJhaV9zdHJ1Y3QgICAgICAgICAgIG1hcHBlZF9yYWk7Cit9IHJhdGNtX3Vhc19yYXRfY2hhbmdlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGlyYXRfdHlwZV9lbnVtICAgIGlyYXRfdHlwZTsKKyAgICByYXRfdHlwZV9lbnVtICAgICBzb3VyY2VfcmF0OworICAgIHJhdF90eXBlX2VudW0gICAgIHRhcmdldF9yYXQ7CisgICAgaXJhdF9yZXN1bHRfZW51bSAgaXJhdF9yZXN1bHQ7CisgICAgaXJhdF9yZWplY3RfY2F1c2VfZW51bSBpcmF0X3JlamVjdF9jYXVzZTsgLy9SZWplY3QgY2F1c2Ugd2hlbiBpcmF0X3Jlc3VsdCBpcyBlcXVhbCB0byBJUl9SRVNVTFRfUkVKRUNULgorICAgIHZvaWQgICAgICAgICAgICAgKmFzX2luZm9fcHRyOworfSByYXRjbV91YXNfcmF0X2NoYW5nZV9yZXNfc3RydWN0OworCisvKiBSUkNFIC0+IFJBVENNICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBpcmF0X3R5cGVfZW51bSAgaXJhdF90eXBlOworICAgIHJhdF90eXBlX2VudW0gICBzb3VyY2VfcmF0OworICAgIHJhdF90eXBlX2VudW0gICB0YXJnZXRfcmF0OworICAgIHZvaWQgICAgICAgICAgICphc19pbmZvX3B0cjsKKyAgICBrYWxfdWludDggICAgICAgbmFzX3NlY19wYXJhbV90b19ldXRyYVtOQVNfU0VDVVJJVFlfUEFSQU1fTEVOXTsKK30gcmF0Y21fdWFzX3JhdF9jaGFuZ2VfaW5kX3N0cnVjdDsKKworLyogQ1NDRSBhbmQgUlJDRSB1c2VzIHJhdGNtX3Vhc19yYXRfY2hhbmdlX2NuZl9zdHJ1Y3Qgam9pbnRseSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgaXJhdF90eXBlX2VudW0gICAgaXJhdF90eXBlOworICAgIHJhdF90eXBlX2VudW0gICAgIHNvdXJjZV9yYXQ7CisgICAgcmF0X3R5cGVfZW51bSAgICAgdGFyZ2V0X3JhdDsKKyAgICBpcmF0X3Jlc3VsdF9lbnVtICBpcmF0X3Jlc3VsdDsKKyAgICB2b2lkICAgICAgICAgICAgICphc19pbmZvX3B0cjsKKyAgICBkb21haW5faWRfZW51bSAgICBjb25uZWN0aW9uX2RvbWFpbjsKKworICAgIC8qIDIwMTQwNzE1IE1pbmc6IEFkZCB0aGlzIGZpZWxkIGluIENFTExfQ0hBTkdFX0ZJTklTSF9JTkQgYW5kIFJBVF9DSEFOR0VfQ05GCisgICAgICogdG8gc3luYyB0aGUgZ2liaV90YWcgdmFsdWUgYmV0d2VlbiBOQVMgYW5kIEFTIGFmdGVyIGludGVyUkFUIHByb2NlZHVyZS4KKyAgICAgKiAoQXZvaWQgTkFTIHNlbmRzIHByZXZpb3VzIHJhdCdzIGdpYmlfdGFnIHRvIGN1cnJlbnQgcmF0KQorICAgICAqIAorICAgICAqIFJlbGF0ZWQgaXNzdWVzOiBNT0xZMDAwNTEwNjUsIEFMUFMwMTQ2MTQ2NyBhbmQgQUxQUzAxNTM3Mzk3CisgICAgICoKKyAgICAgKiBOb3RlIHRoYXQgc2luY2Ugb25seSBwcm9ibGVtcyBtYXkgaGFwcGVuIGFmdGVyIHhHM0hPIG5vdywgb25seSBSUkNFIGNhcnJpZXMgdGhpcyBmaWVsZC4KKyAgICAgKi8KKyAgICBnaWJpVGFnX2luZm8gICAgICBnaWJpVGFnX3N5bmM7Cit9IHJhdGNtX3Vhc19yYXRfY2hhbmdlX2NuZl9zdHJ1Y3Q7CisjZW5kaWYKKworCisjZW5kaWYgLyogX1JBVENNX1VBU19TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX3VsMl9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV91bDJfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4YjFmYwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV91bDJfc3RydWN0LmgKQEAgLTAsMCArMSw4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJhdGNtX3VsMl9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBVTU9MWSBVbml2ZXJzYWwgQmluCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogICAKKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogJExvZzokCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1JBVENNX1VMMl9TVFJVQ1RfSAorI2RlZmluZSBfUkFUQ01fVUwyX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAiZ21zc19wdWJsaWMuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHVtdHNfZHVwbGV4X21vZGVfdHlwZSBzb3VyY2VfdW10c19kdXBsZXhfbW9kZTsKKyAgICB1bXRzX2R1cGxleF9tb2RlX3R5cGUgdGFyZ2V0X3VtdHNfZHVwbGV4X21vZGU7CisgICAgbHRlX2R1cGxleF9tb2RlX3R5cGUgc291cmNlX2x0ZV9kdXBsZXhfbW9kZTsKKyAgICBsdGVfZHVwbGV4X21vZGVfdHlwZSB0YXJnZXRfbHRlX2R1cGxleF9tb2RlOworfSByYXRjbV91bDJfZHVwbGV4X21vZGVfY2hhbmdlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCByZXN1bHQ7Cit9IHJhdGNtX3VsMl9kdXBsZXhfbW9kZV9jaGFuZ2VfY25mX3N0cnVjdDsKKworI2VuZGlmIC8qIF9SQVRDTV9VTDJfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV91bDJkX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGNtX3VsMmRfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNlNDc2NQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV91bDJkX3N0cnVjdC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICByYXRjbV91bDJkX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIFVNT0xZIFVuaXZlcnNhbCBCaW4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAgIAorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAkTG9nOiQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUkFUQ01fVUwyRF9TVFJVQ1RfSAorI2RlZmluZSBfUkFUQ01fVUwyRF9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgImdtc3NfcHVibGljLmgiCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICB1bXRzX2R1cGxleF9tb2RlX3R5cGUgc291cmNlX3VtdHNfZHVwbGV4X21vZGU7CisgICAgdW10c19kdXBsZXhfbW9kZV90eXBlIHRhcmdldF91bXRzX2R1cGxleF9tb2RlOworICAgIGx0ZV9kdXBsZXhfbW9kZV90eXBlIHNvdXJjZV9sdGVfZHVwbGV4X21vZGU7CisgICAgbHRlX2R1cGxleF9tb2RlX3R5cGUgdGFyZ2V0X2x0ZV9kdXBsZXhfbW9kZTsKK30gcmF0Y21fdWwyZF9kdXBsZXhfbW9kZV9jaGFuZ2VfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIHJlc3VsdDsKK30gcmF0Y21fdWwyZF9kdXBsZXhfbW9kZV9jaGFuZ2VfY25mX3N0cnVjdDsKKworI2VuZGlmIC8qIF9SQVRDTV9VTDJEX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fdXJsY19zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRjbV91cmxjX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NTFjOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0Y21fdXJsY19zdHJ1Y3QuaApAQCAtMCwwICsxLDE1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA3CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJhdGNtX3VybGNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9OWkEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2c6JAorICoKKyAqIDEyIDE1IDIwMTQga3VuLWxpbi53dQorICogW01PTFkwMDA3ODI2OF0gW1VNT0xZXVtSMTBdW1IxMV1bTU9MWSBDUl0gUFM1IE5BUyBjaGVjay1pbiA2MjkxX0RFViBhbmQgNjI5MV9VRVNJTV9ERVYKKyAqIAkuCisgKgorICogMTEgMDcgMjAxNCBrdW4tbGluLnd1CisgKiBbTU9MWTAwMDgyMzY2XSBMb29wIGJhY2sgbW9kZSA0IHN1cHBvcnQKKyAqIAorICogMTAgMDIgMjAxMiBpai5saWFvCisgKiBbTU9MWTAwMDA0MjM2XSBbaW50ZXJmYWNlXVtzZXJ2aWNlXVtrYWxdcmVtb3ZlIHN0YWNrX2x0bGNvbS5oCisgKiAKKyAqIDA5IDI4IDIwMTIgd2VpbWluLnplbmcKKyAqIFtNT0xZMDAwMDQyMzZdIFtpbnRlcmZhY2VdW3NlcnZpY2VdW2thbF1yZW1vdmUgc3RhY2tfbHRsY29tLmgKKyAqIGhlYWRlciBmaWxlLgorICoKKyAqIDExIDExIDIwMTEgd2VpbWluLnplbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTEgMDggMjAxMSB3ZWltaW4uemVuZworICogcmVtb3ZlZCEKKyAqIG1lcmdlIE1TQkIuCisgKgorICogMTIgMTQgMjAxMCBjb3NpbmUuamhlbmcKKyAqIHJlbW92ZWQhCisgKiBJbnRlZ3JhdGlvbiBjaGFuZ2UuCisgKgorICogMTAgMjAgMjAxMCBjb3NpbmUuamhlbmcKKyAqIHJlbW92ZWQhCisgKiBbUkFUQ01dW1JIUl1DaGVjayBpbiByYXRjbSBmaWxlIGluIHVhc1xpbnRlcmZhY2UKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogQWRkIGNvcHlyaWdodCBoZWFkZXIuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUkFUQ01fVVJMQ19TVFJVQ1RfSAorI2RlZmluZSBfUkFUQ01fVVJMQ19TVFJVQ1RfSAorCisjaW5jbHVkZSAidWFzX2NvbW1vbl9lbnVtcy5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBFeHRlbmRlZFJiSWQgICAgUkJJZDsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgIFNEVVNpemU7Cit9dFJCTG9vcEJhY2tJbmZvOworIyBpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIGthbF9ib29sICAgICByZXN1bHQ7Cit9cmF0Y21fdXJsY191dGVzdF9vcGVuX2xvb3BfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgbm9PZlJCczsKKyAgICB0UkJMb29wQmFja0luZm8gIFJCSW5mb1tNQVhfUkJfTE9PUEVEX0JBQ0tdOyAKK31yYXRjbV91cmxjX3V0ZXN0X2Nsb3NlX2xvb3BfbTFfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX2Jvb2wgICAgIHJlc3VsdDsKK31yYXRjbV91cmxjX3V0ZXN0X2Nsb3NlX2xvb3BfbTFfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX2Jvb2wgICAgIHJlc3VsdDsKK31yYXRjbV91cmxjX3V0ZXN0X2Nsb3NlX2xvb3BfbTJfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX2Jvb2wgICAgIHJlc3VsdDsKK31yYXRjbV91cmxjX3V0ZXN0X2Nsb3NlX2xvb3BfbTRfY25mX3N0cnVjdDsKKworI2VuZGlmIC8qIF9SQVRDTV9VUkxDX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0ZG1fY2hscF9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRkbV9jaGxwX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZjZhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0ZG1fY2hscF9zdHJ1Y3QuaApAQCAtMCwwICsxLDIxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJhdGRtX2NobHBfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiBSQVRETSBhbmQgSExQIGZvciBDMksgUEROIGRhdGEKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUkFURE1fQ0hMUF9TVFJVQ1RfSAorI2RlZmluZSBfUkFURE1fQ0hMUF9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKworLyoqIGxlbmd0aCBvZiBuZXh0IHBlZXIgYnVmZmVyIHBvaW50ZXIgaW4gcGVlciBidWZmZXIgaGVhZGVyICovCisjZGVmaW5lIEMyS19ORElTX1BFRVJfQlVGRl9ORVhUX1BPSU5URVJfSEVBREVSX0xFTiAgICAgICAgICAgICAgKHNpemVvZihwZWVyX2J1ZmZfc3RydWN0KikpCisvKiogb2Zmc2V0IG9mIG5leHQgcGVlciBidWZmZXIgcG9pbnRlciBpbiBwZWVyIGJ1ZmZlciwgc3RhcnRlZCBmcm9tIHBlZXIgYnVmZmVyIHBvaW50ZXIgKi8KKyNkZWZpbmUgQzJLX05ESVNfUEVFUl9CVUZGX05FWFRfUE9JTlRFUl9IRUFERVJfT0ZGU0VUICAgICAgICAgICAoc2l6ZW9mKHBlZXJfYnVmZl9zdHJ1Y3QpKQorLyoqIGluIE5ESVMgbW9kZSBmcmVlIGhlYWRlciBzcGFjZSBsZW5ndGgsIG5vdyBmcmVlIGhlYWRlciBzcGFjZSBzdG9yZXMgb25seSBuZXh0IHBlZXIgYnVmZmVyIHBvaW50ZXIgKi8KKyNkZWZpbmUgQzJLX05ESVNfUEVFUl9CVUZGX0hFQURFUl9MRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAoQzJLX05ESVNfUEVFUl9CVUZGX05FWFRfUE9JTlRFUl9IRUFERVJfTEVOKQorLyoqIG9mZnNldCBvZiBQRFUgaW4gcGVlciBidWZmZXIgaGVhZGVyLCBzdGFydGVkIGZyb20gcGVlciBidWZmZXIgcG9pbnRlciAqLworI2RlZmluZSBDMktfTkRJU19QRUVSX0JVRkZfUERVX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgIChDMktfTkRJU19QRUVSX0JVRkZfTkVYVF9QT0lOVEVSX0hFQURFUl9PRkZTRVQgKyBDMktfTkRJU19QRUVSX0JVRkZfTkVYVF9QT0lOVEVSX0hFQURFUl9MRU4pCisvKiogZXh0cmEgYnl0ZXMgaW4gTkRJUyBtb2RlIHRvIHNhdmUgbWVtY3B5IGluIEhMUCBQUFAgSEEsIGFsbG9jYXRlZCBpbnNpZGUgcGR1IGFyZWEsIGJlZm9yZSB0aGUgcmVhbCBJUCBwZHUgZGF0YSBmcm9tIFVQQ00KKyAqKiBQUFBfSEVBREVSX09GRlNFVCBkZWZpbmVkIGluIHBwX2ZyYW1lLmgKKyAqLworI2RlZmluZSBDMktfTkRJU19VTF9QUFBfSEVBREVSX1JFU0VSVkVfTEVOICAgICAgICAgICAgICAgICAgICAgICg4KQorLyoqIG9mZnNldCBvZiByZWFsIFBEVSBJUCBwZHUgZGF0YSBpbiBwZWVyIGJ1ZmZlciBwZHUsIHN0YXJ0ZWQgZnJvbSB0aGUgcGR1IHBvaW50ZXIgYWxsb2NhdGVkIGJ5IGZsYyAqLworI2RlZmluZSBDMktfTkRJU19VTF9QRFVfUFBQX0hFQURFUl9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIEMyS19ORElTX1VMX1BQUF9IRUFERVJfUkVTRVJWRV9MRU4KKy8qKiBvZmZzZXQgb2YgVUwgcmVhbCBQRFUgSVAgZGF0YSBpbiBwZWVyIGJ1ZmZlciwgc3RhcnRlZCBmcm9tIHBlZXIgYnVmZmVyIHBvaW50ZXIgKi8KKyNkZWZpbmUgQzJLX05ESVNfUEVFUl9CVUZGX1VMX1BEVV9JUF9EQVRBX09GRlNFVCAgICAgICAgICAgICAgICAoQzJLX05ESVNfUEVFUl9CVUZGX1BEVV9PRkZTRVQgKyBDMktfTkRJU19VTF9QRFVfUFBQX0hFQURFUl9PRkZTRVQpCisvKiogb2Zmc2V0IG9mIERMIHJlYWwgUERVIElQIGRhdGEgaW4gcGVlciBidWZmZXIsIHN0YXJ0ZWQgZnJvbSBwZWVyIGJ1ZmZlciBwb2ludGVyICovCisjZGVmaW5lIEMyS19ORElTX1BFRVJfQlVGRl9ETF9QRFVfSVBfREFUQV9PRkZTRVQgICAgICAgICAgICAgICAgKEMyS19ORElTX1BFRVJfQlVGRl9QRFVfT0ZGU0VUKQorLyoqIG9mZnNldCBvZiB0YWlsZXIgaW4gcGVlciBidWZmZXIsIHN0YXJ0ZWQgZnJvbSBwZWVyIGJ1ZmZlciBwb2ludGVyICovCisjZGVmaW5lIEMyS19ORElTX1BFRVJfQlVGRl9UQUlMRVJfT0ZGU0VUKF9wZWVyX2J1ZmZfcHRyKSAgICAgICAgKEMyS19ORElTX1BFRVJfQlVGRl9QRFVfT0ZGU0VUKyhfcGVlcl9idWZmX3B0ciktPnBkdV9sZW4pCisvKiogYWxsb2MgZXh0cmEgYnl0ZSBpbiBORElTIG1vZGUgZm9yIFVMIHRvIHN0b3JlIEMySyBhaXIgaW50ZXJmYWNlIFBETiBJRCAqLworI2RlZmluZSBDMktfTkRJU19VTF9QRUVSX0JVRkZfVEFJTEVSX0xFTiAgICAgICAgICAgICAgICAgICAgICAgICgxKQorLyoqIG5vIGV4dHJhIGJ5dGUgaW4gTkRJUyBtb2RlIGZvciBETCBpcyBuZWVkZWQgKi8KKyNkZWZpbmUgQzJLX05ESVNfRExfUEVFUl9CVUZGX1RBSUxFUl9MRU4gICAgICAgICAgICAgICAgICAgICAgICAoMCkKKworLyogZ2V0IG5leHQgcG9pbnRlciAqLworI2RlZmluZSBDMktfTkRJU19QRUVSX0JVRkZfR0VUX05FWFQoX2N1cnJfbm9kZSkgICAgICAgICAgICAgICAgICgqKGthbF91aW50MzIqKSgoa2FsX3VpbnQ4ICopKF9jdXJyX25vZGUpICsgQzJLX05ESVNfUEVFUl9CVUZGX05FWFRfUE9JTlRFUl9IRUFERVJfT0ZGU0VUKSkKKy8qIGxpbmsgbmV4dCBwb2ludGVyICovCisjZGVmaW5lIEMyS19ORElTX1BFRVJfQlVGRl9TRVRfTkVYVChfY3Vycl9ub2RlLCBfbmV4dF9ub2RlKSAgICAgKihrYWxfdWludDMyKikoKGthbF91aW50OCAqKShfY3Vycl9ub2RlKSArIEMyS19ORElTX1BFRVJfQlVGRl9ORVhUX1BPSU5URVJfSEVBREVSX09GRlNFVCkgPSAoa2FsX3VpbnQzMikoX25leHRfbm9kZSkKKworCisvKiBnZXQgYzJrIGFpciBpbnRlcmZhY2UgUEROIElEICovCisjZGVmaW5lIEMyS19ORElTX1BFRVJfQlVGRl9VTF9HRVRfUEROX0lEKF9jdXJyX25vZGUpICAgICAgICAgICAgKigoa2FsX3VpbnQ4ICopKF9jdXJyX25vZGUpICsgQzJLX05ESVNfUEVFUl9CVUZGX1RBSUxFUl9PRkZTRVQoX2N1cnJfbm9kZSkpCisvKiBzZXQgYzJrIGFpciBpbnRlcmZhY2UgUEROIElEICovCisjZGVmaW5lIEMyS19ORElTX1BFRVJfQlVGRl9VTF9TRVRfUEROX0lEKF9jdXJyX25vZGUsIF9wZG5faWQpICAgKigoa2FsX3VpbnQ4ICopKF9jdXJyX25vZGUpICsgQzJLX05ESVNfUEVFUl9CVUZGX1RBSUxFUl9PRkZTRVQoX2N1cnJfbm9kZSkpID0gKF9wZG5faWQpCisKKy8qKiBDMksgZGF0YSBzdGF0dXMgZW51bQorICogIGN1cnJlbnRseSBvbmx5IGRvcm1hbnQgJiBjb25uZWN0ZWQgYXJlIG5lY2Vzc2FyeQorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBSQVRETV9DMktfREFUQV9TVEFUVVNfRE9STSwKKyAgICBSQVRETV9DMktfREFUQV9TVEFUVVNfQ09OTkVDVEVELAorICAgIFJBVERNX0MyS19EQVRBX1NUQVRVU19NQVgKK31yYXRkbV9jMmtfZGF0YV9zdGF0dXNfZW51bTsKKworLyoqIEMySyB1cGxpbmsgZGF0YSByZXF1ZXN0CisgKiAgVGhpcyBwcmltaXRpdmUgaXMgc2VudCBmcm9tIFJBVERNIGNhcnJpbmcgSVAgcGFja2V0IGluIEZMQzJfQzJLX1JFVl9QT09MIGJ1ZmZlciB0byBITFAKKyAqICBITFAgbmVlZCBlbmNvZGUgdGhlIElQIHBhY2tldCBpbnRvIFBQUCBmcmFtZSB3aGljaCBpcyBkZWxpdmVyZWQgdG8gQzJLIEwyCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIElMTSBzcGVjaWZpYyBoZWFkZXIuICovCisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIC8qKiBDMksgYWlyIGludGVyZmFjZSBQRE4gSUQsIHJhbmdlZCBpbiBbMCwxNF0gKi8KKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGMya19haXJfcGRuX2lkOworICAgIC8qKiBpbmRpY2F0ZSBjdXJyZW50IGRhdGEgaXMgZnJvbSBubWwgc2l0IG9yIHByaSBzaXQuIEZBTFNFOiBubWw7IFRSVUU6IHByaSAqLworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgc2l0X2ZsYWc7CisgICAgLyoqIHBvaW50ZXIgdG8gcGVlciBidWZmZXIgbGlua2VkIGxpc3QgaGVhZAorICAgICAqICB0aGUgMXN0IGZvdXIgYnl0ZXMgYmVoaW5kIHBlZXIgYnVmZmVyX3N0cnVjdCBpbiBmcmVlX2hlYWRlcl9zcGFjZSBzdG9yZXMgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgbGlzdCBub2RlCisgICAgICovCisgICAgcGVlcl9idWZmX3N0cnVjdCAgICAgICAgICAgICAgICAqcGVlcl9idWZmZXJfaGVhZF9wdHI7CisgICAgLyoqIHBvaW50ZXIgdG8gcGVlciBidWZmZXIgbGlua2VkIGxpc3QgdGFpbCAqLworICAgIHBlZXJfYnVmZl9zdHJ1Y3QgICAgICAgICAgICAgICAgKnBlZXJfYnVmZmVyX3RhaWxfcHRyOworfXJhdGRtX2NobHBfdWxfZGF0YV9yZXFfc3RydWN0OworCisvKiogQzJLIGRvd25saW5rIGRhdGEgaW5kaWNhdGlvbgorICogIFRoaXMgcHJpbWl0aXZlIGlzIHNlbnQgZnJvbSBITFAgY2FycmluZyBJUCBwYWNrZXQgaW4gRkxDMl9DMktfRldEX1BPT0wgYnVmZmVyIHRvIFJBVERNCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIElMTSBzcGVjaWZpYyBoZWFkZXIuICovCisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIC8qKiBDMksgYWlyIGludGVyZmFjZSBQRE4gSUQsIHJhbmdlZCBpbiBbMCwxNF0gKi8KKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGMya19haXJfcGRuX2lkOworICAgIC8qKiBwb2ludGVyIHRvIHBlZXIgYnVmZmVyIGxpbmtlZCBsaXN0IGhlYWQKKyAgICAgKiAgdGhlIDFzdCBmb3VyIGJ5dGVzIGJlaGluZCBwZWVyIGJ1ZmZlcl9zdHJ1Y3QgaW4gZnJlZV9oZWFkZXJfc3BhY2Ugc3RvcmVzIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IGxpc3Qgbm9kZQorICAgICAqLworICAgIHBlZXJfYnVmZl9zdHJ1Y3QgICAgICAgICAgICAgICAgKnBlZXJfYnVmZmVyX2hlYWRfcHRyOworICAgIC8qKiBwb2ludGVyIHRvIHBlZXIgYnVmZmVyIGxpbmtlZCBsaXN0IHRhaWwgKi8KKyAgICBwZWVyX2J1ZmZfc3RydWN0ICAgICAgICAgICAgICAgICpwZWVyX2J1ZmZlcl90YWlsX3B0cjsKK31yYXRkbV9jaGxwX2RsX2RhdGFfaW5kX3N0cnVjdDsKKworLyoqIEMySyBkYXRhIHN0YXR1cyBpbmRpY2F0aW9uCisgKiAgVGhpcyBwcmltaXRpdmUgaXMgc2VudCBmcm9tIEhMUCB0byBSQVRETSB0byBpbmRpY2F0ZSBjdXJyZW50IGRhdGEgc3RhdHVzCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyoqIElMTSBzcGVjaWZpYyBoZWFkZXIuICovCisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIC8qKiBkYXRhIHN0YXR1cyAqLworICAgIHJhdGRtX2Mya19kYXRhX3N0YXR1c19lbnVtIGRhdGFfc3RhdHVzOworfXJhdGRtX2NobHBfZGF0YV9zdGF0dXNfaW5kX3N0cnVjdDsKKworLyoqIFVMIGJ1ZmZlciB3YXRlcm1hcmsgaW5kaWNhdGlvbgorICogIFRoaXMgcHJpbWl0aXZlIGlzIHNlbnQgZnJvbSBGTEMyIHRvIEhMUCB0byBpbmRpY2F0ZSB3YXRlcm1hcmsgcmVhY2hlZAorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qKiBJTE0gc3BlY2lmaWMgaGVhZGVyLiAqLworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICAvKiogdHJ1ZTogb247IGZhbHNlOiBvZmYgKi8KKyAgICBrYWxfYm9vbCBmbGFnOworfXJhdGRtX2NobHBfdWxfYnVmZmVyX3N0YXR1c19udGZfc3RydWN0OworCisKKyNpZmRlZiBfX1JBVERNX1VUX18KKy8qIGZvciBNU0dfSURfUkFURE1fVVRfVVBDTV9VTF9EQVRBX1JFUSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogSUxNIHNwZWNpZmljIGhlYWRlci4gKi8KKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX3VpbnQ4IG5zYXBpOworCisgICAgLyogU0lUIHRhYmxlLCBkYXRhIGlzIGluIG1lc3NhZ2UncyBwZWVyIGJ1ZmZlciAqLworICAgIGthbF91aW50MzIgIHNpdF9pZHg7CisKKyAgICBrYWxfdWludDMyICBwcmlfc3RhcnQ7CisgICAga2FsX3VpbnQzMiAgcHJpX251bTsKKyAgICBrYWxfdWludDMyICBwcmlfc3o7CisKKyAgICBrYWxfdWludDMyICBubWxfc3RhcnQ7CisgICAga2FsX3VpbnQzMiAgbm1sX251bTsKKyAgICBrYWxfdWludDMyICBubWxfc3o7Cit9cmF0ZG1fdXRfdXBjbV91bF9kYXRhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgZW51bQoreworICAgIFJBVERNX1VUX0MyS19VTF9GQ19TRVRfQkVGT1JFX01TR19SRUNWLAorICAgIFJBVERNX1VUX0MyS19VTF9GQ19TRVRfRFVSSU5HX0RBVEFfUEFSU0VfTE9PUAorfXJhdGRtX3V0X2Mya191bF9mY19zZXRfbW9kZV9lbnVtOworCisvKiBmb3IgTVNHX0lEX1JBVERNX1VUX0MyS19GTEMyX1JFVl9CVUZfU1RBVFVTX0lORCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiogSUxNIHNwZWNpZmljIGhlYWRlci4gKi8KKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAgLyogcmV1c2UgdGhpcyBtZXNzYWdlIGZvciB1bCBmbG93IGNvbnRyb2wKKyAgICAgKiB0byBhdm9pZCBkYiB1cGRhdGUgaW4gY29tcGlsZSBjZ2VuIGZhaWwKKyAgICAgKiBUUlVFLCBod20gcmVhY2hlZCwgdWwgZmxvdyBjb250cm9sIG9uCisgICAgICogRkFMU0UsIGx3bSByZWFjaGVkLCB1bCBmbG93IGNvbnRyb2wgb2ZmCisgICAgICovCisgICAga2FsX2Jvb2wgZmNfc3RhdHVzOworCisgICAgcmF0ZG1fdXRfYzJrX3VsX2ZjX3NldF9tb2RlX2VudW0gdWxfZmNfc2V0X21vZGU7Cit9cmF0ZG1fdXRfYzJrX2ZsYzJfcmV2X2J1Zl9zdGF0dXNfaW5kX3N0cnVjdDsKKyNlbmRpZgorCisjZW5kaWYgLyogX1JBVERNX0NITFBfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRkbV9lbDJfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0ZG1fZWwyX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YzdkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0ZG1fZWwyX3N0cnVjdC5oCkBAIC0wLDAgKzEsMjA0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgcmF0ZG1fZWwyX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIAorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAkTG9nJAorICoKKyAqIDA5IDE1IDIwMTcgc3RldmUua2FvCisgKiBbTU9MWTAwMjc4MjQ1XSBbVU1PTFlBXSBSZW1vdmUgb2Jzb2xldGUgcGFydHMgZm9yIGNvcHJvIGFuZCBMVE0KKyAqIFtVTU9MWUFdW1RSVU5LXSBSZW1vdmUgTFRNIHBhcnRzIGZyb20gRVBEQ1AgJiBSQVRETSBhbmQgZGVsZXRlIGx0bV9lbDJfbXNnX3N0cnVjdC5oCisgKgorICogMDggMjggMjAxNyBpLWZlbmcuY2hlbgorICogW01PTFkwMDI3MzgyOF0gW0JpYW5jb11bTjFdW1JKSUxdIEV4dGVybmVsIChFRSksMCwwLDk5LC9kYXRhL2NvcmUvLDEsbW9kZW0sVHJpZ2dlciB0aW1lOlsyMDE3LTA4LTI0IDE0OjE5OjMzLjc5MzU5OF0gbWQxOihNQ1VfY29yZTAudnBlMC50YzAoVlBFMCkpIFtBU1NFUlRdIGZpbGU6bWN1L3Bjb3JlL21vZGVtL3JvaGMvcmFsL3JvaGNfcmFsX2NyNC5jIGxpbmU6MTI3NiBwMToweDAwMDAwMDAwIHAyOjB4MDAwMDAwMDAgcDM6MHgwMDAwMDAwMCAgIEVMTQorICogW1RSVU5LXVtFUERDUF1bVUxdIEZpeCBmb3IgZGF0YSBpbiBkYXRhX3JlcSBkaWZmZXJlbnQgZnJvbSBjdXJyZW50IGVwZGNwIHJiX2lkeC1lYmkgbWFwcGluZworICoKKyAqIDA4IDIyIDIwMTcgaS1mZW5nLmNoZW4KKyAqIFtNT0xZMDAyNzI3NDldIFtCSUFOQ09dW01UNjc2M11bUkRJVF1bTCtMXVtGRERdW092ZXJuaWdodF0gIEV4dGVybmVsIChFRSksW0FTU0VSVF0gZmlsZTptY3UvcGNvcmUvbW9kZW0vZWwyL2VsMi9lcGRjcC9zcmMvZXBkY3BfdWxfcHJvYy5jIGxpbmU6MzMzOQorICogCQorICogCVtUUlVOS11bRVBEQ1BdW1VMXSBIYW5kbGUgZGF0YSByZWNlaXZlZCBpbiBpbmFjdGl2ZSBwcm90b2NvbF9pZHgKKyAqCisgKiAwNyAwNiAyMDE3IHRpbW90aHkueWFvCisgKiBbTU9MWTAwMjYxODY4XSBbNjI5M11VTCBTSVQgbmV3IGhhbmRsaW5nCisgKiBuZXcgU0lUIGhhbmRsaW5nICh0byBUUlVOSykKKyAqIAkgLSBVUENNIC8gUkFURE0uCisgKgorICogMDIgMjEgMjAxNyBzdGV2ZS5rYW8KKyAqIFtNT0xZMDAyMzA5NzhdIFs2MjkzXVtFTDJdIEZvcmNlZCBpbmRpcmVjdCBwYXRoIChWUkIgbW9kZSkuCisgKiBbVU1PTFlBXVtUUlVOS11bUkFURE1dIEZvcmNlZCBWUkIgbW9kZS4KKyAqCisgKiAwOSAyNiAyMDE2IGNhbW1pZS55YW5nCisgKiBbTU9MWTAwMTk1NTYzXSBbNjI5M11bRUwyXVtVUENNXVtSQVRETV1bRVBEQ1BdIEluaXRpYWwgZmVhdHVyZSBpbnRlZ3JhdGlvbnMKKyAqIFtUUlVOS10gVVBDTS9SQVRETS9FUERDUCBmZWF0dXJlIGludGVncmF0aW9ucyBmcm9tIFBTLkRFVgorICoKKyAqIDA4IDA5IDIwMTYgbmljb2xlLmhzdQorICogW01PTFkwMDE5NjA2NV0gW01UNjI5M11bZm9sZGVyIHN0cnVjdHVyZV0gTW92ZSBFTDEvRUwyIGZpbGVzIGZyb20gTFRFIGRvbWFpbiB0byBTV1JEIGRvbWFpbgorICogOTMgRUwyIG90aGVycworICoKKyAqIDA3IDIwIDIwMTYgaGVhZC5oc3UKKyAqIFtNT0xZMDAxODI1NTldIFtNVDYyOTJdW0xXQV0gVS1QbGFuZSBEZXZlbG9wbWVudDogZVBEQ1AgYW5kIFJBVERNCisgKiAJKFJBVERNIGRlZmF1bHQgb2ZmKQorICogCVtSQVRETV0gTFdBIHN1cHBvcnQKKyAqIAkxLiBXTEFOL2VQRENQIFVQIGNvbnRyb2wgbWVzc2FnZQorICogCTIuIFJBVERNX0xXQV9FTkFCTEUKKyAqIAkzLiB3cmFwIENDTVNHX0lEX1NZU01TR1NWQyB3aXRoIF9fQ0NDSURFVl9TVVBQT1JUX18KKyAqCisgKiAwNSAyNSAyMDE1IGhlYWQuaHN1CisgKiBbTU9MWTAwMTA5ODU1XSBbVEs2MjkxRTFdWzFzdCBBSVEgQ2FsbF1bVU1PTFldWzRHXVtURERdW0NBXSBBc3NlcnQgRmFpbCBjY2NpX2RlYnVnLmMgNDk4CisgKiBSQVRETSBzd2l0Y2ggcmVndWxhciB0aWNrIHNvdXJjZSB2aWEgRU1BQ19TQ0hfU1RBVFVTX0lORCBpbnN0ZWFkIG9mIExURSBJRExFIHN0YXRlCisgKgorICogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFJBVERNX0VMMl9TVFJVQ1RfSAorI2RlZmluZSBSQVRETV9FTDJfU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAiYWJzX3RpbWUuaCIKKyNpbmNsdWRlICJsdG1fZWwyX3N0cnVjdC5oIiAvLyBUT0RPOiByZW1vdmUKKyNpbmNsdWRlICJxbXVfYm0uaCIKKyNpbmNsdWRlICJ1cGNtX2RpZC5oIgorI2luY2x1ZGUgInVlX3Rlc3Rtb2RlX3N0cnVjdC5oIgorCisjZGVmaW5lIFJBVERNX0VQRENQX01BWF9OVU1fRFJCIDgKKworLyogbWFwcGluZyB0byB0aGUgZGVmaW5pdGlvbnMgaW4gbHRtX2VsMi5oICovCisvL3R5cGVkZWYgZHJiX3Vsc2R1X2luZm9faGVhZF90ICAgZHJiX3Vsc2R1X2luZm9fdDsKKyNkZWZpbmUgVUxTRFVfSU5GT19GTEFHX1BSSU9SSVRZICAgIFVMU0RVX0lORk9fSEVBRF9GTEFHX1BSSU9SSVRZCisjZGVmaW5lIFVMU0RVX0lORk9fRkxBR19DVFJMX1BEVSAgICBVTFNEVV9JTkZPX0hFQURfRkxBR19DVFJMX1BEVQorI2RlZmluZSBVTFNEVV9JTkZPX0ZMQUdfUkVUWF9XSV9TTiAgVUxTRFVfSU5GT19IRUFEX0ZMQUdfUkVUWF9XSV9TTgorI2RlZmluZSBHRVRfVUxTRFVfSU5GTyhfcCkgICAgICAgICAgR0VUX1VMU0RVX0lORk9fSEVBRChfcCkKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyIHRvdGFsX3NpemU7ICAvKiBieXRlcyAqLworICAgIGthbF91aW50MTYgc3RhcnRfaWR4OyAgIC8qIFNEVSBzdGFydCBpbmRleCBpbiBTSVQ7IHZhbGlkIHJhbmdlOiAwfjY1NTM1ICovCisgICAga2FsX3VpbnQxNiBjbnQ7ICAgICAgICAgLyogU0RVIGNvdW50ICovCit9cmF0ZG1fbHRlX2RsdnJfZGF0YV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiAgcmJfaWR4OworICAgIHVwY21fZGlkICAgICpwX2hlYWQ7CisgICAgdXBjbV9kaWQgICAgKnBfdGFpbDsKK31lcGRjcF9kbHZyX2RhdGFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICBrYWxfdWludDMyIHJiX2lkeDsgLyogUkIgSW5kZXggKDJ+OSkgKi8KKyAgICByYXRkbV9sdGVfZGx2cl9kYXRhX3N0cnVjdCBkYXRhX3ByaTsgLyogUHJpb3JpdHkgZGF0YSAoZS5nOiBUQ1AgQUNLKSAqLworICAgIHJhdGRtX2x0ZV9kbHZyX2RhdGFfc3RydWN0IGRhdGFfbm1sOyAvKiBOb3JtYWwgZGF0YSAqLworICAgIGthbF91aW50OCBlYmk7IC8qIFVzZWQgdG8gcmVjb2duaXplIHNpdF9pZHggKi8KK31yYXRkbV9lcGRjcF9kYXRhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIGthbF91aW50OCAgZXBzX2JyX2lkOworICAgIGthbF9ib29sICAgaXNfZm9yY2VkX2luZGlyZWN0X3BhdGg7CisgICAgICAgIC8vIEtBTF9UUlVFOiBhc2sgRVBEQ1AgdG8gdXNlIGluZGlyZWN0IHBhdGggKFZSQikgZm9yIHRoZSBFUFNCIHNwZWNpZmllZAorICAgICAgICAvLyBLQUxfRkFMU0U6IGxldCBFUERDUCBkZWNpZGUgdGhlIERMIHBhdGggKGRpcmVjdCBwYXRoIG9yIGluZGlyZWN0IHBhdGgpCit9cmF0ZG1fZXBkY3BfZGxfcGF0aF9zd2l0Y2hfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX3VpbnQzMiBudW07CisgICAgZXBkY3BfZGx2cl9kYXRhX3N0cnVjdCBkYXRhW1JBVERNX0VQRENQX01BWF9OVU1fRFJCXTsKK31yYXRkbV9lcGRjcF9kYXRhX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIGthbF91aW50MzIgbWVzc2FnZTsKK313bGFuX2VwZGNwX2N0cmxfbXNnX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIGthbF9ib29sIGlzX3NjaF9vcGVuOworfXJhdGRtX2VtYWNfc2NoX3N0YXR1c19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICBBQlNfVElDS19USU1FIHdha2V1cF90aW1lOworfXJhdGRtX2VtYWNfbmV4dF9kcnhfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX3VpbnQ4ICByYl9pZHg7CisgICAga2FsX3VpbnQ4ICBlcHNfYnJfaWQ7CisKKyAgICAvL2thbF91aW50OCAgcm9sbGJhY2tfZXhpc3Rfbm1sOworICAgIC8va2FsX3VpbnQ4ICByb2xsYmFja19leGlzdF9wcmk7CisgICAgLyogcm9sbGJhY2sgZGF0YSBpbiB0aGUgcmFuZ2UgW3N0YXJ0LCBlbmQpICovCisgICAga2FsX3VpbnQxNiAgcm9sbGJhY2tfc3RhcnRfbm1sOyAgICAgLy8gaW5jbHVkZWQKKyAgICBrYWxfdWludDE2ICByb2xsYmFja19lbmRfbm1sOyAgICAgICAvLyBleGNsdWRlZAorICAgIGthbF91aW50MTYgIHJvbGxiYWNrX3N0YXJ0X3ByaTsgICAgIC8vIGluY2x1ZGVkCisgICAga2FsX3VpbnQxNiAgcm9sbGJhY2tfZW5kX3ByaTsgICAgICAgLy8gZXhjbHVkZWQKKworCit9cmF0ZG1fZXBkY3BfdWxfZGF0YV9yZWRpcl9pbmRfc3RydWN0OworCit0eXBlZGVmIHRlc3Rsb29wX2NmZ19zdHJ1Y3QgcmF0ZG1fZXBkY3BfdGVzdGxvb3BfaW5kX3N0cnVjdDsKKworI2VuZGlmIC8qIFJBVERNX0VMMl9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGRtX2VubDJfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0ZG1fZW5sMl9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTgzNGVlCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGRtX2VubDJfc3RydWN0LmgKQEAgLTAsMCArMSwyMDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIFJBVERNX0VOTDJfU1RSVUNUX0gKKyNkZWZpbmUgUkFURE1fRU5MMl9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKworI2luY2x1ZGUgImVubDJfc2FwX2NvbW1vbi5oIgorI2luY2x1ZGUgInVwY21fZGlkLmgiCisKKyNpbmNsdWRlICJ1ZV90ZXN0bW9kZV9zdHJ1Y3QuaCIKKworI2RlZmluZSBSQVRETV9FTlBEQ1BfTUFYX05VTV9EUkIgMzIKKyNkZWZpbmUgUkFURE1fRU5QRENQX01BWF9OVU1fUk9MTEJBQ0tfTkFTX1NJVCAxIC8vLyBmb3IgTlNBLCAxIERSQiBtYXAgdG8gb25seSAxIEVQU0IKKyNkZWZpbmUgUkFURE1fRU5QRENQX0lOVkFMSURfUkJfSURYIDB4RkYKKworI2RlZmluZSBFTlBEQ1BfU0FQX01BWF9RT1NfRkxPV1NfUEVSX1BEVV9TRVNTSU9OICAgIDY0CisjZGVmaW5lIFJBVERNX0VOUERDUF9NQVhfTlVNX1BEVV9TRVNTSU9OICAgICAgICAgICAgMTYKKyNkZWZpbmUgRU5QRENQX01BWF9GTE9XX05VTV9QRVJfRFJCICAgICAgICAgICAgICAgICA2NAorCisvKioKKyAqIEBicmllZiB0aGUgTkFTIFNJVCBpbmZvcm1hdGlvbiBvZiBuZXcgYXJyaWF2YWwgdXBsaW5rIGRhdGEgZm9yIExURSBhbmQgTlIgTGF5ZXIgMiBtb2R1bGVzCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiB0b3RhbF9zaXplOyAvLy88IFRvdGFsIHNpemUgaW4gYnl0ZSBvZiB0aGUgbmV3IGFycml2YWwgZGF0YQorICAgIGthbF91aW50MTYgc3RhcnRfaWR4OyAvLy88IFRoZSBzdGFydCBpbmRleCBvZiBuZXcgYXJyaXZhbCBkYXRhIGluIHRoZSBOQVMgU0lUCisgICAga2FsX3VpbnQxNiBjbnQ7IC8vLzwgTnVtYmVyIG9mIG5ldyBhcnJpdmFsIGRhdGEKK30gcmF0ZG1fZW5sMl91bF9kYXRhX3N0cnVjdDsKKworLyoqCisgKiBAYnJpZWYgTVNHX0lEX1JBVERNX0VOUERDUF9EQVRBX1JFUSwgTVNHX0lEX1JBVERNX1NEQVBfREFUQV9SRVEKKyAqCisgKiBUaGUgbmV3IGRhdGEgYXJyaXZhbCBvZiB1cGxpbmsgZGF0YSBmcm9tIFJBVERNIHRvIEVOLUwyLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICBlbnBkY3BfY25fZ2VuZXJhdGlvbl9lbnVtIGNuX2dlbmVyYXRpb247CisgICAga2FsX3VpbnQ4IGViaTsKKyAgICBrYWxfdWludDggcGR1X3Nlc3Npb25faWQ7CisgICAga2FsX3VpbnQ4IHFmaTsKKyAgICBrYWxfdWludDE2IHNpdF90YmxfaWR4OyAvLy88IE5BUyBTSVQgdGFibGUgaW5kZXgKKyAgICBrYWxfdWludDggcmJfaWR4OyAgICAgICAvLy88IHZhbGlkIG9ubHkgZm9yIGxvb3BiYWNrIG1vZGUgQS4gSW52YWxpZCB2YWx1ZSAoMHhGRikgZm9yIG90aGVyIHNjZW5hcmlvcy4KKworICAgIHJhdGRtX2VubDJfdWxfZGF0YV9zdHJ1Y3QgZGF0YV9wcmk7IC8vLzwgUHJpb3JpdHkgZGF0YSBsaXN0CisgICAgcmF0ZG1fZW5sMl91bF9kYXRhX3N0cnVjdCBkYXRhX25tbDsgLy8vPCBOb3JtYWwgZGF0YSBsaXN0Cit9IHJhdGRtX2VucGRjcF9kYXRhX3JlcV9zdHJ1Y3QsIHJhdGRtX3NkYXBfZGF0YV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICBrYWxfdWludDMyIG51bTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBudW0gb2YgcmIgKi8KKyAgICBrYWxfdWludDMyIHJiX2lkeFtSQVRETV9FTlBEQ1BfTUFYX05VTV9EUkJdOyAgICAvKiBSQiBJbmRleCAoMH4xNSwgMTl+MzQpKi8KK30gcmF0ZG1fZW5wZGNwX2RhdGFfZGlzY19yZXFfc3RydWN0OworCisvLyBNU0dfSURfUkFURE1fRU5QRENQX1NJVF9GVUxMX1JFUQordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGVucGRjcF9jbl9nZW5lcmF0aW9uX2VudW0gY25fZ2VuZXJhdGlvbjsKKyAgICBrYWxfdWludDggZWJpOworICAgIGthbF91aW50OCBwZHVfc2Vzc2lvbl9pZDsKKyAgICBrYWxfdWludDggcWZpOworfSByYXRkbV9lbnBkY3Bfc2l0X2Z1bGxfcmVxX3N0cnVjdDsKKworCisvLyBNU0dfSURfUkFURE1fRU5QRENQXzVRSV9VUERBVEVfUkVRCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICBrYWxfdWludDggcHNpOworICAgIGthbF91aW50OCBudW1fcWZpOworICAgIGthbF91aW50OCBxZmlbRU5QRENQX1NBUF9NQVhfUU9TX0ZMT1dTX1BFUl9QRFVfU0VTU0lPTl07CisgICAga2FsX3VpbnQ4IHZxaVtFTlBEQ1BfU0FQX01BWF9RT1NfRkxPV1NfUEVSX1BEVV9TRVNTSU9OXTsKK30gcmF0ZG1fZW5wZGNwXzVxaV91cGRhdGVfcmVxX3N0cnVjdDsKKworLyoqCisgKiBAYnJpZWYgTVNHX0lEX1JBVERNX0VOUERDUF9VTF9EQVRBX1JFRElSX0lORAorICoKKyAqIFVwbGluayBSb2xsYmFjayAoUmVkaXJlY3QpIGRhdGEgZnJvbSBFTlBEQ1AgdG8gUkFURE0gZHVlIHRvIGludGVyLVJBVCBjaGFuZ2UuCisgKi8KKy8vIFRPRE86IHBvc3NpYmxlIGJhdGNoIG11bHRpcGxlIFFGSSBpbiBvbmUgREFUQS1SRVEKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIGVucGRjcF9jbl9nZW5lcmF0aW9uX2VudW0gY25fZ2VuZXJhdGlvbjsKKyAgICBrYWxfdWludDggbmFzX2JlYXJlcl9udW07CisgICAga2FsX3VpbnQ4IGViaTsKKyAgICBrYWxfdWludDggcGR1X3Nlc3Npb25faWQ7CisgICAga2FsX3VpbnQ4IHFmaVtFTlBEQ1BfTUFYX0ZMT1dfTlVNX1BFUl9EUkJdOworICAgIGthbF91aW50MTYgc2l0X3RibF9pZHhbRU5QRENQX01BWF9GTE9XX05VTV9QRVJfRFJCXTsgIC8vLzwgTkFTIFNJVCB0YWJsZSBpbmRleAorICAgIGthbF91aW50MTYgcm9sbGJhY2tfc3RhcnRfbm1sW0VOUERDUF9NQVhfRkxPV19OVU1fUEVSX0RSQl07IC8vLzwgVGhlIHN0YXJ0IGluZGV4IG9mIG5vcm1hbCBTSVQKKyAgICBrYWxfdWludDE2IHJvbGxiYWNrX2VuZF9ubWxbRU5QRENQX01BWF9GTE9XX05VTV9QRVJfRFJCXTsgLy8vPCBUaGUgZW5kIGluZGV4IG9mIG5vcm1hbCBTSVQKKyAgICBrYWxfdWludDE2IHJvbGxiYWNrX3N0YXJ0X3ByaVtFTlBEQ1BfTUFYX0ZMT1dfTlVNX1BFUl9EUkJdOyAvLy88IFRoZSBzdGFydCBpbmRleCBvZiBwcmlvcml0eSBTSVQKKyAgICBrYWxfdWludDE2IHJvbGxiYWNrX2VuZF9wcmlbRU5QRENQX01BWF9GTE9XX05VTV9QRVJfRFJCXTsgLy8vPCBUaGUgZW5kIGluZGV4IG9mIHByaW9yaXR5IFNJVAorfSByYXRkbV9lbnBkY3BfdWxfZGF0YV9yZWRpcl9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGVucGRjcF9jbl9nZW5lcmF0aW9uX2VudW0gY25fZ2VuZXJhdGlvbjsKKyAgICBrYWxfdWludDggZWJpOyAvLy88IHZhbGlkIHdoZW4gQ04gZ2VuZXJhdGlvbiBpcyBFUEMKKyAgICBrYWxfdWludDggcGR1X3Nlc3Npb25faWQ7IC8vLzwgdmFsaWQgd2hlbiBDTiBnZW5lcmF0aW9uIGlzIDVHCisgICAgdXBjbV9kaWQgICAgKnBfaGVhZDsKKyAgICB1cGNtX2RpZCAgICAqcF90YWlsOworfSBlbnBkY3BfZGVsaXZlcl9kYXRhX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX3VpbnQzMiBudW07CisgICAgZW5wZGNwX2RlbGl2ZXJfZGF0YV9zdHJ1Y3QgZGF0YVtSQVRETV9FTlBEQ1BfTUFYX05VTV9EUkJdOworfSByYXRkbV9lbnBkY3BfZGF0YV9pbmRfc3RydWN0OworCisKKy8vIE1TR19JRF9SQVRETV9FTlBEQ1BfUERVX1NFU1NJT05fUkJfU1RBVFVTX0lORAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX3VpbnQ4IG51bV9wc2k7CisgICAga2FsX3VpbnQ4IHBzaVtSQVRETV9FTlBEQ1BfTUFYX05VTV9QRFVfU0VTU0lPTl07CisgICAga2FsX2Jvb2wgcmJfZXhpc3RbUkFURE1fRU5QRENQX01BWF9OVU1fUERVX1NFU1NJT05dOworfSByYXRkbV9lbnBkY3BfcGR1X3Nlc3Npb25fcmJfc3RhdHVzX2luZF9zdHJ1Y3Q7CisKKy8vIE1TR19JRF9SQVRETV9FTlBEQ1BfRExfUEFUSF9TV0lUQ0hfUkVRCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICBlbnBkY3BfY25fZ2VuZXJhdGlvbl9lbnVtIGNuX2dlbmVyYXRpb247CisgICAgLyogQml0IHNldCB0byAxIGFsbCBEUkJzIGFyZSBTVyBwYXRoLiAgICovCisgICAga2FsX2Jvb2wgZm9yY2VfYWxsX2RyYjsgICAgCisgICAgCisgICAga2FsX2Jvb2wgaXNfZm9yY2VfaW5kaXJlY3RfcGF0aDsKKworICAgIC8qIEJpdCBzZXQgdG8gMSBpZmYgdGhlIGNvcnJlc3BvbmRpbmcgRVBTQiBvciBQRFUgc2Vzc2lvbiBpcyBTVyBwYXRoLiBEZXBlbmQgb24gY25fZ2VuZXJhdGlvbjogRUJJIG9yIFBTSQorICAgICAqIExTQjogZm9yIEVCSSAvIFBTSSAwCisgICAgICogTVNCOiBmb3IgRUJJIC8gUFNJIDE1CisgICAgICovCisgICAga2FsX3VpbnQxNiBpbmRpcmVjdF9wYXRoX2JlYXJlcl9ibXA7ICAgCisKKyAgICAvKiBWYWxpZCB3aGVuIGNuX2dlbmVyYXRpb24gaXMgNUcuCisgICAgICogaW5kaXJlY3RfcGF0aF81Z19xZmlbMV0gPSBiJzEwMDsgLy8gUFNJIDEgUUZJIDIgaXMgU1cgcGF0aC4KKyAgICAgKi8KKyAgICBrYWxfdWludDY0IGluZGlyZWN0X3BhdGhfNWdfcWZpW1JBVERNX0VOUERDUF9NQVhfTlVNX1BEVV9TRVNTSU9OXTsKKworICAgIC8vIFRPRE86IHJldGlyZQorICAgIGthbF91aW50OCBlYmk7IC8vIHRvIGJlIHJlbW92ZWQKKyAgICBrYWxfdWludDggcGR1X3Nlc3Npb25faWQ7IC8vIHRvIGJlIHJlbW92ZWQKKyAgICBrYWxfdWludDggcWZpOyAvLyB0byBiZSByZW1vdmVkCit9IHJhdGRtX2VucGRjcF9kbF9wYXRoX3N3aXRjaF9yZXFfc3RydWN0OworCisvLyBNU0dfSURfUkFURE1fRU5QRENQX1RFU1RMT09QX0lORAordHlwZWRlZiB0ZXN0bG9vcF9jZmdfc3RydWN0IHJhdGRtX2VucGRjcF90ZXN0bG9vcF9pbmRfc3RydWN0OworCisjZGVmaW5lIEVOUERDUF9SQVRETV9EQVRBX0lORF9ISUdIX1RIUkVTSE9MRCAoMjApCisjZGVmaW5lIEVOUERDUF9SQVRETV9EQVRBX0lORF9MT1dfVEhSRVNIT0xEICgxMCkKKy8qKgorICogQGJyaWVmIGluY3JlYXNpbmcgZGF0YS1pbmQtY29uc3VtZXIgY291bnRlcgorICogICAgICAgIGFuZCBzZW5kIERBVEEtSU5ELVJFU1VNRS1SRVEgaWYgcHJvZHVjZXItY29uc3VtZXIgaXMgbG93ZXIgdGhhbiB0aHJlc2hvbGQKKyAqCisgKiBAcGFyYW0gcHJvdG9jb2xfaWR4IHByb3RvY29sIGluZGV4IG9mIGNhbGxlcgorICogCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZCBlbnBkY3BfcmF0ZG1fZGF0YV9pbmRfY29uc3VtZShrYWxfdWludDggcHJvdG9jb2xfaWR4KTsKKworI2VuZGlmIC8qIFJBVERNX0VOTDJfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRkbV9leHBvcnRfYXBpLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0ZG1fZXhwb3J0X2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMTBhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0ZG1fZXhwb3J0X2FwaS5oCkBAIC0wLDAgKzEsMzYyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICByYXRkbV9leHBvcnRfYXBpLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAkTG9nJAorICoKKyAqIDAzIDE3IDIwMjEgc3R1bi53dQorICogW01PTFkwMDU5NDY1Nl0gU0E/pd8/ykldWz+rSC0/P11bTjc4XVuxtbNxsnZdP6tINUcgU0ErP6tINUcgU0E/P6lJpVihQqlJpEqhQT8/P7rdpVg/N6a4sF+pSaWiP6FGP6TxP7rdpVg/Nqa4oV03LzEwMKFeCisgKiAJCisgKiAJLgorICoKKyAqIDA1IDA3IDIwMjAgYW5keS13Yy5jaGFuZworICogW01PTFkwMDUwNjMxMl0gW1RpdGFuXVtJUENdW0lNU10gSVBDX0lNU19JTlZJVEVfRkxVU0ggKDB4MUMpIC0gRUwyIGRldgorICogW1ZNT0xZXVtUSVRBTl0gaXBjIGZsdXNoIGNvbW1hbmQgcG9ydGluZyAtIGhlYWRlcgorICoKKyAqIDA0IDMwIDIwMjAgeWktbGluLmxlZQorICogW01PTFkwMDUxNzk1Ml0gW01UNjg3NV1bTWFyZ2F1eF1bRm9yIE1vdXRvbl1bUTBdW01QM11bU1FDXVs1RyBGVF1bTlNBXVs1R01NXVtDaGluYV1bQ01DQyBGVF1bUHJlIFNRQ11bNUctRlQtTlNBLTIuM11bTGFuemhvdV1EVVQgY2FsbCBkcm9wIDIgdGltZXMgZHVyaW5nIFZPTFRFIGNhbGwuCisgKiAJCisgKiAJW1JBVERNXSA1ZyBjb3BybyByYi1wZG4gbWFwcGluZyBvZiBkZWRpY2F0ZWQgYmVhcmVyIChyMy5tcCkKKyAqCisgKiAwMyAzMCAyMDIwIGNoaW4td2VpLmhzdQorICogW01PTFkwMDUwODYxM10gW0JMT0NLSU5HXVtNVDY4ODVdW1BldHJ1c11bTVAzXVtOVklPVF1bTm9raWFdW0RhbGxhc11bTlJfTUJdW1RDSUQ4M10gQWZ0ZXIgbGVnIHN3aXRjaCBmcm9tIE5SIG9ubHkgdG8gTFRFIG9ubHksIERhdGEgc3R1Y2sgYW5kIGNhbid0IHJlY292ZXJ5LgorICogU0lUIGZ1bGwgaGFuZGxpbmcuCisgKgorICogMDMgMTAgMjAyMCBjaGluLXdlaS5oc3UKKyAqIFtNT0xZMDA1MDM0MjddIFtNVDY4ODVdW1BldHJ1c11bVE1PLVVTXVtXV0ZUXVtTZWF0dGxlXVs1RzRHXVtOU05dW01EU1RdW1NXSUZUXVtBc3NlcnRdIGZpbGU6bWN1L21pZGRsZXdhcmUvaGlmL2lwY29yZS9zcmMvaXBjX2ZpbHRlci5jIGxpbmU6MzgxNQorICogCQorICogCVtUUlVOS11tb25pdG9yIERMIGRhdGEuCisgKgorICogMDEgMDggMjAyMCB0Yy5jaGFuZworICogW01PTFkwMDQ2ODc3MV0gW0lPRFRdW01UNjg4NV1bUGV0cnVzXVtNUDFdW1pURV1bTGFiXVs1R1NNXVtDaGluYV1bWGlhbl1bRjYwXVtONDFdQXNzZXJ0IGZhaWw6IHVwY21fZGF0YS5jIDczNyAtIEVMMi4KKyAqCisgKiAxMiAwNiAyMDE5IHRjLmNoYW5nCisgKiBbTU9MWTAwNDYzMjMxXSBbR0VOOTddW0dXU0QrXSBwYXRjaGJhY2sgZnJvbSAxMDAxZGV2LgorICoKKyAqIDEyIDA1IDIwMTkgdGMuY2hhbmcKKyAqIFtNT0xZMDA0NTkyNzldIFtHZW45N11bVVBDTV0gTUNQUyBvcHRpbWl6YXRpb24uCisgKgorICogMDkgMjMgMjAxOSB0Yy5jaGFuZworICogW01PTFkwMDQyNzA2OF0gW0dlbjk3XVtVUENNXVtSQVRETV1bRU5QRENQXSBEeW5hbWljIFNJVC4KKyAqCisgKiAwOCAwOSAyMDE5IHRjLmNoYW5nCisgKiBbTU9MWTAwNDE3NDExXSBbVE9QIElzc3VlXVtNVDYyOTddW1BDVCBJT0RUXVtTQSBGdWxsU3RhY2tdW1N0YXJQb2ludF1bUENUIDcuMS4xLjMuM10gbGdjaCA1IHRyaWdnZXIgU1Igd2hpbGUgbGdjaCA2IGlzIHdhaXRpbmcgZm9yIFNSIGRlbGF5IHRpbWVyLgorICoKKyAqIDA3IDE4IDIwMTkgdGMuY2hhbmcKKyAqIFtNT0xZMDA0MjI5NzNdIFtHZW45N11bVVBDTV1bUkFURE1dIHVwZGF0ZSB0cmFjZS4KKyAqCisgKiAwNyAxMiAyMDE5IHRjLmNoYW5nCisgKiBbTU9MWTAwNDIxMDYxXSBbR2VuOTddIEFOQlIgKFJCUixSQlJRKSBvdmVyIE5SLgorICoKKyAqIDA3IDA0IDIwMTkgdGMuY2hhbmcKKyAqIFtNT0xZMDA0MTgyNzJdIFtHZW45N10gU3luYyBHZW45NSBVTU9MWUUgcGF0Y2gKKyAqIFtVUENNXVtSQVRETV0gU3luYyBNT0xZMDA0MDk2OTksIE1PTFkwMDQwOTY2NCwgTU9MWTAwNDEwMzUwLgorICoKKyAqIDA0IDE5IDIwMTkgdGMuY2hhbmcKKyAqIFtNT0xZMDAzOTk5OTNdIFtHZW45N11bVk1PTFldIGludGVyd29ya2luZyB3aXRoTjI2IGZlYXR1cmVzLgorICoKKyAqIDAyIDE4IDIwMTkgdGMuY2hhbmcKKyAqIFtNT0xZMDAzODM4MTZdIFtHZW45N10gU3luYyBVTU9MWUUgR2VuOTUgcGF0Y2gKKyAqICAgICBbTU9MWTAwMzQ2OTQyXSBbTVQzOTY3XVtFSUdFUl1bTzFdW01QMV1bTklPVF1bTm9raWFdW091bHVdWzRHXVtlTUJNU11bUmVncmVzc2lvbl06IEZhdGFsIEVycm9yICgweDMwNSwgMHg4ODg4MDI4ZiwgMHhjY2NjY2NjYykgLSBJUENPUkUuCisgKgorICogMDEgMTQgMjAxOSB0Yy5jaGFuZworICogW01PTFkwMDM3NjAxOF0gW0dlbjk3XSBVcGRhdGUgVVQgY2FzZXMuCisgKgorICogMDEgMDIgMjAxOSB0Yy5jaGFuZworICogW01PTFkwMDM3NTk4Ml0gW0dlbjk3XSBUcmFjZSBpbXByb3ZlbWVudC4KKyAqCisgKiAxMCAwOCAyMDE4IHRjLmNoYW5nCisgKiBbTU9MWTAwMzU2NDQ0XSBbVk1PTFldIEJ1ZyBmaXggYW5kIGFkZCBVVCBjYXNlcy4KKyAqCisgKiAwOSAxOCAyMDE4IHRjLmNoYW5nCisgKiBbTU9MWTAwMzQ1OTkwXSBbVk1PTFldIENvZGUgc3luYy4KKyAqCisgKiAwOSAxNCAyMDE4IHRjLmNoYW5nCisgKiBbTU9MWTAwMzQ1OTkwXSBbVk1PTFldIENvZGUgc3luYworICogUm9sbGJhY2sgZmlyc3QuIEZpeCBidWlsZCBlcnJvciBsb2NhbGx5CisgKgorICogMDcgMjQgMjAxOCB3aWxseS13ai5jaGVuCisgKiBbTU9MWTAwMzM3OTQzXSBbUjIuTVBdW0VMMl1bTVQ2NzYxXVtNZXJsb3RdW08xXVtNUDNdW0ZUXVtJbmRpYV1bRGVsaGldW1ZvTFRFXVtSSklPXVtJREVBXVtBdXRvXVtBbmRyb2lkIExpbnV4IFNjcmlwdF1bU1NUXSBNb2RlbSBXYXJuaW5nOiArRVdBUk5JTkc6IFsxXVs2NDNdIGRwY29wcm9fbW11X2Rydi5jICM5OTI7ICh0aW1lc3RhbXA6IDY1MDI5NDU4MikgVlJCOjEub2ZzOjB4MTA3LnB2OjB4MjgyREZDNCByZmFpbCBwaWR4OjB4MzQwCisgKiBbVU1PTFlFXSBOb3RpZnkgVUcgdG8gcmVsZWFzZSBxdWV1ZWQgZGF0YSB3aGVuIFJ4IFVuYmluZCBSZXF1ZXN0LgorICoKKyAqIDA2IDExIDIwMTggdGltb3RoeS55YW8KKyAqIFtNT0xZMDAzMTkzNzNdIFtNVDYyOTVdIHJlY29tbWVuZGVkIGJpdCByYXRlIGZlYXR1cmUKKyAqIHJlY29tbWVuZGVkIGJpdCByYXRlIGZlYXR1cmU6IHVwY20gZGVzaWduIChtZXJnZWQgZnJvbSA1NzY0OTY0KQorICoKKyAqIDAzIDEzIDIwMTggY2hpbi13ZWkuaHN1CisgKiBbTU9MWTAwMzEzMDM5XSDvv71pVG9w77+9au+/vWlUSC1DTlgtRENPNjZfQnVnczEyODkzMDXvv71q77+9aUZU77+9akRVVDEgU0lNMiB2aWRlbyBjYWxsIERVVDIgU0lNMSwgRFVUMiBjYW4gbm90IGFjY2VzcyB0aGUgSW50ZXJuZXQgYWZ0ZXIgY29ubmVjdGluZworICogW1VNT0xZRV0gd2hlbiBuZXR3b3JrIGludGVyZmFjZSB1bmJpbmQgUEROLCBjbGVhciBlcHNiIHF1ZXVlIHdob3NlIGRlZmF1bHQgRUJJIGlzIGxpbmtlZCB0byB0aGlzIFBETi4KKyAqCisgKiAwMSAwOSAyMDE4IGNoaW4td2VpLmhzdQorICogW01PTFkwMDI5OTg2M10gW1BWVCBtdXN0IHJlc29sdmVdIO+/vUzvv71IPz/vv71d77+9Qz8/IC0ga2VlcCBhbGl2ZQorICoKKyAqIAlbVFJVTktdW1VQQ01dW1JBVERNXSBVUENNX0ZFQVRVUkVfMzAxLgorICoKKyAqIDAxIDA5IDIwMTggY2hpbi13ZWkuaHN1CisgKiBbTU9MWTAwMjk5ODYzXSBbUFZUIG11c3QgcmVzb2x2ZV0g77+9TO+/vUg/P++/vV3vv71DPz8gLSBrZWVwIGFsaXZlCisgKiBbVFJVTktdW1VQQ01dW1JBVERNXSBVUENNX0ZFQVRVUkVfMzAxLgorICoKKyAqIDA5IDE1IDIwMTcgcmFqZXNoLnNhc3RyeQorICogW01PTFkwMDI3ODQwNV0gW0dlbjkzXSBGaXhlZCBVUENNIEZMT1cgSUQgaW1wbGVtZW50YXRpb24gZm9yIEdTTS9XQ0RNQSBSQVQKKyAqCisgKiAwNyAwNiAyMDE3IHRpbW90aHkueWFvCisgKiBbTU9MWTAwMjYxODY4XSBbNjI5M11VTCBTSVQgbmV3IGhhbmRsaW5nCisgKiBuZXcgU0lUIGhhbmRsaW5nICh0byBUUlVOSykKKyAqIAkgLSBVUENNIC8gUkFURE0uCisgKgorICogMDUgMTAgMjAxNyB0aW1vdGh5LnlhbworICogW01PTFkwMDI0ODQ4MV0gW0JJQU5DT11bTVQ2NzYzXVtSRElUXVtGVF1bRkREXVtDVV1bU0hdW1NJTTE6Q1VdW1NJTTI6TkFdW0FTU0VSVF0gZmlsZTptY3UvcGNvcmUvbW9kZW0vZWwyL2VydC9lbXV4L3NyYy9lbXV4LmMgbGluZTo0NjcKKyAqIDEuIGZpeCBJUkFUIGRhdGEgcmVzdW1lIGlzc3VlLgorICogICAoMSkgU0lUIGJpYXMKKyAqICAgKDIpIGFkZCBVRyAtPiBMVEUgcm9sbGJhY2sgcHJvYworICogICAoMykgbW9kaWZ5IExURSAtPiBVRyByb2xsYmFjayBwcm9jZWR1cmUuCisgKgorICogMDQgMjYgMjAxNyB4aWFva2FpLmxpdQorICogW01PTFkwMDI0NDAxM10gW0dlbjkzXVtUREQgM0ddIFJBVERNIENvZGUgU01QCisgKiAuCisgKgorICogMDQgMjAgMjAxNyBjaGluLXdlaS5oc3UKKyAqIFtNT0xZMDAyNDE4NzddIFtVTU9MWUFdW1RSVU5LXVtVUENNXVtSQVRETV0gQnVpbGQgd2FybmluZyByZW1vdmFsCisgKiBSZW1vdmUgdW51c2VkIGZ1bmN0aW9uLgorICoKKyAqIDA0IDE4IDIwMTcgY2hpbi13ZWkuaHN1CisgKiBbTU9MWTAwMjQzMDM3XSBbQklBTkNPXVtNVDY3NjNdW1JESVRdW0ZUXVtGRERdW0NVXVtTWl1bU0lNMTpDVV1bU0lNMjpDVV0gRXh0ZXJuZWwgKEVFKSxbQVNTRVJUXSBmaWxlOm1jdS9wY29yZS9tb2RlbS9uYXMvcmF0ZG0vY21uX2RhdGEvc2VjdXJlL3JhdGRtX3JhdGFkcC5jIGxpbmU6Mzc3CisgKiBSZXNldCBFUFNCIGluZm8gaW4gUkFURE0gd2hlbiBVUENNIHJlc3VtZS4KKyAqCisgKiAwMyAzMCAyMDE3IGNoaW4td2VpLmhzdQorICogW01PTFkwMDIzODcxNl0gW0dlbjkzXSA2TSBSQVRETSBNdWx0aXBsZSBQUyBmZWF0dXJlIHN5bmMKKyAqIFtDTU4tREFUQV0gTCtMLCBNdWx0aXBsZSBQUyBtZXJnZSBmcm9tIEhlYWQgSHN1J3MgQ0JyCisgKgorICogMDMgMjMgMjAxNyBjaGluLXdlaS5oc3UKKyAqIFtNT0xZMDAyMzcyOTRdIFtNVDYyOTNdW1VQQ01dIEZvcmNlZCBTVyBwYXRoCisgKiBGaXggdHlwby4KKyAqCisgKiAwMyAyMyAyMDE3IGNoaW4td2VpLmhzdQorICogW01PTFkwMDIzNzI5NF0gW01UNjI5M11bVVBDTV0gRm9yY2VkIFNXIHBhdGgKKyAqIFt0cnVua10gRm9yY2VkIFNXIHBhdGggZm9yIEVCSS9QRE4uCisgKgorICogMDIgMTYgMjAxNyBzdGV2ZS5rYW8KKyAqIFtNT0xZMDAyMzAwNjJdIFtVTU9MWUFdIE0tUFMgcmVsYXRlZCBpbnRlcmZhY2UgY2hhbmdlcyBmb3IgVVBDTSwgUkFURE0sIGFuZCBFUERDUAorICogW00tUFNdW1JBVERNXVtDb21tb25dLgorICogCTEuIGFkZCBwcm90b2NvbF9pZHggaW50byBjYWxsYmFjayBpbnRlcmZhY2VzLAorICogCTIuIG9uZSBzZXQgb2YgVVBDTSBVTCBTSVQgcGVyIFNJTS4KKyAqCisgKiAwOSAyNiAyMDE2IHJhdml0ZWouYmFsbGFrdXIKKyAqIFtNT0xZMDAxOTUzNjBdIFszR11bUkFURE1dW1BEQ1BdIC0gR2VuOTMgM0cgUkFURE0gYW5kIFBEQ1AgY29kZSBtb2RpZmljYXRpb24gZm9yIG5ldyBIVyBhbmQgTUNVIEFyY2hpCisgKiAJTWVyZ2luZyAyRyBhbmQgV0NETUEgUkFURE0gYW5kIFBEQ1AgY2hhbmdlcyBmcm9tIG1lcmdlX0NCci4KKyAqCisgKiAwOCAwMyAyMDE2IHJhdml0ZWouYmFsbGFrdXIKKyAqIFtNT0xZMDAxOTUzNjBdIFszR11bUkFURE1dW1BEQ1BdIC0gR2VuOTMgM0cgUkFURE0gYW5kIFBEQ1AgY29kZSBtb2RpZmljYXRpb24gZm9yIG5ldyBIVyBhbmQgTUNVIEFyY2hpCisgKiAzRyBSQVRETSBhbmQgUERDUCBjaGFuZ2VzLgorICogMDcgMjcgMjAxNiBqZXJlbXkuY2hlbgorICogW01PTFkwMDE5MDY4M10gW1VNT0xZQV1bNjI5M10gRUwyIG1lcmdlIGJhY2sgdG8gVU1PTFlBIFRSVU5LICYgUFMgREVWCisgKiBbRUwyXVtPQV0gbWVyZ2UgVVBDTS9SQVRETQorICogMDkgMjYgMjAxNiBjYW1taWUueWFuZworICogW01PTFkwMDE5NTU2M10gWzYyOTNdW0VMMl1bVVBDTV1bUkFURE1dW0VQRENQXSBJbml0aWFsIGZlYXR1cmUgaW50ZWdyYXRpb25zCisgKiBbVFJVTktdIFVQQ00vUkFURE0vRVBEQ1AgZmVhdHVyZSBpbnRlZ3JhdGlvbnMgZnJvbSBQUy5ERVYKKyAqCisgKiAwNyAyMCAyMDE2IGhlYWQuaHN1CisgKiBbTU9MWTAwMTgyNTU5XSBbTVQ2MjkyXVtMV0FdIFUtUGxhbmUgRGV2ZWxvcG1lbnQ6IGVQRENQIGFuZCBSQVRETQorICogCShSQVRETSBkZWZhdWx0IG9mZikKKyAqIAlbUkFURE1dIExXQSBzdXBwb3J0CisgKiAJMS4gV0xBTi9lUERDUCBVUCBjb250cm9sIG1lc3NhZ2UKKyAqIAkyLiBSQVRETV9MV0FfRU5BQkxFCisgKiAJMy4gd3JhcCBDQ01TR19JRF9TWVNNU0dTVkMgd2l0aCBfX0NDQ0lERVZfU1VQUE9SVF9fCisgKgorICoKKyAqIDA1IDIwIDIwMTUgaGVhZC5oc3UKKyAqIFtNT0xZMDAwODkxMzFdIFtNVDYyOTEgR2VtaW5pXSBMK1crVytXIGNvZGUgcmV2aXNpb24gY2hlY2sgaW4KKyAqIAk7UkFURE0vUkFCTS9QRENQL0NTUiBwYXJ0IGNoZWNrLWluCisgKgorICogMDIgMTMgMjAxNSB5dW5nZnUuY2hlbgorICogW01PTFkwMDA5MTgyMl0gUkFURE0gcmVvcmdhbml6YXRpb24KKyAqCisgKiAxMiAyMyAyMDEzIHl1bmdmdS5jaGVuCisgKiBbTU9MWTAwMDQ3Mzk4XSBbTVQ2NTgyTFRFXVtXV0ZUXVtVS11bVm9kYWZvbmVdW0VFXSBDU0ZCIHBlcmZvcm1hbmNlIGFubHlzaXMgW29ubHkgZm9yIFVLRlRdCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1JBVERNX0VYUE9SVF9BUElfSAorI2RlZmluZSBfUkFURE1fRVhQT1JUX0FQSV9ICisKKy8qIEtBTCAtIFJUT1MgQWJzdHJhY3Rpb24gTGF5ZXIgKi8KKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAicW11X2JtLmgiCisjaW5jbHVkZSAidXBjbV91bF9zaXQuaCIKKyNpbmNsdWRlICJ1cGNtX2RpZC5oIgorI2luY2x1ZGUgInVlX3Rlc3Rtb2RlX3N0cnVjdC5oIgorCisvKiBNQUNSTyBERUZJTklUSU9OICovCisvKiEgQGJyaWVmIGRlZmluZSBwcmVkZWZpbmVkIGJlYXJlciBpZCBmb3IgRU1CTVMgZGF0YSBwbGFuZS4KKyAqICBEYXRhIHBsYW5lIHVzZXMgdGhpcyB2aXJ0dWFsIGJlYXJlciBpZCAoNCkgb24gRU1CTVMgcGFja2V0cy4gKi8KKyNkZWZpbmUgTUJNU19ERUZBVUxUX0VCSSAoNCkKKworI2RlZmluZSBSQVRETV9JTlZBTElEX1JCX0lEWCAgICAoMHhGRikKKyNkZWZpbmUgUkFURE1fSU5WQUxJRF9FQkkgICAgICAgKDApCisKKy8qIEZMT1cgSUQgZm9yIFdDRE1BICovCisjZGVmaW5lIFdDRE1BX0ZMT1dfSUQgIDEzCisKKy8qIERBVEEgU1RSVUNUVVJFICovCit0eXBlZGVmIHN0cnVjdAoreworCXFibV9ncGQgKnBfcHJpX2hlYWQ7IC8vIHByaW9yaXR5IFNEVSBoZWFkLgorICAgIHFibV9ncGQgKnBfcHJpX3RhaWw7IC8vIHByaW9yaXR5IFNEVSB0YWlsLgorICAgIHFibV9ncGQgKnBfaGVhZDsgLy8gbm9ybWFsIFNEVSBoZWFkLgorICAgIHFibV9ncGQgKnBfdGFpbDsgLy8gbm9ybWFsIFNEVSB0YWlsLgorfSByYXRjbW5fdWxfc2R1X3Q7Cit0eXBlZGVmIHJhdGNtbl91bF9zZHVfdCByYXRkbV9sdGVfdWxfc2R1X3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX2Jvb2wgaXNfNWdfaWQ7CisgICAga2FsX3VpbnQ4IHBkdV9zZXNzaW9uX2lkOworCisgICAgLyogV2hlbiBpc181Z19pZCBpcyBUUlVFLCBiZWFyZXJfaWQgaW5kaWNhdGVzIFFvUyBmbG93IGlkIChxZmkpLgorICAgICAqIFdoZW4gaXNfNWdfaWQgaXMgRkFMU0UsIGJlYXJlcl9pZCBpbmRpY2F0ZXMgRVBTIGJlYXJlciBpZCAob3IgTlNBUEkpLgorICAgICAqLworICAgIGthbF91aW50OCBiZWFyZXJfaWQ7CisgICAga2FsX3VpbnQ4IHJiX2lkeDsgICAvLyBWYWxpZCBmb3IgbG9vcGJhY2sgbW9kZSBBLiBJbnZhbGlkIHZhbHVlICgweEZGKSBmb3Igb3RoZXIgc2NlbmFyaW9zLgorCisgICAga2FsX3VpbnQzMiAgc2l0X2lkeDsKKyAgICBrYWxfdWludDMyICBubWxfc3RhcnQ7CisgICAga2FsX3VpbnQzMiAgbm1sX251bTsKKyAgICBrYWxfdWludDMyICBubWxfc3o7CisKKyAgICBrYWxfdWludDMyICBwcmlfc3RhcnQ7CisgICAga2FsX3VpbnQzMiAgcHJpX251bTsKKyAgICBrYWxfdWludDMyICBwcmlfc3o7Cit9IHJhdGNtbl91bF9zZHVfOTNfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyIHJiX2lkeDsKKwl1cGNtX2RpZCAqcF9oZWFkOworCXVwY21fZGlkICpwX3RhaWw7Cit9IHJhdGRtX2RsdnJfZGF0YV90OworCisvKiBFWFBPUlQgRlVOQ1RJT05TICovCisvKiBSQUJNL1BEQ1AvUkFURE0gKi8KK2V4dGVybiB2b2lkIHJhdGRtX3JhYm1fY2FsbGJhY2tfaW5jcmVtZW50X3J4X2RhdGFfb2N0ZXRzKGthbF91aW50OCB0Y21fY2lkLCBrYWxfdWludDY0IGluY3JlbWVudF92YWx1ZSwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworZXh0ZXJuIHZvaWQgcmF0ZG1fcmFibV9jYWxsYmFja19yZXNldF9yeF9kYXRhX29jdGV0cyhrYWxfdWludDggdGNtX2NpZCwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworZXh0ZXJuIHZvaWQgcmF0ZG1fcmFibV9jYWxsYmFja19zZXRfbmV3X3ZyX3ZhbHVlKGthbF91aW50OCBuc2FwaSwga2FsX3VpbnQxNiBuZXdfdnJfdmFsdWUsIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKK2V4dGVybiB2b2lkIHJhdGRtX2RlbGl2ZXJfZGxfZGF0YShyYXRkbV9kbHZyX2RhdGFfdCAqcF9kYXRhLCBrYWxfdWludDggc2ltX2lkeCk7CitleHRlcm4gdm9pZCByYXRkbV9mZGRfcmFibV9jYWxsYmFja19pbmNyZW1lbnRfcHJvY19kYXRhX3JlcSgpOworZXh0ZXJuIHZvaWQgcmF0ZG1fdGRkX3JhYm1fY2FsbGJhY2tfaW5jcmVtZW50X3Byb2NfZGF0YV9yZXEoKTsKKworLyogRU5QRENQICovCitleHRlcm4ga2FsX3VpbnQ4IHJhdGRtX2VucGRjcF9jYWxsYmFja19nZXRfZGVmYXVsdF9lYmkoa2FsX3VpbnQ4IG5zYXBpLCBrYWxfdWludDggc2ltX2lkeCk7CisKKy8qIFNORENQICovCitleHRlcm4gdm9pZCByYXRkbV9zbmRjcF9jYWxsYmFja19pbmNyZW1lbnRfcHJvY19kYXRhX3JlcSgpOworCisvKiBVUENNICovCisvKiBNdWx0aW1vZGUgQ2FsbGJhY2sgRnVuY3Rpb24gKi8KKy8vdHlwZWRlZiB2b2lkICgqcmF0ZG1fbHRlX2RsdnJfZGxfc2R1X2YpKGthbF91aW50MzIgZWJpLCB1cGNtX2RpZCAqcF9oZWFkLCB1cGNtX2RpZCAqcF90YWlsLCBrYWxfdWludDggcHJvdG9jb2xfaWR4KTsKKy8vdHlwZWRlZiB2b2lkICgqcmF0ZG1fbHRlX3JvbGxiYWNrX3NkdV9mKShrYWxfdWludDMyIGViaSwgcWJtX2dwZCAqcF9oZWFkLCBxYm1fZ3BkICpwX3RhaWwpOwordHlwZWRlZiB2b2lkICgqcmF0ZG1fZGx2cl9kbF9zZHVfZikoa2FsX3VpbnQzMiBtYXBwZWRfcGRuX2lkLCB1cGNtX2RpZCAqcF9oZWFkLCB1cGNtX2RpZCAqcF90YWlsLCBrYWxfdWludDggcHJvdG9jb2xfaWR4KTsKK3R5cGVkZWYgdm9pZCAoKnJhdGRtX2lyYXRfY29udGV4dF90cmFuc2Zlcl9mKShrYWxfYm9vbCBzdXNwZW5kLCBrYWxfdWludDggcHJvdG9jb2xfaWR4KTsKK3R5cGVkZWYgdm9pZCAoKnJhdGRtX3JvbGxiYWNrX3NpdF9mKShrYWxfdWludDMyIGJlYXJlcl9pZCwga2FsX3VpbnQxNiBzaXRfaWR4LAorICAgIGthbF91aW50OCBwcm90b2NvbF9pZHgsIGthbF91aW50MzIgcHJpX3N0YXJ0LCBrYWxfdWludDMyIHByaV9lbmQsIGthbF91aW50MzIgbm1sX3N0YXJ0LCBrYWxfdWludDMyIG5tbF9lbmQpOwordHlwZWRlZiB2b2lkICgqcmF0ZG1fbm90aWZ5X2x0ZV90aWNrX2YpKGthbF9ib29sIGlzX2x0ZV90aWNrKTsKK3R5cGVkZWYgdm9pZCAoKnJhdGRtX25vdGlmeV9lYmlfc2l0X21hcHBpbmdfZikoa2FsX3VpbnQzMiBlYmlkLCBrYWxfdWludDMyIHNpdF9pZHgsIGthbF91aW50OCBwcm90b2NvbF9pZHgpOwordHlwZWRlZiB2b2lkICgqcmF0ZG1faW5kX3Rlc3RfbG9vcF9mKSh0ZXN0bG9vcF9jZmdfc3RydWN0ICpwX2NmZywga2FsX3VpbnQ4IHByb3RvY29sX2lkeCk7Cit0eXBlZGVmIHZvaWQgKCpyYXRkbV9pbmRfYWN0X3Bkbl9pZF9mKShrYWxfdWludDMyIHBkbl9pZCwga2FsX3VpbnQzMiBwcm90b2NvbF9pZHgpOworCitleHRlcm4gdm9pZCByYXRkbV9yYXRhZHBfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHJhdGRtX3JhdGFkcF9mcmVlX3Vsc2R1c185MyhyYXRjbW5fdWxfc2R1XzkzX3QgKnBfc2R1cywga2FsX3VpbnQ4IHByb3RvY29sX2lkeCk7CitleHRlcm4gdm9pZCByYXRkbV9yYXRhZHBfZHJvcF9zZHVfaW5fc2l0KGthbF91aW50MzIgc2l0X2lkeCwga2FsX2Jvb2wgaXNfcHJpb3JpdHksIGthbF91aW50MzIgc3RhcnQsIGthbF91aW50MzIgbnVtLCBrYWxfdWludDggcHJvdG9jb2xfaWR4KTsKK2V4dGVybiB2b2lkIHJhdGRtX3JhdGFkcF9yY3ZfdWxfc2R1XzkzKGthbF91aW50MzIgZWJpLCByYXRjbW5fdWxfc2R1XzkzX3QgKnBfc2R1cywga2FsX3VpbnQ4IHByb3RvY29sX2lkeCk7CitleHRlcm4gdm9pZCByYXRkbV9yYXRhZHBfc2V0X2ZvcmNlZF9zd19wYXRoKGthbF91aW50MzIgZWJpLCBrYWxfYm9vbCBpc19kbF9mb3JjZWRfaW5kaXJlY3RfcGF0aCwga2FsX3VpbnQ4IHByb3RvY29sX2lkeCk7CitleHRlcm4gdm9pZCByYXRkbV9yYXRhZHBfc2VuZF9kbF9wYXRoX3N3aXRjaF9hbGxfcmVxKGthbF9ib29sIGlzX2ZvcmNlZF9pbmRpcmVjdF9wYXRoLAorICAgIGthbF91aW50OCBwcm90b2NvbF9pZHgpOworZXh0ZXJuIHZvaWQgcmF0ZG1fcmF0YWRwX3Jjdl91bF9zZHVfNWdfbmFzKHJhdGNtbl91bF9zZHVfOTNfdCAqcF9zZHVzLCBrYWxfdWludDggcHJvdG9jb2xfaWR4KTsKK2V4dGVybiB2b2lkIHJhdGRtX3JhdGFkcF9zZXRfZm9yY2VkX3N3X3BhdGhfNWdfbmFzKGthbF9ib29sIGlzXzVnX2lkLAorICAgIGthbF91aW50OCBwZHVfc2Vzc2lvbl9pZCwga2FsX3VpbnQ4IGJlYXJlcl9pZCwKKyAgICBrYWxfYm9vbCBpc19kbF9mb3JjZWRfaW5kaXJlY3RfcGF0aCwga2FsX3VpbnQ4IHByb3RvY29sX2lkeCk7CitleHRlcm4gdm9pZCByYXRkbV9yYXRhZHBfc2VuZF9kbF9zd19wYXRoX2JpdG1hcF9yZXEoa2FsX2Jvb2wgaXNfNWcsCisgICAga2FsX3VpbnQ4IHByb3RvY29sX2lkeCk7CitleHRlcm4gdm9pZCByYXRkbV9yYXRhZHBfc2l0X2Z1bGxfNWdfbmFzKGthbF9ib29sIGlzXzVnX2lkLCBrYWxfdWludDggcHNpLCBrYWxfdWludDggYmVhcmVyX2lkLCBrYWxfdWludDggcHJvdG9jb2xfaWR4KTsKK2V4dGVybiB2b2lkIHJhdGRtX3JhdGFkcF9zaXRfZnVsbChrYWxfdWludDMyIGViaSwga2FsX3VpbnQ4IHByb3RvY29sX2lkeCk7CitleHRlcm4gdm9pZCByYXRkbV9sdGVfc2l0X2Z1bGxfcmVxKGthbF91aW50OCBiZWFyZXJfaWQsIGthbF91aW50OCBwcm90b2NvbF9pZHgpOwordm9pZCByYXRkbV9ucl9zaXRfZnVsbF9yZXEoa2FsX3VpbnQ4IHBzaSwga2FsX3VpbnQ4IGJlYXJlcl9pZCwga2FsX3VpbnQ4IHByb3RvY29sX2lkeCk7CisKK2V4dGVybiB2b2lkIHJhdGRtX3JhdGFkcF9yZWdfY2JrX3JvbGxiYWNrX3NpdChyYXRkbV9yb2xsYmFja19zaXRfZiBwZl9yb2xsYmFja19zZHUpOworZXh0ZXJuIHZvaWQgcmF0ZG1fcmF0YWRwX3JlZ19jYmtfaXJhdF9jb250ZXh0X3RyYW5zZmVyKHJhdGRtX2lyYXRfY29udGV4dF90cmFuc2Zlcl9mIHBmX2lyYXRfY29udGV4dF90cmFuc2Zlcik7CitleHRlcm4gdm9pZCByYXRkbV9yYXRhZHBfcmVnX2Nia19kbHZyX2RsX3NkdShyYXRkbV9kbHZyX2RsX3NkdV9mIHBmX2RsdnJfZGxfc2R1KTsKK2V4dGVybiB2b2lkIHJhdGRtX3JlZ19jYmtfbm90aWZ5X2x0ZV90aWNrKHJhdGRtX25vdGlmeV9sdGVfdGlja19mIHBmX25vdGlmeSk7CitleHRlcm4gdm9pZCByYXRkbV9yYXRhZHBfcmVnX2Nia19zaXRfbWFwcGluZyhyYXRkbV9ub3RpZnlfZWJpX3NpdF9tYXBwaW5nX2YgcGZfbm90aWZ5KTsKK2V4dGVybiB2b2lkIHJhdGRtX3JhdGFkcF9yZWdfY2JrX2luZF90ZXN0bG9vcChyYXRkbV9pbmRfdGVzdF9sb29wX2YgcGZfaW5kKTsKK2V4dGVybiB2b2lkIHJhdGRtX3JhdGFkcF9yZWdfY2JrX2luZF9hY3RfcGRuX2lkKHJhdGRtX2luZF9hY3RfcGRuX2lkX2YgcGZfaW5kKTsKK2V4dGVybiB2b2lkIHJhdGRtX3JhdGFkcF90ZXN0bG9vcF9yc3Aoa2FsX3VpbnQzMiBpc19zdWNjZXNzLCBrYWxfdWludDggcHJvdG9jb2xfaWR4KTsKK2V4dGVybiB2b2lkIHJhdGRtX3JhdGFkcF9iaW5kX2luZChrYWxfdWludDMyIHBkbl9pZCwga2FsX3VpbnQzMiBuZXRpZiwga2FsX3VpbnQ4IHByb3RvY29sX2lkeCk7CitleHRlcm4gdm9pZCByYXRkbV9yYXRhZHBfdW5iaW5kX2luZChrYWxfdWludDMyIHBkbl9pZCwga2FsX3VpbnQ4IHByb3RvY29sX2lkeCk7Cit2b2lkIHJhdGRtX3JhdGFkcF9iZWFyZXJfYWN0X2luZChrYWxfdWludDMyIGJlYXJlcl9pZCwga2FsX3VpbnQzMiBwZG5faWQsIGthbF91aW50OCBwcm90b2NvbF9pZHgpOwordm9pZCByYXRkbV9yYXRhZHBfYmVhcmVyX2RlYWN0X2luZChrYWxfdWludDMyIGJlYXJlcl9pZCwga2FsX3VpbnQ4IHByb3RvY29sX2lkeCk7CitleHRlcm4ga2FsX3VpbnQzMiByYXRkbV9yYXRhZHBfaXNfYWJsZV90b19yY3ZfdWxfc2R1KGthbF91aW50OCBwcm90b2NvbF9pZCk7CitleHRlcm4gdm9pZCByYXRkbV9yYXRhZHBfa2VlcF9jb25uZWN0ZWRfaWRsZV9sZWF2ZV9yZXEoa2FsX3VpbnQ4IHByb3RvY29sX2lkeCk7CitleHRlcm4gdm9pZCByYXRkbV9yYXRhZHBfZnJlZV9lcHNic191bF9xdWV1ZV9uX25vdGlmeV9hcyhrYWxfdWludDMyICphX2ViaSwga2FsX3VpbnQzMiBudW0sIGthbF91aW50MzIgc2ltX2lkeCk7CisKKyNpZmRlZiBfX0xURV9SQVRfXworZXh0ZXJuIGthbF91aW50MzIgcmF0ZG1fbHRlX2lzX2FibGVfdG9fcmN2X3VsX3NkdShrYWxfdWludDggcHJvdG9jb2xfaWQpOworZXh0ZXJuIGthbF91aW50OCByYXRkbV9sdGVfZWJpX3RvX3JiX2lkeChrYWxfdWludDMyIGViaSwga2FsX3VpbnQ4IHByb3RvY29sX2lkeCk7CitleHRlcm4ga2FsX3VpbnQ4IHJhdGRtX2x0ZV9yYl9pZHhfdG9fZWJpKGthbF91aW50MzIgcmJfaWR4LCBrYWxfdWludDggcHJvdG9jb2xfaWR4KTsKKyNlbmRpZgorZXh0ZXJuIHZvaWQgcmF0ZG1fcmF0YWRwX2ZyZWVfZXBzYl9hbGxfcmF0KGthbF91aW50MzIgYmVhcmVyX2lkLCBrYWxfdWludDggc2ltX2lkeCk7CitleHRlcm4gdm9pZCByYXRkbV9yYXRhZHBfb3V0cHV0X2FnZ3JlZ2F0ZWRfdHJhY2Uodm9pZCk7CisKK2V4dGVybiB2b2lkIHJhdGRtX3JlZ19jYmtfbm90aWZ5X2x3YV93aWZpX3RpY2socmF0ZG1fbm90aWZ5X2x0ZV90aWNrX2YgcGZfbm90aWZ5KTsKK2V4dGVybiBrYWxfdWludDggcmF0ZG1fYXV0b2dlbl9zaW1faWR4KCk7CisKK2V4dGVybiB2b2lkIHJhdGRtX25yXzQ1Z19pcmF0X3N1c3BlbmRfdXBjbV9kb25lKGthbF91aW50OCBwcm90b2NvbF9pZHgpOworZXh0ZXJuIGthbF91aW50MTYgcmF0ZG1fbnJfZ2V0X3BlbmRpbmdfdWxfZGF0YV9zdGF0dXNfNWcoa2FsX3VpbnQ4IHByb3RvY29sX2lkKTsKKyNlbmRpZiAvKiBfUkFURE1fRVhQT1JUX0FQSV9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0ZG1fbXVsdGltb2RlLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0ZG1fbXVsdGltb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU2ZmEzYwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRkbV9tdWx0aW1vZGUuaApAQCAtMCwwICsxLDE3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgcmF0ZG1fbXVsdGltb2RlLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAkTG9nJAorICoKKyAqIDA0IDAzIDIwMTkgbWVnaGFuYS5nYW5qaQorICogW01PTFkwMDM5MzU2OF0gW0NPREUgU1lOQ10gW1RTRF0gW0tCM10gW25ldHdvcmtdIFtGaWVsZFRlc3RdIFtQUjJdIE1haW4gY2FyZCBVbmljb20gM0cgYWRoZXNpb24gdGVzdCwgYWRoZXNpb24gZGVsYXkgZm9sbG93ZWQgYnkgbW9yZSB0aGFuIDEgbWludXRlICg3My40MikKKyAqCisgKiAwOCAwMSAyMDE3IHJhdml0ZWouYmFsbGFrdXIKKyAqIFtNT0xZMDAyNjgwNTNdIFtHZW45M10gTWlzY2VsbGVuZW91cyBjaGFuZ2VzIGluIFJBVERNIFVHCisgKiAuCisgKgorICogMDcgMDYgMjAxNyBoZWFkLmhzdQorICogW01PTFkwMDI2MTg2OF0gWzYyOTNdVUwgU0lUIG5ldyBoYW5kbGluZworICogUkFURE0tVUcsIFJBVERNLUNNTi1TSUcgcGFydAorICoKKyAqIDAzIDMwIDIwMTcgcmF2aXRlai5iYWxsYWt1cgorICogW01PTFkwMDIzODcxNl0gW0dlbjkzXSA2TSBSQVRETSBNdWx0aXBsZSBQUyBmZWF0dXJlIHN5bmMKKyAqIE0tUFMgY2hhbmdlcyBmb3IgVU1PTFlBLgorICoKKyAqIDA5IDI2IDIwMTYgcmF2aXRlai5iYWxsYWt1cgorICogW01PTFkwMDE5NTM2MF0gWzNHXVtSQVRETV1bUERDUF0gLSBHZW45MyAzRyBSQVRETSBhbmQgUERDUCBjb2RlIG1vZGlmaWNhdGlvbiBmb3IgbmV3IEhXIGFuZCBNQ1UgQXJjaGkKKyAqIAlNZXJnaW5nIDJHIGFuZCBXQ0RNQSBSQVRETSBhbmQgUERDUCBjaGFuZ2VzIGZyb20gbWVyZ2VfQ0JyLgorICoKKyAqIDA4IDAzIDIwMTYgcmF2aXRlai5iYWxsYWt1cgorICogW01PTFkwMDE5NTM2MF0gWzNHXVtSQVRETV1bUERDUF0gLSBHZW45MyAzRyBSQVRETSBhbmQgUERDUCBjb2RlIG1vZGlmaWNhdGlvbiBmb3IgbmV3IEhXIGFuZCBNQ1UgQXJjaGkKKyAqIDNHIFJBVERNIGFuZCBQRENQIGNoYW5nZXMuCisgKgorICogMDUgMjAgMjAxNSBoZWFkLmhzdQorICogW01PTFkwMDA4OTEzMV0gW01UNjI5MSBHZW1pbmldIEwrVytXK1cgY29kZSByZXZpc2lvbiBjaGVjayBpbgorICogCTtSQVRETS9SQUJNL1BEQ1AvQ1NSIHBhcnQgY2hlY2staW4KKyAqCisgKiAwMiAxMyAyMDE1IHl1bmdmdS5jaGVuCisgKiBbTU9MWTAwMDkxODIyXSBSQVRETSByZW9yZ2FuaXphdGlvbgorICoKKyAqIDA4IDI1IDIwMTQgaGVhZC5oc3UKKyAqIFtNT0xZMDAwNzQ5MjldIFtNdWx0aW1vZGVdIFVBUyByZWxhdGVkIGhlYWRlciBzcGxpdAorICoKKyAqIDA2IDI1IDIwMTQgam9obnNvbi5saXUKKyAqIFtNT0xZMDAwNzAzMjldIFtNVDY1OTVURERdW1NTXVtDTUNDIENhc2VdW05TLUlPVF1bUiZTIENNVzUwMF1bMjkuMzMuMl1bNEdTTV1bRTM4XVs1LjIuN11GQUlMLD8/Pz9pcGVyZl9UQ1A/PworICogLgorICoKKyAqIDA1IDA3IDIwMTMgamwuaHNpYW8KKyAqIFtNT0xZMDAwMTg1NjddIFtNVDcyMDhdW05XLVVFIFNJTV1bTU1dW1RDIDEzLjMuMi4xXSA0RzIzIElSX1RZUEVfU0VBUkNIIHJlLWRlc2lnbgorICogLgorICoKKyAqIDA0IDI0IDIwMTMgam9obnNvbi5saXUKKyAqIFtNT0xZMDAwMjA2NTNdIFtURERdW1JBVERNXVtQRENQXVVUIENvZGUgSW50ZWdyYXRpb24gYW5kIFZDIEJ1aWxkIFdhcm5pbmcgUmVtb3ZlCisgKiAuCisgKgorICogMDMgMTkgMjAxMyBqbC5oc2lhbworICogW01PTFkwMDAwOTE3MF0gTFRFIE11bHRpbW9kZSBNZXJnZSB0byBNT0xZCisgKiAuCisgKgorICogMDEgMzEgMjAxMyBqbC5oc2lhbworICogW01PTFkwMDAwOTE3MF0gTFRFIE11bHRpbW9kZSBNZXJnZSB0byBNT0xZCisgKiAuCisgKgorICogMDEgMjIgMjAxMyBqbC5oc2lhbworICogW01PTFkwMDAwOTE3MF0gTFRFIE11bHRpbW9kZSBNZXJnZSB0byBNT0xZCisgKiAuCisgKgorICogMTIgMDQgMjAxMiBqbC5oc2lhbworICogW01PTFkwMDAwMzY5OV0gW1JBVERNXSBNdWx0aW1vZGUgY29kZSBjaGVjay1pbgorICogLgorICogCisgKiAxMCAyNCAyMDEyIGpsLmhzaWFvCisgKiBbTU9MWTAwMDAzNjk5XSBbUkFURE1dIE11bHRpbW9kZSBjb2RlIGNoZWNrLWluCisgKiAuCisgKiAKKyAqIDA5IDE3IDIwMTIgamwuaHNpYW8KKyAqIFtNT0xZMDAwMDM2OTldIFtSQVRETV0gTXVsdGltb2RlIGNvZGUgY2hlY2staW4KKyAqIC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfUkFURE1fTVVMVElNT0RFX0gKKyNkZWZpbmUgX1JBVERNX01VTFRJTU9ERV9ICisKKyNpZm5kZWYgX19VU0VfTEVHQUNZXzIzR19EQVRBUEFUSF9fCisjaW5jbHVkZSAicmF0ZG1fc2hhcV9hcHBsaWNhdGlvbl9hcGkuaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorI2luY2x1ZGUgIm1jZF9sM19pbmNfZ3Byc19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJzdGFja19sdGxjb20uaCIKKyNpbmNsdWRlICJsM19pbmNfbG9jYWwuaCIKKyNpbmNsdWRlICJtbWlfbDNfZW51bXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgInBzX3JhdGRtX3N0cnVjdC5oIgorI2luY2x1ZGUgImdsb2JhbF9kZWYuaCIKKyNpbmNsdWRlICJmbGMyX2VudF9mdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX3N0cnVjdC5oIgorI2luY2x1ZGUgInJhdGRtX3V0aWxzLmgiCisKKyNpZmRlZiBfX0dFTUlOSV9fCisjaW5jbHVkZSAic2ltX2NvbW1vbl9lbnVtcy5oIgorI2VuZGlmCisKKyNpZmRlZiBfX0RJQUxVUF9HUFJTX0NPVU5URVJfU1VQUE9SVF9fCisjaW5jbHVkZSAibDRjX3JhdGRtX3N0cnVjdC5oIgorI2VuZGlmCisKKyNpZmRlZiBfX1VNVFNfUkFUX18KKyNpbmNsdWRlICJ1YXNfY29tbW9uX2VudW1zLmgiCisjZW5kaWYKKworLyogTUFDUk8gREVGSU5JVElPTiAqLworCisvKiBFWFBPUlQgRlVOQ1RJT05TICovCitleHRlcm4gdm9pZCByYXRkbV9tdWx0aW1vZGVfcHNfZHNjcl9kYXRhX2luZF9oZGxyKGlsbV9zdHJ1Y3QgKmlsbV9wdHIpOworZXh0ZXJuIGthbF91aW50OCByYXRkbV9tdWx0aW1vZGVfYXNzaWduX3BjaWQoa2FsX3VpbnQ4IG5zYXBpLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4ga2FsX3VpbnQ4IHJhdGRtX211bHRpbW9kZV9yZW1vdmVfcGNpZChrYWxfdWludDggbnNhcGksIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKK2V4dGVybiB2b2lkIHJhdGRtX211bHRpbW9kZV91Z19kYXRhX3JlcV9oZGxyKGthbF91aW50OCBuc2FwaSwgcmF0ZG1fcHNfZGF0YV9yZXFfc3RydWN0ICpwUGVlciwgZmxjMl9wb29sX2lkX2VudW0gcG9vbF9pZCwgU0hBUV9FTlFVRVVFX1dISUNIX1FVRVVFIGVucXVldWVfZGVjaXNpb24sIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKK2V4dGVybiBrYWxfYm9vbCByYXRkbV9tdWx0aW1vZGVfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHJhdGRtX211bHRpbW9kZV9vbl9pbG0oaWxtX3N0cnVjdCAqaWxtKTsKK2V4dGVybiBrYWxfYm9vbCByYXRkbV9tdWx0aW1vZGVfcmVzZXQodm9pZCk7CitleHRlcm4gdm9pZCByYXRkbV9zbV91cGRhdGVfbWF4X3RyYWZmaWNfY2xhc3NfcmVxKGlsbV9zdHJ1Y3QgKmlsbV9wdHIpOworZXh0ZXJuIHZvaWQgcmF0ZG1faGFuZGxlX3BzX2RzY3JfZGF0YV85M19pbmQoaWxtX3N0cnVjdCAqaWxtX3B0cik7CitleHRlcm4gdm9pZCByYXRkbV9zd2l0Y2hfb25fZHBjb3BybyhrYWxfdWludDggbW9kX2lkKTsKK2V4dGVybiB2b2lkIHJhdGRtX3N3aXRjaF9vZmZfZHBjb3BybyhrYWxfdWludDggbW9kX2lkKTsKKworI2VuZGlmIC8vIH4gI2lmbmRlZiBfX1VTRV9MRUdBQ1lfMjNHX0RBVEFQQVRIX18KK2V4dGVybiB2b2lkIHJhdGNtX3JhdGRtX3ZpcnR1YWxfbW9kZV9pbmRfaGRsciAoaWxtX3N0cnVjdCAqaWxtX3B0cik7CisKKyNlbmRpZiAvKiBfUkFURE1fTVVMVElNT0RFX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRkbV9yYWJtX2FwaS5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGRtX3JhYm1fYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxYzMzNQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRkbV9yYWJtX2FwaS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICByYXRkbV9yYWJtX2FwaS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIAorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogJExvZyQKKyAqCisgKiAwNSAyMCAyMDE1IGhlYWQuaHN1CisgKiBbTU9MWTAwMDg5MTMxXSBbTVQ2MjkxIEdlbWluaV0gTCtXK1crVyBjb2RlIHJldmlzaW9uIGNoZWNrIGluCisgKiAJO1JBVERNL1JBQk0vUERDUC9DU1IgcGFydCBjaGVjay1pbgorICoKKyAqCisgKiAwMSAyMyAyMDE0IHl1bmdmdS5jaGVuCisgKiBbTU9MWTAwMDQ3Mzk4XSBbTVQ2NTgyTFRFXVtXV0ZUXVtVS11bVm9kYWZvbmVdW0VFXSBDU0ZCIHBlcmZvcm1hbmNlIGFubHlzaXMKKyAqCisgKiAwMiAwNyAyMDEyIGNhcmxzb24ubGluCisgKiByZW1vdmVkIQorICogPHNhdmVkIGJ5IFBlcmZvcmNlPgorICogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfUkFURE1fUkFCTV9BUElfSAorI2RlZmluZSBfUkFURE1fUkFCTV9BUElfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKworI2VuZGlmIC8qIF9SQVRETV9SQUJNX0FQSV9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0ZG1fcmFibV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRkbV9yYWJtX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOTg1MGQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0ZG1fcmFibV9zdHJ1Y3QuaApAQCAtMCwwICsxLDU1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA3CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgcmF0ZG1fcmFibV9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICBNT05aQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogJExvZyQKKyAqCisgKiAxMCAyOCAyMDE2IHJhdml0ZWouYmFsbGFrdXIKKyAqIFtNT0xZMDAxOTUzNjBdIFszR11bUkFURE1dW1BEQ1BdIC0gR2VuOTMgM0cgUkFURE0gYW5kIFBEQ1AgY29kZSBtb2RpZmljYXRpb24gZm9yIG5ldyBIVyBhbmQgTUNVIEFyY2hpCisgKiBGdXggZm9yIFVFU0lNIFRDIDEzXzRfMl8xIGFuZCBtZXJnZSBvZiBNQVNFIENCciBjaGFuZ2VzLgorICoKKyAqIDA5IDI2IDIwMTYgcmF2aXRlai5iYWxsYWt1cgorICogW01PTFkwMDE5NTM2MF0gWzNHXVtSQVRETV1bUERDUF0gLSBHZW45MyAzRyBSQVRETSBhbmQgUERDUCBjb2RlIG1vZGlmaWNhdGlvbiBmb3IgbmV3IEhXIGFuZCBNQ1UgQXJjaGkKKyAqIAlNZXJnaW5nIDJHIGFuZCBXQ0RNQSBSQVRETSBhbmQgUERDUCBjaGFuZ2VzIGZyb20gbWVyZ2VfQ0JyLgorICoKKyAqIDA4IDAzIDIwMTYgcmF2aXRlai5iYWxsYWt1cgorICogW01PTFkwMDE5NTM2MF0gWzNHXVtSQVRETV1bUERDUF0gLSBHZW45MyAzRyBSQVRETSBhbmQgUERDUCBjb2RlIG1vZGlmaWNhdGlvbiBmb3IgbmV3IEhXIGFuZCBNQ1UgQXJjaGkKKyAqIDNHIFJBVERNIGFuZCBQRENQIGNoYW5nZXMuCisgKgorICogMDIgMTMgMjAxNSBoZWFkLmhzdQorICogW01PTFkwMDA5MTgyMl0gUkFURE0gcmVvcmdhbml6YXRpb24KKyAqIAlGREQvVEREIFJBQk0vUERDUCBjaGVja2luCisgKgorICogMTIgMTIgMjAxNCB0Yy5jaGFuZworICogW01PTFkwMDA4NzQzNF0gW1VuaXZlcnNhbCBCaW5dIENoZWNrIGluLgorICogRkREIFJBQk0KKyAqCisgKiAwNSAyOSAyMDE0IHl1bmdmdS5jaGVuCisgKiBbTU9MWTAwMDY3MTc2XSBTRVJWSUNFIFJFUVVFU1QgY2hhbmdlIGRlc2lnbgorICoKKyAqIDAxIDIxIDIwMTQgd2NwdXNlcl9pbnRlZ3JhdG9yCisgKiBbTU9MWTAwMDU0NDc1XSBTR0xURSBvcHRpb24gcmVuYW1lCisgKiAuCisgKgorICogMTAgMTggMjAxMyBqb2huc29uLmxpdQorICogW01PTFkwMDA0MTU5NV0gW01UNjI5MEUxXVtNTURTX0RDXSBNTURDIGZlYXR1cmUgcGF0Y2ggYmFjayB0byBNT0xZIHRydW5rCisgKiAuCisgKgorICogMDkgMjYgMjAxMyB5dW5nZnUuY2hlbgorICogW01PTFkwMDAzODg3N10gcmVtb3ZlIE1BWF9FWFRfUERQX0NPTlRFWFQvTUFYX0lOVF9QRFBfQ09OVEVYVCB1c2FnZSBvZiBSQVRETSBjb2RlCisgKiAJLgorICoKKyAqIDAxIDIyIDIwMTMgamwuaHNpYW8KKyAqIFtNT0xZMDAwMDkxNzBdIExURSBNdWx0aW1vZGUgTWVyZ2UgdG8gTU9MWQorICogLgorICoKKyAqIDEyIDA3IDIwMTIgYW5kcmV3Lnd1CisgKiBbTU9MWTAwMDA3MDk4XSBMT0NBTF9QQVJBX0hEUi9QRUVSX0JVRl9IRFIgbW9kaWZpY2F0aW9uCisgKiBMT0NBTF9QQVJBX0hEUi9QRUVSX0JVRl9IRFIgbW9kaWZpY2F0aW9uCisgKgorICogMDkgMTcgMjAxMiBqbC5oc2lhbworICogW01PTFkwMDAwMzY5OV0gW1JBVERNXSBNdWx0aW1vZGUgY29kZSBjaGVjay1pbgorICogLgorICoKKyAqIDA1IDIxIDIwMTIgam9obnNvbi5saXUKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDUgMTkgMjAxMiBqb2huc29uLmxpdQorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwMiAwNyAyMDEyIGFuZHJldy53dQorICogcmVtb3ZlZCEKKyAqIEludGVncmF0aW9uIGNoYW5nZS4KKyAqCisgKiAwMSAyNCAyMDExIG1heC55aW4KKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDEgMjEgMjAxMSBtYXgueWluCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDAxIDAzIDIwMTEgbWF4LnlpbgorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAxMiAzMSAyMDEwIG1heC55aW4KKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTIgMTYgMjAxMCBqbC5oc2lhbworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAxMiAxNCAyMDEwIGpsLmhzaWFvCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDEwIDE4IDIwMTAgamwuaHNpYW8KKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogQWRkIGNvcHlyaWdodCBoZWFkZXIuCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiBhZGQgdG8gc291cmNlIGNvbnRyb2wgcmVjdXJzZWx5CisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiBBZGQgcmF0Y21fcmFibV9yZXRyYW5zbWl0X2luZF9zdHJ1Y3QKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUkFURE1fUkFCTV9TVFJVQ1RfSAorI2RlZmluZSBfUkFURE1fUkFCTV9TVFJVQ1RfSAorCisjaW5jbHVkZSAiZmxjMl9jb25maWcuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX2dwcnNfc3RydWN0LmgiCisjaW5jbHVkZSAicHNfcmF0ZG1fc3RydWN0LmgiCisjaW5jbHVkZSAibDNfaW5jX2VudW1zLmgiCisjaW5jbHVkZSAicHNfcHVibGljX2VudW0uaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgInVhc19jb21tb25fZW51bXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKyNpbmNsdWRlICJtbWlfbDNfZW51bXMuaCIKKyNpbmNsdWRlICJyYXRkbV9leHBvcnRfYXBpLmgiCisKK3R5cGVkZWYga2FsX3VpbnQxNiB0UGRjcFNlcU51bWJlcjsKK3R5cGVkZWYga2FsX3VpbnQ4IHRSYWJtTnNhcGk7Cit0eXBlZGVmIGthbF91aW50MzIgdFJhYm1Db250ZXh0c051bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVFJBRkZJQ19DTEFTU19VTktOT1dOLAorICAgIFRSQUZGSUNfQ0xBU1NfQ09OVkVSU0FUSU9OQUwsCisgICAgVFJBRkZJQ19DTEFTU19TVFJFQU1JTkcsCisgICAgVFJBRkZJQ19DTEFTU19JTlRFUkFDVElWRSwKKyAgICBUUkFGRklDX0NMQVNTX0JBQ0tHUk9VTkQKK30gdFRyYWZmaWNDbGFzczsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUkFURE1fUkFCTV9JTlZBTElEX0NBVVNFLAorICAgIC8vUkFCTV9TVVNQRU5EX1JBVERNX0JZX1BEQ1BfRkxDLAorICAgIC8vUkFCTV9SRVNVTUVfUkFURE1fQllfUERDUF9GTEMsCisgICAgUkFCTV9SRVNVTUVfUkFURE1fQllfRkxDX1BEQ1BfTk9UX0VYSVNULAorICAgIFJBQk1fU1VTUEVORF9SQVRETV9CWV9QRENQX1JFTE9DLAorICAgIFJBQk1fUkVTVU1FX1JBVERNX0JZX1BEQ1BfUkVMT0MsCisgICAgUkFCTV9TVVNQRU5EX1JBVERNX0JZX05SVF9SQUJfUkVFU1QsCisgICAgUkFCTV9SRVNVTUVfUkFURE1fQllfTlJUX1JBQl9SRUVTVF9TVUNDRVNTLAorICAgIFJBQk1fUkVTVU1FX1JBVERNX0JZX05SVF9SQUJfUkVFU1RfRkFJTCwKKyAgICBSQUJNX1JFU1VNRV9SQVRETV9CWV9TUl9TVUNDRVNTX1JBQl9OT1RfRVNUQUJMSVNIRUQsCisgICAgUkFCTV9UUklHR0VSX1JBVERNX1JFVFJBTlNNSVRfQllfUkxDX1JFU0VULAorICAgIFJBQk1fVFJJR0dFUl9SQVRETV9SRVRSQU5TTUlUX0JZX1JMQ19SRUVTVEFCTElTSCwKKyAgICBSQVRETV9ERUFDVElWQVRFX1JBQk1fQllfUkVHVUxBUiwKKyAgICBSQVRETV9ERUFDVElWQVRFX1JBQk1fQllfUkFUX0NIQU5HRSwKKyAgICBSQVRETV9SQUJNX1RPVEFMX0NBVVNFCit9IHRSYXRjbVJhYm1DYXVzZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB0UmFibU5zYXBpIE5zYXBpOworICAgIGZsYzJfcG9vbF9pZF9lbnVtIGRsX3Bvb2xfaWQ7CisgICAgcW9zX3N0cnVjdCBxb3NfbmVnb3RpYXRlZDsKKyAgICB0UGRjcFNlcU51bWJlciBTZW5kU2VxTnVtYmVyOworICAgIHRQZGNwU2VxTnVtYmVyIFJlY2VpdmVTZXFOdW1iZXI7CisjaWZkZWYgX19VU0VfTEVHQUNZXzIzR19EQVRBUEFUSF9fCisgICAga2FsX3VpbnQ4IGNvbnRleHRfaWQ7ICAvLyBvcmlnaW5hbGx5IGluIHRjbV9yYXRkbV9jb25maWdfcmVxX3N0cnVjdAorI2VuZGlmCisgICAgbW9kdWxlX3R5cGUgbW9kdWxlX2lkOyAgLy8gb3JpZ2luYWxseSBpbiB0Y21fcmF0ZG1fY29uZmlnX3JlcV9zdHJ1Y3QKK30gdFJhYm1BY3RSZXFQYXJhOworCisvKiBSQVRETV9SQUJNX0FDVElWQVRFX1JFUSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgUkFUX0NoYW5nZTsKKyAgICBrYWxfdWludDggTm9PZkNvbnRleHRzOworICAgIHRSYWJtQWN0UmVxUGFyYSBSYWJtQ29udGV4dHNbUkFCTV9NQVhfUFNfUkFCU107CisjaWZuZGVmIF9fVVNFX0xFR0FDWV8yM0dfREFUQVBBVEhfXworICAgIGthbF9ib29sIGxvb3BiYWNrOworI2VuZGlmCit9IHJhdGRtX3JhYm1fYWN0aXZhdGVfcmVxX3N0cnVjdDsKKworLyogUkFURE1fUkFCTV9BQ1RJVkFURV9DTkYgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBOb09mQ29udGV4dHM7CisgICAga2FsX3VpbnQ4IE5zYXBpW1JBQk1fTUFYX1BTX1JBQlNdOworfSByYXRkbV9yYWJtX2FjdGl2YXRlX2NuZl9zdHJ1Y3Q7CisKKy8qIFJBVERNX1JBQk1fQUNUSVZBVEVfSU5EICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggTm9PZkNvbnRleHRzOworICAgIGthbF91aW50OCBOc2FwaVtSQUJNX01BWF9QU19SQUJTXTsKK30gcmF0ZG1fcmFibV9hY3RpdmF0ZV9pbmRfc3RydWN0OworCisvKiBSQVRETV9SQUJNX0FDVElWQVRFX1JTUCAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IE5zYXBpOworICAgIGthbF9ib29sIGlzX3N1Y2Nlc3NmdWw7Cit9IHJhdGRtX3JhYm1fYWN0aXZhdGVfcnNwX3N0cnVjdDsKKworLyogUkFURE1fUkFCTV9ERUFDVElWQVRFX1JFUSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IENhdXNlOworICAgIGthbF91aW50OCBOb09mQ29udGV4dHM7CisgICAga2FsX3VpbnQ4IE5zYXBpW1JBQk1fTUFYX1BTX1JBQlNdOworfSByYXRkbV9yYWJtX2RlYWN0aXZhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiByYXRkbV9yYWJtX2RlYWN0aXZhdGVfcmVxX3N0cnVjdCByYXRkbV9yYWJtX2RlYWN0aXZhdGVfY25mX3N0cnVjdDsKKworLyogIFJBVERNX1JBQk1fREVBQ1RJVkFURV9JTkQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBOb09mQ29udGV4dHM7CisgICAga2FsX3VpbnQ4IE5zYXBpW1JBQk1fTUFYX1BTX1JBQlNdOworICAgIGthbF91aW50OCBDYXVzZVtSQUJNX01BWF9QU19SQUJTXTsKK30gcmF0ZG1fcmFibV9kZWFjdGl2YXRlX2luZF9zdHJ1Y3Q7CisKKy8qIFJBVERNX1JBQk1fTU9ESUZZX1JFUSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IE5zYXBpOworICAgIGthbF91aW50OCBUcmFmZmljQ2xhc3M7CisgICAga2FsX2Jvb2wgRGVsaXZlcnlPZkVycm9yU2R1czsKK30gcmF0ZG1fcmFibV9tb2RpZnlfcmVxX3N0cnVjdDsKKworLyogUkFURE1fUkFCTV9NT0RJRllfQ05GICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggTnNhcGk7Cit9IHJhdGRtX3JhYm1fbW9kaWZ5X2NuZl9zdHJ1Y3Q7CisKKy8qIFJBVERNX1JBQk1fUkVTVU1FX1JFUSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCit9IHJhdGRtX3JhYm1fcmVzdW1lX3JlcV9zdHJ1Y3Q7CisKKy8qIFJBVERNX1JBQk1fUkVFU1RBQkxJU0hfSU5EICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyNpZmRlZiBfX1JFTDdfXworICAgIGthbF91aW50MTYgdWxfZGF0YV9zdGF0dXM7CQkvLzI0LjAwOCBjbGF1c2UgMTAuNS43LjcgTVNCOiBOU0FQSTE1CisjZW5kaWYKK30gcmF0ZG1fcmFibV9yZWVzdGFibGlzaF9pbmRfc3RydWN0OworCisvKiBSQVRETV9SQUJNX1JFRVNUQUJMSVNIX1JTUCAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgUmVzdWx0OworCisjaWZkZWYgX19SRUw3X18KKyAgICBrYWxfdWludDE2IHVsX2RhdGFfc3RhdHVzOwkJLy8yNC4wMDggY2xhdXNlIDEwLjUuNy43IE1TQjogTlNBUEkxNQorI2VuZGlmCit9IHJhdGRtX3JhYm1fcmVlc3RhYmxpc2hfcnNwX3N0cnVjdDsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisvKiBSQVRETV9SQUJNX0RBVEFfQ05GICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbnNhcGk7CisgICAga2FsX3VpbnQxNiBucGR1X251bTsgICAvKiBUaGUgc2VuZCBzZXF1ZW5jZSBudW1iZXIgdGhpcyBkYXRhIGNvbmYgcmVmZXJzIHRvICovCit9IHJhdGRtX3JhYm1fZGF0YV9jbmZfc3RydWN0OworCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKKy8qIFJBVERNX1JBQk1fU1VTUEVORF9EQVRBX1BMQU5FX0lORCAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgdFJhdGNtUmFibUNhdXNlIGNhdXNlOworICAgIGthbF91aW50OCBOb09mQ29udGV4dHM7CisgICAga2FsX3VpbnQ4IE5zYXBpW1JBQk1fTUFYX1BTX1JBQlNdOworfSByYXRkbV9yYWJtX3N1c3BlbmRfZGF0YV9wbGFuZV9pbmRfc3RydWN0OworCisvKiBSQVRETV9SQUJNX1JFU1VNRV9EQVRBX1BMQU5FX0lORCAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfbmVlZF9yZXRyYW5zbWl0OyAvKiBKZWZmIFd1IDIwMDYtMDQtMDI6IE5ldyAqLworICAgIHRSYXRjbVJhYm1DYXVzZSBjYXVzZTsKKyAgICBrYWxfdWludDggTm9PZkNvbnRleHRzOworICAgIGthbF91aW50OCBOc2FwaVtSQUJNX01BWF9QU19SQUJTXTsKKyAgICBrYWxfdWludDE2IFJldHJhbnNtaXRGcm9tU05bUkFCTV9NQVhfUFNfUkFCU107Cit9IHJhdGRtX3JhYm1fcmVzdW1lX2RhdGFfcGxhbmVfaW5kX3N0cnVjdDsKKworLyogUkFURE1fUkFCTV9QRENQX1JFTE9DX0lORCAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IE5vT2ZDb250ZXh0czsKKyAgICBrYWxfdWludDggTnNhcGlbUkFCTV9NQVhfUFNfUkFCU107CisgICAga2FsX3VpbnQxNiBVdHJhbk5leHRSZWNlaXZlU05bUkFCTV9NQVhfUFNfUkFCU107Cit9IHJhdGRtX3JhYm1fcGRjcF9yZWxvY19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggTnNhcGk7CisgICAga2FsX3VpbnQxNiBSZXRyYW5zbWl0RnJvbVNOOworICAgIHRSYXRjbVJhYm1DYXVzZSBjYXVzZTsKK30gcmF0ZG1fcmFibV9yZXRyYW5zbWl0X2luZF9zdHJ1Y3Q7CisKKy8qIFJBVERNLVJBQk0tUkFCLVJFTEVBU0UtSU5EICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKK30gcmF0ZG1fcmFibV9yYWJfcmVsZWFzZV9pbmRfc3RydWN0OworCisvKiBNU0dfSURfUkFURE1fUkFCTV9SQUJfU1RBVFVTX0lORCAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IE5zYXBpOworICAgIGthbF9ib29sIG5lZWRfZGF0YV9jbmY7Cit9IHJhdGRtX3JhYm1fcmJfY29uZmlnX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgcHNfZGF0YV9yZXFfc3RydWN0IHJhdGRtX3JhYm1fZGF0YV9yZXFfc3RydWN0OwordHlwZWRlZiBwc19kYXRhX2luZF9zdHJ1Y3QgcmF0ZG1fcmFibV9kYXRhX2luZF9zdHJ1Y3Q7CisjaWZkZWYgX19IU0RQQV9TVVBQT1JUX18KKy8qIE1TR19JRF9SQVRETV9SQUJNX1JBQl9DQVBBQklMSVRZX0lORCAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IE5vT2ZDb250ZXh0czsKKyAgICBrYWxfdWludDggTnNhcGlbUkFCTV9NQVhfUFNfUkFCU107CisgICAgZGF0YV9zcGVlZF9hY3RpdmF0ZV9lbnVtIENhcGFiaWxpdHlbUkFCTV9NQVhfUFNfUkFCU107Cit9IHJhdGRtX3JhYm1fcmFiX2NhcGFiaWxpdHlfaW5kX3N0cnVjdDsKKyNlbmRpZgorCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKworLyogUkFURE1fUkFCTV9SQVRfRU5URVJfUkVRICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICB0UmFibUFjdFJlcVBhcmEgUmFibUNvbnRleHRzOworfSByYXRkbV9yYWJtX3JhdF9lbnRlcl9yZXFfc3RydWN0OworCisvKiBSQVRETV9SQUJNX1JBVF9MRUFWRV9SRVEgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBOb09mQ29udGV4dHM7CisgICAga2FsX3VpbnQ4IE5zYXBpW1JBQk1fTUFYX1BTX1JBQlNdOworfSByYXRkbV9yYWJtX3JhdF9sZWF2ZV9yZXFfc3RydWN0OworCisvKiBSQVRETV9SQUJNX1JBVF9SRUFEWV9JTkQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBOc2FwaTsKK30gcmF0ZG1fcmFibV9yYXRfcmVhZHlfaW5kX3N0cnVjdDsKKworLyogUFMgc3RhdGlzdGljcyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCBuc2FwaTsKKyAgICBrYWxfdWludDggcmVzdWx0OworfSBzaW5nbGVfbnNhcGlfaW5mb19zdHJ1Y3Q7CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggbnNhcGk7CisgICAga2FsX3VpbnQ4IGNvbnRleHRfaWQ7CisgICAga2FsX2Jvb2wgcmVzZXRfdHg7CisgICAga2FsX2Jvb2wgcmVzZXRfcng7Cit9IHNpbmdsZV9uc2FwaV9yZXNldF9jbWRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF91aW50OCBzZXJpYWxfbnVtOworICAgIGthbF91aW50OCB0b3RhbF9uc2FwaTsKKyAgICBzaW5nbGVfbnNhcGlfcmVzZXRfY21kX3N0cnVjdCByZXNldF9jbWRbUFNfVE9UX0NPTlRFWFQrMV07Cit9IHJhdGRtX3BkY3BfcmVzZXRfc3RhdGlzdGljc19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc3JjX2lkOworICAgIGthbF91aW50OCBzZXJpYWxfbnVtOworICAgIGthbF91aW50OCB0b3RhbF9uc2FwaTsKKwlzaW5nbGVfbnNhcGlfcmVzZXRfY21kX3N0cnVjdCByZXNldF9jbWRbUFNfVE9UX0NPTlRFWFQrMV07CisgICAgc2luZ2xlX25zYXBpX2luZm9fc3RydWN0IHJlc2V0X3Jlc3VsdFtQU19UT1RfQ09OVEVYVCsxXTsKK30gcmF0ZG1fcGRjcF9yZXNldF9zdGF0aXN0aWNzX3JzcF9zdHJ1Y3Q7CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgcmF0ZG1fZGx2cl9kYXRhX3QgZGF0YTsKK30gcmF0ZG1fcHNfZHNjcl9kYXRhXzkzX2luZF9zdHJ1Y3Q7ICAgCisjZW5kaWYgLyogX1JBVERNX1JBQk1fU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRkbV9zaGFxX2FwaS5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGRtX3NoYXFfYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzYzg3ZAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRkbV9zaGFxX2FwaS5oCkBAIC0wLDAgKzEsNjAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICByYXRkbV9zaGFxX2FwaS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogJExvZyQKKyAqCisgKiAxMiAyMSAyMDIwIHZlbmRfbXRiX2FyaWNlbnQwMTkKKyAqIFtNT0xZMDA1MzUxMzFdIFtNUDMgRXhjbHVkZWRdW0dlbjk3XVtNVDY4ODVdW1BldHJ1c11bVE1PLVVTXVtGNExdW1NlYXR0bGVdWzNHXVtOU05dWzNHX0RQXSBEVVQgM0cgQVZHIEhUVFAgTVMvU1MgREwgd29yc2UgdGhhbiBSRUYgR1M5IGluIE1vZGVyYXRlIExvY2F0aW9uIChDTiBQaG9uZSkKKyAqCisgKiAwNyAyMiAyMDIwIHZlbmRfbXRiX21vYml2ZWlsMDI0CisgKiBbTU9MWTAwNTM1MTMxXSBbTVAzIEV4Y2x1ZGVkXVtHZW45N11bTVQ2ODg1XVtQZXRydXNdW1RNTy1VU11bRjRMXVtTZWF0dGxlXVszR11bTlNOXVszR19EUF0gRFVUIDNHIEFWRyBIVFRQIE1TL1NTIERMIHdvcnNlIHRoYW4gUkVGIEdTOSBpbiBNb2RlcmF0ZSBMb2NhdGlvbiAoQ04gUGhvbmUpCisgKiAJCisgKiAJLgorICoKKyAqIDA0IDI3IDIwMTcgeGlhb2thaS5saXUKKyAqIFtNT0xZMDAyNDQwMTNdIFtHZW45M11bVEREIDNHXSBSQVRETSBDb2RlIFNNUAorICogb2RpZnkgU01QIGZ1Y250aW9uIFNIQVFfcmxjUXVlcnlOb3JtYWxRdWV1ZUxlZnRCaXRzIGZvciBGREQgbm90IHJlYWR5IFNNUC4uCisgKgorICogMDQgMjYgMjAxNyB4aWFva2FpLmxpdQorICogW01PTFkwMDI0NDAxM10gW0dlbjkzXVtUREQgM0ddIFJBVERNIENvZGUgU01QCisgKiAuCisgKgorICogMDMgMzAgMjAxNyByYXZpdGVqLmJhbGxha3VyCisgKiBbTU9MWTAwMjM4NzE2XSBbR2VuOTNdIDZNIFJBVERNIE11bHRpcGxlIFBTIGZlYXR1cmUgc3luYworICogTS1QUyBjaGFuZ2VzIGZvciBVTU9MWUEuCisgKgorICogMTEgMTUgMjAxNiByYXZpdGVqLmJhbGxha3VyCisgKiBbTU9MWTAwMTk1MzYwXSBbM0ddW1JBVERNXVtQRENQXSAtIEdlbjkzIDNHIFJBVERNIGFuZCBQRENQIGNvZGUgbW9kaWZpY2F0aW9uIGZvciBuZXcgSFcgYW5kIE1DVSBBcmNoaQorICogRml4IGZvciAxNF82XzZhLDE0XzZfNmIgVUVTSU0uCisgKgorICogMDkgMjYgMjAxNiByYXZpdGVqLmJhbGxha3VyCisgKiBbTU9MWTAwMTk1MzYwXSBbM0ddW1JBVERNXVtQRENQXSAtIEdlbjkzIDNHIFJBVERNIGFuZCBQRENQIGNvZGUgbW9kaWZpY2F0aW9uIGZvciBuZXcgSFcgYW5kIE1DVSBBcmNoaQorICogCU1lcmdpbmcgMkcgYW5kIFdDRE1BIFJBVERNIGFuZCBQRENQIGNoYW5nZXMgZnJvbSBtZXJnZV9DQnIuCisgKgorICogMDggMDMgMjAxNiByYXZpdGVqLmJhbGxha3VyCisgKiBbTU9MWTAwMTk1MzYwXSBbM0ddW1JBVERNXVtQRENQXSAtIEdlbjkzIDNHIFJBVERNIGFuZCBQRENQIGNvZGUgbW9kaWZpY2F0aW9uIGZvciBuZXcgSFcgYW5kIE1DVSBBcmNoaQorICogM0cgUkFURE0gYW5kIFBEQ1AgY2hhbmdlcy4KKyAqCisgKiAwOSAwMSAyMDE1IGhlYWQuaHN1CisgKiBbTU9MWTAwMTM2NTUxXSBbTFIxMSBVVF0gUkFURE0gVVQgY29kZSByZWZpbmUKKyAqCisgKiAwNSAyMCAyMDE1IGhlYWQuaHN1CisgKiBbTU9MWTAwMDg5MTMxXSBbTVQ2MjkxIEdlbWluaV0gTCtXK1crVyBjb2RlIHJldmlzaW9uIGNoZWNrIGluCisgKiAJO1JBVERNL1JBQk0vUERDUC9DU1IgcGFydCBjaGVjay1pbgorICoKKyAqIDA1IDMwIDIwMTQgeXVuZ2Z1LmNoZW4KKyAqIFtNT0xZMDAwNjczMDddIFtSQVRETV1bU0hBUV0gQVBJIHJlZmluZSBmb3IgUkFCIHJlbWFwcGluZworICoKKyAqIDA1IDI5IDIwMTQgeXVuZ2Z1LmNoZW4KKyAqIFtNT0xZMDAwNjcxNzZdIFNFUlZJQ0UgUkVRVUVTVCBjaGFuZ2UgZGVzaWduCisgKgorICogMDQgMDkgMjAxNCB5dW5nZnUuY2hlbgorICogW01PTFkwMDA2MTcxMV0gW0syIE1EMl0gQ2FsbCBmb3IgQ2hlY2tpbgorICoKKyAqIDAxIDA1IDIwMTQgam9obnNvbi5saXUKKyAqIFtNT0xZMDAwNTI1MDNdIFtNVDYyOTBFMl1bU0dMVEVdWzgyTFRFdjJdIFtUK0ddICBBZnRlciBhIHdoaWxlLCBDYW4ndCBwaW5nIG9uIHRoZSAzRyBhZnRlciBQUyBzd2l0Y2ggYmFjayB0byAzRworICogLgorICoKKyAqIDA5IDI2IDIwMTMgeXVuZ2Z1LmNoZW4KKyAqIFtNT0xZMDAwMzg4NzddIHJlbW92ZSBNQVhfRVhUX1BEUF9DT05URVhUL01BWF9JTlRfUERQX0NPTlRFWFQgdXNhZ2Ugb2YgUkFURE0gY29kZQorICogCS4KKyAqCisgKiAwOSAxMiAyMDEzIGFuZHJldy53dQorICogW01PTFkwMDAzNzU4MF0gW1JBVERNL1BEQ1BdX19ORElTX1NVUFBPUlRfXyByZWxhdGVkIGNvZGUgcmVtb3ZhbAorICogX19ORElTX1NVUFBPUlRfXyByZWxhdGVkIGNvZGUgcmVtb3ZhbAorICoKKyAqIDA0IDI0IDIwMTMgam9obnNvbi5saXUKKyAqIFtNT0xZMDAwMjA2NTNdIFtURERdW1JBVERNXVtQRENQXVVUIENvZGUgSW50ZWdyYXRpb24gYW5kIFZDIEJ1aWxkIFdhcm5pbmcgUmVtb3ZlCisgKiAuCisgKgorICogMDEgMjMgMjAxMyBhbmRyZXcud3UKKyAqIFtNT0xZMDAwMDQyNDBdIFtSQUJNL1BEQ1BdTFRFIG11bHRpbW9kZSBtb2RpZmljYXRpb24KKyAqIEludGVncmF0aW9uIGNoYW5nZS4KKyAqCisgKiAxMiAwNyAyMDEyIGFuZHJldy53dQorICogW01PTFkwMDAwNzA5OF0gTE9DQUxfUEFSQV9IRFIvUEVFUl9CVUZfSERSIG1vZGlmaWNhdGlvbgorICogTE9DQUxfUEFSQV9IRFIvUEVFUl9CVUZfSERSIG1vZGlmaWNhdGlvbgorICoKKyAqIDEwIDAxIDIwMTIgYW5kcmV3Lnd1CisgKiBbTU9MWTAwMDA0MjM2XSBbaW50ZXJmYWNlXVtzZXJ2aWNlXVtrYWxdcmVtb3ZlIHN0YWNrX2x0bGNvbS5oCisgKgorICogUmVtb3ZlIHN0YWNrX2x0bGNvbS5oCisgKgorICogMDggMjIgMjAxMiBhbmRyZXcud3UKKyAqIFtNT0xZMDAwMDIzMTldIFtNU0JCXSBSZW1vdmUgSW52YWxpZCBJbnRlci1DYXRlZ29yeSBJbmNsdWRpbmcuCisgKiBtb2RlbSByZWxhdGVkIG9wdGlvbiBtb3ZlIHRvIG1vZGVtIGludGVybmFsCisgKgorICogMDggMDcgMjAxMiBhbmRyZXcud3UKKyAqIFtNT0xZMDAwMDE1ODhdIFtNVDY1NzVfQURBUFRdW0xURS1CVFItMS03MzAyXSBCYWQgYXVkaW8gcXVhbGlsdHkgaW4gMTIuMkticHMgVXBsaW5rCisgKiBbdWFzXVVSTEMgVE0gcXVldWUgc3dpdGNoYWJsZSBtb2RpZmljYXRpb24KKyAqCisgKiAwNyAwNSAyMDEyIGpsLmhzaWFvCisgKiBbTU9MWTAwMDAwMjg4XSBbUkFURE1dIFJlbW92YWwgb2Yga2FsX2ludGVybmFsX2FwaS5oCisgKiAuCisgKgorICogMDYgMjAgMjAxMiBjYXJsc29uLmxpbgorICogcmVtb3ZlZCEKKyAqIDxzYXZlZCBieSBQZXJmb3JjZT4KKyAqCisgKiAwNiAyMCAyMDEyIGNhcmxzb24ubGluCisgKiByZW1vdmVkIQorICogPHNhdmVkIGJ5IFBlcmZvcmNlPgorICoKKyAqIDA2IDE5IDIwMTIgY2FybHNvbi5saW4KKyAqIHJlbW92ZWQhCisgKiBkZWNpZGUgbm90IHRvIHVzZSBtdXRleCwgZGVjaWRlIHRvIHVzZSBsb2NrIElSUSB0byByZXBsYWNlIGNoYW5nZV9wcmlvcml0eQorICoKKyAqCisgKiAwNiAxMSAyMDEyIGNhcmxzb24ubGluCisgKiByZW1vdmVkIQorICogPHNhdmVkIGJ5IFBlcmZvcmNlPgorICoKKyAqIDA0IDI0IDIwMTIgd2NwdXNlcl9pbnRlZ3JhdG9yCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDAzIDE2IDIwMTIgY2FybHNvbi5saW4KKyAqIHJlbW92ZWQhCisgKiA8c2F2ZWQgYnkgUGVyZm9yY2U+CisgKgorICogMDIgMDEgMjAxMiBjYXJsc29uLmxpbgorICogcmVtb3ZlZCEKKyAqIDxzYXZlZCBieSBQZXJmb3JjZT4KKyAqCisgKiAwMSAxMyAyMDEyIGNhcmxzb24ubGluCisgKiByZW1vdmVkIQorICogPHNhdmVkIGJ5IFBlcmZvcmNlPgorICoKKyAqIDAxIDExIDIwMTIgY2FybHNvbi5saW4KKyAqIHJlbW92ZWQhCisgKiA8c2F2ZWQgYnkgUGVyZm9yY2U+CisgKgorICogMDggMTIgMjAxMSBjYXJsc29uLmxpbgorICogcmVtb3ZlZCEKKyAqIDxzYXZlZCBieSBQZXJmb3JjZT4KKyAqCisgKiAwNCAyNSAyMDExIGNhcmxzb24ubGluCisgKiByZW1vdmVkIQorICogPHNhdmVkIGJ5IFBlcmZvcmNlPgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfUkFURE1fU0hBUV9BUElfSAorI2RlZmluZSBfUkFURE1fU0hBUV9BUElfSAorCisjaW5jbHVkZSAicmF0ZG1fc2hhcV9hcHBsaWNhdGlvbl9hcGkuaCIKKworI2lmZGVmIF9fUkFURE1fVUxfU0hBUV9fCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX2dwcnNfc3RydWN0LmgiCisjaW5jbHVkZSAibDNfaW5jX2xvY2FsLmgiCisjaW5jbHVkZSAibW1pX2wzX2VudW1zLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJwc19yYXRkbV9zdHJ1Y3QuaCIKKyNpbmNsdWRlICJnbG9iYWxfZGVmLmgiCisjaW5jbHVkZSAiZmxjMl9lbnRfZnVuY3Rpb25zLmgiCisjaW5jbHVkZSAibDNfaW5jX2VudW1zLmgiCisjaW5jbHVkZSAibWNkX2wzX2luY19zdHJ1Y3QuaCIKKworI2lmZGVmIF9fR0VNSU5JX18KKyNpbmNsdWRlICJzaW1fY29tbW9uX2VudW1zLmgiCisjZW5kaWYKKworI2lmZGVmIF9fRElBTFVQX0dQUlNfQ09VTlRFUl9TVVBQT1JUX18KKyNpbmNsdWRlICJsNGNfcmF0ZG1fc3RydWN0LmgiCisjZW5kaWYKKworI2lmZGVmIF9fVU1UU19SQVRfXworI2luY2x1ZGUgInVhc19jb21tb25fZW51bXMuaCIKKyNlbmRpZgorCisvKiBNQUNSTyBERUZJTklUSU9OICovCisjaWZuZGVmIF9fVU1UU19SQVRfXworI2RlZmluZSBMQVNUX0VYVEVOREVEX1JCX0lEICgzMikgIC8vcmVmZXIgdG8gdWFzX2NvbW1vbl9lbnVtcy5oCisjZW5kaWYgLy8gfiAjaWZuZGVmIF9fVU1UU19SQVRfXworCisvLyNkZWZpbmUgX19TSEFRX01JTklNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fIC8vIGNhbiBiZSB0dXJuIG9mZgorLy8jZGVmaW5lIF9fU0hBUV9NQVhJTVVNX0xFVkVMX0dVQVJEX1BBVFRFUk5fQ0hFQ0tfXyAvLyBjYW4gYmUgdHVybiBvZmYKKworI2lmIGRlZmluZWQgKF9fU0hBUV9NQVhJTVVNX0xFVkVMX0dVQVJEX1BBVFRFUk5fQ0hFQ0tfXykgfHwgZGVmaW5lZCAoX19TSEFRX01JTklNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fKQorI2RlZmluZSBfX1NIQVFfR1VBUkRfUEFUVEVSTl9DSEVDS19fCisjZW5kaWYgLy8gfiAjaWYgZGVmaW5lZCAoX19TSEFRX01BWElNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fKSB8fCBkZWZpbmVkIChfX1NIQVFfTUlOSU1VTV9MRVZFTF9HVUFSRF9QQVRURVJOX0NIRUNLX18pCisKKyNkZWZpbmUgU0hBUV8zMkJJVF9HVUFSRF9QQVRURVJOICgweDdEN0U3RDdFKQorI2RlZmluZSBTSEFRXzE2QklUX0dVQVJEX1BBVFRFUk4gKDB4N0Q3RSkKKyNkZWZpbmUgU0hBUV84QklUX0dVQVJEX1BBVFRFUk4gKDB4N0QpCisjZGVmaW5lIFNIQVFfUkVBU09OQUJMRV9NQVhJTVVNX1NEVV9TSVpFIE1BWF9WQUwoKE1BWF9MMl9FWFRFUk5BTF9TRFVfU0laRSksIDE1MjApCisKKy8qCisgICAgMyB3YXlzIHRvIHByb3Rlc3QgdGhlIHF1ZXVlCisgICAgICAgIDEuIGxvY2sgaW50ZXJydXB0CisgICAgICAgICBrYWxfdWludDMyIHNhdmVkSVJRTWFzazsKKyAgICAgICAgIHNhdmVkSVJRTWFzayA9IFNhdmVBbmRTZXRJUlFNYXNrKCk7CisgICAgICAgICBSZXN0b3JlSVJRTWFzayhzYXZlZElSUU1hc2spOworICAgICAgICAyLiBEaXNhYmxlIHNjaGVkdWxlcgorICAgICAgICAzLiBjaGFuZ2UgcHJpb3JpdHkgdG8gZXF1YWwgdG8gVUwyIHRhc2sKKyovCisjZGVmaW5lIE1fU0hBUV9JTl9DUklUSUNBTF9aT05FKHRhc2tpZCxvcmlnX3ByaW8pCisjZGVmaW5lIE1fU0hBUV9PVVRfQ1JJVElDQUxfWk9ORSh0YXNraWQsb3JpZ19wcmkpCisKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAvLyB+ICNpZiAwCisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLy8gfiAjaWYgMAorCisjZGVmaW5lIE1fU0hBUV9JTl9DUklUSUNBTF9aT05FX1VTSU5HX0xPQ0tfSVJRKCkKKyNkZWZpbmUgTV9TSEFRX09VVF9DUklUSUNBTF9aT05FX1VTSU5HX0xPQ0tfSVJRKCkKKworI2RlZmluZSBNX1NIQVFfTE9HR0VSKHApCisvLyBUT0RPOiBpbXBsZW1lbnQKKyNkZWZpbmUgTV9TSEFRX1BSSU5UKFgpCisvLyBUT0RPOiBpbXBsZW1lbnQKKyNkZWZpbmUgTV9TSEFRX1NBUCBOVUxMCisvLyBUT0RPOiBpbXBsZW1lbnQ/CisKKyNkZWZpbmUgTUFYX0NTX1RNX1FfTlVNICgzKQorI2RlZmluZSBNQVhfQ1NfVU1fUV9OVU0gKDEpCisKKyNkZWZpbmUgTV9TSEFRX0FTU0VSVChYKSBBU1NFUlQoWCkKKyNkZWZpbmUgTV9TSEFRX0RFQlVHX0FTU0VSVChYKSBBU1NFUlQoWCkgLy8gVE9ETzogdGhpcyBjb25maWd1cmF0aW9uIGNhbiBiZSB0dXJuZWQgb2ZmCisjZGVmaW5lIE1fU0hBUV9NQVhfUV9TSVpFICgoUFNfVE9UX05TQVBJX05VTSkrKChNQVhfQ1NfVE1fUV9OVU0pKyhNQVhfQ1NfVU1fUV9OVU0pKSsoMSkpCisjZGVmaW5lIE1fU0hBUV9NSU5JTVVNX0NPTlRFWFRfSUQgKDEpCisjZGVmaW5lIE1fU0hBUV9NQVhJTVVNX0NPTlRFWFRfSUQgKChQU19UT1RfTlNBUElfTlVNKSsoKE1BWF9DU19UTV9RX05VTSkrKE1BWF9DU19VTV9RX05VTSkpKQorCisjZGVmaW5lIE1fTUlOX1BTX1NIQVFfTlVNQkVSIChNX1NIQVFfTUlOSU1VTV9DT05URVhUX0lEKQorI2RlZmluZSBNX01BWF9QU19TSEFRX05VTUJFUiAoUFNfVE9UX05TQVBJX05VTSkKKyNkZWZpbmUgTV9NSU5fQ1NfU0hBUV9OVU1CRVIgKChNX01BWF9QU19TSEFRX05VTUJFUikrKDEpKQorI2RlZmluZSBNX01BWF9DU19TSEFRX05VTUJFUiAoTV9TSEFRX01BWElNVU1fQ09OVEVYVF9JRCkKKworI2RlZmluZSBNX01JTl9QU19DT05URVhUX0lEIChNX01JTl9QU19TSEFRX05VTUJFUikKKyNkZWZpbmUgTV9NQVhfUFNfQ09OVEVYVF9JRCAoTV9NQVhfUFNfU0hBUV9OVU1CRVIpCisjZGVmaW5lIE1fTUlOX0NTX0NPTlRFWFRfSUQgKE1fTUlOX0NTX1NIQVFfTlVNQkVSKQorI2RlZmluZSBNX01BWF9DU19DT05URVhUX0lEIChNX01BWF9DU19TSEFRX05VTUJFUikKKworI2RlZmluZSBNX1NIQVFfQ1NfVE1fUV9OVU1fMSAoTV9NSU5fQ1NfQ09OVEVYVF9JRCkKKyNkZWZpbmUgTV9TSEFRX0NTX1RNX1FfTlVNXzIgKChNX01JTl9DU19DT05URVhUX0lEKSsoMSkpCisjZGVmaW5lIE1fU0hBUV9DU19UTV9RX05VTV8zICgoTV9NSU5fQ1NfQ09OVEVYVF9JRCkrKDIpKQorI2RlZmluZSBNX1NIQVFfQ1NfVU1fUV9OVU0gKE1fTUFYX0NTX0NPTlRFWFRfSUQpCisKKyNkZWZpbmUgTV9TSEFRX01BWF9OVU0gKE1BWF9TSU1fTlVNKQorI2RlZmluZSBHRVRfU0hBUV9JRFgoc2ltKSAoKHNpbSA+PSBNX1NIQVFfTUFYX05VTSk/MDpzaW0pCisKKyNkZWZpbmUgTV9TSEFRX01BWF9OU0FQSSAoMTUpCisjZGVmaW5lIE1fU0hBUV9TT0NLRVRfTlNBUElfQVJSQVlfU0laRSAoKE1fU0hBUV9NQVhfTlNBUEkpKygoTUFYX0NTX1RNX1FfTlVNKSsoTUFYX0NTX1VNX1FfTlVNKSkrKDEpKQorI2RlZmluZSBNX1NIQVFfU09DS0VUX0NJRF9BUlJBWV9TSVpFICgoTV9TSEFRX01BWElNVU1fQ09OVEVYVF9JRCkrKDEpKQorI2RlZmluZSBNX1NIQVFfU09DS0VUX1JCSURfQVJSQVlfU0laRSAoKExBU1RfRVhURU5ERURfUkJfSUQpKygxKSkKKworI2RlZmluZSBNX1NIQVFfRklORF9RX1VTSU5HX0NJRChxUHRyLCBjaWQsIHNoYXFfaWR4KSBxUHRyID0gJihSQVRETV9TSEFRW3NoYXFfaWR4XVtjaWRdKTsKKworI2RlZmluZSBNX1NIQVFfUFJJTlRfU0hBUV9DT05URU5UKGFwX1F1ZXVlKSBTSEFRX2ludF9wcmludF9xdWV1ZShhcF9RdWV1ZSkKKyNkZWZpbmUgTV9TSEFRX1JFQ09SRF9TSEFRX0lNUE9SVEFOVF9DT05URU5UKGFwX1F1ZXVlKSBTSEFRX2ludF9yZWNvcmRfaW1wb3J0YW50X3F1ZXVlKGFwX1F1ZXVlKQorI2RlZmluZSBNX1NIQVFfUFJJTlRfU0hBUV9JTVBPUlRBTlRfQ09OVEVOVChhcF9RdWV1ZSxxdWV1ZV9pZHgsY2lkX2Zvcl9sb2dnaW5nKSBTSEFRX2ludF9wcmludF9pbXBvcnRhbnRfcXVldWUoYXBfUXVldWUscXVldWVfaWR4LGNpZF9mb3JfbG9nZ2luZykKKyNpZiBkZWZpbmVkIChfX1NIQVFfTUFYSU1VTV9MRVZFTF9HVUFSRF9QQVRURVJOX0NIRUNLX18pIHx8IGRlZmluZWQgKF9fU0hBUV9NSU5JTVVNX0xFVkVMX0dVQVJEX1BBVFRFUk5fQ0hFQ0tfXykKKyNkZWZpbmUgTV9TSEFRX0lOSVRfUV9HVUFSRF9QQVRURVJOKGFwX1F1ZXVlKSBTSEFRX2ludF9pbml0X3FfZ3VhcmRfcGF0dGVybihhcF9RdWV1ZSkKKyNkZWZpbmUgTV9TSEFRX0NIRUNLX1FfR1VBUkRfUEFUVEVSTihhcF9RdWV1ZSkgU0hBUV9pbnRfY2hlY2tfcV9ndWFyZF9wYXR0ZXJuKGFwX1F1ZXVlKQorI2RlZmluZSBNX1NIQVFfSU5JVF9TT0NLRVRfR1VBUkRfUEFUVEVSTigpIFNIQVFfaW50X2luaXRfc29ja2V0X2d1YXJkX3BhdHRlcm4oKQorI2RlZmluZSBNX1NIQVFfQ0hFQ0tfU09DS0VUX0dVQVJEX1BBVFRFUk4oc2ltX2ludGVyZmFjZSkgU0hBUV9pbnRfY2hlY2tfc29ja2V0X2d1YXJkX3BhdHRlcm4oc2ltX2ludGVyZmFjZSkKKyNkZWZpbmUgTV9TSEFRX0RPVUJMRV9DSEVDS19RVUVVRV9FTEVNRU5UX05VTUJFUlNfQ09OU0lTVEVOQ1koYXBfUXVldWUpIFNIQVFfaW50X2RvdWJsZV9jaGVja19xdWV1ZV9lbGVtZW50X251bWJlcnNfY29uc2lzdGVuY3koYXBfUXVldWUpCisjZWxzZQorI2RlZmluZSBNX1NIQVFfSU5JVF9RX0dVQVJEX1BBVFRFUk4oYXBfUXVldWUpCisjZGVmaW5lIE1fU0hBUV9DSEVDS19RX0dVQVJEX1BBVFRFUk4oYXBfUXVldWUpCisjZGVmaW5lIE1fU0hBUV9JTklUX1NPQ0tFVF9HVUFSRF9QQVRURVJOKCkKKyNkZWZpbmUgTV9TSEFRX0NIRUNLX1NPQ0tFVF9HVUFSRF9QQVRURVJOKHNpbV9pbnRlcmZhY2UpCisjZGVmaW5lIE1fU0hBUV9ET1VCTEVfQ0hFQ0tfUVVFVUVfRUxFTUVOVF9OVU1CRVJTX0NPTlNJU1RFTkNZKGFwX1F1ZXVlKQorI2VuZGlmIC8vIH4gI2lmIGRlZmluZWQgKF9fU0hBUV9NQVhJTVVNX0xFVkVMX0dVQVJEX1BBVFRFUk5fQ0hFQ0tfXykgfHwgZGVmaW5lZCAoX19TSEFRX01JTklNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fKQorCisjZGVmaW5lIFNIQVFfcHNQcm9jZXNzT25lQ1RyYWNrUGt0KFgsWSkKKworI2lmZGVmIF9fUkFURE1fVVRfXworLyojZGVmaW5lIFJBVERNX1NIQVFfQ0FMTF9GTENfRlJFRShYLFkpIGthbF9icmllZl90cmFjZShUUkFDRV9HUk9VUF8xLCBSQVRETV9TSEFRX0ZBS0VfRkxDX0ZSRUVfSU5fVVQsIFgsIFkpKi8KKyNlbHNlIC8vICNpZmRlZiBfX1JBVERNX1VUX18KKy8qI2RlZmluZSBSQVRETV9TSEFRX0NBTExfRkxDX0ZSRUUoWCxZKSBmbGMyX2ZyZWVfcGVlcl9idWZmKFgsWSkqLworI2VuZGlmIC8vIH4gI2lmZGVmIF9fUkFURE1fVVRfXworCisjaWZkZWYgX19NVEtfVEFSR0VUX18KKyNkZWZpbmUgUkFURE1fR0VUX0JJVFMoX3VjLCBfcywgX3cpIEdFVF9CSVRTKF91YywgX3MsIF93KQorI2Vsc2UKKyNkZWZpbmUgUkFURE1fR0VUX0JJVFMoX3VjLCBfcywgX3cpIGdldF9iaXRzKF91YywgX3MsIF93KQorI2VuZGlmCisKKy8qCisjZGVmaW5lIE1fU0hBUV9FTE1UX0hFQURFUiBcCisJICAgIFBFRVJfQlVGRl9IRFIgXAorICAgICAgICAgICAgU0hBUV9xRWxtdEhlYWRlciogbmV4dF9zaGFxRWxtdDsKKyovCisKKy8qIG1lbW9yeSBmcmVlIGZ1bmN0aW9uICovCit0eXBlZGVmIHZvaWQgKCpwU2hhcUZ1bmNGcmVlKSAoa2FsX3VpbnQ4Kik7CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKworI2lmZGVmIF9fVU1UU19SQVRfXworLyogZm9yIENTIG9ubHkgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyogRG9udCB0b3VjaCB0aGlzIHBhcnQgKi8KKyAgICAvL01fU0hBUV9FTE1UX0hFQURFUgorICAgIFBFRVJfQlVGRl9IRFIKKyAgICBzdHJ1Y3QgU0hBUV9xRWxtdEhlYWRlciAqbmV4dF9zaGFxRWxtdDsKKworICAgIC8qIEhhbmRzIG9mZiBwbGVhc2UgKi8KKworICAgIGthbF91aW50MTYgICAgICBiaXRMZW5ndGg7CisgICAga2FsX3VpbnQxNiAgICAgIGZyYW1lX2luZGV4OworCisgICAgRXh0ZW5kZWRSYklkICAgIFJCSWQ7CisgICAga2FsX2Jvb2wgICAgICAgIHF1ZXVlZF9lbmFibGVkOworICAgIGthbF91aW50MTYgICAgICBkdW1teTsKKworfSBTSEFRX2Nzcl9kYXRhX3JlcV9zdHJ1Y3Q7CisjZW5kaWYgLy9+I2lmZGVmIF9fVU1UU19SQVRfXworCit0eXBlZGVmIHN0cnVjdAoreworICAgICNpZmRlZiBfX1NIQVFfTUlOSU1VTV9MRVZFTF9HVUFSRF9QQVRURVJOX0NIRUNLX18KKyAgICAgICAga2FsX3VpbnQzMiAgICAgICAgc2hhcmVRTWluTHZsR3VhcmRQYXR0ZXJuMTsKKyAgICAjZW5kaWYgLy8gfiAjaWZkZWYgX19TSEFRX01JTklNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fCisKKyAgICAvKiBNYWluIFF1ZXVlICovCisgICAga2FsX3VpbnQzMiAgICAgICAgbV9xQ291bnQ7CisgICAga2FsX3VpbnQzMiAgICAgICAgbV9xRGF0YVF1YW50aXR5OyAvKiBJbiBCSVRzICovCisgICAgI2lmZGVmIF9fU0hBUV9NQVhJTVVNX0xFVkVMX0dVQVJEX1BBVFRFUk5fQ0hFQ0tfXworICAgICAgICBrYWxfdWludDMyICAgICAgICBzaGFyZVFNYXhMdmxHdWFyZFBhdHRlcm4xOworICAgICNlbmRpZiAvLyB+ICNpZmRlZiBfX1NIQVFfTUFYSU1VTV9MRVZFTF9HVUFSRF9QQVRURVJOX0NIRUNLX18KKyAgICBzdHJ1Y3QgU0hBUV9xRWxtdEhlYWRlciAqbXBfdGFpbDsKKyAgICAjaWZkZWYgX19TSEFRX01BWElNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fCisgICAgICAgIGthbF91aW50MzIgICAgICAgIHNoYXJlUU1heEx2bEd1YXJkUGF0dGVybjI7CisgICAgI2VuZGlmIC8vIH4gI2lmZGVmIF9fU0hBUV9NQVhJTVVNX0xFVkVMX0dVQVJEX1BBVFRFUk5fQ0hFQ0tfXworICAgIHN0cnVjdCBTSEFRX3FFbG10SGVhZGVyICBtX3NlbnRpbmVsOworICAgICNpZmRlZiBfX1NIQVFfTUFYSU1VTV9MRVZFTF9HVUFSRF9QQVRURVJOX0NIRUNLX18KKyAgICAgICAga2FsX3VpbnQzMiAgICAgICAgc2hhcmVRTWF4THZsR3VhcmRQYXR0ZXJuMzsKKyAgICAjZW5kaWYgLy8gfiAjaWZkZWYgX19TSEFRX01BWElNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fCisKK30gU0hBUV9saW5rTGlzdFFFbnRpdHk7CisKKyNpZmRlZiBfX1JBVERNX1NIQVFfSEFTX1BSSU9SSVRZX1FVRVVFX18KK3R5cGVkZWYgZW51bQoreworICAgIFNIQVFfUFJJT1JJVFlfUVVFVUUsCisgICAgU0hBUV9OT1JNQUxfUVVFVUUsCisgICAgU0hBUV9OVU1CRVJfT0ZfTElOS0VEX0xJU1RfUVVFVUVfRk9SX0FfUkIKK30gU0hBUV9MTFFVRVVFX0lEWDsKKyNlbHNlIC8vICNpZmRlZiBfX1JBVERNX1NIQVFfSEFTX1BSSU9SSVRZX1FVRVVFX18KK3R5cGVkZWYgZW51bQoreworICAgIFNIQVFfTk9STUFMX1FVRVVFLAorICAgIFNIQVFfUFJJT1JJVFlfUVVFVUUgPSBTSEFRX05PUk1BTF9RVUVVRSwKKyAgICBTSEFRX05VTUJFUl9PRl9MSU5LRURfTElTVF9RVUVVRV9GT1JfQV9SQgorfSBTSEFRX0xMUVVFVUVfSURYOworI2VuZGlmIC8vIH4gI2lmZGVmIF9fUkFURE1fU0hBUV9IQVNfUFJJT1JJVFlfUVVFVUVfXworCit0eXBlZGVmIHN0cnVjdAoreworICAgIFNIQVFfbGlua0xpc3RRRW50aXR5IGxsX3F1ZXVlW1NIQVFfTlVNQkVSX09GX0xJTktFRF9MSVNUX1FVRVVFX0ZPUl9BX1JCXTsKKyAgICBwU2hhcUZ1bmNGcmVlIG1wZl9mcmVlOyAgICAgLyogZnJlZSBmdW5jdGlvbiAqLworICAgICAgICAjaWZkZWYgX19TSEFRX01BWElNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fCisgICAgICAgIGthbF91aW50MzIgICAgICAgIHNoYXJlUU1heEx2bEd1YXJkUGF0dGVybjQ7CisgICAgICAgICNlbmRpZiAvLyB+ICNpZmRlZiBfX1NIQVFfTUFYSU1VTV9MRVZFTF9HVUFSRF9QQVRURVJOX0NIRUNLX18KKworICAgIC8va2FsX3VpbnQxNiAgbV9jVHJhY2tDb3VudDsgIC8qIHRoZSBjb3VudCBvZiBjdXJyZW50IGNUcmFjayBkYXRhIChpbmM6IFBQUCkgKGRlYzogUERDUCkgKi8KKyAgICAvLyAgICAjaWZkZWYgX19TSEFRX01BWElNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fCisgICAgLy8gICAga2FsX3VpbnQxNiAgICAgICAgc2hhcmVRTWF4THZsR3VhcmRQYXR0ZXJuNTsKKyAgICAvLyAgICAjZW5kaWYgLy8gfiAjaWZkZWYgX19TSEFRX01BWElNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fCisKKyAgICBrYWxfYm9vbCAgICBtX2lzU2hhcUluaXRpYXRlZDsgIC8qIFVzZWQgdG8gaWRlbnRpZnkgaWYgUSBpcyByZWFkeSwgZm9yIFJMQyB0byBrbm93IGlmIGl0IG5lZWQgdG8gY2hlY2sgdGhpcyBRIG9yIG5vdCAqLworCisgICAgICAgICNpZmRlZiBfX1NIQVFfTUlOSU1VTV9MRVZFTF9HVUFSRF9QQVRURVJOX0NIRUNLX18KKyAgICAgICAga2FsX3VpbnQ4ICAgICAgICBzaGFyZVFNaW5MdmxHdWFyZFBhdHRlcm4yOworICAgICAgICAjZW5kaWYgLy8gfiAjaWZkZWYgX19TSEFRX01JTklNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fCisKK30gU0hBUV9xRW50aXR5OworCit0eXBlZGVmIHN0cnVjdCByYl9uc2FwaV9jaWRfbWFwcGluZ19hcnJheXNfc3RydWN0Cit7CisgICAgICAgICNpZmRlZiBfX1NIQVFfTUlOSU1VTV9MRVZFTF9HVUFSRF9QQVRURVJOX0NIRUNLX18KKyAgICAgICAga2FsX3VpbnQ4ICAgICAgICBzb2NrZXRNaW5MdmxHdWFyZFBhdHRlcm4xMTsKKyAgICAgICAgI2VuZGlmIC8vIH4gI2lmZGVmIF9fU0hBUV9NSU5JTVVNX0xFVkVMX0dVQVJEX1BBVFRFUk5fQ0hFQ0tfXworICAgIGthbF91aW50OCBDSURfbnNhcGlfbWFwW01fU0hBUV9TT0NLRVRfQ0lEX0FSUkFZX1NJWkVdOworICAgICAgICAjaWZkZWYgX19TSEFRX01JTklNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fCisgICAgICAgIGthbF91aW50OCAgICAgICAgc29ja2V0TWluTHZsR3VhcmRQYXR0ZXJuMTI7CisgICAgICAgICNlbmRpZiAvLyB+ICNpZmRlZiBfX1NIQVFfTUlOSU1VTV9MRVZFTF9HVUFSRF9QQVRURVJOX0NIRUNLX18KKyAgICBrYWxfdWludDggbnNhcGlfQ0lEX21hcFtNX1NIQVFfU09DS0VUX05TQVBJX0FSUkFZX1NJWkVdOworICAgICAgICAjaWZkZWYgX19TSEFRX01JTklNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fCisgICAgICAgIGthbF91aW50OCAgICAgICAgc29ja2V0TWluTHZsR3VhcmRQYXR0ZXJuMTM7CisgICAgICAgICNlbmRpZiAvLyB+ICNpZmRlZiBfX1NIQVFfTUlOSU1VTV9MRVZFTF9HVUFSRF9QQVRURVJOX0NIRUNLX18KKyAgICBrYWxfdWludDggUkJJZF9uc2FwaV9tYXBbTV9TSEFRX1NPQ0tFVF9SQklEX0FSUkFZX1NJWkVdOworICAgICAgICAjaWZkZWYgX19TSEFRX01JTklNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fCisgICAgICAgIGthbF91aW50OCAgICAgICAgc29ja2V0TWluTHZsR3VhcmRQYXR0ZXJuMTQ7CisgICAgICAgICNlbmRpZiAvLyB+ICNpZmRlZiBfX1NIQVFfTUlOSU1VTV9MRVZFTF9HVUFSRF9QQVRURVJOX0NIRUNLX18KKyAgICBrYWxfdWludDggbnNhcGlfUkJJZF9tYXBbTV9TSEFRX1NPQ0tFVF9OU0FQSV9BUlJBWV9TSVpFXTsKKyAgICAgICAgI2lmZGVmIF9fU0hBUV9NSU5JTVVNX0xFVkVMX0dVQVJEX1BBVFRFUk5fQ0hFQ0tfXworICAgICAgICBrYWxfdWludDggICAgICAgIHNvY2tldE1pbkx2bEd1YXJkUGF0dGVybjE1OworICAgICAgICAjZW5kaWYgLy8gfiAjaWZkZWYgX19TSEFRX01JTklNVU1fTEVWRUxfR1VBUkRfUEFUVEVSTl9DSEVDS19fCisgICAga2FsX2Jvb2wgUkJJZF9hbHJlYWR5X29jY3VwaWVkX2J5X2xibVtNX1NIQVFfU09DS0VUX1JCSURfQVJSQVlfU0laRV07IC8vIHRoaXMgaXMgdG8gcmVtZW1iZXIgaWYgY2VydGFpbiBSQiBpcyBvY2N1cGllZCBieSBMQk0KKyAgICBrYWxfdWludDggUkJJZF9SYWJJZF9sYm1bTV9TSEFRX1NPQ0tFVF9SQklEX0FSUkFZX1NJWkVdOyAvL3VzZWQgZm9yIGdldHRpbmcgdGhlIFNJVCBpbmRleAorI2lmZGVmIF9fTVRLX1RBUkdFVF9fCisgICAga2FsX2Jvb2wgbnNhcGlfUkJJZF9wbG1uX21hcFtNX1NIQVFfU09DS0VUX05TQVBJX0FSUkFZX1NJWkVdOworI2VuZGlmCit9IHJiX25zYXBpX2NpZF9tYXBwaW5nX2FycmF5c19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHJhdGRtX3NoYXFfdHJhY2VfZGF0YV9mb3JfYV9sbHF7CisgICAga2FsX3VpbnQzMiAgICAgICAgbV9xQ291bnQ7CisgICAga2FsX3VpbnQzMiAgICAgICAgbV9xRGF0YVF1YW50aXR5OyAvKiBJbiBCSVRzICovCit9IHJhdGRtX3NoYXFfdHJhY2VfZGF0YV9mb3JfYV9sbHE7CisKK3R5cGVkZWYgc3RydWN0IHJhdGRtX3NoYXFfdHJhY2VfZGF0YV90ZW1wX2J1ZmZlcnsKKyAgICBTSEFRX3FFbnRpdHkgKmFwX1F1ZXVlOworICAgIFNIQVFfcUVsbXRIZWFkZXIgKmFwX3FFbG10OworICAgIHJhdGRtX3NoYXFfdHJhY2VfZGF0YV9mb3JfYV9sbHEgbGxxX3RyYWNlX2luZm9bU0hBUV9OVU1CRVJfT0ZfTElOS0VEX0xJU1RfUVVFVUVfRk9SX0FfUkJdOworICAgIGthbF91aW50MTYgaXBfaWQ7CisgICAgU0hBUV9MTFFVRVVFX0lEWCBxdWV1ZV9pZHg7Cit9IHJhdGRtX3NoYXFfdHJhY2VfZGF0YV90ZW1wX2J1ZmZlcjsKKwordHlwZWRlZiBzdHJ1Y3QgcmF0ZG1fc2hhcV9wcmludF9wc19xX2VsZW1lbnRfc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIHJhdGRtX3BzX2RhdGFfcmVxX3N0cnVjdCBwc19kYXRhX3JlcTsKK30gcmF0ZG1fc2hhcV9wcmludF9wc19xX2VsZW1lbnRfc3RydWN0OworCisjaWZkZWYgX19VTVRTX1JBVF9fCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIFNIQVFfY3NyX2RhdGFfcmVxX3N0cnVjdCBjc3JfZGF0YV9yZXE7Cit9IHJhdGRtX3NoYXFfcHJpbnRfY3NfcV9lbGVtZW50X3N0cnVjdDsKKyNlbmRpZiAvLyB+ICNpZmRlZiBfX1VNVFNfUkFUX18KKworLyogU3RydWN0dXJlICovCisvLyBJUHY0IEhlYWRlcgorI2RlZmluZSBSQVRETV9JUFY0X1VQUEVSX0xBWUVSX1BST1RPQ09MX09GRlNFVCAoOSkKKyNkZWZpbmUgUkFURE1fSVBWNF9VUFBFUl9MQVlFUl9QUk9UT0NPTF9UQ1AgKDYpCisjZGVmaW5lIFJBVERNX0lQVjRfVVBQRVJfTEFZRVJfUFJPVE9DT0xfVURQICgxNykKKyNkZWZpbmUgUkFURE1fVENQX0FDS19QT1NJVElPTl9PRkZTRVQgKDEzKQorLy8gSVB2NiBIZWFkZXIKKyNkZWZpbmUgUkFURE1fSVBWNl9GSVJTVF9ORVhUX0hFQURFUl9PRkZTRVQgKDYpCisjZGVmaW5lIFJBVERNX0lQVjZfTkVYVF9IRUFERVJfVENQICg2KQorI2RlZmluZSBSQVRETV9JUFY2X05PX0VYVF9IRFJfSEVBREVSX0xFTkdUSCAoNDApCisvLyBKdWRnZSBUQ1AgQUNLCisgICNkZWZpbmUgUkVBU09OQUJMRV9UQ1BfQUNLX1BLVF9TSVpFICg2MCkKKworI2lmZGVmIF9fUkFURE1fVVRfXworI2RlZmluZSBORUVEX1RPX0JFX0NIRUNLRURfUEtUX1NJWkUgKDk5KQorI2Vsc2UgLy8gI2lmZGVmIF9fUkFURE1fVVRfXworI2RlZmluZSBORUVEX1RPX0JFX0NIRUNLRURfUEtUX1NJWkUgKChSRUFTT05BQkxFX1RDUF9BQ0tfUEtUX1NJWkUpKygxNikpIC8vIDE2IGlzIGEgUkQgZGVjaWRlZCBidWZmZXIgdmFsdWUgYW5kIGNhbiBiZSBhZGp1c3RlZCBiYXNlZCBvbiBvYnNlcnZlZCBUQ1AgQUNLIHNpemUgZGlzdHJpYnV0aW9ucworI2VuZGlmIC8vIH4gI2lmZGVmIF9fUkFURE1fVVRfXworCisjZGVmaW5lIFNIQVFfcHNGaWxsUkJJZFJBQklkTWFwcGluZyBTSEFRX3BzRmlsbFJCSWROc2FwaU1hcHBpbmcKKyNkZWZpbmUgU0hBUV9wc0VyYXNlUkJJZFJBQklkTWFwcGluZyBTSEFRX3BzRXJhc2VSQklkTnNhcGlNYXBwaW5nCisKKyNpZmRlZiBfX1VNVFNfUkFUX18KKyNpZmRlZiBVTklUX1RFU1QKKyNkZWZpbmUgU0hBUV9STENfVVRfQ3JlYXRlUkIgU0hBUV9MQk1fQ3JlYXRlUkIKKyNkZWZpbmUgU0hBUV9STENfVVRfUmVsZWFzZVJCIFNIQVFfTEJNX1JlbGVhc2VSQgorI2VuZGlmCisjZW5kaWYgLy8gfiAjaWZkZWYgX19VTVRTX1JBVF9fCisKKyNkZWZpbmUgU0hBUV9kZXF1ZXVlX25vcm1hbF9xdWV1ZShSQiwgTEVGVF9CSVRTLCBzaW1faW50ZXJmYWNlKSBTSEFRX2RlcXVldWVfZGlmZl9wcmlvcml0eV9xdWV1ZShSQiwgTEVGVF9CSVRTLCBTSEFRX05PUk1BTF9RVUVVRSwgc2ltX2ludGVyZmFjZSkKKworI2lmZGVmIF9fUkFURE1fU0hBUV9IQVNfUFJJT1JJVFlfUVVFVUVfXworI2RlZmluZSBTSEFRX2RlcXVldWVfcHJpb3JpdHlfcXVldWUoUkIsIExFRlRfQklUUywgc2ltX2ludGVyZmFjZSkgU0hBUV9kZXF1ZXVlX2RpZmZfcHJpb3JpdHlfcXVldWUoUkIsIExFRlRfQklUUywgU0hBUV9QUklPUklUWV9RVUVVRSwgc2ltX2ludGVyZmFjZSkKKyNlbmRpZgorCisjaWZkZWYgVU5JVF9URVNUCisjZGVmaW5lIFNIQVFfcGRjcF91dF9jaGVja19xdWV1ZV9jb250ZXh0KFJCSWQsIHV0X21vZHVsZSwgc2ltX2ludGVyZmFjZSkgU0hBUV9wZGNwX3V0X2NoZWNrX3F1ZXVlX2NvbnRleHRfd2l0aF9wcmlvcml0eV9pbmZvKFJCSWQsIHV0X21vZHVsZSwgU0hBUV9OT1JNQUxfUVVFVUUsIHNpbV9pbnRlcmZhY2UpCisjZW5kaWYKKworLyogRVhQT1JUIEZVTkNUSU9OUyAqLworZXh0ZXJuIHZvaWQgU0hBUV9ib290dXAodm9pZCk7CitleHRlcm4gdm9pZCBTSEFRX3BzRmlsbENpZE5zYXBpTWFwcGluZyhrYWxfdWludDggQ0lELCBrYWxfdWludDggbnNhcGksIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKK2V4dGVybiB2b2lkIFNIQVFfcHNFcmFzZUNpZE5zYXBpTWFwcGluZyhrYWxfdWludDggbnNhcGksIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKK2V4dGVybiB2b2lkIFNIQVFfcHNGaWxsUkJJZE5zYXBpTWFwcGluZyhrYWxfdWludDggUkJJZCwga2FsX3VpbnQ4IG5zYXBpLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4gdm9pZCBTSEFRX3BzRXJhc2VSQklkTnNhcGlNYXBwaW5nKGthbF91aW50OCBSQklkLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4gdm9pZCBTSEFRX2NoYW5nZV90dXJuX29mZl9wcmlvcml0eV9xdWV1ZV9zZXR0aW5nKGthbF9ib29sIG5ld19zZXR0aW5nLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CisKKyNpZmRlZiBfX1VNVFNfUkFUX18KK2V4dGVybiB2b2lkIFNIQVFfbW91bnRGcmVlRnVuYyhrYWxfdWludDggYV9jaWQsIHBTaGFxRnVuY0ZyZWUgYXBmX2ZyZWUsIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKK2V4dGVybiBwU2hhcUZ1bmNGcmVlIFNIQVFfcXVlcnlGcmVlRnVuYyhFeHRlbmRlZFJiSWQgUmJJZCwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworZXh0ZXJuIGthbF91aW50OCBTSEFRX2dldENpZEZyb21SYmlkKEV4dGVuZGVkUmJJZCBSYklkLCBrYWxfdGFza2lkIHRhc2tpZCwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworZXh0ZXJuIGthbF91aW50OCBTSEFRX3JsY0dldENpZEZyb21SYmlkKEV4dGVuZGVkUmJJZCBSYklkLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4ga2FsX3VpbnQzMiBTSEFRX3JsY1F1ZXJ5Tm9ybWFsUXVldWVMZWZ0Qml0c193dF9sb2NrKEV4dGVuZGVkUmJJZCBSYklkLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4ga2FsX3VpbnQzMiBTSEFRX3JsY1F1ZXJ5Tm9ybWFsUXVldWVMZWZ0Qml0cyhFeHRlbmRlZFJiSWQgUmJJZCwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworZXh0ZXJuIFNIQVFfcUVudGl0eSAqU0hBUV9ybGNGaW5kUUZyb21DaWQoa2FsX3VpbnQ4IGNpZCwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworZXh0ZXJuIFNIQVFfcUVsbXRIZWFkZXIgKlNIQVFfZGVxdWV1ZV9kaWZmX3ByaW9yaXR5X3F1ZXVlKGthbF91aW50OCBhX3R4UmJJZCwga2FsX3VpbnQzMiAqcXVldWVfbGVmdF9iaXRzLCBTSEFRX0xMUVVFVUVfSURYIHByaW9yaXR5LCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4gU0hBUV9yZXRDb2RlIFNIQVFfcHNQZGNwRW5xdWV1ZShFeHRlbmRlZFJiSWQgUmJJZCwgU0hBUV9xRWxtdEhlYWRlciAqcFBlZXIsIGthbF90YXNraWQgdGFza2lkLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4gU0hBUV9yZXRDb2RlIFNIQVFfY3NDc3JFbnF1ZXVlKGthbF91aW50OCBhX2NpZCwgU0hBUV9xRWxtdEhlYWRlciAqYXBfZGF0YSwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworZXh0ZXJuIHZvaWQgU0hBUV9jc1JCZXN0YWJsaXNoZWQoa2FsX3VpbnQ4IENJRCwga2FsX3VpbnQ4IFJCSWQsIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKK2V4dGVybiB2b2lkIFNIQVFfY3NSQnJlbGVhc2VkKGthbF91aW50OCBSQklkLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4ga2FsX3VpbnQ4IFNIQVFfTEJNX0NyZWF0ZVJCKGthbF91aW50OCBSQklkLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4ga2FsX2Jvb2wgU0hBUV9MQk1fUmVsZWFzZVJCKGthbF91aW50OCBSQklkLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4ga2FsX3VpbnQxNiBTSEFRX2dldF9hY3RpdmF0ZWRfUkFCX3N0YXR1cyhrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4gdm9pZCBTSEFRX2NsZWFyUHNLaWNrVUwyKEV4dGVuZGVkUmJJZCBSYklkLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4gdm9pZCBTSEFRX2NzS2lja1VMMihtb2R1bGVfdHlwZSBzb3VyY2VfbW9kdWxlLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4gdm9pZCBTSEFRX3BzS2lja1VMMihtb2R1bGVfdHlwZSBzb3VyY2VfbW9kdWxlLCBFeHRlbmRlZFJiSWQgUmJJZCwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworCisjaWZkZWYgX19SQVRETV9TSEFRX0hBU19QUklPUklUWV9RVUVVRV9fCitleHRlcm4ga2FsX3VpbnQzMiBTSEFRX3JsY1F1ZXJ5UHJpb3JpdHlRdWV1ZUxlZnRCaXRzX3d0X2xvY2soRXh0ZW5kZWRSYklkIFJiSWQsIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKK2V4dGVybiBrYWxfdWludDMyIFNIQVFfcmxjUXVlcnlQcmlvcml0eVF1ZXVlTGVmdEJpdHMoRXh0ZW5kZWRSYklkIFJiSWQsIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKKyNlbmRpZgorCisjaWZkZWYgVU5JVF9URVNUCitleHRlcm4gdm9pZCBTSEFRX1JMQ19VVF9lbnF1ZXVlKFNIQVFfcUVudGl0eSAqYXBfUXVldWUsIHN0cnVjdCBTSEFRX3FFbG10SGVhZGVyICphcF9xRWxtdCwgU0hBUV9MTFFVRVVFX0lEWCBxdWV1ZV9pZHgpOworZXh0ZXJuIHN0cnVjdCBTSEFRX3FFbG10SGVhZGVyICpTSEFRX1JMQ19VVF9kZXF1ZXVlKFNIQVFfcUVudGl0eSAqYXBfcXVldWUsIFNIQVFfTExRVUVVRV9JRFggcXVldWVfaWR4KTsKK2V4dGVybiBzdHJ1Y3QgU0hBUV9xRWxtdEhlYWRlciAqU0hBUV9STENfVVRfZGVxdWV1ZV9ub3JtYWxfcXVldWUoRXh0ZW5kZWRSYklkIFJiSWQsIGthbF91aW50MzIgKnF1ZXVlX2xlZnRfYml0cywga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworZXh0ZXJuIHZvaWQgU0hBUV9jc3JfdXRfY2hlY2tfcXVldWVfY29udGV4dChrYWxfdWludDggYV9jaWQsIG1vZHVsZV90eXBlIHV0X21vZHVsZSwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworZXh0ZXJuIHZvaWQgU0hBUV9wZGNwX3V0X2NoZWNrX3F1ZXVlX2NvbnRleHRfd2l0aF9wcmlvcml0eV9pbmZvKEV4dGVuZGVkUmJJZCBSYklkLCBtb2R1bGVfdHlwZSB1dF9tb2R1bGUsIFNIQVFfTExRVUVVRV9JRFggcHJpb3JpdHksIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKKworI2lmZGVmIF9fUkFURE1fU0hBUV9IQVNfUFJJT1JJVFlfUVVFVUVfXworZXh0ZXJuIHN0cnVjdCBTSEFRX3FFbG10SGVhZGVyICpTSEFRX1JMQ19VVF9kZXF1ZXVlX3ByaW9yaXR5X3F1ZXVlKEV4dGVuZGVkUmJJZCBSYklkLCBrYWxfdWludDMyICpxdWV1ZV9sZWZ0X2JpdHMsIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKKyNlbmRpZiAvLyB+ICNpZmRlZiBfX1JBVERNX1NIQVFfSEFTX1BSSU9SSVRZX1FVRVVFX18KKyNlbmRpZiAvLyB+ICNpZmRlZiBVTklUX1RFU1QKKworI2lmZGVmIF9fUkFURE1fVVRfXworZXh0ZXJuIHZvaWQgU0hBUV9mYWtlX2ZyZWVfYnVmZl9mdW5jKGthbF91aW50OCAqcEJ1ZmZlcik7CitleHRlcm4gdm9pZCBTSEFRX3Rlc3QxKHZvaWQpOworZXh0ZXJuIHZvaWQgU0hBUV90ZXN0Mih2b2lkKTsKK2V4dGVybiB2b2lkIFNIQVFfdGVzdDModm9pZCk7CisjZW5kaWYgLy8gfiAjaWZkZWYgX19SQVRETV9VVF9fCisjZW5kaWYgLy8gfiAjaWZkZWYgX19VTVRTX1JBVF9fCisjZW5kaWYgLy8gfiAjaWZkZWYgX19SQVRETV9VTF9TSEFRX18KKworI2VuZGlmIC8qIF9SQVRETV9TSEFRX0FQSV9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0ZG1fc2l0X2FwaS5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGRtX3NpdF9hcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjBkMGYyCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGRtX3NpdF9hcGkuaApAQCAtMCwwICsxLDQwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgcmF0ZG1fc2l0X2FwaS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogJExvZyQKKyAqCisgKiAxMiAyMSAyMDIwIHZlbmRfbXRiX2FyaWNlbnQwMTkKKyAqIFtNT0xZMDA1MzUxMzFdIFtNUDMgRXhjbHVkZWRdW0dlbjk3XVtNVDY4ODVdW1BldHJ1c11bVE1PLVVTXVtGNExdW1NlYXR0bGVdWzNHXVtOU05dWzNHX0RQXSBEVVQgM0cgQVZHIEhUVFAgTVMvU1MgREwgd29yc2UgdGhhbiBSRUYgR1M5IGluIE1vZGVyYXRlIExvY2F0aW9uIChDTiBQaG9uZSkKKyAqCisgKiAwNyAyMiAyMDIwIHZlbmRfbXRiX21vYml2ZWlsMDI0CisgKiBbTU9MWTAwNTM1MTMxXSBbTVAzIEV4Y2x1ZGVkXVtHZW45N11bTVQ2ODg1XVtQZXRydXNdW1RNTy1VU11bRjRMXVtTZWF0dGxlXVszR11bTlNOXVszR19EUF0gRFVUIDNHIEFWRyBIVFRQIE1TL1NTIERMIHdvcnNlIHRoYW4gUkVGIEdTOSBpbiBNb2RlcmF0ZSBMb2NhdGlvbiAoQ04gUGhvbmUpCisgKiAJCisgKiAJLgorICoKKyAqIDA5IDIzIDIwMTkgdGMuY2hhbmcKKyAqIFtNT0xZMDA0MjcwNjhdIFtHZW45N11bVVBDTV1bUkFURE1dW0VOUERDUF0gRHluYW1pYyBTSVQuCisgKgorICogMTAgMzEgMjAxOCB0Yy5jaGFuZworICogW01PTFkwMDM2MTQ3OF0gW0dlbjk3XSBHZW1pbmkgQ29tcGlsZSBPcHRpb24gQ2xlYW4gVXAuCisgKgorICogMDkgMTggMjAxOCB0Yy5jaGFuZworICogW01PTFkwMDM0NTk5MF0gW1ZNT0xZXSBDb2RlIHN5bmMuCisgKgorICogMDkgMTQgMjAxOCB0Yy5jaGFuZworICogW01PTFkwMDM0NTk5MF0gW1ZNT0xZXSBDb2RlIHN5bmMKKyAqIFJvbGxiYWNrIGZpcnN0LiBGaXggYnVpbGQgZXJyb3IgbG9jYWxseQorICoKKyAqIDA3IDIwIDIwMTgga2lyYW4uYm0KKyAqIFtNT0xZMDAzMzgyOTVdIFtDT0RFIFNZTkNdIFtSMi5NUF1bVUddW01UNjc2MV1bTWVybG90XVtPMV1bTVAzXVtGVF1bSW5kaWFdW0RlbGhpXVtWb0xURV1bUkpJT11bSURFQV1bQXV0b11bQW5kcm9pZCBMaW51eCBTY3JpcHRdW1NTVF0gTW9kZW0gV2FybmluZzogK0VXQVJOSU5HOiBbMV1bNjQzXSBkcGNvcHJvX21tdV9kcnYuYyAjOTkyOyAodGltZXN0YW1wOiA2NTAyOTQ1ODIpIFZSQjoxLm9mczoweDEwNy5wdjoweDI4MkRGQzQgcmZhaWwgcGlkeDoweDM0MAorICogLgorICoKKyAqIDExIDA5IDIwMTcgcmFqZXNoLnNhc3RyeQorICogW01PTFkwMDI4ODM3OV0gP0NVIG9mZmljaWFsIHRlc3Q/P09QUE8/PzE3MDMxPz9DVT8/Q0EgTlMtSU9UP0ZERCBCMyxhY3RpdmUgZGF0YSBzZXNzaW9uIG9uIEIzYyBDQSBjZWxsLCBzdGFydCBNTyB2b2ljZSBjYWxsIGFuZCBDU0ZCICB0byBXQ0RNQSBjZWxscywgdm9pY2UgYW5kIGRhdGEgc2Vzc2lvbiBjb250aW51ZWQgTU8gZGlzY29ubmVjdCB0aGUgY2FsbCwgZmFzdCByZXR1cm4gdG8gTFRFIG5ldHdvcmsgYW5kIHN0YXJ0IENBCisgKgorICogMTAgMTYgMjAxNyByYXZpdGVqLmJhbGxha3VyCisgKiBbTU9MWTAwMjgwODM4XSBbVU1PTFlBXSBQRENQIGluZGlyZWN0IG1vZGUgY29ycmVjdGlvbnMKKyAqIG1pc2MgY2NvcnJlY3Rpb24gZm9yIFBEQ1AgaW5kaXJlY3QgbW9kZSBhbmQgVVQuCisgKgorICogMDkgMTIgMjAxNyBzZWFuLmpoZW5nCisgKiBbTU9MWTAwMjc1MjEyXSBbUkFURE1dIEZpeCBVVCBVRyBjYXNlcworICogCQorICogCS4KKyAqCisgKiAwOSAwNCAyMDE3IHRjLmNoYW5nCisgKiBbTU9MWTAwMjc1MjEyXSBbUkFURE1dIEZpeCBVVCBVRyBjYXNlcy4KKyAqCisgKiAwOCAyOSAyMDE3IHJhdml0ZWouYmFsbGFrdXIKKyAqIFtNT0xZMDAyNzQ1MDZdIFtCSUFOQ09dW01UNjc2M11bUkRJVF1bTCtMXVtNVEJGXVtQSE9ORV1bT3Zlcm5pZ2h0XVtIUV1bTGFiXVtFcmljc3Nvbl1bSENSXUZhdGFsIGVycm9yKEFERFJFU1NfRVJST1JfU1RPUkUpXSBlcnJfY29kZTE6MHgwMDAwMDAwNSBlcnJfY29kZTI6MHg5MTBDN0UwMyBlcnJfY29kZTM6MHg5MTBDN0RFQgorICogLgorICoKKyAqIDA4IDIzIDIwMTcgcmF2aXRlai5iYWxsYWt1cgorICogW01PTFkwMDI2ODA1M10gW0dlbjkzXSBNaXNjZWxsZW5lb3VzIGNoYW5nZXMgaW4gUkFURE0gVUcKKyAqIC4KKyAqCisgKiAwOCAyMyAyMDE3IHJhdml0ZWouYmFsbGFrdXIKKyAqIFtNT0xZMDAyNjgwNTNdIFtHZW45M10gTWlzY2VsbGVuZW91cyBjaGFuZ2VzIGluIFJBVERNIFVHCisgKiAuCisgKgorICogMDggMTggMjAxNyBtaW5nLmxlZQorICogW01PTFkwMDI3MTQ5OF0gW01UNjc2M11bQmlhbmNvXVtOMV1bRUlPVC0zR11bVFddW0hRXVszR1NNXVtIU0RQQV1bVEMtSU9ULUhTMTU2XSB0aHJvdWdocHV0IG5vdCBzdGFibGUgLE1BWCAxN01iL3MgZG93biB0byA2MDBLYi9zCisgKiAuCisgKgorICogMDggMTggMjAxNyByYXZpdGVqLmJhbGxha3VyCisgKiBbTU9MWTAwMjcxODcxXSBbTVQ2NzYzXVtCaWFuY29dW04xXVtXVyBGVF1bQXVzdHJhbGlhXVtTeWRuZXldW092ZXJuaWdodF1bU3lkbmV5XVtTSU0xOlRlbHN0cmFdVHJpZ2dlciB0aW1lOlsyMDE3LTA4LTExIDE4OjQzOjQ1LjU0ODUzNV0gbWQxOihNQ1VfY29yZTEudnBlMC50YzAoVlBFMikpIFtGYXRhbCBlcnJvcih0YXNrKV0gZXJyX2NvZGUxOjB4MDAwMDAzMDUgZXJyX2NvZGUyOjB4ODg4ODAwN0MgZXJyX2NvZGUzOjB4Q0NDQ0NDQ0MgTUQgT2ZmZW5kZXI6VUwyCisgKiAuCisgKgorICogMDggMDEgMjAxNyByYXZpdGVqLmJhbGxha3VyCisgKiBbTU9MWTAwMjY4MDUzXSBbR2VuOTNdIE1pc2NlbGxlbmVvdXMgY2hhbmdlcyBpbiBSQVRETSBVRworICogLgorICoKKyAqIDA3IDI1IDIwMTcgeGlhb2thaS5saXUKKyAqIFtNT0xZMDAyNjY1MzldIFtURERdW01EIE1UQkZdWzEwLjY3IGhvdXJzXSBFeHRlcm5lbCAoRUUpLDAsMCw5OSwvZGF0YS9jb3JlLywxLG1vZGVtLFRyaWdnZXIgdGltZTpbMjAxNy0wNy0yMCAwMTozOTo0Mi45NzAxMjddbWQxOihNQ1VfY29yZTAudnBlMC50YzAoVlBFMCkpW0FTU0VSVF0gZmlsZTptY3UvY29tbW9uL2RyaXZlci9zbGVlcF9kcnYvaW50ZXJuYWwvc3JjL29zdGQuYyBsaW5lOjIyMjRwMToweGExMDAwMzAycDI6CisgKiAxLiBkb250IHNldCBzaXQgaW5mb3JtYXRpb24gd2l0aGluIEZMQyBmb3IgVEREM0cKKyAqIDIuIG1hcmsgcmVzeW5jIDB4ZmYgaW4gcmF0X2luZm8KKyAqIDMuIHN0cm9uZyBtYXBwaW5nIFJBVERNIGJ1ZmZlciB0eXBlIHRvIFVQQ00gYnVmZmVyIHR5cGUuCisgKgorICogMDcgMjQgMjAxNyByYXZpdGVqLmJhbGxha3VyCisgKiBbTU9MWTAwMjY2Mjk1XSBbTVQ2NzYzXVtDMktdW0NOT1BdW1JlZ3Jlc3Npb25dU0lNMihDVSBjYXJkKSBzZW5kIE1NUyBmYWlsCisgKiAuCisgKgorICogMDcgMDYgMjAxNyBoZWFkLmhzdQorICogW01PTFkwMDI2MTg2OF0gWzYyOTNdVUwgU0lUIG5ldyBoYW5kbGluZworICogUkFURE0tVUcsIFJBVERNLUNNTi1TSUcgcGFydAorICoKKyAqIDA2IDIwIDIwMTcgdGltb3RoeS55YW8KKyAqIFtNT0xZMDAyNTc2NDZdIFtTTElNXSBTSVQgZW5sYXJnZXMgbWVtb3J5IHNpemUgb2YgMS43M01CIHdoZW4gYnVnIGZpeC4KKyAqIFNJVCBzaXplIHJlZHVjdGlvbiBpbiBUUlVOSy4KKyAqICh2ZXJpZmllZCBpbiBNUDEgbG9jYWwgYnVpbGQgJiBTRTMgc2FuaXR5KQorICoKKyAqIDA2IDExIDIwMTcgcmF2aXRlai5iYWxsYWt1cgorICogW01PTFkwMDI1NjU2Ml0gW01UNjc2M11bQmlhbmNvXVtOMV1bTVRCRl1bUEhPTkVdW092ZXJuaWdodF1bSFFdW0xhYl1bRXJpY3Nzb25dW0FTU0VSVF0gZmlsZTptY3UvY29tbW9uL2RyaXZlci9kcGNvcHJvL3NyYy9kcGNvcHJvX21tdV9kcnYuYyBsaW5lOjE2NDUKKyAqIC4KKyAqCisgKiAwNiAwMSAyMDE3IHJhdml0ZWouYmFsbGFrdXIKKyAqIFtNT0xZMDAyNTM4MjNdIFtSQVRETV1jb2RlIGNoYW5nZXMgd2l0aCBzcGVjaWZpYyBSQVQgY29tYmluYXRpb24gaW4gQ01OX1NJRworICogLgorICoKKyAqIDA1IDEyIDIwMTcgcmF2aXRlai5iYWxsYWt1cgorICogW01PTFkwMDI0OTIzN10gW0JJQU5DT11bTVQ2NzYzXVtSRElUXVtGVF1bU1pdW092ZXJuaWdodF1bRkREXVtTSU0xOkNVXVtTSU0yOkNVXVtBU1NFUlRdIGZpbGU6bWN1L2NvbW1vbi9kcml2ZXIvZHBjb3Byby9zcmMvZHBjb3Byb19tbXVfZHJ2LmMgbGluZToxNjM1CisgKiBjbGVhbmluZyB1cCB0aGUgdXBjbSBxdWV1ZSBvbiBwZHAgZGVhY3RpdmF0aW9uLgorICoKKyAqIDA1IDA4IDIwMTcgcmF2aXRlai5iYWxsYWt1cgorICogW01PTFkwMDI0NjUxNF0gW0JJQU5DT11bTVQ2NzYzXVtSRElUXSBTYW5pdHkgZmFpbCBpbiBjYXNlIDYuMiBTSU0xIEZUUCBETCB4TUIsIFNJTTIgTVQsIFNJTTEgREwgZmluaXNoIGluIDJHCisgKiBkeW5hbWljIGNvcHJvIHN3aXRjaCBmb3IgR1NNLgorICoKKyAqIDA1IDAzIDIwMTcgcmF2aXRlai5iYWxsYWt1cgorICogW01PTFkwMDI0NjgyNF0gW0JJQU5DT11bTVQ2NzYzXVtSRElUXVtQSE9ORV1bT3Zlcm5pZ2h0XVtIUV1bTVRCRl1bTGFiXVtFcmljc3Nvbl1bQVNTRVJUXSBmaWxlOm1jdS9jb21tb24vZHJpdmVyL2RwY29wcm8vc3JjL2RwY29wcm9fbW11X2Rydi5jIGxpbmU6MTU5MQorICogRml4IGZvciBBTFBTMDMyNzUzNDEKKyAqCisgKiAwNCAyNCAyMDE3IHJhdml0ZWouYmFsbGFrdXIKKyAqIFtNT0xZMDAyNDQ2MTVdIFtCSUFOQ09dW01UNjc2M11bUkRJVF1bRlRdW0ZERF1bQ1VdW1NIXVtTSU0xOkNVXVtTSU0yOk5BXVtBU1NFUlRdIGZpbGU6bWN1L2NvbW1vbi9kcml2ZXIvZHBjb3Byby9zcmMvZHBjb3Byb19tbXVfZHJ2LmMgbGluZToxNjM4CisgKiBQRFUgc3RvcmVkIGluIFJBQk0gYnV0IFBEUCBkZWFjdGl2YXRlZCwgY29wcm8gbmVlZHMgdG8gYmUgZnJlZWQKKyAqCisgKiAwNCAyNCAyMDE3IHJhdml0ZWouYmFsbGFrdXIKKyAqIFtNT0xZMDAyNDQ1ODhdIFtCSUFOQ09dW01UNjc2M11bUkRJVF1bRlRdW0ZERF1bQ1VdW1NIXVtTSU0xOkNVXVtTSU0yOk5BXUFzc2VydCBmYWlsOiBkcGNvcHJvX21tdV9kcnYuYyAxNjIzIC0gRFBDT1BSTworICogRml4IHJlc2V0dGluZyBSQVRETSBTSVQgdGFibGUgdGFpbCBhbmQgaGVhZCBvbiBJUkFUIHRvIExURQorICoKKyAqIDA0IDIzIDIwMTcgYW51cmFnLnBhbmNob2xpCisgKiBbTU9MWTAwMjQ0MzMzXSBbQklBTkNPXVtNVDY3NjNdIFJBVERNIFRhcmdldCBXYXJuaW5nIFJlbW92YWwKKyAqIC4KKyAqCisgKiAwNCAyMCAyMDE3IHJhdml0ZWouYmFsbGFrdXIKKyAqIFtNT0xZMDAyNDM5MzFdIFtCSUFOQ09dW01UNjc2M11bUkRJVF1bUEhPTkVdW092ZXJuaWdodF1bSFFdW01UQkZdW0xhYl1bRXJpY3Nzb25dW0FTU0VSVF0gZmlsZTptY3UvcGNvcmUvbW9kZW0vbmFzL3JhdGRtL3VnL3NyYy9yYXRkbV9zaXRfYXBpLmMgbGluZTo4NzgKKyAqIEZpeCBmb3IgQUxQUzAzMjU4NDIxLgorICoKKyAqIDA0IDE4IDIwMTcgcmF2aXRlai5iYWxsYWt1cgorICogW01PTFkwMDI0MzIwNV0gWzYyOTNdIEluY3JlYXNlIHRoZSBTSVRfU29ja2V0IHRvIGhvbGQgMiBQUworICogSW5jcmVhc2UgU0lUX1NvY2tldCB0byBob2xkIDIgUFMuCisgKgorICogMDEgMDYgMjAxNyByYXZpdGVqLmJhbGxha3VyCisgKiBbTU9MWTAwMTk1MzYwXSBbM0ddW1JBVERNXVtQRENQXSAtIEdlbjkzIDNHIFJBVERNIGFuZCBQRENQIGNvZGUgbW9kaWZpY2F0aW9uIGZvciBuZXcgSFcgYW5kIE1DVSBBcmNoaQorICogbWVyZ2UgY2hhbmdlcyBmcm9tIEZQR0EgZGV2IGJyYW5jaC4KKyAqCisgKiAxMiAyOCAyMDE2IHJhdml0ZWouYmFsbGFrdXIKKyAqIFtNT0xZMDAxOTUzNjBdIFszR11bUkFURE1dW1BEQ1BdIC0gR2VuOTMgM0cgUkFURE0gYW5kIFBEQ1AgY29kZSBtb2RpZmljYXRpb24gZm9yIG5ldyBIVyBhbmQgTUNVIEFyY2hpCisgKiBGaXggYnVnIHdoaWxlIHdyYXBhcm91bmQgU0lULgorICoKKyAqIDEyIDI2IDIwMTYgcmF2aXRlai5iYWxsYWt1cgorICogW01PTFkwMDE5NTM2MF0gWzNHXVtSQVRETV1bUERDUF0gLSBHZW45MyAzRyBSQVRETSBhbmQgUERDUCBjb2RlIG1vZGlmaWNhdGlvbiBmb3IgbmV3IEhXIGFuZCBNQ1UgQXJjaGkKKyAqIEZpeGluZyBidWcgaW4gUkFURE0gZnJlZSBTRFUgZm9yIFRhcmdldCBhbmQgVUVTSU0gYXMgd2VsbCBhcyBmaXhlcyBmb3IgUERDUCBIQy4uCisgKgorICogMTAgMTEgMjAxNiByYXZpdGVqLmJhbGxha3VyCisgKiBbTU9MWTAwMTk1MzYwXSBbM0ddW1JBVERNXVtQRENQXSAtIEdlbjkzIDNHIFJBVERNIGFuZCBQRENQIGNvZGUgbW9kaWZpY2F0aW9uIGZvciBuZXcgSFcgYW5kIE1DVSBBcmNoaQorICogQnVnIGZpeCBmb3IgVUVTSU0gZmFpbHVyZSA3LjEuNy40LgorICoKKyAqIDEwIDA0IDIwMTYgcmF2aXRlai5iYWxsYWt1cgorICogW01PTFkwMDE5NTM2MF0gWzNHXVtSQVRETV1bUERDUF0gLSBHZW45MyAzRyBSQVRETSBhbmQgUERDUCBjb2RlIG1vZGlmaWNhdGlvbiBmb3IgbmV3IEhXIGFuZCBNQ1UgQXJjaGkKKyAqIFBEQ1AgbG9vcGJhY2sgYnVnIGZpeCBmb3IgdW0gbW9kZS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUkFURE1fU0lUX0FQSV9ICisjZGVmaW5lIF9SQVRETV9TSVRfQVBJX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjaW5jbHVkZSAiZXZlbnRfaW5mb191dGlsaXR5LmgiCisjaW5jbHVkZSAibWNkX2wzX2luY19ncHJzX3N0cnVjdC5oIgorI2luY2x1ZGUgImwzX2luY19sb2NhbC5oIgorI2luY2x1ZGUgIm1taV9sM19lbnVtcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAicHNfcmF0ZG1fc3RydWN0LmgiCisjaW5jbHVkZSAiZ2xvYmFsX2RlZi5oIgorI2luY2x1ZGUgImZsYzJfZW50X2Z1bmN0aW9ucy5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorI2luY2x1ZGUgIm1jZF9sM19pbmNfc3RydWN0LmgiCisjaW5jbHVkZSAidXBjbV91bF9zaXQuaCIKKyNpZmRlZiBfX0dFTUlOSV9fCisjaW5jbHVkZSAic2ltX2NvbW1vbl9lbnVtcy5oIgorI2VuZGlmCisKKyNpZmRlZiBfX1VNVFNfUkFUX18KKyNpbmNsdWRlICJ1YXNfY29tbW9uX2VudW1zLmgiCisjZW5kaWYKKyNpbmNsdWRlICJyYXRkbV9zaGFxX2FwcGxpY2F0aW9uX2FwaS5oIgorI2luY2x1ZGUgInJhdGRtX2V4cG9ydF9hcGkuaCIKKworCisKKy8qIE1BQ1JPIERFRklOSVRJT04gKi8KKyNpZm5kZWYgX19VTVRTX1JBVF9fCisjZGVmaW5lIExBU1RfRVhURU5ERURfUkJfSUQgKDMyKSAgLy9yZWZlciB0byB1YXNfY29tbW9uX2VudW1zLmgKKyNlbmRpZiAvLyB+ICNpZm5kZWYgX19VTVRTX1JBVF9fCisvKiBTSVQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTUFYX1NJVF9JTlRFUkZBQ0UgMiAvKiBUbyBjYXJlIG9mIDIgYWN0aXZlIFBTIGNvbm5lY3Rpb24gYXQgdGhlIHNhbWUgdGltZSAqLworI2RlZmluZSBNX1NJVF9NQVhfTlNBUEkgKDE1KQorI2RlZmluZSBNX1NJVF9TT0NLRVRfTlNBUElfQVJSQVlfU0laRSAoKE1fU0lUX01BWF9OU0FQSSkrKChNQVhfQ1NfVE1fUV9OVU0pKyhNQVhfQ1NfVU1fUV9OVU0pKSsoMSkpCisjZGVmaW5lIE1fU0lUX1NPQ0tFVF9DSURfQVJSQVlfU0laRSAoKE1fU0lUX01BWElNVU1fQ09OVEVYVF9JRCkrKDEpKQorI2RlZmluZSBNX1NJVF9TT0NLRVRfUkJJRF9BUlJBWV9TSVpFICgoTEFTVF9FWFRFTkRFRF9SQl9JRCkrKDEpKQorCisjZGVmaW5lIE1fU0lUX01JTklNVU1fQ09OVEVYVF9JRCAoMSkKKyNkZWZpbmUgTV9TSVRfTUFYSU1VTV9DT05URVhUX0lEICgoUFNfVE9UX05TQVBJX05VTSkrKChNQVhfQ1NfVE1fUV9OVU0pKyhNQVhfQ1NfVU1fUV9OVU0pKSkKKyNpZmRlZiBfX01US19UQVJHRVRfXworI2RlZmluZSBNX1NJVF9QUklPX1FfU0laRV9BRlRFUl9ESVNDQVJEIDEwIC8qIFBSSU8gUSBTSVpFIGFmdGVyIGhlYWQgbW92ZW1lbnQqLworI2VuZGlmCisjaWYgZGVmaW5lZChfX0dFTUlOSV9fKQorI2RlZmluZSBSQVRETV9TSVRfTUFYX05VTSAgICAgICBNQVhfU0lNX05VTQorI2Vsc2UKKyNkZWZpbmUgUkFURE1fU0lUX01BWF9OVU0gICAgICAgMQorI2VuZGlmCisKKy8qIFJBVERNIFNJVCBvcGVyYXRpb25zICovCisjaWZkZWYgX19NVEtfVEFSR0VUX18KKyNkZWZpbmUgUkFURE1fU0lUX0NJUkNfRElTVCh4LHksY2lyY19idWZfc2l6ZSkgKCgoeSkrKGNpcmNfYnVmX3NpemUpLSh4KSkgJSAoY2lyY19idWZfc2l6ZSkpCisjZW5kaWYKKyNkZWZpbmUgUkFURE1fSVNfU0lUX1RBQkxFX0VNUFRZIFVQQ01fU0lUX0lTX0VNUFRZCisjZGVmaW5lIFJBVERNX0lTX1NJVF9UQUJMRV9GVUxMIFVQQ01fU0lUX0lTX0ZVTEwKKyNkZWZpbmUgUkFURE1fSVNfU0lUX0ZSRUUgVVBDTV9JU19TRFVfRlJFRUQKKyNkZWZpbmUgUkFURE1fR0VUX1NJVF9FTlRSWShfdGJsLCBfaWR4KSAocmF0ZG1fdWxfc2R1X2luZm9fdCAqKSgoX3RibCktPnBfYWRkciArIChfaWR4KSkKKyNkZWZpbmUgUkFURE1fR0VUX1VQQ01fU0lUX0VOVFJZKF90YmwsIF9pZHgpICh1cGNtX3VsX3NkdV9pbmZvX3QgKikoKF90YmwpLT5wX2FkZHIgKyAoX2lkeCkpCisjZGVmaW5lIFJBVERNX0dFVF9TSVRfSEVBRF9FTlRSWShfdGJsKSBSQVRETV9HRVRfU0lUX0VOVFJZKF90YmwsIChfdGJsKS0+aGVhZCkKKyNkZWZpbmUgUkFURE1fR0VUX1NJVF9UQUlMX0VOVFJZKF90YmwpIFJBVERNX0dFVF9TSVRfRU5UUlkoX3RibCwgKF90YmwpLT50YWlsKQorI2RlZmluZSBSQVRETV9ORVhUX1NJVF9JRFggVVBDTV9TSVRfSURYX05FWFQKKyNkZWZpbmUgUkFURE1fTkVYVF9OX1NJVF9JRFgoX2lkeCwgX24sIF9zaXplKSBVUENNX1NJVF9JRFhfTkVYVF9OKChfaWR4KSwgKF9uKSwgKF9zaXplKSkKKyNkZWZpbmUgUkFURE1fU0lUX0hFQURfTkVYVChfdGJsKSBVUENNX1NJVF9NVl9IRUFEKChfdGJsKSwgMSkKKyNkZWZpbmUgUkFURE1fU0lUX1RBSUxfTkVYVChfdGJsKSBVUENNX1NJVF9NVl9UQUlMKChfdGJsKSwgMSkKKyNkZWZpbmUgUkFURE1fU0lUX1NFVF9UQUlMKF90YmwsIF90YWlsKSBcCit7XAorICAgIChfdGJsKS0+dGFpbCA9IChfdGFpbCk7XAorfQorI2RlZmluZSBSQVRETV9HRVRfU0RVX0JVRl9UWVBFIFVQQ01fR0VUX1NEVV9CVUZfVFlQRQorI2RlZmluZSBSQVRETV9TRVRfU0RVX0JVRl9UWVBFIFVQQ01fU0VUX1NEVV9CVUZfVFlQRQorI2RlZmluZSBSQVRETV9TRVRfU0lUX0ZSRUUgVVBDTV9TRVRfU0RVX0ZSRUVECisjZGVmaW5lIFJBVERNX0NMUl9TSVRfRlJFRSBVUENNX0NMUl9TRFVfRlJFRUQKKyNkZWZpbmUgUkFURE1fU0lUX0ZMQUdfQklUX0JDT05GSVJNICgoa2FsX3VpbnQ4KTB4MDIpCisjZGVmaW5lIFJBVERNX1NJVF9TRVRfQkNPTkZJUk0oc2R1X2luZm9fcHRyKSAoc2R1X2luZm9fcHRyLT5yYXRfaW5mbyB8PSBSQVRETV9TSVRfRkxBR19CSVRfQkNPTkZJUk0pCisjZGVmaW5lIFJBVERNX1NJVF9DTFJfQkNPTkZJUk0oc2R1X2luZm9fcHRyKSAoc2R1X2luZm9fcHRyLT5yYXRfaW5mbyAmPSB+UkFURE1fU0lUX0ZMQUdfQklUX0JDT05GSVJNKQorI2RlZmluZSBSQVRETV9TSVRfR0VUX0JDT05GSVJNKHNkdV9pbmZvX3B0cikgKChzZHVfaW5mb19wdHItPnJhdF9pbmZvICYgUkFURE1fU0lUX0ZMQUdfQklUX0JDT05GSVJNKT4+MSkKKyNkZWZpbmUgUkFURE1fU0lUX0ZMQUdfQklUX1BSSU8gKChrYWxfdWludDgpMHgwMSkKKyNkZWZpbmUgUkFURE1fU0lUX1NFVF9QUklPKHNkdV9pbmZvX3B0cix4KSAoc2R1X2luZm9fcHRyLT5yYXRfaW5mbyB8PSAoeCAmIFJBVERNX1NJVF9GTEFHX0JJVF9QUklPKSkKKyNkZWZpbmUgUkFURE1fU0lUX0dFVF9QUklPKHNkdV9pbmZvX3B0cikgKChzZHVfaW5mb19wdHItPnJhdF9pbmZvKSAmIChSQVRETV9TSVRfRkxBR19CSVRfUFJJTykpCisKKyNkZWZpbmUgUkFURE1fTVJBS19TSVRfRU5UUllfQVNfUkVTWU5DKF9zaXQpIFwKK3tcCisgICAgKF9zaXQpLT5yYXRfaW5mbyA9IDB4MDtcCit9CisjZGVmaW5lIFJBVERNX1NFVF9NVUlfRk9SX1NJVChpc19wcmlvLF9pZHgpICgoaXNfcHJpbyA8PDMxKXwoX2lkeCkpCisKKyNpZmRlZiBfX1JBVERNX1VUX18KKy8qIERvIG5vdCBmcmVlIFJBVERNIFVUIFZSQiAqLworI2RlZmluZSBSQVRETV9GUkVFX1NJVF9FTlRSWSBVUENNX0ZSRUVfU0lUX0VOVFJZX1dPX0ZSRUVfQlVGCisjZWxzZQorI2RlZmluZSBSQVRETV9GUkVFX1NJVF9FTlRSWSBVUENNX0ZSRUVfU0lUX0VOVFJZCisjZW5kaWYKKworLyogU0lUIGVudW1zICovCisvKiBFcnJvciBjb2RlcyAmIFJldHVybiBjb2RlcyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgU0lUX09LLAorICAgIFNJVF9HRU5FUkFMX0FCT1JULAorICAgIFNJVF9DT05WRU5USU9OQUxfVFJBQ0ssCisgICAgU0lUX1VQTElOS19EQVRBX0dPVE9fQ09OVkVOVElPTkFMX1RSQUNLID0gU0lUX0NPTlZFTlRJT05BTF9UUkFDSywKKyAgICBTSVRfS0lDS19VTDIsCisgICAgU0lUX05PVF9JTklUSUFURUQsCisgICAgU0lUX0NBTk5PVF9GSU5EX1EsCisgICAgU0lUX0NBTk5PVF9GSU5EX05TQVBJX0ZST01fQ09OVEVYVF9JRCwKKyAgICBTSVRfTlNBUElfQ0hFQ0tfRkFJTCwKKyAgICBTSVRfRVhDRVBUSU9OLAorICAgIFNJVF9BQk9SVCwKKyAgICBTSVRfTk9UX1JFQURZLAorICAgIFNJVF9DQU5OT1RfRklORF9DSURfRlJPTV9SQklECit9IFNJVF9yZXRDb2RlOworCisvKioKKyAqICBAYnJpZWYgIGJ1ZmZlciB0eXBlCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIFJBVERNX0JVRl9UX1ZSQiA9IEJVRl9UX1ZSQiwKKyAgICBSQVRETV9CVUZfVF9QUkIgPSBCVUZfVF9QUkIsCisgICAgUkFURE1fQlVGX1RfRkxDVjIgPSBCVUZfVF9VTlVTRUQsCisgICAgUkFURE1fQlVGX1RfQ1NSID0gQlVGX1RfR1BELCAgICAgIC8vIGNvdWxkIGJlIEZMQ3YyL0dQRC9vdGhlcnMuLi4KKyAgICBSQVRETV9CVUZfVF9OVU0gPSBCVUZfVF9OVU0KK30gcmF0ZG1fdWxfc2R1X2J1Zl90eXBlX2U7IC8vIHJlZmVyIHRvIHVsX3NkdV9idWZfdHlwZV9lIGVudW0KKworLyogU0lUIFN0cnVjdHVyZXMgKi8KK3R5cGVkZWYgc3RydWN0IHJhdGRtX3BzX3ZyYl9kYXRhX3JlcV9zdHJ1Y3RfdGFnCit7CisgICAga2FsX2Jvb2wgYkNvbmZpcm07CisgICAga2FsX2Jvb2wgaXNWUkI7IC8vZmxhZyBzZXQgZm9yIGVpdGhlciBWUkIgb3IgUFJCIGFkZHJlc3MKKyAgICBrYWxfdWludDggVHhSYklkOworICAgIGthbF91aW50MTYgYml0TGVuZ3RoOworICAgIGthbF91aW50MzIgTVVJOworICAgIGthbF91aW50OCAqc2R1X2FkZHI7CisgICAga2FsX3VpbnQzMiBzaXRfZW50cnlfaWR4OworfSByYXRkbV9wc192cmJfZGF0YV9yZXFfc3RydWN0OworCisKKwordHlwZWRlZiBzdHJ1Y3QgcmF0ZG1fdWxfc2R1X2luZm9fdF90YWcKK3sKKyAgICBrYWxfaW50MTYgICBsZW47CisgICAga2FsX3VpbnQ4ICAgZmxhZ3M7ICAgICAgLy8gYnVmZmVyIHR5cGUgYW5kIGZyZWUtYml0IAorICAgIGthbF91aW50OCAgIHJhdF9pbmZvOyAgIC8vIHByaW9yaXR5L25vcm1hbAorICAgIGthbF91aW50MzIgIGFkZHI7CisJLy9rYWxfdWludDMyICBucGR1X251bTsgbnBkdSBudW0gcmVtb3ZlZCB0byBvcHRpbWl6ZSBSQU0gc3BhY2UKK30gcmF0ZG1fdWxfc2R1X2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgcmF0ZG1fdWxfc2l0X3RfdGFnCit7CisgICAgcmF0ZG1fdWxfc2R1X2luZm9fdCAqcF9hZGRyOyAgICAgLy8gU0lUIGJhc2UgYWRkcmVzcworICAgIGthbF91aW50MzIgICAgICAgICAgc2l6ZTsgICAgICAgLy8gU0lUIHNpemUgKGVudHJ5ICMpCisgICAga2FsX3VpbnQzMiAgICAgICAgICBoZWFkOworICAgIGthbF91aW50MzIgICAgICAgICAgdGFpbDsKKwlrYWxfdWludDMyICAgICAgICAgIHVzZWRfc2l6ZTsgLy9jdXJyZW50bHkgdXNlZCBzaXplIGluIGJ5dGVzCit9IHJhdGRtX3VsX3NpdF90OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MzIgKnNkdV9hZGRyOworICAgIGthbF91aW50MTYgcGt0X2xlbmd0aDsKK30gcmF0ZG1fc2l0X3V0X3NkdV90OworCisKKworZXh0ZXJuIHJhdGRtX3VsX3NpdF90IGdfcmF0ZG1fc2l0X3ByaVtSQVRETV9TSVRfTUFYX05VTV1bVVBDTV9TSVRfR1JPVVBfTlVNX0ZPUl9SQVRETV9TSVRdOworZXh0ZXJuIHJhdGRtX3VsX3NpdF90IGdfcmF0ZG1fc2l0X25tbFtSQVRETV9TSVRfTUFYX05VTV1bVVBDTV9TSVRfR1JPVVBfTlVNX0ZPUl9SQVRETV9TSVRdOworCisvKlNJVCBHZXQgYW5kIHF1ZXJ5IEFQSSdzICovCitleHRlcm4gdm9pZCAqR2V0X1NEVV9Qcmlvcml0eV9TSVQoRXh0ZW5kZWRSYklkIHR4X3JiX2lkLCBrYWxfdWludDMyICpsZWZ0X2JpdHMsIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKK2V4dGVybiB2b2lkICpHZXRfU0RVX05vcm1hbF9TSVQoRXh0ZW5kZWRSYklkIHR4X3JiX2lkLCBrYWxfdWludDMyICpsZWZ0X2JpdHMsIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKK2V4dGVybiBrYWxfdWludDMyIFJsY1F1ZXJ5X05vcm1hbF9TSVRfTGVmdEJpdHMoRXh0ZW5kZWRSYklkIHR4X3JiX2lkLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4ga2FsX3VpbnQzMiBSbGNRdWVyeV9Qcmlvcml0eV9TSVRfTGVmdEJpdHMoRXh0ZW5kZWRSYklkIHR4X3JiX2lkLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4gdm9pZCBSbGNGcmVlX1NJVF9TRFUoRXh0ZW5kZWRSYklkIHR4X3JiX2lkLCBrYWxfYm9vbCBJc1ByaW9TSVQsIGthbF91aW50MTYgc2l0X2VudHJ5X2lkeCwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworZXh0ZXJuIHZvaWQgRkREX3VybGNfdnJiX3ZhX3Nob3J0YWdlX2hkbHIoa2FsX3VpbnQzMiB2cmJfaWQsIGthbF91aW50MzIgc2ltX2lkeCk7CisKKy8qIExvb3BCYWNrIEFQSSdzICovCitleHRlcm4gdm9pZCBTSVRfTEJNX0NyZWF0ZVJCKEV4dGVuZGVkUmJJZCByYl9pZCxrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4gdm9pZCBTSVRfTEJNX1JlbGVhc2VSQihFeHRlbmRlZFJiSWQgcmJfaWQsa2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworCisvKk5vbiBMQiAgUkJJRCBSQUJJZCBtYXBwaW5nICBBUEkncyovCitleHRlcm4gdm9pZCBTSVRfRmlsbFJCSWROc2FwaU1hcHBpbmcoRXh0ZW5kZWRSYklkIFJCSWQsIGthbF91aW50OCBuc2FwaSwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworI2lmZGVmIF9fTVRLX1RBUkdFVF9fCitleHRlcm4gdm9pZCBTSVRfTWFwUExNTmluZm8oRXh0ZW5kZWRSYklkIFJCSWQsIGthbF91aW50OCBuc2FwaSwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UsIGthbF9ib29sIGlzX3NlYXR0bGVfcGxtbik7CitleHRlcm4gdm9pZCBTSVRfUmVzZXRQTE1OaW5mbyhFeHRlbmRlZFJiSWQgUmJJZCwga2FsX3VpbnQ4IG5zYXBpLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CisjZW5kaWYKK2V4dGVybiB2b2lkIFNJVF9FcmFzZVJCSWROc2FwaU1hcHBpbmcoRXh0ZW5kZWRSYklkIFJCSWQsIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKK2V4dGVybiB2b2lkIFNJVF9wc0VyYXNlQ2lkTnNhcGlNYXBwaW5nKGthbF91aW50OCBuc2FwaSwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworZXh0ZXJuIHZvaWQgU0lUX3BzTGVhdmVSYXRVbXRzRmRkKGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKK2V4dGVybiB2b2lkIFNJVF9wc0ZpbGxDaWROc2FwaU1hcHBpbmcoa2FsX3VpbnQ4IENJRCwga2FsX3VpbnQ4IG5zYXBpLCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CisKK2V4dGVybiB2b2lkIFNJVF9STENfdGVzdF9lbnF1ZXVlKEV4dGVuZGVkUmJJZCByYl9pZCxyYXRkbV9zaXRfdXRfc2R1X3QgKnNkdV9wLCBrYWxfYm9vbCBJc1ByaW9TSVQsa2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworZXh0ZXJuIHZvaWQgU0lUX3BzRW5xdWV1ZVdpdGhPbmVQYWNrZXQocmF0ZG1fcHNfZGF0YV9yZXFfc3RydWN0ICpwc19kYXRhX3JlcSxrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4gdm9pZCByYXRkbV9TSVRfZnJlZV92cmIoa2FsX3VpbnQ4ICpGcmVlUGR1LCBrYWxfdWludDggbnNhcGksIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKK2V4dGVybiB2b2lkIFNJVF9wc1NpbVVuYmluZF9GcmVlRW5xdWV1ZWREYXRhKGthbF91aW50OCBuc2FwaSwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworCitleHRlcm4gdm9pZCByYXRkbV9yYXRhZHBfZnJlZV91Z19lcHNiX3VsX3F1ZXVlKGthbF91aW50OCBuc2FwaSwga2FsX3VpbnQ4IHNpbV9pbnRlcmZhY2UpOworCitleHRlcm4gdm9pZCByYXRkbV9wc0VucXVldWVXaXRoUHJpb3JpdHlJbmZvKGthbF91aW50OCBuc2FwaSxyYXRjbW5fdWxfc2R1XzkzX3QgKnBfc2R1cywga2FsX3VpbnQ4IGVucXVldWVfZGVjaXNpb24sIGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKK2V4dGVybiB2b2lkIHJhdGRtX3NpdF9yZXN5bmNfaGVhZF9uX3RhaWwocmF0ZG1fdWxfc2l0X3QgKnJhdGRtX3NpdF90YmwsIGthbF91aW50MzIgc3RhcnRfaW5kZXgpOworZXh0ZXJuIGthbF9ib29sIHJhdGRtX3NpdF90YWJsZV9mcmVlX2JpdF9jaGVjayhrYWxfdWludDggc2l0X3RibF9pZHgsIGthbF9ib29sIGlzX3ByaW9yaXR5LCBrYWxfdWludDggc2ltX2ludGVyZmFjZSk7CitleHRlcm4ga2FsX3VpbnQxNiBTSVRfZ2V0X2FjdGl2YXRlZF9SQUJfc3RhdHVzKGthbF91aW50OCBzaW1faW50ZXJmYWNlKTsKKworI2VuZGlmIC8qIF9SQVRETV9TSVRfQVBJX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRkbV9zbmRjcF9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yYXRkbV9zbmRjcF9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmViOTJkCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGRtX3NuZGNwX3N0cnVjdC5oCkBAIC0wLDAgKzEsMjIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgcmF0ZG1fc25kY3Bfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9OWkEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBSQVRETV9TTkRDUF9TVFJVQ1RfSAorI2RlZmluZSBSQVRETV9TTkRDUF9TVFJVQ1RfSAorCisvLyBQb3lpbmc6IDIwMTAxMDA1LiBSSFIuCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VnZ2VzdCBBZGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAibWNkX2wzX2luY19ncHJzX3N0cnVjdC5oIgorI2luY2x1ZGUgImwzX2luY19sb2NhbC5oIgorLy8KKy8vIFBveWluZzogMjAxMDExMDUuIFJIUgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VnZ2VzdCBBZGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIAorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiIAorCisjaW5jbHVkZSAiZmxjMl9jb25maWcuaCIKKworI2lmbmRlZiBfTUNEX0wzX0lOQ19HUFJTX1NUUlVDVF9ICisjZXJyb3IgIlBsZWFzZSBpbmNsdWRlIG1jZF9sM19pbmNfZ3Jwc19zdHJ1Y3QuaCBiZWZvcmUgcmF0ZG1fc25kY3Bfc3RydWN0LmgiCisjZW5kaWYKKwordHlwZWRlZiBlbnVtIHsKKyAgICBSQVRETV9TTkRfU0VORF9GUk9NX09MREVTVCwgIC8vMAorICAgIFJBVERNX1NORF9TRU5EX0ZST01fU04gICAgICAgICAgLy8gMQorfSByYXRkbV9zbmRjcF90cmFuc21pdF90eXBlX2VudW07CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggICAgICAgbnNhcGk7CisgICAga2FsX3VpbnQ4CSAgIGlzX053UnhTZXFfdmFsaWQ7IC8vdmFsaWQgb25seSB3aGVuIGl0IGlzIEFDSyBtb2RlCisgICAga2FsX3VpbnQxNiAgICAgbndfcnhfc2VxOyAgLy90aGlzIGlzIGRlcml2ZWQgZnJvbSBTR1NOJ3MgUmVjZWl2ZWQgTlBEVSBudW1iZXIKKyAgICBrYWxfdWludDggICAgICAgbXNfcnhfc2VxOyAgLy90aGlzIGlzIE1TJ3MgUmVjZWl2ZWQgTlBEVSBudW1iZXIsIG5lZWQgdG8gYmUgcGFzc2VkIHRvIG5ldHdvcmsuCit9IG5zYXBpX25wZHVfbnVtYmVyX2xpc3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICBuc2FwaTsKKyAgICBrYWxfdWludDE2ICAgICAgbnBkdV9udW1iZXI7CisgICAgZmxjMl9wb29sX2lkX2VudW0gcG9vbF9pZDsKK30gcmF0ZG1fc25kY3BfZGF0YV9yZXFfc3RydWN0LCByYXRkbV9zbmRjcF9kYXRhX2luZF9zdHJ1Y3QsIHJhdGRtX3NuZGNwX2RhdGFfY25mX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggICAgICAgbnNhcGk7CisgICAgcW9zX3N0cnVjdCAgICAgIHFvc19uZWdvdGlhdGVkOworICAgIGthbF91aW50MzIgICAgICBwX2NvbXBfYWxnbzsKKyAgICBrYWxfdWludDMyICAgICAgZF9jb21wX2FsZ287CisgICAga2FsX3VpbnQ4ICAgICAgIGxsY19zYXBpOworICAgIGthbF91aW50OCAgICAgICBkbF9wb29sX2lkOyAvL2ZsYzJfcG9vbF9pZF9lbnVtCisgICAga2FsX3VpbnQ4ICAgICAgIHJhZGlvX3ByaW9yaXR5OworICAgIGthbF91aW50MTYgICAgICByY3Zfc2VxX25vOworICAgIGthbF91aW50MTYgICAgICBzZW5kX3NlcV9ubzsKKyAgICBrYWxfdWludDggICAgICAgcGZpOyAgICAvL2VyaWNhIDIwMDYwNzE5Cit9IHJhdGRtX3NuZGNwX2FjdGl2YXRlX3JlcV9zdHJ1Y3QsIHJhdGRtX3NuZGNwX3JhdF9lbnRlcl9yZXFfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICBuc2FwaTsKK30gcmF0ZG1fc25kY3BfYWN0aXZhdGVfY25mX3N0cnVjdCwgcmF0ZG1fc25kY3BfcmF0X3JlYWR5X2luZF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4ICAgICAgIG5zYXBpOworICAgIHFvc19zdHJ1Y3QgICAgICBxb3NfbmVnb3RpYXRlZDsKKyAgICBrYWxfdWludDggICAgICAgbGxjX3NhcGk7CisgICAga2FsX3VpbnQ4ICAgICAgIHJhZGlvX3ByaW9yaXR5OworICAgIGthbF91aW50OCAgICAgICBwZmk7ICAvL2VyaWNhIDIwMDYwNzE5Cit9IHJhdGRtX3NuZGNwX21vZGlmeV9yZXFfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICBuc2FwaTsKK30gcmF0ZG1fc25kY3BfbW9kaWZ5X2NuZl9zdHJ1Y3Q7ICAgIAorICAKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4ICAgICAgIG5vX29mX3ZhbGlkX2VudHJpZXM7CisgICAga2FsX3VpbnQ4ICAgICAgIG5zYXBpX2xpc3RbMTFdOworICAgIGthbF91aW50MzIgICAgICBjYXVzZTsKKyAgICBrYWxfYm9vbCAgICAgICAgeGlkX25lZ19pbmRpY2F0b3JbMTFdOworfSByYXRkbV9zbmRjcF9kZWFjdGl2YXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICBub19vZl92YWxpZF9lbnRyaWVzOworICAgIGthbF91aW50OCAgICAgICBuc2FwaV9saXN0WzExXTsKK30gcmF0ZG1fc25kY3BfZGVhY3RpdmF0ZV9jbmZfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICBuc2FwaTsKKyAgICBrYWxfdWludDggICAgICAgY2F1c2U7IC8vbGxzbmRfY2F1c2VfZW51bQorfSByYXRkbV9zbmRjcF9zdGF0dXNfaW5kX3N0cnVjdDsKKworLyogUkFURE1fUkFCTV9TVVNQRU5EX0RBVEFfUExBTkVfSU5EICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggICAgICAgbm9fb2ZfdmFsaWRfZW50cmllczsKKyAgICBrYWxfdWludDggICAgICAgbnNhcGlfbGlzdFsxMV07Cit9IHJhdGRtX3NuZGNwX3N1c3BlbmRfZGF0YV9wbGFuZV9pbmRfc3RydWN0OworCisvKiBSQVRETV9SQUJNX1JFU1VNRV9EQVRBX1BMQU5FX0lORCAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4ICAgICAgIG5vX29mX3ZhbGlkX2VudHJpZXM7CisgICAga2FsX3VpbnQ4ICAgICAgIG5zYXBpX2xpc3RbMTFdOworICAgIGthbF91aW50MTYgICAgIFJldHJhbnNtaXRGcm9tU05bMTFdOyAgICAKK30gcmF0ZG1fc25kY3BfcmVzdW1lX2RhdGFfcGxhbmVfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG5vX29mX3ZhbGlkX2VudHJpZXM7CisgICAga2FsX3VpbnQ4IG5zYXBpX2xpc3RbMTFdOworICAgIGthbF91aW50MTYgc2VxdWVuY2VfbGlzdFsxMV07Cit9IHJhdGRtX3NuZGNwX3NlcXVlbmNlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICBub19vZl92YWxpZF9lbnRyaWVzOworICAgIG5zYXBpX25wZHVfbnVtYmVyX2xpc3QgICAgICAgbnNhcGlfbGlzdFsxMV07Cit9IHJhdGRtX3NuZGNwX3NlcXVlbmNlX2NuZl9zdHJ1Y3Q7CisKKy8qCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggICAgICAgbnNhcGk7Cit9IHJhdGNtX3NuZGNwX2ZsdXNoX2luZF9zdHJ1Y3Q7CisqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggICAgICAgbnNhcGk7CisgICAga2FsX2Jvb2wgICAgICAgIHNldF9zZW5kX3RvXzA7CisgICAga2FsX2Jvb2wgICAgICAgIHNldF9yZWN2X3RvXzA7Cit9IHJhdGRtX3NuZGNwX2ZsdXNoX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICBuc2FwaTsKKyAgICBrYWxfYm9vbCAgICAgICAgc2V0X3NlbmRfdG9fMDsKKyAgICBrYWxfYm9vbCAgICAgICAgc2V0X3JlY3ZfdG9fMDsKK30gcmF0ZG1fc25kY3BfcmVzZXRfbnBkdV9zZXFfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2FwaTsKKyAgICByYXRkbV9zbmRjcF90cmFuc21pdF90eXBlX2VudW0gICAgICAgICAgICAgICAgdHlwZTsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcV9ubzsKK30gcmF0ZG1fc25kY3BfdHJhbnNtaXRfaW5kX3N0cnVjdDsKKworLyoKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICBuc2FwaTsKKyAgICBrYWxfdWludDE2ICAgICAgIGFja19zZXFfbm87Cit9IHJhdGNtX3NuZGNwX3JldHJhbnNtaXRfaW5kX3N0cnVjdDsKKyovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgICAgICBub19vZl92YWxpZF9lbnRyaWVzOworICAgIGthbF91aW50OCAgICAgICBuc2FwaV9saXN0WzExXTsKK30gcmF0ZG1fc25kY3BfcmF0X2xlYXZlX3JlcV9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBSQVRETV9TTkRDUF9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGRtX3VybGNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmF0ZG1fdXJsY19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzcwMDAxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JhdGRtX3VybGNfc3RydWN0LmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICByYXRkbV91cmxjX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTlpBCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAkTG9nOiQKKyAqCisgKiAwOCAxOCAyMDE3IG1pbmcubGVlCisgKiBbTU9MWTAwMjcxNDk4XSBbTVQ2NzYzXVtCaWFuY29dW04xXVtFSU9ULTNHXVtUV11bSFFdWzNHU01dW0hTRFBBXVtUQy1JT1QtSFMxNTZdIHRocm91Z2hwdXQgbm90IHN0YWJsZSAsTUFYIDE3TWIvcyBkb3duIHRvIDYwMEtiL3MKKyAqIC4KKyAqCisgKiAxMSAyNCAyMDE2IGppbnBlbmcuaHUKKyAqIFtNT0xZMDAyMTQ5ODRdIEFMUFMwMzAyMTMwMSBbVEREXVtNRCBNVEJGXVtXaGl0bmV5XVtFRV1bQVNTRVJUXSBmaWxlOm1jdS9jb21tb24vc2VydmljZS9rYWwvY29tbW9uL3NyYy9rYWxfaHdfaXRjLmMgbGluZTo5OAorICoKKyAqIDA1IDEzIDIwMTMgam9obnNvbi5saXUKKyAqIFtNT0xZMDAwMTE5MzFdIFtFRV1bSFcgSXNzdWUgV29ya2Fyb3VuZCBWZXJpZnldW01UNjU4OVREVjFfUGhvbmVdW0NNQ0MgQ2FzZV1bRlRdW05hbmppbmddW0MxLjJdW01dID8/PzI/NXRoXzE0OjI4Xz8/PzNHPz8/Mkc/Pz8/Pz8/RUU/P18/Pz8/X2J1ZmZlci5jCisgKiBbVEREXUludGVyLVJBVCBDb2RlIFN5bmMgd2l0aCBGREQuCisgKgorICogMTIgMDcgMjAxMiBhbmRyZXcud3UKKyAqIFtNT0xZMDAwMDcwOThdIExPQ0FMX1BBUkFfSERSL1BFRVJfQlVGX0hEUiBtb2RpZmljYXRpb24KKyAqIExPQ0FMX1BBUkFfSERSL1BFRVJfQlVGX0hEUiBtb2RpZmljYXRpb24KKyAqCisgKiAwMSAxNiAyMDEyIGNhcmxzb24ubGluCisgKiByZW1vdmVkIQorICogPHNhdmVkIGJ5IFBlcmZvcmNlPgorICoKKyAqIDExIDA4IDIwMTEgd2VpbWluLnplbmcKKyAqIHJlbW92ZWQhCisgKiBtZXJnZSBNU0JCLgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiBBZGQgY29weXJpZ2h0IGhlYWRlci4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9SQVRETV9VUkxDX1NUUlVDVF9ICisjZGVmaW5lIF9SQVRETV9VUkxDX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIgIAorCisgICAgdHlwZWRlZiBlbnVtIAorICAgIHsKKyAgICAgICAgREVBQ1RJVkFURV9BQk9SVD0wLCAgICAKKyAgICAgICAgREVBQ1RJVkFURV9TVUNDRVNTCisgICAgfURFQUNUSVZBVEVfUFNSQUJfUkVTVUxUOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgREVBQ1RJVkFURV9QU1JBQl9SRVNVTFQgICAgIHJlc3VsdDsKK31yYXRkbV91cmxjX2RlYWN0aXZhdGVfcHNfcmFiX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDE2IGV2ZW50OworICAgIGthbF91aW50MTYgcG9vbF9pZDsKKyAgICB2b2lkICp1c2VyX2luZm9fcHRyOworfSByYXRkbV91cmxjX25wZHVfZGxfY2Jfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiB2cmJfaWQ7Cit9IHJhdGRtX3VybGNfdnJiX3ZhX3Nob3J0YWdlX250Zl9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfUkFURE1fVVJMQ19TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JlYXNtMnJsY19zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yZWFzbTJybGNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJhYjM4MwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yZWFzbTJybGNfc3RydWN0LmgKQEAgLTAsMCArMSw4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKglyZWFzbTJybGNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1JFQVNNMlJMQ19TVFJVQ1RfSAorI2RlZmluZSBfUkVBU00yUkxDX1NUUlVDVF9ICisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MTYgYmVnaW5faW5keDsKKyAgICBrYWxfdWludDE2IG51bV9ibGtzX3RvX2ZyZWU7CisgICAga2FsX3VpbnQ4IGlzX3Jucl9hY3RpdmU7Cit9IHJlYXNtX3JsY19yZWFzbV9kb25lX2luZF9zdHJ1Y3Q7CisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmZjMjUwN19saWIuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yZmMyNTA3X2xpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNDFiOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmZjMjUwN19saWIuaApAQCAtMCwwICsxLDI5NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgcmZjMjUwN19saWIuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICBNT05aQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgUkZDMjUwNyBsaWJyYXJ5IGV4dGVybiBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAkTG9nJAorICoKKyAqIDEyIDEyIDIwMTQgdGMuY2hhbmcKKyAqIFtNT0xZMDAwODc0MzRdIFtVbml2ZXJzYWwgQmluXSBDaGVjayBpbi4KKyAqIFJGQzI1MDcKKyAqCisgKiAwOCAwMyAyMDExIHRjLmNoYW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDA1IDI1IDIwMTEgdGMuY2hhbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDUgMjMgMjAxMSB0Yy5jaGFuZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAxMiAxNCAyMDEwIG1heC55aW4KKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTAgMTggMjAxMCBtYXgueWluCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDA5IDAzIDIwMTAgbWF4LnlpbgorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmICBfUkZDMjUwN19MSUJfSAorI2RlZmluZSAgX1JGQzI1MDdfTElCX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKworI2RlZmluZSBSRkMyNTA3X0FTU0VSVCh4KSAgIERFQlVHX0FTU0VSVCh4KQorCit0eXBlZGVmIGthbF91aW50MzIgUkZDMjUwN19USU1FX09GX0RBWTsKK3R5cGVkZWYga2FsX3VpbnQzMiBSRkMyNTA3X1RJTUVfRElGRkVSRU5DRTsKKworLyoKKyAqIE1hY3JvIGZvciBkZWZpbml0aW9ucyBmb3IgUkZDMjUwNyBQSUQgcmVmZXJlbmNlcy4KKyAqCisgKiBUaGUgbnVtYmVyIG9mIFJGQzI1MDcgUElEcy4KKyAqLworI2RlZmluZSBSRkMyNTA3X05PX09GX1BJRFMgICAgICAgICAgICAgICAgICA1CisKKyNkZWZpbmUgSVBfVjRfSEVBREVSX0xFTiAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgSVBfVjZfSEVBREVSX0xFTiAgICAgICAgICAgICAgICAgICAgNDAKKworI2RlZmluZSBSRkMyNTA3X0RFQlVHX0ZVTExfSEVBREVSX0xFTiAgICAgICA0MAorI2RlZmluZSBSRkMyNTA3X0RFQlVHX0hFQURFUl9MRU4gICAgICAgICAgICAxMAorI2RlZmluZSBSRkMyNTA3X0NPTVBSRVNTRURfTUFYX0hFQURFUl9MRU4gCTQwCisKKyNkZWZpbmUgUkZDMjUwN19QQUNLRVRfRkxPV19UQ1BfTUFTSwkJMFgwMQorI2RlZmluZSBSRkMyNTA3X1BBQ0tFVF9GTE9XX05PTlRDUF9NQVNLCQkwWDAyCisKKyNkZWZpbmUgUkZDMjUwN19TS0lQUEVEX0NJRF9OVU1CRVIJCQkweEZGCisKKyNkZWZpbmUgQ0lEX0NPVU5UKF9DSURfTElTVF8pICAgICAgICAgICAgICAgKF9DSURfTElTVF8udUNvdW50KQorCit0eXBlZGVmIHZvaWQgKCpyZmMyNTA3X3JlZ19jYWxsYmFja19mdW5jX3B0cikoa2FsX3VpbnQzMiwga2FsX3VpbnQ4ICopOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSRkMyNTA3X0RFQ09NUFJFU1NfU1VDQ0VTUywKKyAgICBSRkMyNTA3X0RFQ09NUFJFU1NfU1VDQ0VTU19NT1JFX1RPX0dPLAorICAgIFJGQzI1MDdfREVDT01QUkVTU19TVUNDRVNTX1JDVl9DT05URVhUX1NUQVRFLAorICAgIFJGQzI1MDdfREVDT01QUkVTU19GQUlMX0ZSRUVELAorICAgIFJGQzI1MDdfREVDT01QUkVTU19GQUlMX1NUT1JFRCwKKyAgICBSRkMyNTA3X0RFQ09NUFJFU1NfRkFJTF9GUkVFRF9TRU5EX0NPTlRFWFRfU1RBVEUsCisgICAgUkZDMjUwN19ERUNPTVBSRVNTX0ZBSUxfU1RPUkVEX1NFTkRfQ09OVEVYVF9TVEFURQorfSBSRkMyNTA3X0RFQ09NUFJFU1NfUkVTVUxUX0VOVU07CisKK3R5cGVkZWYgZW51bQoreworICAgIFJGQzI1MDdfRlVMTF9IRUFERVIsCisgICAgUkZDMjUwN19DT01QUkVTU0VEX1RDUCwKKyAgICBSRkMyNTA3X0NPTVBSRVNTX1RDUF9OT19ERUxUQSwKKyAgICBSRkMyNTA3X0NPTVBSRVNTX05PTl9UQ1AsCisgICAgUkZDMjUwN19DT05URVhUX1NUQVRFCit9IFJGQzI1MDdfUEFDS0VUX1RZUEVfRU5VTTsKKwordHlwZWRlZiBzdHJ1Y3QgX1JGQzI1MDdfQ09NTU9OX0NJRAoreworICAgIHN0cnVjdCBfUkZDMjUwN19DT01NT05fQ0lEICpwUHJldjsKKyAgICBzdHJ1Y3QgX1JGQzI1MDdfQ09NTU9OX0NJRCAqcE5leHQ7Cit9IFJGQzI1MDdfQ09NTU9OX0NJRDsKKwordHlwZWRlZiBzdHJ1Y3QgX1JGQzI1MDdfQ0lEX0xJU1QKK3sKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgdUNvdW50OworICAgIHN0cnVjdCBfUkZDMjUwN19DT01NT05fQ0lEICAqcEZpcnN0OworICAgIHN0cnVjdCBfUkZDMjUwN19DT01NT05fQ0lEICAqcExhc3Q7Cit9IFJGQzI1MDdfQ0lEX0xJU1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiAgUmZjMjUwN01heFBlcmlvZDsgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBMYXJnZXN0IG51bWJlciBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIENPTVBSRVNTRURfTk9OX1RDUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHBhY2tldHMgdGhhdCBtYXkgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzZW50IHdpdGhvdXQgc2VuZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGEgRlVMTF9IRUFERVIgcGFja2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAga2FsX3VpbnQ4ICAgUmZjMjUwN01heFRpbWU7ICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBDT01SRVNTRURfTk9OX1RDUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHBhY2tldHMgbWF5IG5vdCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNlbnQgbW9yZSB0aGFuIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBudW1iZXIgb2Ygc2Vjb25kcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFmdGVyIHNlbmRpbmcgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEZVTExfSEVBREVSIHBhY2tldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGthbF91aW50MTYgIFJmYzI1MDdNYXhIZWFkZXI7ICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogVGhlIGxhcmdlc3QgaGVhZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2l6ZSAoaW4gYnl0ZXMpIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtYXkgYmUgY29tcHJlc3NlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGthbF91aW50OCAgIFJmYzI1MDdNYXhUY3BTcGFjZTsgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogVGhlIG1heGltdW0gVENQIENJRAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAga2FsX3VpbnQxNiAgUmZjMjUwN01heE5vblRjcFNwYWNlOyAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGUgbWF4aW11bSBub24tVENQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQ0lEIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAga2FsX2Jvb2wgICAgUmZjMjUwN0V4cGVjdFJlb3JkZXJpbmc7ICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBXaGV0aGVyIHRoZSBhbGdvcml0aG0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzaGFsbCByZS1vcmRlciBQRENQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogU0RVcywgb3Igbm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKiBOZXc6IFJlZ2lzdGVyIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGZyZWUgbWVtb3J5IG9mIHN0b3JlZCBjb21wcmVzc2VkIHBhY2tldHMgKi8KKyAgICBrYWxfdWludDMyICB1NERlY29tcFNyY0lkOworICAgIHJmYzI1MDdfcmVnX2NhbGxiYWNrX2Z1bmNfcHRyIHBmRGVhbGxvY0RlY29tcFNyYzsKK30gUkZDMjUwN19FTlRJVFlfUEFSQU1TOworCisvKgorICogUkZDMjUwNyBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUkZDMjUwN19USU1FX09GX0RBWSAgICAgQm9vdGluZ1RpbWU7CisKKyAgICBSRkMyNTA3X0VOVElUWV9QQVJBTVMgICBQYXJhbXM7ICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGUgUkZDMjUwNyBwYXJhbWV0ZXJzIHJlY2VpdmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHdoZW4gdGhlIFBEQ1AgZW50aXR5IHdhcyBjcmVhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG9yIHJlY29uZmlndXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBrYWxfdWludDggICAgICAgICAgICAgICBGaXJzdFBpZDsgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGUgZmlyc3QgcHJvdG9jb2wgaWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB1c2VkIHdpdGggUkZDMjUwNyAtIHRoaXMgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaWRlbnRpZmllcyBGVUxMX0hFQURFUiBwYWNrZXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFuZCBvdGhlciBwYWNrZXQgdHlwZSBQSURzIGFyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvZmZzZXRzIGZyb20gdGhpcyB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSRkMyNTA3X0NJRF9MSVNUICAgICAgICBUY3BDb21wcmVzc29ySW5mbzsgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBMaXN0IG9mIGNvbXByZXNzb3IgVENQIENJRHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUkZDMjUwN19DSURfTElTVCAgICAgICAgVGNwRGVjb21wcmVzc29ySW5mbzsgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTGlzdCBvZiBkZWNvbXByZXNzb3IgVENQIENJRHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUkZDMjUwN19DSURfTElTVCAgICAgICAgTm9uVGNwQ29tcHJlc3NvckluZm87ICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTGlzdCBvZiBjb21wcmVzc29yIG5vbi1UQ1AgQ0lEcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSRkMyNTA3X0NJRF9MSVNUICAgICAgICBOb25UY3BEZWNvbXByZXNzb3JJbmZvOyAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBMaXN0IG9mIGRlY29tcHJlc3NvciBub24tVENQIENJRHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKnBTdWJIZHJDaGFpbjsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAqcERlY29tcHJlc3NlZEhlYWRlcjsKK30gUkZDMjUwN19FTlRJVFlfSU5GTzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDgqIHBTcmM7CisgICAga2FsX3VpbnQ4KiBwRHN0OworICAgIGthbF91aW50MTYgU3JjTGVuOworICAgIGthbF91aW50MTYgRHN0TGVuOworICAgIGthbF91aW50MTYgQ29tcHJlc3NlZExlbmd0aDsKKyAgICBrYWxfdWludDggRGVzaXJlZENvbXByZXNzVHlwZTsKKyAgICBrYWxfdWludDE2IENpZE51bWJlcjsgICAvLyBPdXRwdXQ6IENpZE51bWJlciBmb3IgdGhpcyBQRFUKKyAgICBrYWxfYm9vbCBUY3BQRFU7ICAgICAgICAvLyBPdXRwdXQ6IEtBTF9GQUxTRSBmb3IgTm9uVENQLCBLQUxfVFJVRSBmb3IgVGNwCisgICAga2FsX3VpbnQ4IENvbXByZXNzZWRIZHJbUkZDMjUwN19DT01QUkVTU0VEX01BWF9IRUFERVJfTEVOXTsKK30gUkZDMjUwN19DT01QUkVTU19JTlBVVF9JTkZPOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCogcFNyYzsKKyAgICBrYWxfdWludDE2IFNyY09mZnNldDsKKyAgICBrYWxfdWludDE2IFNyY0xlbjsKKyAgICBrYWxfdWludDggU3JjUGlkOworICAgIGthbF91aW50OCBTcmNJbmZvOworICAgIGthbF91aW50OCogcERzdDsKKyAgICBrYWxfdWludDgqIHBDaWQ7CisgICAga2FsX3VpbnQxNiBEc3RMZW47CisgICAga2FsX3VpbnQxNiBEZWNvbXByZXNzZWRMZW5ndGg7CisgICAga2FsX3VpbnQ4KiBwTmV4dFNyYzsKKyAgICBrYWxfdWludDE2IE5leHRTcmNPZmZzZXQ7CisgICAga2FsX3VpbnQxNiBOZXh0U3JjTGVuOworICAgIGthbF91aW50OCBOZXh0U3JjUGlkOworICAgIGthbF91aW50OCBOZXh0U3JjSW5mbzsKKyAgICBrYWxfdWludDggTDJIZHJMZW5ndGg7CisgICAga2FsX3VpbnQzMiBOZXh0U3JjTm9uVGNwVGltZTsKK30gUkZDMjUwN19ERUNPTVBSRVNTX0lOUFVUX0lORk87CisKK2V4dGVybiBSRkMyNTA3X0RFQ09NUFJFU1NfSU5QVVRfSU5GTyBSZmMyNTA3RGVjb21wSW5wdXRCdWZmOworZXh0ZXJuIFJGQzI1MDdfQ09NUFJFU1NfSU5QVVRfSU5GTyBSZmMyNTA3Q29tcElucHV0QnVmZjsKKworZXh0ZXJuIFJGQzI1MDdfRU5USVRZX0lORk8gKnJmYzI1MDdfY3JlYXRlKHZvaWQpOworZXh0ZXJuIGthbF9ib29sIHJmYzI1MDdfY29uZmlnKFJGQzI1MDdfRU5USVRZX0lORk8gKnBFbnRpdHksIFJGQzI1MDdfRU5USVRZX1BBUkFNUyogcFJmYzI1MDdQYXJhbXMsIGthbF91aW50OCB1Y0ZpcnN0UGlkKTsKK2V4dGVybiBrYWxfdWludDggcmZjMjUwN19jb21wcmVzcyhSRkMyNTA3X0VOVElUWV9JTkZPICpwRW50aXR5LCBSRkMyNTA3X0NPTVBSRVNTX0lOUFVUX0lORk8qIHBJbnB1dCk7CitleHRlcm4ga2FsX3VpbnQ4IHJmYzI1MDdfZGVjb21wcmVzcyhSRkMyNTA3X0VOVElUWV9JTkZPICpwRW50aXR5LCBSRkMyNTA3X0RFQ09NUFJFU1NfSU5QVVRfSU5GTyAqcElucHV0KTsKK2V4dGVybiBrYWxfdWludDggcmZjMjUwN19nZXRfZmlyc3RfcGlkKFJGQzI1MDdfRU5USVRZX0lORk8gKnBFbnRpdHkpOworZXh0ZXJuIHZvaWQgcmZjMjUwN19yZXNldChSRkMyNTA3X0VOVElUWV9JTkZPICpwRW50aXR5KTsKK2V4dGVybiB2b2lkIHJmYzI1MDdfcmVsZWFzZShSRkMyNTA3X0VOVElUWV9JTkZPICpwRW50aXR5KTsKK2V4dGVybiB2b2lkIHJmYzI1MDdfc2V0X2Z1bGxfaGVhZGVyX3N0YXR1cyhSRkMyNTA3X0VOVElUWV9JTkZPICpwRW50aXR5LCBrYWxfYm9vbCBiVGNwLCBrYWxfdWludDggQ2lkTnVtYmVyLCBrYWxfYm9vbCBiU2VuZEZ1bGxIZWFkZXIpOworI2VuZGlmIC8qIF9SRkMyNTA3X0xJQl9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmZjMjUwN19saWJfY29tbW9uLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmZjMjUwN19saWJfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NjZGRjMQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yZmMyNTA3X2xpYl9jb21tb24uaApAQCAtMCwwICsxLDc2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgcmZjMjUwN19saWJfY29tb24uaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICBNT05aQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgUkZDMjUwNyBsaWJyYXJ5IGNvbW1vbiBlbnVtcywgbWFjcm9zIGFuZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAkTG9nJAorICoKKyAqIDEyIDEyIDIwMTQgdGMuY2hhbmcKKyAqIFtNT0xZMDAwODc0MzRdIFtVbml2ZXJzYWwgQmluXSBDaGVjayBpbi4KKyAqIFJGQzI1MDcKKyAqCisgKiAwNyAyNSAyMDEyIGFuZHJldy53dQorICogW01PTFkwMDAwMTEzNl0gW1JGQzI1MDddQ2hhbmdlIEtBTCBBUEkgdXNhZ2UKKyAqIGNoYW5nZSBrYWxfZ2V0X3RpbWUoKSB0byBrYWxfZ2V0X3N5c3RpY2tzKCkKKyAqCisgKiAwMyAxNSAyMDEyIGFuZHJldy53dQorICogcmVtb3ZlZCEKKyAqIE1vZGlmaWNhdGlvbiBmb3IgR0NDIG1pZ3JhdGlvbgorICoKKyAqIDA4IDA4IDIwMTEgdGMuY2hhbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDggMDcgMjAxMSB0Yy5jaGFuZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwOCAwNyAyMDExIHRjLmNoYW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDA4IDAzIDIwMTEgdGMuY2hhbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDggMDMgMjAxMSB0Yy5jaGFuZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwNyAyNiAyMDExIHRjLmNoYW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDA2IDEyIDIwMTEgdGMuY2hhbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDYgMDMgMjAxMSB0Yy5jaGFuZworICogcmVtb3ZlZCEKKyAqIFNlbmQgRlVMTF9IRUFERVIgaWYgdGhlIGxlbmd0aCBvZiBjb21wcmVzc2VkIGhlYWRlciBpcyBsYXJnZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBvcmlnaW5hbCBoZWFkZXIuCisgKiAuCisgKgorICogMDUgMjUgMjAxMSB0Yy5jaGFuZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAxMiAxNCAyMDEwIG1heC55aW4KKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTAgMTggMjAxMCBtYXgueWluCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgIF9SRkMyNTA3X0xJQl9DT01NT05fSAorI2RlZmluZSAgX1JGQzI1MDdfTElCX0NPTU1PTl9ICisKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAicmZjMjUwN19saWIuaCIKKworLyogTWFjcm8gKi8KKyNpZiAhZGVmaW5lZChfX01US19UQVJHRVRfXykgJiYgZGVmaW5lZChfX1JGQzI1MDdfQ0hFQ0tfTUVNX0xFQUtfXykKKworLyogRm9yIE1vRE9TIFVUIGVudmlyb25tZW50LiAqLworI2RlZmluZSByZmMyNTA3X2FsbG9jX3N5c19tZW0oc2l6ZSkgcmZjMjUwN19nZXRfY3RybF9idWZmZXIoc2l6ZSwgX19GSUxFX18sIF9fTElORV9fKQorI2RlZmluZSByZmMyNTA3X2RlYWxsb2Nfc3lzX21lbShwdHIpIHJmYzI1MDdfZnJlZV9jdHJsX2J1ZmZlcihwdHIsIF9fRklMRV9fLCBfX0xJTkVfXykKK2V4dGVybiB2b2lkKiByZmMyNTA3X2dldF9jdHJsX2J1ZmZlcihrYWxfdWludDE2IHNpemUsIGthbF9jaGFyICogZmlsZV9uYW1lLCBrYWxfdWludDMyIGxpbmUpOworZXh0ZXJuIHZvaWQgcmZjMjUwN19mcmVlX2N0cmxfYnVmZmVyKHZvaWQqIGJ1Ziwga2FsX2NoYXIgKiBmaWxlX25hbWUsIGthbF91aW50MzIgbGluZSk7CisjZWxzZSAvKiBfX1JGQzI1MDdfQ0hFQ0tfTUVNX0xFQUtfXyAqLworCisvKiBUYXJnZXQgbG9hZCAgKi8KKyNkZWZpbmUgcmZjMjUwN19hbGxvY19zeXNfbWVtKHNpemUpIGdldF9jdHJsX2J1ZmZlcihzaXplKQorI2RlZmluZSByZmMyNTA3X2RlYWxsb2Nfc3lzX21lbShwdHIpIGZyZWVfY3RybF9idWZmZXIocHRyKQorI2VuZGlmIC8qIF9fUkZDMjUwN19DSEVDS19NRU1fTEVBS19fICovCisKKyNkZWZpbmUgQklUU19QRVJfQllURSA4CisKKy8qCisgKiBNYWNyb3MgZm9yIGRldGVybWluaW5nIFJGQzI1MDcgUElEIHZhbHVlcyBmcm9tIGEgc3VwcGxpZWQgYmFzZQorICogKFJGQzI1MDdfUEFSQU1FVEVSUyBGaXJzdFBpZCkuCisgKi8KKyNkZWZpbmUgUkZDMjUwN19GVUxMX0hFQURFUl9QSUQoeCkgICAgICAgICAgICAgICh4ICsgMCkKKyNkZWZpbmUgUkZDMjUwN19DT01QUkVTU0VEX1RDUF9QSUQoeCkgICAgICAgICAgICh4ICsgMSkKKyNkZWZpbmUgUkZDMjUwN19DT01QUkVTU0VEX1RDUF9OT0RFTFRBX1BJRCh4KSAgICh4ICsgMikKKyNkZWZpbmUgUkZDMjUwN19DT01QUkVTU0VEX05PTl9UQ1BfUElEKHgpICAgICAgICh4ICsgMykKKyNkZWZpbmUgUkZDMjUwN19DT05URVhUX1NUQVRFX1BJRCh4KSAgICAgICAgICAgICh4ICsgNCkKKyNkZWZpbmUgUkZDMjUwN19SRUdVTEFSX0hFQURFUl9QSUQgICAgICAgICAgICAgICgweEZFKQorCisvKiBNVVNUIHNraXAgMCBmb3IgVENQIHBhY2tldCBTTiB3aGVuIGNvbXByZXNzaW5nIFRDUCBoZWFkZXIuCisgKiBBbHNvIHVzZWQgZm9yIGRpZmZlcmVudGlhdGlvbiBpbiBSZmMyNTA3UHJvY2Vzc1N0b3JlZFBhY2tldCgpLgorICovCisjZGVmaW5lIElOVkFMSURfVENQX1BTTiAgICAgICAgIDAKKworLyoKKyAqIEEgY29uc3RhbnQgZGVmaW5pbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIElQIHN1Yi1oZWFkZXIgbGVuZ3RoIGZpZWxkcyB0aGF0CisgKiBtYXkgYmUgdXNlZCBmb3IgYSBGVUxMX0hFQURFUiBwYWNrZXQKKyAqLworI2RlZmluZSBGVUxMX0hFQURFUl9NQVhfTEVOR1RIX0ZJRUxEUyAgICAgICAyCisKKy8qCisgKiAgMjAwOS40LjE0IFJvYmVydCBhZGQKKyAqICBNYXguIHN1YmhlYWRlciBudW1iZXIgaW4gU1VCX0hFQURFUl9DSEFJTl9MSVNULgorICovCisjZGVmaW5lIFJGQzI1MDdfTUFYX1NVQl9IRUFERVJfQ0hBSU5fTlVNICAgIDEwCisKKy8qCisgKiBEZWZpbml0aW9ucyBvZiBzcGVjaWFsIHZhbHVlcyBmb3IgVExWLWVuY29kaW5nIG9wdGlvbnMKKyAqLworI2RlZmluZSBUTFZfT1BUSU9OX1RZUEVfUEFEMSAgICAwCisjZGVmaW5lIFRMVl9PUFRJT05fVFlQRV9QQUROICAgIDEKKworLyoKKyAqIENvbnRhbnRzIGZvciBkZXRlcm1pbmluZyB0aGUgdHlwZSBvZiBhbiBJUCBwYWNrZXQKKyAqLworI2RlZmluZSBJUF9WRVJTSU9OX05VTUJFUl9NQVNLICAweEYwCisjZGVmaW5lIElQX1Y0X1ZFUlNJT05fTlVNQkVSICAgIDB4NDAKKyNkZWZpbmUgSVBfVjZfVkVSU0lPTl9OVU1CRVIgICAgMHg2MAorCisvKgorICogQ29uc3RhbnRzIGFuZCBtYWNybyBmb3IgZGV0ZXJtaW5pbmcgdGhlIGxlbmd0aCBvZiBJUF9WNF9TVUJfSEVBREVSCisgKi8KKyNkZWZpbmUgSVBfVjRfSUhMX01BU0sgICAgICAgICAgMHgwRgorI2RlZmluZSBJUF9WNF9NSU5JTVVNX0lITCAgICAgICA1CisjZGVmaW5lIElQX1Y0X0xFTl9PRkZTRVQgICAgICAgIDAKKyNkZWZpbmUgQllURVNfUEVSX0lQX1Y0X0xFTih4KSAgKCgoeCkgJiBJUF9WNF9JSExfTUFTSykgKiA0KQorI2RlZmluZSBJUF9WNF9IQVNfT1BUSU9OUyh4KSAgICAoKCh4KSAmIElQX1Y0X0lITF9NQVNLKSAhPSBJUF9WNF9NSU5JTVVNX0lITCkKKworLyoKKyAqIENvbnN0YW50cyBhbmQgbWFjcm9zIGZvciBkZXRlcm1pbmluZyB0aGF0IHRoZSBJUHY0IHBhY2tldCBpcyBhIGZyYWdtZW50CisgKi8KKyNkZWZpbmUgSVBfVjRfRkxBR1NfT0ZGU0VUICAgICAgNgorI2RlZmluZSBJUF9WNF9GTEFHU19NQVNLICAgICAgICAweEUwCisjZGVmaW5lIElQX1Y0X0ZMQUdTX1NISUZUICAgICAgIDUKKyNkZWZpbmUgSVBfVjRfRkxBR1MoeCkgICAgICAgICAgKCgoeCkgJiBJUF9WNF9GTEFHU19NQVNLKSA+PiBJUF9WNF9GTEFHU19TSElGVCkKKyNkZWZpbmUgSVBfVjRfTUZfRkxBRyAgICAgICAgICAgMHgwMQorI2RlZmluZSBJUF9WNF9NRl9GTEFHX0lTX1NFVCh4KSAoMCAhPSAoSVBfVjRfRkxBR1MoeCkgJiBJUF9WNF9NRl9GTEFHKSkKKyNkZWZpbmUgSVBfVjRfRlJBR01FTlRfRklFTEQgICAgNgorI2RlZmluZSBJUF9WNF9GUkFHTUVOVF9NQVNLICAgICAweDFGRkYKKworLyoKKyAqIE1hY3JvIGZvciBkZXRlcm1pbmluZyB0aGUgcG9zaXRpb24gb2YgdGhlIElQX1Y0X1RZUEVfT0ZfU0VSVklDRSBmaWVsZCBpbiBhCisgKiBJUF9WNF9TVUJfSEVBREVSCisgKi8KKyNkZWZpbmUgSVBfVjRfVFlQRV9PRl9TRVJWSUNFX09GRlNFVCAgICAxCisjZGVmaW5lIElQX1Y0X1RZUEVfT0ZfU0VSVklDRV9ERUZfTUFTSyAgMHhGQworCisvKgorICogTWFjcm8gZm9yIGRldGVybWluaW5nIHBvc2l0aW9ucyBvZiBJUHY0IGZpZWxkcworICovCisjZGVmaW5lIElQX1Y0X1RPVEFMX0xFTkdUSF9PRkZTRVQgICAgICAgMgorI2RlZmluZSBJUF9WNF9JREVOVElGSUNBVElPTl9PRkZTRVQgICAgIDQKKyNkZWZpbmUgSVBfVjRfSURFTlRJRklDQVRJT05fTEVOR1RIICAgICAyCisjZGVmaW5lIElQX1Y0X1BST1RPQ09MX09GRlNFVCAgICAgICAgICAgOQorI2RlZmluZSBJUF9WNF9DSEVDS1NVTV9PRkZTRVQgICAgICAgICAgIDEwCisKKyNkZWZpbmUgSVBfVjRfU1VCX0hFQURFUl9MRU4gICAgICAgICAgICAyMAorI2RlZmluZSBJUF9WNl9TVUJfSEVBREVSX0xFTiAgICAgICAgICAgIDQwCisKKyNkZWZpbmUgSVBfVjZfUEFZTE9BRF9MRU5HVEhfT0ZGU0VUICAgICA0CisjZGVmaW5lIElQX1Y2X1BST1RPQ09MX09GRlNFVCAgICAgICAgICAgNgorI2RlZmluZSBJUF9WNl9BRERSRVNTX0xFTkdUSCAgICAgICAgICAgIDE2CisKKy8qCisgKiBDb25zdGFudCBhbmQgbWFjcm8gdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgSE9QX0JZX0hPUF9PUFRJT05TX1NVQl9IRUFERVIsCisgKiBERVNUSU5BVElPTl9PUFRJT05TX1NVQl9IRUFERVIgYW5kIFJPVVRJTkdfU1VCX0hFQURFUgorICovCisjZGVmaW5lIEhEUl9FWFRfTEVOX09GRlNFVCAgICAgICAgICAgICAgMQorI2RlZmluZSBCWVRFU19QRVJfSERSX0VYVF9MRU4oeCkgICAgICAgICgoKHgpICsgMSkgKiA4KQorCisjZGVmaW5lIFRMVl9PUFRJT05fREFUQV9PRkZTRVQgICAgICAgICAgMgorCisvKgorICogQ29uc3RhbnQgZm9yIGRldGVybWluaW5nIHRoZSB0eXBlIG9mIHRoZSBzdWItaGVhZGVyIGFmdGVyCisgKiBIT1BfQllfSE9QX09QVElPTlNfU1VCX0hFQURFUiwgREVTVElOQVRJT05fT1BUSU9OU19TVUJfSEVBREVSLAorICogUk9VVElOR19TVUJfSEVBREVSLCBGUkFHTUVOVF9TVUJfSEVBREVSIGFuZCBBVVRIRU5USUNBVElPTl9TVUJfSEVBREVSCisgKi8KKyNkZWZpbmUgTkVYVF9IRUFERVJfUFJPVE9DT0xfT0ZGU0VUICAgICAwCisKKy8qCisgKiBDb25zdGFudHMgZGVmaW5pbmcgdGhlIHBvc2l0aW9ucyBvZiB0aGUgInR5cGUiIGFuZCAic2VnbWVudHMgbGVmdCIgZmllbGRzIG9mCisgKiB0aGUgUk9VVElOR19TVUJfSEVBREVSCisgKi8KKyNkZWZpbmUgUk9VVElOR19UWVBFX09GRlNFVCAgICAgICAgICAgICAyCisjZGVmaW5lIFJPVVRJTkdfU0VHTUVOVFNfTEVGVF9PRkZTRVQgICAgMworCisjZGVmaW5lIEZSQUdNRU5UX1NVQl9IRUFERVJfTEVOICAgICAgICAgOAorCisvKgorICogTWFjcm9zIHRvIGRldGVybWluZSB0aGUgbGVuZ3RoIG9mIEFVVEhFTlRJQ0FUSU9OX1NVQl9IRUFERVIKKyAqLworI2RlZmluZSBBVVRIRU5USUNBVElPTl9MRU5fT0ZGU0VUICAgICAgIDEKKyNkZWZpbmUgQllURVNfUEVSX0FVVEhFTlRJQ0FUSU9OX0xFTih4KSAoKCh4KSArIDIpICogNCkKKyNkZWZpbmUgQVVUSEVOVElDQVRJT05fREFUQV9PRkZTRVQgICAgICA4CisKKy8qCisgKiBNYWNyb3MgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgTUlOSU1BTF9FTkNBUFNVTEFUSU9OX1NVQl9IRUFERVIKKyAqLworI2RlZmluZSBNSU5JTUFMX0VOQ0FQU1VMQVRJT05fTEVOX09GRlNFVCAxCisjZGVmaW5lIEJZVEVTX1BFUl9NSU5JTUFMX0VOQ0FQU1VMQVRJT05fTEVOKHgpICAoKCh4KSAmIDB4ODApID8gMTIgOiA4KQorI2RlZmluZSBNSU5JTUFMX0VOQ0FQU1VMQVRJT05fQ0hFQ0tTVU1fT0ZGU0VUIDIKKworI2RlZmluZSBFU1BfU1VCX0hFQURFUl9MRU4gICAgICAgICAgICAgIDQKKworI2RlZmluZSBUQ1BfTEVOX09GRlNFVCAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEJZVEVTX1BFUl9UQ1BfTEVOKHgpICAgICAgICAgICAgKCgoeCkgPj4gNCkgKiA0KQorI2RlZmluZSBNSU5fVENQX1NVQl9IRUFERVJfTEVOICAgICAgICAgIDIwCisKKyNkZWZpbmUgVURQX0xFTkdUSF9PRkZTRVQgICAgICAgICAgICAgICA0CisjZGVmaW5lIFVEUF9DSEVDS1NVTV9PRkZTRVQgICAgICAgICAgICAgNgorI2RlZmluZSBVRFBfQ0hFQ0tTVU1fTEVOR1RIICAgICAgICAgICAgIDIKKyNkZWZpbmUgVURQX1NVQl9IRUFERVJfTEVOICAgICAgICAgICAgICA4CisKKyNkZWZpbmUgUFJPVE9DT0xfTlVNQkVSX1RDUCAgICAgICAgICAgICA2CisKKy8qCisgKiAgMjAwOS40LjE0IFJvYmVydCBhZGQKKyAqICBTdWJoZWFkZXIgY2hhaW4gb3BlcmF0aW9uIG1hY3JvLgorICovCisjZGVmaW5lIEdFVF9TVUJfSERSX0lURU0oX3BMaXN0XywgX0luZGV4XykgXAorICAgICggJigoX3BMaXN0XyktPkhkckl0ZW1bX0luZGV4X10pICkKKworI2RlZmluZSBHRVRfRklSU1RfSERSKF9wTGlzdF8pICBSZmMyNTA3X0dldEZpcnN0U3ViSGRySXRlbSgoU1VCX0hFQURFUl9DSEFJTl9MSVNUICAqKV9wTGlzdF8pCisjZGVmaW5lIEdFVF9MQVNUX0hEUihfcExpc3RfKSAgIFJmYzI1MDdfR2V0TGFzdFN1Ykhkckl0ZW0oKFNVQl9IRUFERVJfQ0hBSU5fTElTVCAgKilfcExpc3RfKQorI2RlZmluZSBHRVRfTkVYVF9IRFIoX3BMaXN0XykgICBSZmMyNTA3X0dldE5leHRTdWJIZHJJdGVtKChTVUJfSEVBREVSX0NIQUlOX0xJU1QgICopX3BMaXN0XykKKyNkZWZpbmUgR0VUX1BSRVZfSERSKF9wTGlzdF8pICAgUmZjMjUwN19HZXRQcmV2U3ViSGRySXRlbSgoU1VCX0hFQURFUl9DSEFJTl9MSVNUICAqKV9wTGlzdF8pCisKKy8qIFJlbWVtYmVyIHRvIG1vZGlmeSB0aGUgbWFwcGluZyB0YWJsZSAqLwordHlwZWRlZiBlbnVtCit7CisgICAgUkZDMjUwN19JTlRfREVDT01QUkVTU19TVUNDRVNTLAorICAgIFJGQzI1MDdfSU5UX0RFQ09NUFJFU1NfU1VDQ0VTU19NT1JFX1RPX0dPLAorICAgIFJGQzI1MDdfVENQX0RFQ09NUFJFU1NfU1VDQ0VTU19SQ1ZfQ09OVEVYVF9TVEFURSwKKyAgICBSRkMyNTA3X1RDUF9ERUNPTVBSRVNTX0ZBSUxfQ0FOTk9UX0NSRUFURV9DSUQsCisgICAgUkZDMjUwN19UQ1BfREVDT01QUkVTU19GQUlMX05PX1BBQ0tFVF9JTl9XSU5ET1csCisgICAgUkZDMjUwN19UQ1BfREVDT01QUkVTU19GQUlMX0NJRF9OT19FWElTVCwKKyAgICBSRkMyNTA3X1RDUF9ERUNPTVBSRVNTX0ZBSUxfQ0FOX0JFX0ZSRUVEX1NFTkRfQ09OVEVYVF9TVEFURSwKKyAgICBSRkMyNTA3X1RDUF9ERUNPTVBSRVNTX0ZBSUxfQ0FOX0JFX0ZSRUVELAorICAgIFJGQzI1MDdfTk9OX1RDUF9ERUNPTVBSRVNTX0ZBSUxfQ0FOX0JFX0ZSRUVELAorICAgIFJGQzI1MDdfTk9OX1RDUF9ERUNPTVBSRVNTX0ZBSUxfU1RPUkVELAorICAgIFJGQzI1MDdfREVDT01QUkVTU19VTktOT1dOX1BJRF9UWVBFLAorICAgIE5PX09GX1JGQzI1MDdfSU5URVJOQUxfREVDT01QUkVTU19SRVNVTFQsCisgICAgSU5WQUxJRF9SRkMyNTA3X0lOVEVSTkFMX0RFQ09NUFJFU1NfUkVTVUxUCit9IFJGQzI1MDdfSU5URVJOQUxfREVDT01QUkVTU19SRVNVTFRfRU5VTTsKKworLyoKKyAqIFNVQl9IRUFERVJfVFlQRTogRW51bWVyYXRpb24gbGlzdGluZyB0aGUgdHlwZXMgb2Ygc3ViLWhlYWRlciBzdXBwb3J0ZWQKKyAqIGFuZCB0aGUgbnVtYmVyIG9mIHN1Yi1oZWFkZXJzIHN1cHBvcnRlZC4KKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgSVBfVjRfU1VCX0hFQURFUiwKKyAgICBJUF9WNl9TVUJfSEVBREVSLAorICAgIEhPUF9CWV9IT1BfT1BUSU9OU19TVUJfSEVBREVSLAorICAgIERFU1RJTkFUSU9OX09QVElPTlNfU1VCX0hFQURFUiwKKyAgICBST1VUSU5HX1NVQl9IRUFERVIsCisgICAgRlJBR01FTlRfU1VCX0hFQURFUiwKKyAgICBBVVRIRU5USUNBVElPTl9TVUJfSEVBREVSLAorICAgIEVTUF9TVUJfSEVBREVSLCAgICAgICAgICAgICAgICAgICAgIC8qIEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCAqLworICAgIE1JTklNQUxfRU5DQVBTVUxBVElPTl9TVUJfSEVBREVSLAorICAgIFRDUF9TVUJfSEVBREVSLAorICAgIFVEUF9TVUJfSEVBREVSLAorICAgIE5PX05FWFRfU1VCX0hFQURFUiwKKyAgICBOT19TVUJfSEVBREVSUworfSBTVUJfSEVBREVSX1RZUEU7CisKKy8qCisgKiBTVUJfSEVBREVSX0xJU1Q6IFN0cnVjdHVyZSB1c2VkIGZvciBsaXN0cyBvZiBzdWItaGVhZGVycyBpbiBDSUQgaW5mb3JtYXRpb24KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2ICAgICAgT2Zmc2V0OyAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogT2Zmc2V0IG9mIHRoZSBzdGFydCBvZiB0aGUgc3ViLWhlYWRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgU0RVIChpbiBieXRlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgU1VCX0hFQURFUl9UWVBFIFR5cGU7ICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoZSB0eXBlIG9mIHRoZSBzdWItaGVhZGVyIGF0IHRoaXMgb2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBTVUJfSEVBREVSX0xJU1Q7CisKKy8qCisgKiBGSUVMRF9DT01QUkVTU0lPTl9UWVBFOiBFbnVtZXJhdGlvbiBsaXN0aW5nIHRoZSBmaWVsZCB0eXBlcyBmb3IgY29tcHJlc3Npb24KKyAqIGFuZCBkZWNvbXByZXNzaW9uIG9mIHN1Yi1oZWFkZXJzCisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIE5PQ0hBTkdFX0ZJRUxELAorICAgIERFTFRBX0ZJRUxELAorICAgIFJBTkRPTV9GSUVMRCwKKyAgICBJTkZFUlJFRF9GSUVMRAorfSBGSUVMRF9DT01QUkVTU0lPTl9UWVBFOworCisvKgorICogRklFTERfREVGSU5JTkdfVFlQRTogRW51bWVyYXRpb24gbGlzdGluZyB0aGUgZmllbGQgdHlwZXMgZm9yIGRlZmluaW5nIHBhY2tldAorICogc3RyZWFtcyBmb3IgY29tcHJlc3Npb24gb2Ygc3ViLWhlYWRlcnMKKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgTk9UX0RFRl9GSUVMRCwKKyAgICBERUZfRklFTEQsCisgICAgUk9VVElOR19UWVBFXzBfREVGX0ZJRUxECit9IEZJRUxEX0RFRklOSU5HX1RZUEU7CisKKy8qCisgKiBGSUVMRF9JTkZPOiBTdHJ1Y3R1cmUgdG8gaG9sZCBpbmZvcm1hdGlvbiBvbiB0aGUgZmllbGRzIGluIGEgc3ViLWhlYWRlcgorICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgICAgICAgICAgICAgIFN0YXJ0OyAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmaWVsZCBpbiB0ZXJtcyBvZiBiaXRzIGZyb20gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RhcnQgb2YgdGhlIHN1Yi1oZWFkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBrYWxfdWludDggICAgICAgICAgICAgICBMZW5ndGg7ICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoZSBsZW5ndGggb2YgdGhlIGZpZWxkIGluIGJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGSUVMRF9DT01QUkVTU0lPTl9UWVBFICBUeXBlOyAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoZSB0eXBlIG9mIHRoZSBmaWVsZCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjb21wcmVzc2lvbiBwdXJwb3NlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEZJRUxEX0RFRklOSU5HX1RZUEUgICAgIERlZmluaW5nOyAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogSW5kaWNhdGVzIGhvdyB0aGlzIGZpZWxkIGlzIHVzZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBkZWZpbmluZyB0aGUgcGFja2V0IHN0cmVhbSAoQ0lEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBGSUVMRF9JTkZPOworCisvKgorICogU1VCX0hFQURFUl9JTkZPOiBTdHJ1Y3R1cmUgdG8gaG9sZCBpbmZvcm1hdGlvbiBvbiB0aGUgc3ViLWhlYWRlcnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBTVUJfSEVBREVSX1RZUEUgICAgIFR5cGU7ICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEEgdW5pcXVlIGlkZW50aWZpZXIgaW5kaWNhdGluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0eXBlIG9mIHRoZSBzdWItaGVhZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAga2FsX3VpbnQ4ICAgICAgICAgICBQcm90b2NvbDsgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGZpZWxkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHByZXZpb3VzIHN1Yi1oZWFkZXIgdGhhdCBpZGVudGlmaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhpcyB0eXBlIHN1Yi1oZWFkZXIgZm9sbG93cy4gTm90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbmVjZXNzYXJpbHkgdW5pcXVlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGthbF91aW50OCAgICAgICAgICAgTm9GaWVsZHM7ICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogVGhlIG51bWJlciBvZiBmaWVsZHMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3ViLWhlYWRlciwgaW5kaWNhdGluZyB0aGUgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb2YgZWxlbWVudHMgaW4gdGhlIEZpZWxkSW5mbyBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoYXQgZm9sbG93cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGNvbnN0IEZJRUxEX0lORk8gICAqRmllbGRJbmZvOyAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQW4gYXJyYXkgb2Ygc3RydWN0dXJlcywgd2l0aCBlYWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZWxlbWVudCBpbiB0aGUgYXJyYXkgZGVzY3JpYmluZyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZmllbGQgd2l0aGluIHRoZSBzdWItaGVhZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IFNVQl9IRUFERVJfSU5GTzsKKworCisvKgorICogSVBfVjRfRklFTERTOiBFbnVtZXJhdGlvbiBsaXN0aW5nIHRoZSBmaWVsZHMgaW4gYW4gSVB2NCBzdWItaGVhZGVyLCBhY3RpbmcgYXMKKyAqIGFuIGluZGV4IHRvIHRoZSBSZmMyNTA3U3ViSGVhZGVySW5mb1tJUF9WNF9TVUJfSEVBREVSXS5GaWVsZEluZm8gYXJyYXkgb2YgRklFTERfSU5GTywgd2l0aCB0aGUgbGFzdCBpdGVtIGluCisgKiB0aGlzIGVudW1lcmF0aW9uIGRlZmluaW5nIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhhdCBhcnJheQorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBJUF9WNF9WRVJTSU9OLAorICAgIElQX1Y0X0lITCwKKyAgICBJUF9WNF9UWVBFX09GX1NFUlZJQ0UsCisgICAgSVBfVjRfVE9UQUxfTEVOR1RILAorICAgIElQX1Y0X0lERU5USUZJQ0FUSU9OLAorICAgIElQX1Y0X0ZMQUcsCisgICAgSVBfVjRfRlJBR01FTlRfT0ZGU0VULAorICAgIElQX1Y0X1RJTUVfVE9fTElWRSwKKyAgICBJUF9WNF9QUk9UT0NPTCwKKyAgICBJUF9WNF9IRUFERVJfQ0hFQ0tTVU0sCisgICAgSVBfVjRfU09VUkNFX0FERFJFU1MsCisgICAgSVBfVjRfREVTVElOQVRJT05fQUREUkVTUywKKyAgICBOT19JUF9WNF9GSUVMRFMKK30gSVBfVjRfRklFTERTOworCisvKgorICogSVBfVjZfRklFTERTOiBFbnVtZXJhdGlvbiBsaXN0aW5nIHRoZSBmaWVsZHMgaW4gYW4gSVB2NiBzdWItaGVhZGVyLCBhY3RpbmcgYXMKKyAqIGFuIGluZGV4IHRvIHRoZSBSZmMyNTA3U3ViSGVhZGVySW5mb1tJUF9WNl9TVUJfSEVBREVSXS5GaWVsZEluZm8gYXJyYXkgb2YgRklFTERfSU5GTywgd2l0aCB0aGUgbGFzdCBpdGVtIGluCisgKiB0aGlzIGVudW1lcmF0aW9uIGRlZmluaW5nIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhhdCBhcnJheQorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBJUF9WNl9WRVJTSU9OLAorICAgIElQX1Y2X1RSQUZGSUNfQ0xBU1MsCisgICAgSVBfVjZfRkxPV19MQUJFTCwKKyAgICBJUF9WNl9QQVlMT0FEX0xFTkdUSCwKKyAgICBJUF9WNl9ORVhUX0hFQURFUiwKKyAgICBJUF9WNl9IT1BfTElNSVQsCisgICAgSVBfVjZfU09VUkNFX0FERFJFU1MsCisgICAgSVBfVjZfREVTVElOQVRJT05fQUREUkVTUywKKyAgICBOT19JUF9WNl9GSUVMRFMKK30gSVBfVjZfRklFTERTOworCisvKgorICogSE9QX0JZX0hPUF9PUFRJT05TX0ZJRUxEUzogRW51bWVyYXRpb24gbGlzdGluZyB0aGUgZmllbGRzIGluIGEgaG9wLWJ5LWhvcAorICogb3B0aW9ucyBzdWItaGVhZGVyLCBhY3RpbmcgYXMgYW4gaW5kZXggdG8gdGhlIFJmYzI1MDdTdWJIZWFkZXJJbmZvW0hPUF9CWV9IT1BfT1BUSU9OU19TVUJfSEVBREVSXS5GaWVsZEluZm8KKyAqIGFycmF5IG9mIEZJRUxEX0lORk8sIHdpdGggdGhlIGxhc3QgaXRlbSBpbiB0aGlzIGVudW1lcmF0aW9uIGRlZmluaW5nIHRoZQorICogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoYXQgYXJyYXkKKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgSE9QX0JZX0hPUF9PUFRJT05TX05FWFRfSEVBREVSLAorICAgIEhPUF9CWV9IT1BfT1BUSU9OU19IRFJfRVhUX0xFTiwKKyAgICBIT1BfQllfSE9QX09QVElPTlNfT1BUSU9OX1RZUEUsCisgICAgSE9QX0JZX0hPUF9PUFRJT05TX09QVElPTl9MRU5HVEgsCisgICAgSE9QX0JZX0hPUF9PUFRJT05TX09QVElPTl9EQVRBLAorICAgIE5PX0hPUF9CWV9IT1BfT1BUSU9OU19GSUVMRFMKK30gSE9QX0JZX0hPUF9PUFRJT05TX0ZJRUxEUzsKKworLyoKKyAqIERFU1RJTkFUSU9OX09QVElPTlNfRklFTERTOiBFbnVtZXJhdGlvbiBsaXN0aW5nIHRoZSBmaWVsZHMgaW4gYSBob3AtYnktaG9wCisgKiBvcHRpb25zIHN1Yi1oZWFkZXIsIGFjdGluZyBhcyBhbiBpbmRleCB0byB0aGUgUmZjMjUwN1N1YkhlYWRlckluZm9bSE9QX0JZX0hPUF9PUFRJT05TX1NVQl9IRUFERVJdLkZpZWxkSW5mbworICogYXJyYXkgb2YgRklFTERfSU5GTywgd2l0aCB0aGUgbGFzdCBpdGVtIGluIHRoaXMgZW51bWVyYXRpb24gZGVmaW5pbmcgdGhlCisgKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhhdCBhcnJheQorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBERVNUSU5BVElPTl9PUFRJT05TX05FWFRfSEVBREVSLAorICAgIERFU1RJTkFUSU9OX09QVElPTlNfSERSX0VYVF9MRU4sCisgICAgREVTVElOQVRJT05fT1BUSU9OU19PUFRJT05fVFlQRSwKKyAgICBERVNUSU5BVElPTl9PUFRJT05TX09QVElPTl9MRU5HVEgsCisgICAgREVTVElOQVRJT05fT1BUSU9OU19PUFRJT05fREFUQSwKKyAgICBOT19ERVNUSU5BVElPTl9PUFRJT05TX0ZJRUxEUworfSBERVNUSU5BVElPTl9PUFRJT05TX0ZJRUxEUzsKKworLyoKKyAqIFJPVVRJTkdfRklFTERTOiBFbnVtZXJhdGlvbiBsaXN0aW5nIHRoZSBmaWVsZHMgaW4gYSByb3V0aW5nIHN1Yi1oZWFkZXIsCisgKiBhY3RpbmcgYXMgYW4gaW5kZXggdG8gdGhlIFJmYzI1MDdTdWJIZWFkZXJJbmZvW1JPVVRJTkdfU1VCX0hFQURFUl0uRmllbGRJbmZvIGFycmF5IG9mIEZJRUxEX0lORk8sIHdpdGggdGhlCisgKiBsYXN0IGl0ZW0gaW4gdGhpcyBlbnVtZXJhdGlvbiBkZWZpbmluZyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoYXQgYXJyYXkKKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgUk9VVElOR19ORVhUX0hFQURFUiwKKyAgICBST1VUSU5HX0hEUl9FWFRfTEVOLAorICAgIFJPVVRJTkdfUk9VVElOR19UWVBFLAorICAgIFJPVVRJTkdfU0VHTUVOVFNfTEVGVCwKKyAgICBST1VUSU5HX1RZUEVfU1BFQ0lGSUNfREFUQSwKKyAgICBOT19ST1VUSU5HX0ZJRUxEUworfSBST1VUSU5HX0ZJRUxEUzsKKworLyoKKyAqIEZSQUdNRU5UX0ZJRUxEUzogRW51bWVyYXRpb24gbGlzdGluZyB0aGUgZmllbGRzIGluIGEgZnJhZ21lbnQgc3ViLWhlYWRlciwKKyAqIGFjdGluZyBhcyBhbiBpbmRleCB0byB0aGUgUmZjMjUwN1N1YkhlYWRlckluZm9bRlJBR01FTlRfU1VCX0hFQURFUl0uRmllbGRJbmZvIGFycmF5IG9mIEZJRUxEX0lORk8sIHdpdGggdGhlCisgKiBsYXN0IGl0ZW0gaW4gdGhpcyBlbnVtZXJhdGlvbiBkZWZpbmluZyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoYXQgYXJyYXkKKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgRlJBR01FTlRfTkVYVF9IRUFERVIsCisgICAgRlJBR01FTlRfUkVTRVJWRUQsCisgICAgRlJBR01FTlRfT0ZGU0VULAorICAgIEZSQUdNRU5UX1JFUywKKyAgICBGUkFHTUVOVF9NLAorICAgIEZSQUdNRU5UX0lERU5USUZJQ0FUSU9OLAorICAgIE5PX0ZSQUdNRU5UX0ZJRUxEUworfSBGUkFHTUVOVF9GSUVMRFM7CisKKy8qCisgKiBBVVRIRU5USUNBVElPTl9GSUVMRFM6IEVudW1lcmF0aW9uIGxpc3RpbmcgdGhlIGZpZWxkcyBpbiBhIGF1dGhlbnRpZmljYXRpb24KKyAqIHN1Yi1oZWFkZXIsIGFjdGluZyBhcyBhbiBpbmRleCB0byB0aGUgUmZjMjUwN1N1YkhlYWRlckluZm9bQVVUSEVOVElDQVRJT05fU1VCX0hFQURFUl0uRmllbGRJbmZvIGFycmF5IG9mCisgKiBGSUVMRF9JTkZPLCB3aXRoIHRoZSBsYXN0IGl0ZW0gaW4gdGhpcyBlbnVtZXJhdGlvbiBkZWZpbmluZyB0aGUgbnVtYmVyIG9mCisgKiBlbGVtZW50cyBpbiB0aGF0IGFycmF5CisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIEFVVEhFTlRJQ0FUSU9OX05FWFRfSEVBREVSLAorICAgIEFVVEhFTlRJQ0FUSU9OX0xFTkdUSCwKKyAgICBBVVRIRU5USUNBVElPTl9SRVNFUlZFRCwKKyAgICBBVVRIRU5USUNBVElPTl9TUEksCisgICAgQVVUSEVOVElDQVRJT05fREFUQSwKKyAgICBOT19BVVRIRU5USUNBVElPTl9GSUVMRFMKK30gQVVUSEVOVElDQVRJT05fRklFTERTOworCisvKgorICogRVNQX0ZJRUxEUzogRW51bWVyYXRpb24gbGlzdGluZyB0aGUgZmllbGRzIGluIGEgRVNQIHN1Yi1oZWFkZXIsIGFjdGluZyBhcyBhbgorICogaW5kZXggdG8gdGhlIEVzcFN1YkhlYWRlckZpZWxkIGFycmF5IG9mIEZJRUxEX0lORk8sIHdpdGggdGhlIGxhc3QgaXRlbSBpbgorICogdGhpcyBlbnVtZXJhdGlvbiBkZWZpbmluZyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoYXQgYXJyYXkKKyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgRVNQX1NQSSwKKyAgICBFU1BfREFUQSwKKyAgICBOT19FU1BfRklFTERTCit9IEVTUF9GSUVMRFM7CisKKy8qCisgKiBNSU5JTUFMX0VOQ0FQU1VMQVRJT05fRklFTERTOiBFbnVtZXJhdGlvbiBsaXN0aW5nIHRoZSBmaWVsZHMgaW4gYSBtaW5pbWFsCisgKiBlbmNhcHN1bGF0aW9uIHN1Yi1oZWFkZXIsIGFjdGluZyBhcyBhbiBpbmRleCB0byB0aGUKKyAqIFJmYzI1MDdTdWJIZWFkZXJJbmZvW01JTklNQUxfRU5DQVBTVUxBVElPTl9TVUJfSEVBREVSXS5GaWVsZEluZm8gYXJyYXkgb2YgRklFTERfSU5GTywgd2l0aCB0aGUgbGFzdCBpdGVtIGluCisgKiB0aGlzIGVudW1lcmF0aW9uIGRlZmluaW5nIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhhdCBhcnJheQorICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBNSU5JTUFMX0VOQ0FQU1VMQVRJT05fUFJPVE9DT0wsCisgICAgTUlOSU1BTF9FTkNBUFNVTEFUSU9OX1NfQklULAorICAgIE1JTklNQUxfRU5DQVBTVUxBVElPTl9SRVNFUlZFRCwKKyAgICBNSU5JTUFMX0VOQ0FQU1VMQVRJT05fSEVBREVSX0NIRUNLU1VNLAorICAgIE1JTklNQUxfRU5DQVBTVUxBVElPTl9PUklHX0RFU1RfQUREUiwKKyAgICBNSU5JTUFMX0VOQ0FQU1VMQVRJT05fT1JJR19TUkNfQUREUiwKKyAgICBOT19NSU5JTUFMX0VOQ0FQU1VMQVRJT05fRklFTERTCit9IE1JTklNQUxfRU5DQVBTVUxBVElPTl9GSUVMRFM7CisKKy8qCisgKiBUQ1BfRklFTERTOiBFbnVtZXJhdGlvbiBsaXN0aW5nIHRoZSBmaWVsZHMgaW4gYSBUQ1Agc3ViLWhlYWRlciwgYWN0aW5nIGFzIGFuCisgKiBpbmRleCB0byB0aGUgUmZjMjUwN1N1YkhlYWRlckluZm9bVENQX1NVQl9IRUFERVJdLkZpZWxkSW5mbyBhcnJheSBvZiBGSUVMRF9JTkZPLCB3aXRoIHRoZSBsYXN0IGl0ZW0gaW4KKyAqIHRoaXMgZW51bWVyYXRpb24gZGVmaW5pbmcgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGF0IGFycmF5CisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIFRDUF9TT1VSQ0VfUE9SVCwKKyAgICBUQ1BfREVTVElOQVRJT05fUE9SVCwKKyAgICBUQ1BfU0VRVUVOQ0VfTlVNQkVSLAorICAgIFRDUF9BQ0tOT1dMRURHRU1FTlRfTlVNQkVSLAorICAgIFRDUF9EQVRBX09GRlNFVCwKKyAgICBUQ1BfUkVTRVJWRUQsCisgICAgVENQX0ZMQUdTLAorICAgIFRDUF9XSU5ET1csCisgICAgVENQX0NIRUNLU1VNLAorICAgIFRDUF9VUkdFTlRfUE9JTlRFUiwKKyAgICBUQ1BfT1BUSU9OUywKKyAgICBOT19UQ1BfRklFTERTCit9IFRDUF9GSUVMRFM7CisKKy8qCisgKiBVRFBfRklFTERTOiBFbnVtZXJhdGlvbiBsaXN0aW5nIHRoZSBmaWVsZHMgaW4gYSBVRFAgc3ViLWhlYWRlciwgYWN0aW5nIGFzIGFuCisgKiBpbmRleCB0byB0aGUgUmZjMjUwN1N1YkhlYWRlckluZm9bVURQX1NVQl9IRUFERVJdLkZpZWxkSW5mbyBhcnJheSBvZiBGSUVMRF9JTkZPLCB3aXRoIHRoZSBsYXN0IGl0ZW0gaW4KKyAqIHRoaXMgZW51bWVyYXRpb24gZGVmaW5pbmcgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGF0IGFycmF5CisgKi8KK3R5cGVkZWYgZW51bQoreworICAgIFVEUF9TT1VSQ0VfUE9SVCwKKyAgICBVRFBfREVTVElOQVRJT05fUE9SVCwKKyAgICBVRFBfTEVOR1RILAorICAgIFVEUF9DSEVDS1NVTSwKKyAgICBOT19VRFBfRklFTERTCit9IFVEUF9GSUVMRFM7CisKKy8qCisgKiBTVUJfSEVBREVSX0NIQUlOX0lORk86IHN0cnVjdHVyZSBmb3IgaXRlbXMgaW4gYSBsaW5rZWQgbGlzdCBkZXNjcmliaW5nIHRoZQorICogc3ViLWhlYWRlcnMgaW4gYW4gSVAgcGFja2V0CisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgU1VCX0hFQURFUl9UWVBFIFR5cGU7ICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGUgdHlwZSBvZiB0aGUgc3ViLWhlYWRlci4gSW5kZXggdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogUmZjMjUwN1N1YkhlYWRlckluZm8gYXJyYXkgb2Ygc3RydWN0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBrYWxfdWludDE2ICAgICAgU3RhcnQ7ICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoZSBieXRlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdGhlIHN1Yi1oZWFkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgSVAgcGFja2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAga2FsX3VpbnQxNiAgICAgIExlbmd0aDsgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBzdWItaGVhZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IFNVQl9IRUFERVJfQ0hBSU5fSU5GTzsKKworLyoKKyAqICAyMDA5LjQuMTQgUm9iZXJ0IGFkZAorICogIFVzZSBhcnJheSB0byByZXBsYWNlIERsaXN0IHF1ZXVlCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBIZHJJdGVtQ291bnQ7ICAgIC8qIENvdW50IG9mIHRoZSBzdWItaGVhZGVyLiAqLworICAgIGthbF91aW50OCAgICAgICAgICAgICAgSGRySXRlbUN1cnJJZHg7ICAvKiBpbmRleCBvZiBDdXJyZW50IGl0ZW0uICovCisKKyAgICBTVUJfSEVBREVSX0NIQUlOX0lORk8gIEhkckl0ZW1bUkZDMjUwN19NQVhfU1VCX0hFQURFUl9DSEFJTl9OVU1dOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogVGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBzdGFydCBvZiB0aGUgc3ViLWhlYWRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBJUCBwYWNrZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gU1VCX0hFQURFUl9DSEFJTl9MSVNUOworCit0eXBlZGVmIHN0cnVjdCBfV2luZG93SGVhZGVyCit7CisgICAgc3RydWN0IF9XaW5kb3dIZWFkZXIgKnBOZXh0OworICAgIHN0cnVjdCBfV2luZG93SGVhZGVyICpwUHJldjsKKyAgICBrYWxfdWludDggKnBQYWNrZXQ7CisgICAga2FsX3VpbnQxNiBQYWNrZXRMZW47CisgICAga2FsX3VpbnQxNiBQYWNrZXRPZmZzZXQ7CisgICAga2FsX3VpbnQ4IFBpZDsKKyAgICBrYWxfdWludDggUGFja2V0SW5mbzsKKyAgICBrYWxfdWludDggTDJIZHJMZW5ndGg7CisgICAgdW5pb24KKyAgICB7CisgICAgICAgIFJGQzI1MDdfVElNRV9PRl9EQVkgUGFja2V0VGltZTsKKyAgICAgICAga2FsX3VpbnQzMiB1d1NlcXVlbmNlTm87CisgICAgfSB1bmk7Cit9IFdpbmRvd0hlYWRlcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDggdUNvdW50OworICAgIFdpbmRvd0hlYWRlciAqcEhlYWQ7CisgICAgV2luZG93SGVhZGVyICpwVGFpbDsKK30gV2luZG93TGlzdDsKKworLyoqKioqKioqKioqIEZVTkNUSU9OIERFQ0xBUkFUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0lOTElORV9NT0RJRklFUiBJTkxJTkUgdm9pZCBSZmMyNTA3X09TX0N1cnJlbnRUaW1lKFJGQzI1MDdfVElNRV9PRl9EQVkgKmN1cnJlbnRUaW1lSW5UaWNrcykKK3sKKyAgICAqY3VycmVudFRpbWVJblRpY2tzID0ga2FsX2dldF9zeXN0aWNrcygpOworfQorCitleHRlcm4gdm9pZCBSZmMyNTA3X0NpZEluZm9JbnNlcnRBdFN0YXJ0KFJGQzI1MDdfQ0lEX0xJU1QgKnBDaWRJbmZvTGlzdCxSRkMyNTA3X0NPTU1PTl9DSUQgKnBOZXdDaWRJbmZvKTsKK2V4dGVybiB2b2lkIFJmYzI1MDdfQ2lkSW5mb0luc2VydEF0RW5kKFJGQzI1MDdfQ0lEX0xJU1QgKnBDaWRJbmZvTGlzdCxSRkMyNTA3X0NPTU1PTl9DSUQgKnBOZXdDaWRJbmZvKTsKK2V4dGVybiB2b2lkIFJmYzI1MDdfQ2lkSW5mb0luc2VydEF0QmVmb3JlKFJGQzI1MDdfQ0lEX0xJU1QgKnBDaWRJbmZvTGlzdCwgUkZDMjUwN19DT01NT05fQ0lEICpwQ3VyckNpZEluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkZDMjUwN19DT01NT05fQ0lEICpwTmV3Q2lkSW5mbyk7CitleHRlcm4gdm9pZCBSZmMyNTA3X0NpZEluZm9EZWxldGVGcm9tTGlzdChSRkMyNTA3X0NJRF9MSVNUICpwQ2lkSW5mb0xpc3QsIFJGQzI1MDdfQ09NTU9OX0NJRCAqcENpZEluZm8pOworZXh0ZXJuIFNVQl9IRUFERVJfQ0hBSU5fSU5GTyogUmZjMjUwN19HZXRGaXJzdFN1Ykhkckl0ZW0oU1VCX0hFQURFUl9DSEFJTl9MSVNUICpwU3ViSGRyTGlzdCApOworZXh0ZXJuIFNVQl9IRUFERVJfQ0hBSU5fSU5GTyogUmZjMjUwN19HZXRMYXN0U3ViSGRySXRlbShTVUJfSEVBREVSX0NIQUlOX0xJU1QgKnBTdWJIZHJMaXN0ICk7CitleHRlcm4gU1VCX0hFQURFUl9DSEFJTl9JTkZPKiBSZmMyNTA3X0dldE5leHRTdWJIZHJJdGVtKFNVQl9IRUFERVJfQ0hBSU5fTElTVCAqcFN1Ykhkckxpc3QgKTsKK2V4dGVybiBTVUJfSEVBREVSX0NIQUlOX0lORk8qIFJmYzI1MDdfR2V0UHJldlN1Ykhkckl0ZW0oU1VCX0hFQURFUl9DSEFJTl9MSVNUICpwU3ViSGRyTGlzdCApOworZXh0ZXJuIHZvaWQgUmZjMjUwN19HZXRTdWJIZWFkZXJDaGFpbkluZm8oUkZDMjUwN19FTlRJVFlfSU5GTyAqcEVudGl0eSwga2FsX3VpbnQ4KiBwUGFja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VCX0hFQURFUl9DSEFJTl9MSVNUICpwU3ViSGRyTGlzdCApOworZXh0ZXJuIGthbF9ib29sIFJmYzI1MDdfSVB2NElzRnJhZ21lbnQoa2FsX3VpbnQ4ICpTdWJIZWFkZXIpOworZXh0ZXJuIGthbF9ib29sIFJmYzI1MDdfSVB2NElzUmFuZG9tKGthbF91aW50OCAqU3ViSGVhZGVyKTsKK2V4dGVybiBrYWxfdWludDE2IFJmYzI1MDdDYWxjdWxhdGVJcENoZWNrc3VtKGthbF91aW50OCAqcERhdGEsIGthbF91aW50MzIgbGVuZ3RoKTsKK2V4dGVybiBrYWxfYm9vbCBSZmMyNTA3X0NvbXBhcmVTdWJIZWFkZXJDaGFpbnMoa2FsX3VpbnQ4ICAqQ2hhaW4xLCBTVUJfSEVBREVSX0NIQUlOX0xJU1QgKnBTdWJIZHJMaXN0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAqQ2hhaW4yLCBTVUJfSEVBREVSX0NIQUlOX0xJU1QgKnBTdWJIZHJMaXN0Mik7CitleHRlcm4ga2FsX3VpbnQxNiBSZmMyNTA3X0NvbXByZXNzT3B0aW9ucyhrYWxfdWludDggKmRlc3QsIGthbF91aW50MzIgY29tcEhkck9mZnNldCwgY29uc3Qga2FsX3VpbnQ4ICpzcmMsIGNvbnN0IGthbF91aW50OCAqc2F2ZWQsIGthbF91aW50MTYgc2l6ZSk7CitleHRlcm4ga2FsX3VpbnQxNiBSZmMyNTA3X0RlY29tcHJlc3NPcHRpb25zKGthbF91aW50OCAqc2F2ZWQsIGNvbnN0IGthbF91aW50OCAqc3JjLCBrYWxfdWludDE2IHNpemUpOworZXh0ZXJuIGthbF9ib29sIFJmYzI1MDdDb250ZXh0SGFzQ2hhbmdlZChrYWxfdWludDggKnBJbnB1dFNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICpwU2F2ZWRIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQl9IRUFERVJfQ0hBSU5fTElTVCAqcFNhdmVkU3ViSGRyTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VCX0hFQURFUl9DSEFJTl9MSVNUICpwR2l2ZW5TdWJIZHJMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfYm9vbCBpc1RjcENvbnRleHQpOworZXh0ZXJuIGthbF91aW50MTYgUmZjMjUwN0NhbGN1bGF0ZUNoZWNrc3VtKGthbF91aW50OCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQxNiBkYXRhTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAqcFBzZXVkb0hlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDE2IHBzZXVkb0hlYWRlckxlbmd0aCk7CitleHRlcm4gdm9pZCBSZmMyNTA3SW5mZXJGaWVsZHMoU1VCX0hFQURFUl9DSEFJTl9MSVNUICpwU3ViSGRyTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggKnBSZWNvbnN0aXR1dGVkUGFja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MTYgdXdQYWNrZXRMZW5ndGgpOworZXh0ZXJuIGthbF9ib29sIFJmYzI1MDdJbml0U3RvcmVkUGFja2V0KFJGQzI1MDdfREVDT01QUkVTU19JTlBVVF9JTkZPICpwSW5wdXQsIFdpbmRvd0xpc3QgKnBMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MzIgdW5pb25WYWx1ZSwgV2luZG93SGVhZGVyICoqcFN0b3JlZFBhY2tldCk7CitleHRlcm4gdm9pZCBSZmMyNTA3RW1wdHlXaW5kb3coUkZDMjUwN19FTlRJVFlfSU5GTyAqcEVudGl0eSwgV2luZG93TGlzdCAqcExpc3QpOworZXh0ZXJuIHZvaWQgUmZjMjUwN0RlbGV0ZVN0b3JlZFBhY2tldChXaW5kb3dMaXN0ICpwTGlzdCwgV2luZG93SGVhZGVyICpwV2luZG93SXRlbSk7CitleHRlcm4ga2FsX3VpbnQ4IFJmYzI1MDdQcm9jZXNzU3RvcmVkUGFja2V0KFJGQzI1MDdfREVDT01QUkVTU19JTlBVVF9JTkZPICpwSW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvd0xpc3QgKnBMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDE2IHRjcEV4cGVjdGVkUGFja2V0U24pOworZXh0ZXJuIGthbF91aW50MTYgUmZjMjUwN1JlY29uc0lwdjRTdWJIZWFkZXIoa2FsX3VpbnQ4ICpwU2F2ZWRIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggKnBQb3NSZWNlaXZlZEhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQl9IRUFERVJfQ0hBSU5fTElTVCAqcFN1Ykhkckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUJfSEVBREVSX0NIQUlOX0lORk8gKnBJdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX2Jvb2wgaXNUY3BEZWx0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MTYgKnBTYXZlZEhlYWRlckxlbmd0aCk7CitleHRlcm4ga2FsX3VpbnQxNiBSZmMyNTA3RGVjb21wcmVzc1JhbmRvbUZpZWxkKGthbF91aW50OCAqcFNhdmVkSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggKnBQb3NuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUJfSEVBREVSX0NIQUlOX0xJU1QgKnBTdWJIZHJMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDE2ICpwU2F2ZWRIZWFkZXJMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF9ib29sIGlzVGNwRGVsdGEpOworZXh0ZXJuIGthbF9ib29sIFJmYzI1MDdDb21wcmVzc1JhbmRvbUZpZWxkKFJGQzI1MDdfQ09NUFJFU1NfSU5QVVRfSU5GTyAqcElucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQl9IRUFERVJfQ0hBSU5fTElTVCAqcFN1Ykhkckxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICpwU2F2ZWRIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICpwUG9zbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDMyICpwQ29tcEhkck9mZnNldCk7CitrYWxfdWludDggUmZjMjUwN19CaWdFbmRHZXQ4KGthbF91aW50OCAqcGJTb3VyY2UpOwora2FsX3VpbnQxNiBSZmMyNTA3X0JpZ0VuZEdldDE2KGthbF91aW50OCAqYWJTb3VyY2UpOwora2FsX3VpbnQzMiBSZmMyNTA3X0JpZ0VuZEdldDMyKGthbF91aW50OCAqYWJTb3VyY2UpOwordm9pZCBSZmMyNTA3X0JpZ0VuZFNldDE2KGthbF91aW50MTYgdXNTb3VyY2UsIGthbF91aW50OCAqYWJEZXN0aW5hdGlvbik7Cit2b2lkIFJmYzI1MDdfQmlnRW5kU2V0MzIoa2FsX3VpbnQzMiB1bFNvdXJjZSwga2FsX3VpbnQ4ICphYkRlc3RpbmF0aW9uKTsKKworLyoqKioqIEdMT0JBTCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gY29uc3QgU1VCX0hFQURFUl9JTkZPIFJmYzI1MDdTdWJIZWFkZXJJbmZvW05PX1NVQl9IRUFERVJTXTsKK2V4dGVybiBjb25zdCBrYWxfdWludDggYVJmYzI1MDdEZWNvbXByZXNzUmVzdWx0TWFwcGluZ1RhYmxlW05PX09GX1JGQzI1MDdfSU5URVJOQUxfREVDT01QUkVTU19SRVNVTFRdOworCisjaWZkZWYgX19SRkMyNTA3X1BEQ1BfVVRfXworZXh0ZXJuIGthbF91aW50OCBQRENQX1VUX1NMSURJTkdfV0lORE9XX1NJWkVfZzsKKyNlbmRpZgorCisjZW5kaWYgLyogX1JGQzI1MDdfTElCX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmZjMjUwN19saWJfdGVzdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JmYzI1MDdfbGliX3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTllZmIxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JmYzI1MDdfbGliX3Rlc3QuaApAQCAtMCwwICsxLDM1OCBAQAorI2lmbmRlZiBfX1JGQzI1MDdfTElCX1RFU1RfSF9fCisjZGVmaW5lIF9fUkZDMjUwN19MSUJfVEVTVF9IX18KKworI2RlZmluZSBSRkMyNTA3X0RCR19NQVhfTlVNQkVSX0JVRkZFUl9BTExPQyAzMDAKKyNkZWZpbmUgTUFYX05VTV9PRl9QQUNLRVRTICA2CisjZGVmaW5lIE1BWF9MRU5fT0ZfUEFDS0VUICAgMTI4CisKK3N0cnVjdCByZmMyNTA3X2N0cmxfYnVmZl9kYmdfc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiBhZGRyZXNzOworICAgIGthbF9ib29sIGFsbG9jOworICAgIGthbF9jaGFyICpmaWxlX25hbWU7CisgICAga2FsX3VpbnQzMiBsaW5lOworfTsKKworc3RydWN0IHJmYzI1MDdfY3RybF9idWZmX3NpemVfaW5mb19zdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyIGJ1ZmZfc2l6ZTsKKyAgICBrYWxfdWludDMyIHRpbWVzOworfTsKKworZXh0ZXJuIHN0cnVjdCByZmMyNTA3X2N0cmxfYnVmZl9kYmdfc3RydWN0IGdfcmZjMjUwN19hbGxvY19idWZmX2RiZ1tdOworZXh0ZXJuIGthbF91aW50MTYgZ19yZmMyNTA3X2FsbG9jX2J1ZmZfZGJnX2NvdW50OworCitzdHJ1Y3QgcmZjMjUwN19kbF9xdWV1ZV9zdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCAgIGlzX3VzZWQ7CisgICAga2FsX3VpbnQxNiBiaXRMZW5ndGg7CisgICAgcGVlcl9idWZmX3N0cnVjdCAqcEZsY0J1ZmY7Cit9OworCisvKiBTdHJ1Y3R1cmUgKi8KKy8vIElQdjQgSGVhZGVyCit0eXBlZGVmIHN0cnVjdCBpcF9oZHIKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGlwX2hlYWRlcl9sZW46NDsgLy8gNC1iaXQgaGVhZGVyIGxlbmd0aCAoaW4gMzItYml0IHdvcmRzKQorICAgIC8vIG5vcm1hbGx5PTUgKE1lYW5zIDIwIEJ5dGVzIG1heSBiZSAyNCBhbHNvKQorICAgIHVuc2lnbmVkIGNoYXIgaXBfdmVyc2lvbiA6NDsgICAvLyA0LWJpdCBJUHY0IHZlcnNpb24KKyAgICB1bnNpZ25lZCBjaGFyIGlwX3RvczsgICAgICAgICAgLy8gSVAgdHlwZSBvZiBzZXJ2aWNlCisgICAgdW5zaWduZWQgc2hvcnQgaXBfdG90YWxfbGVuZ3RoOyAvLyBUb3RhbCBsZW5ndGgKKyAgICB1bnNpZ25lZCBzaG9ydCBpcF9pZDsgICAgICAgICAgLy8gVW5pcXVlIGlkZW50aWZpZXIKKworICAgIHVuc2lnbmVkIGNoYXIgaXBfZnJhZ19vZmZzZXQgOjU7IC8vIEZyYWdtZW50IG9mZnNldCBmaWVsZAorCisgICAgdW5zaWduZWQgY2hhciBpcF9tb3JlX2ZyYWdtZW50IDoxOworICAgIHVuc2lnbmVkIGNoYXIgaXBfZG9udF9mcmFnbWVudCA6MTsKKyAgICB1bnNpZ25lZCBjaGFyIGlwX3Jlc2VydmVkX3plcm8gOjE7CisKKyAgICB1bnNpZ25lZCBjaGFyIGlwX2ZyYWdfb2Zmc2V0MTsgLy9mcmFnbWVudCBvZmZzZXQKKworICAgIHVuc2lnbmVkIGNoYXIgaXBfdHRsOyAgICAgICAgICAvLyBUaW1lIHRvIGxpdmUKKyAgICB1bnNpZ25lZCBjaGFyIGlwX3Byb3RvY29sOyAgICAgLy8gUHJvdG9jb2woVENQLFVEUCBldGMpCisgICAgdW5zaWduZWQgc2hvcnQgaXBfY2hlY2tzdW07ICAgIC8vIElQIGNoZWNrc3VtCisgICAgdW5zaWduZWQgaW50IGlwX3NyY2FkZHI7ICAgICAgIC8vIFNvdXJjZSBhZGRyZXNzCisgICAgdW5zaWduZWQgaW50IGlwX2Rlc3RhZGRyOyAgICAgIC8vIFNvdXJjZSBhZGRyZXNzCit9IElQVjRfSERSOworCisvLyBUQ1AgaGVhZGVyCit0eXBlZGVmIHN0cnVjdCB0Y3BfaGVhZGVyCit7CisgICAgdW5zaWduZWQgc2hvcnQgc291cmNlX3BvcnQ7ICAgLy8gc291cmNlIHBvcnQKKyAgICB1bnNpZ25lZCBzaG9ydCBkZXN0X3BvcnQ7ICAgICAvLyBkZXN0aW5hdGlvbiBwb3J0CisgICAgdW5zaWduZWQgaW50IHNlcXVlbmNlOyAgICAgICAgLy8gc2VxdWVuY2UgbnVtYmVyIC0gMzIgYml0cworICAgIHVuc2lnbmVkIGludCBhY2tub3dsZWRnZTsgICAgIC8vIGFja25vd2xlZGdlbWVudCBudW1iZXIgLSAzMiBiaXRzCisKKyAgICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkX3BhcnQxOjQ7IC8vYWNjb3JkaW5nIHRvIHJmYworICAgIHVuc2lnbmVkIGNoYXIgZGF0YV9vZmZzZXQ6NDsgICAgLypUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgVENQIGhlYWRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpbmRpY2F0ZXMgd2hlcmUgdGhlIGRhdGEgYmVnaW5zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBUQ1AgaGVhZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFsd2F5cyBhIG11bHRpcGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIDMyIGJpdHMuKi8KKworICAgIHVuc2lnbmVkIGNoYXIgZmluIDoxOyAvL0ZpbmlzaCBGbGFnCisgICAgdW5zaWduZWQgY2hhciBzeW4gOjE7IC8vU3luY2hyb25pc2UgRmxhZworICAgIHVuc2lnbmVkIGNoYXIgcnN0IDoxOyAvL1Jlc2V0IEZsYWcKKyAgICB1bnNpZ25lZCBjaGFyIHBzaCA6MTsgLy9QdXNoIEZsYWcKKyAgICB1bnNpZ25lZCBjaGFyIGFjayA6MTsgLy9BY2tub3dsZWRnZW1lbnQgRmxhZworICAgIHVuc2lnbmVkIGNoYXIgdXJnIDoxOyAvL1VyZ2VudCBGbGFnCisgICAgdW5zaWduZWQgY2hhciByZXNlcnZlZF9wYXJ0MiA6MjsKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICB1bnNpZ25lZCBzaG9ydCB3aW5kb3c7IC8vIHdpbmRvdworICAgIHVuc2lnbmVkIHNob3J0IGNoZWNrc3VtOyAvLyBjaGVja3N1bQorICAgIHVuc2lnbmVkIHNob3J0IHVyZ2VudF9wb2ludGVyOyAvLyB1cmdlbnQgcG9pbnRlcgorfSBUQ1BfSERSOworCisvKiBSRkM3OTMgYW5kIFJGQzc2ODogRm9ybWF0IG9mIFBzZXVkbyBIZWFkZXIKKyAgIDAgICAgICAgICAgICA3IDggICAgICAgICAgMTUgMTYgICAgICAgICAyMyAyNCAgICAgICAgICAzMQorICAgKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKworICAgfCAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKworICAgfCAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiBhZGRyZXNzICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCisgICB8ICB6ZXJvICAgICAgIHwgIHByb3RvY29sIHwgICAgICAgICBMZW5ndGggICAgICAgICAgICB8CisgICArLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCisgICAqLwordHlwZWRlZiBzdHJ1Y3QgaXB2NF9wc2V1ZG9faGVhZGVyCit7CisgICAgdW5zaWduZWQgaW50IHNyY19hZGRyOworICAgIHVuc2lnbmVkIGludCBkc3RfYWRkcjsKKyAgICB1bnNpZ25lZCBjaGFyIHplcm87CisgICAgdW5zaWduZWQgY2hhciBwcm90b2NvbDsKKyAgICB1bnNpZ25lZCBzaG9ydCB0Y3BfbGVuOworfSBUQ1BfSVBWNF9QU0VVRE9fSEVBREVSLCBVRFBfSVBWNF9QU0VVRE9fSEVBREVSOworCisvLyBVRFAgaGVhZGVyCit0eXBlZGVmIHN0cnVjdCB1ZHBfaGVhZGVyCit7CisgICAgdW5zaWduZWQgc2hvcnQgc291cmNlX3BvcnQ7ICAgLy8gc291cmNlIHBvcnQKKyAgICB1bnNpZ25lZCBzaG9ydCBkZXN0X3BvcnQ7ICAgICAvLyBkZXN0aW5hdGlvbiBwb3J0CisgICAgdW5zaWduZWQgc2hvcnQgbGVuZ3RoOyAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGggIGlzIHRoZSBsZW5ndGggIGluIG9jdGV0cyAgb2YgdGhpcyB1c2VyIGRhdGFncmFtICBpbmNsdWRpbmcgIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgIGFuZCB0aGUgZGF0YS4gICAoVGhpcyAgbWVhbnMgIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBsZW5ndGggaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlaWdodC4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBjaGVja3N1bTsgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja3N1bSBpcyB0aGUgMTYtYml0IG9uZSdzIGNvbXBsZW1lbnQgb2YgdGhlIG9uZSdzIGNvbXBsZW1lbnQgc3VtIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzZXVkbyBoZWFkZXIgb2YgaW5mb3JtYXRpb24gZnJvbSB0aGUgSVAgaGVhZGVyLCB0aGUgVURQIGhlYWRlciwgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgIHBhZGRlZCAgd2l0aCB6ZXJvIG9jdGV0cyAgYXQgdGhlIGVuZCAoaWYgIG5lY2Vzc2FyeSkgIHRvICBtYWtlICBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBvZiB0d28gb2N0ZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gVURQX0hEUjsKKworLy9JUHY2IEhlYWRlcgordHlwZWRlZiBzdHJ1Y3QgaXB2Nl9oZWFkZXIKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHRyYWZmaWNfY2xhc3NfMTo0OyAvKiBNU0Igb2YgOC1iaXQgdHJhZmZpYyBjbGFzcyAqLworICAgIHVuc2lnbmVkIGNoYXIgdmVyc2lvbjo0OyAgIC8qIDQtYml0IElQdjYgdmVyc2lvbiBudW1iZXIgPSA2ICovCisgICAgdW5zaWduZWQgY2hhciBmbG93X2xhYmVsXzE6NDsgLyogRmlyc3QgNC1iaXQgb2Ygb2YgMjAtYml0IGZsb3cgbGFiZWwgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHRyYWZmaWNfY2xhc3NfMjo0OyAvKiBMU0Igb2YgOC1iaXQgdHJhZmZpYyBjbGFzcyAqLworICAgIHVuc2lnbmVkIHNob3J0IGZsb3dfbGFiZWxfMjsgLyogTGFzdCAxNi1iaXQgb2Ygb2YgMjAtYml0IGZsb3cgbGFiZWwgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBwYXlsb2FkX2xlZ3RoOyAvKiAxNi1iaXQgcGF5bG9hZCBsZW5ndGguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIG9mIHRoZSBJUHY2IHBheWxvYWQsIGkuZS4sIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgZm9sbG93aW5nIHRoaXMgSVB2NiBoZWFkZXIsIGluIG9jdGV0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm90ZSB0aGF0IGFueSBleHRlbnNpb24gaGVhZGVycyBwcmVzZW50IGFyZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHBheWxvYWQsIGkuZS4sIGluY2x1ZGVkIGluIHRoZSBsZW5ndGggY291bnQuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgY2hhciBuZXh0X2hlYWRlcjsvKiA4LWJpdCBuZXh0IGhlYWRlcgorMDogSG9wLWJ5LUhvcCBPcHRpb25zIGhlYWRlcgorNDM6IFJvdXRpbmcgaGVhZGVyCis0NDogRnJhZ21lbnQgaGVhZGVyCis1OTogTm8gTmV4dCBIZWFkZXIKKyovCisgICAgdW5zaWduZWQgY2hhciBob3BfbGltaXQ7LyogOC1iaXQgaG9wIGxpbWl0ICovCisgICAgdW5zaWduZWQgaW50IHNyY19hZGRyXzE7CisgICAgdW5zaWduZWQgaW50IHNyY19hZGRyXzI7CisgICAgdW5zaWduZWQgaW50IHNyY19hZGRyXzM7CisgICAgdW5zaWduZWQgaW50IHNyY19hZGRyXzQ7CisgICAgdW5zaWduZWQgaW50IGRzdF9hZGRyXzE7CisgICAgdW5zaWduZWQgaW50IGRzdF9hZGRyXzI7CisgICAgdW5zaWduZWQgaW50IGRzdF9hZGRyXzM7CisgICAgdW5zaWduZWQgaW50IGRzdF9hZGRyXzQ7Cit9IElQVjZfSERSOworCisvL0hvcC1ieS1Ib3AgT3B0aW9ucyBIZWFkZXIKK3R5cGVkZWYgc3RydWN0IGhvcF9ieV9ob3BfaGVhZGVyCit7CisgICAgdW5zaWduZWQgY2hhciBuZXh0X2hlYWRlcjsvKiA4LWJpdCBuZXh0IGhlYWRlciAqLworICAgIHVuc2lnbmVkIGNoYXIgaGRyX2V4dF9sZW47IC8qIExlbmd0aCBvZiB0aGUgSG9wLWJ5LUhvcCBPcHRpb25zIGhlYWRlciBpbiA4LW9jdGV0IHVuaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVCBpbmNsdWRpbmcgdGhlIGZpcnN0IDggb2N0ZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IEhPUF9CWV9IT1BfSERSOworCisvL1JvdXRpbmcgSGVhZGVyCit0eXBlZGVmIHN0cnVjdCByb3V0aW5nX2hlYWRlcgoreworICAgIHVuc2lnbmVkIGNoYXIgbmV4dF9oZWFkZXI7LyogOC1iaXQgbmV4dCBoZWFkZXIgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGhkcl9leHRfbGVuOy8qIExlbmd0aCBvZiB0aGUgUm91dGluZyBoZWFkZXIgaW4gOC1vY3RldCB1bml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVCBpbmNsdWRpbmcgdGhlIGZpcnN0IDggb2N0ZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHJvdXRpbmdfdHlwZTsKKyAgICB1bnNpZ25lZCBjaGFyIHNlZ21lbnRzX2xlZnQ7Cit9IFJPVVRJTkdfSERSOworCisvL0ZyYWdtZW50IEhlYWRlcgordHlwZWRlZiBzdHJ1Y3QgZnJhZ21lbnRfaGVhZGVyCit7CisgICAgdW5zaWduZWQgY2hhciBuZXh0X2hlYWRlcjsvKiA4LWJpdCBuZXh0IGhlYWRlciAqLworICAgIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQ7LyogOC1iaXQgcmVzZXJ2ZWQgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGZyYWdtZW50X29mZnNldF8xOy8qIEZpcnN0IDgtYml0IG9mIDEzLWJpdCBmcmFnbWVudCBvZmZzZXQgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGZyYWdtZW50X29mZnNldF8yOjQ7LyogTmV4dCA0LWJpdCBvZiAxMy1iaXQgZnJhZ21lbnQgb2Zmc2V0ICovCisgICAgdW5zaWduZWQgY2hhciBmcmFnbWVudF9vZmZzZXRfMzoxOy8qIExhc3QgMS1iaXQgb2YgMTMtYml0IGZyYWdtZW50IG9mZnNldCAqLworICAgIHVuc2lnbmVkIGNoYXIgcmVzOjI7LyogMi1iaXQgUmVzICovCisgICAgdW5zaWduZWQgY2hhciBtX2ZsYWc6MTsvKiAxLWJpdCBNIGZsYWc6IDE9bW9yZSBmcmFnbWVudHM7MD1sYXN0IGZyYWdtZW50ICovCisgICAgdW5zaWduZWQgaW50IGlkZW50aWZpY2F0aW9uOy8qIDMyLWJpdCBpZGVudGlmaWNhdGlvbiAqLworfSBGUkFHTUVOVF9IRFI7CisKKy8vQXV0aGVudGljYXRpb24gSGVhZGVyCit0eXBlZGVmIHN0cnVjdCBhdXRoZW50aWNhdGlvbl9oZWFkZXIKK3sKKyAgICB1bnNpZ25lZCBjaGFyIG5leHRfaGVhZGVyOy8qIDgtYml0IG5leHQgaGVhZGVyICovCisgICAgdW5zaWduZWQgY2hhciBsZW5ndGg7LyogOC1iaXQgbGVuZ3RoICovCisgICAgdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQ7LyogMTYgYml0IHJlc2VydmVkICovCisgICAgdW5zaWduZWQgaW50IHNwaTsgLyogMzItYml0IHNlY3VyaXR5IHBhcmFtZXRlcnMgaW5kZXggKi8KK30gQVVUSEVOVElDQVRJT05fSERSOworCisvL0Rlc3RpbmF0aW9uIE9wdGlvbnMgSGVhZGVyCit0eXBlZGVmIHN0cnVjdCBkZXN0aW5hdGlvbl9vcHRpb25zX2hlYWRlcgoreworICAgIHVuc2lnbmVkIGNoYXIgbmV4dF9oZWFkZXI7LyogOC1iaXQgbmV4dCBoZWFkZXIgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGhkcl9leHRfbGVuOy8qIExlbmd0aCBvZiB0aGUgRGVzdGluYXRpb24gT3B0aW9ucyBoZWFkZXIgaW4gOC1vY3RldCB1bml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVCBpbmNsdWRpbmcgdGhlIGZpcnN0IDggb2N0ZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK30gREVTVElOQVRJT05fT1BUSU9OU19IRFI7CisKKy8vRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIEhlYWRlcgordHlwZWRlZiBzdHJ1Y3QgZXNwX2hlYWRlcgoreworICAgIHVuc2lnbmVkIGludCBzcGk7IC8qIDMyLWJpdCBzZWN1cml0eSBhc3NvY2lhdGlvbiBpZGVudGlmaWVyIChTUEkpLCAzMiBiaXRzICovCit9IEVTUF9IRFI7CisKK3R5cGVkZWYgc3RydWN0IGlwdjZfcHNldWRvX2hlYWRlcgoreworICAgIHVuc2lnbmVkIGludCBzcmNfYWRkcjE7CisgICAgdW5zaWduZWQgaW50IHNyY19hZGRyMjsKKyAgICB1bnNpZ25lZCBpbnQgc3JjX2FkZHIzOworICAgIHVuc2lnbmVkIGludCBzcmNfYWRkcjQ7CisgICAgdW5zaWduZWQgaW50IGRzdF9hZGRyMTsKKyAgICB1bnNpZ25lZCBpbnQgZHN0X2FkZHIyOworICAgIHVuc2lnbmVkIGludCBkc3RfYWRkcjM7CisgICAgdW5zaWduZWQgaW50IGRzdF9hZGRyNDsKKyAgICB1bnNpZ25lZCBpbnQgdXBwZXJfbGF5ZXJfcGt0X2xlbjsKKyAgICB1bnNpZ25lZCBzaG9ydCB6ZXJvMTsKKyAgICB1bnNpZ25lZCBjaGFyIHplcm8yOworICAgIHVuc2lnbmVkIGNoYXIgbmV4dF9oZWFkZXI7Cit9IFRDUF9JUFY2X1BTRVVET19IRUFERVIsIFVEUF9JUFY2X1BTRVVET19IRUFERVI7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyogSVAgUGFydCAqLworICAgIHVuc2lnbmVkIGNoYXIgVE9TOworICAgIHVuc2lnbmVkIHNob3J0IElQSWQ7CisgICAgdW5zaWduZWQgY2hhciBQcm90b2NvbDsKKyAgICB1bnNpZ25lZCBpbnQgU3JjQWRkcjsKKyAgICB1bnNpZ25lZCBpbnQgRHN0QWRkcjsKKyAgICAvKiBUQ1AgUGFydCAqLworICAgIHVuc2lnbmVkIHNob3J0IFNyY1BvcnQ7CisgICAgdW5zaWduZWQgc2hvcnQgRHN0UG9ydDsKKyAgICB1bnNpZ25lZCBpbnQgU2VxOworICAgIHVuc2lnbmVkIGludCBBY2s7CisgICAgdW5zaWduZWQgY2hhciBSZXNlcnZlZDsKKyAgICB1bnNpZ25lZCBzaG9ydCBXaW5kb3c7CisgICAgdW5zaWduZWQgc2hvcnQgVXJnZW50UG9pbnRlcjsKK30gVENQX0lQX0NPTk5fUFJPRklMRTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiBJUCBQYXJ0ICovCisgICAgdW5zaWduZWQgY2hhciBUT1M7CisgICAgdW5zaWduZWQgc2hvcnQgSVBJZDsKKyAgICB1bnNpZ25lZCBjaGFyIFByb3RvY29sOworICAgIHVuc2lnbmVkIGludCBTcmNBZGRyOworICAgIHVuc2lnbmVkIGludCBEc3RBZGRyOworICAgIC8qIFVEUCBQYXJ0ICovCisgICAgdW5zaWduZWQgc2hvcnQgU3JjUG9ydDsKKyAgICB1bnNpZ25lZCBzaG9ydCBEc3RQb3J0OworfSBVRFBfSVBfQ09OTl9QUk9GSUxFOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qIElQdjYgUGFydCAqLworICAgIHVuc2lnbmVkIGNoYXIgVHJhZmZpY0NsYXNzOworICAgIHVuc2lnbmVkIGludCBGbG93TGFiZWw7CisgICAgdW5zaWduZWQgY2hhciBOZXh0SGVhZGVyOworICAgIHVuc2lnbmVkIGNoYXIgSG9wTGltaXQ7CisgICAgdW5zaWduZWQgaW50IFNyY0FkZHIxOworICAgIHVuc2lnbmVkIGludCBTcmNBZGRyMjsKKyAgICB1bnNpZ25lZCBpbnQgU3JjQWRkcjM7CisgICAgdW5zaWduZWQgaW50IFNyY0FkZHI0OworICAgIHVuc2lnbmVkIGludCBEc3RBZGRyMTsKKyAgICB1bnNpZ25lZCBpbnQgRHN0QWRkcjI7CisgICAgdW5zaWduZWQgaW50IERzdEFkZHIzOworICAgIHVuc2lnbmVkIGludCBEc3RBZGRyNDsKKyAgICAvKiBUQ1AgUGFydCAqLworICAgIHVuc2lnbmVkIHNob3J0IFNyY1BvcnQ7CisgICAgdW5zaWduZWQgc2hvcnQgRHN0UG9ydDsKKyAgICB1bnNpZ25lZCBpbnQgU2VxOworICAgIHVuc2lnbmVkIGludCBBY2s7CisgICAgdW5zaWduZWQgY2hhciBSZXNlcnZlZDsKKyAgICB1bnNpZ25lZCBzaG9ydCBXaW5kb3c7CisgICAgdW5zaWduZWQgc2hvcnQgVXJnZW50UG9pbnRlcjsKK30gVENQX0lQdjZfQ09OTl9QUk9GSUxFOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIC8qIElQdjYgUGFydCAqLworICAgIHVuc2lnbmVkIGNoYXIgVHJhZmZpY0NsYXNzOworICAgIHVuc2lnbmVkIGludCBGbG93TGFiZWw7CisgICAgdW5zaWduZWQgY2hhciBOZXh0SGVhZGVyOworICAgIHVuc2lnbmVkIGNoYXIgSG9wTGltaXQ7CisgICAgdW5zaWduZWQgaW50IFNyY0FkZHIxOworICAgIHVuc2lnbmVkIGludCBTcmNBZGRyMjsKKyAgICB1bnNpZ25lZCBpbnQgU3JjQWRkcjM7CisgICAgdW5zaWduZWQgaW50IFNyY0FkZHI0OworICAgIHVuc2lnbmVkIGludCBEc3RBZGRyMTsKKyAgICB1bnNpZ25lZCBpbnQgRHN0QWRkcjI7CisgICAgdW5zaWduZWQgaW50IERzdEFkZHIzOworICAgIHVuc2lnbmVkIGludCBEc3RBZGRyNDsKKyAgICAvKiBVRFAgUGFydCAqLworICAgIHVuc2lnbmVkIHNob3J0IFNyY1BvcnQ7CisgICAgdW5zaWduZWQgc2hvcnQgRHN0UG9ydDsKK30gVURQX0lQdjZfQ09OTl9QUk9GSUxFOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVuc2lnbmVkIGludCBsZW5ndGg7CisgICAgdW5zaWduZWQgY2hhciBQYWNrZXREYXRhW01BWF9MRU5fT0ZfUEFDS0VUXTsKK30gUEFDS0VUOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVuc2lnbmVkIGludCBOb1BhY2tldHM7CisgICAgUEFDS0VUICpQYWNrZXRzW01BWF9OVU1fT0ZfUEFDS0VUU107Cit9IFBBQ0tFVF9TVFJFQU1fUEFUVEVSTjsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUEFDS0VUX1NUUkVBTV9QQVRURVJOX0JFR0lOID0gMjAxLAorICAgIFBTUF9JUFY0X1RDUCA9IFBBQ0tFVF9TVFJFQU1fUEFUVEVSTl9CRUdJTiwKKyAgICBQU1BfSVBWNF9VRFAsCisgICAgUFNQX0lQVjZfVENQLAorICAgIFBTUF9JUFY2X1VEUCwKKyAgICBQU1BfU1BFQ0lGSUNfQkVHSU4gPSBQU1BfSVBWNl9VRFAgKyAxLCAgICAgIC8vIDIwNQorICAgIFBTUF9JUFY2X1JPVVRJTkdfVENQID0gUFNQX1NQRUNJRklDX0JFR0lOLCAgLy8gMjA1CisgICAgUFNQX0lQVjZfUk9VVElOR19VRFAsICAgICAgICAgICAgICAgICAgICAgICAvLyAyMDYKKyAgICBQU1BfSVBWNl9BVVRIX1RDUCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIwNworICAgIFBTUF9JUFY2X0VTUCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMjA4CisgICAgUFNQX0lQVjZfRlJBR01FTlRfVENQLCAgICAgICAgICAgICAgICAgICAgICAvLyAyMDksIFRDUCBoZWFkZXIgd2lsbCBub3QgYmUgY29tcHJlc3NlZAorICAgIFBTUF9JUFY0X01JTklNQUxfRU5DQVBTVUxBVElPTl9UQ1AsICAgICAgICAgLy8gMjEwLCBNaW5pbWFsIGVuY2Fwc3VsYXRpb24gaGVhZGVyIG5vdyBpcyBmb3IgSVB2NCBvbmx5CisgICAgUFNQX0lQVjZfUk9VVElOR19OT19ORVhULCAgICAgICAgICAgICAgICAgICAvLyAyMTEKKyAgICBQU1BfSVBWNl9IT1BfQllfSE9QX1RDUCwgICAgICAgICAgICAgICAgICAgIC8vIDIxMgorICAgIFBTUF9JUFY2X0RFU1RJTkFUSU9OX1RDUCwgICAgICAgICAgICAgICAgICAgLy8gMjEzCisgICAgUFNQX0RFRklORURfTEFTVCA9IFBTUF9JUFY2X0RFU1RJTkFUSU9OX1RDUCwKKyAgICBQU1BfU1BFQ0lGSUNfRU5EID0gMjU0Cit9IHBhY2tldF9zdHJlYW1fcGF0dGVybl9lbnVtOworCitleHRlcm4gcGFja2V0X3N0cmVhbV9wYXR0ZXJuX2VudW0gcHNwX3BhdHRlcm47CisKKyNkZWZpbmUgTlVNX1NQRUNJRklDX1BTUCAgICAoUFNQX0RFRklORURfTEFTVCAtIFBTUF9TUEVDSUZJQ19CRUdJTiArIDEpCisjZGVmaW5lIE5PV19QU1AoKSAgICAgICAgICAgKHBzcF9wYXR0ZXJuKQorI2RlZmluZSBTRVRfUFNQKHgpICAgICAgICAgIFwKKyAgICBpZiAoKFBBQ0tFVF9TVFJFQU1fUEFUVEVSTl9CRUdJTiA8PSB4KSAmJiAoUFNQX1NQRUNJRklDX0VORCA+PSB4KSkgXAorICAgIHsgXAorICAgICAgICBwc3BfcGF0dGVybiA9IHg7IFwKKyAgICB9CisKKy8qIEV4dGVybmFsIEZ1bmN0aW9uICovCitleHRlcm4gdm9pZCBJbml0aWFsaXplUGFja2V0R2VuZXJhdG9yKHZvaWQpOworZXh0ZXJuIHZvaWQgcmZjMjUwN19kYmdfYnVmZl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcmZjMjUwN19jaGVja19tZW1fbGVhayh2b2lkKTsKKworZXh0ZXJuIGthbF91aW50OCByZmMyNTA3X2NoZWNrX2lmX3F1ZXVlX2RsX2RhdGEoa2FsX3VpbnQxNiBiaXRMZW5ndGgsIHBlZXJfYnVmZl9zdHJ1Y3QgICpwRmxjQnVmZik7CitleHRlcm4gcGVlcl9idWZmX3N0cnVjdCAqcmZjMjUwN19yZXRyaXZlX2RsX2RhdGFfZnJvbV9xdWV1ZShrYWxfdWludDE2ICpiaXRMZW5ndGgpOworZXh0ZXJuIHZvaWQgcmZjMjUwN19wYWNrZXRfdmVyaWZ5KHBlZXJfYnVmZl9zdHJ1Y3QgKnBEYXRhKTsKK2V4dGVybiBrYWxfYm9vbCByZmMyNTA3X3ByZXBhcmVfdGVzdF9kYXRhX3RvX3JhdGRtKHZvaWQqKiBwcERhdGEsIGludCogcERhdGFTaXplLCBwYWNrZXRfc3RyZWFtX3BhdHRlcm5fZW51bSBwc3ApOworZXh0ZXJuIHZvaWQgcmZjMjUwN19kdW1wX3BhY2tldChjaGFyKiBwRGF0YSwgaW50IHBEYXRhU2l6ZSk7CisKKyNlbmRpZiAvKiBfX1JGQzI1MDdfTElCX1RFU1RfSF9fKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybGMybGxjX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JsYzJsbGNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmMTI3OQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybGMybGxjX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgcmxjMmxsY19zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGNvbW1vbiBzdHJ1Y3R1cmUgb2YgUkxDIGFuZCBMTEMuIAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1JMQzJMTENfU1RSVUNUX0gKKyNkZWZpbmUgX1JMQzJMTENfU1RSVUNUX0gKKworLyogTmFuY3kgMjAxMDEwMDU6IFN1Z2dlc3QgQWRkIGZvciBSSFIgKi8KKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIHRsbGk7Cit9IGdycl91bml0ZGF0YV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIHRsbGk7Cit9IGdycl9kYXRhX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgdGxsaTsKKyAgICBrYWxfdWludDggc3RhdHVzX2NhdXNlOworICAgIGthbF91aW50OCBzYXBpOworfSBncnJfc3RhdHVzX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorfSBncnJfZmx1c2hfY25mX3N0cnVjdDsKKworIAorI2VuZGlmIAorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybGMybWFjX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JsYzJtYWNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkMjE1MAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybGMybWFjX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTgzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqCXJsYzJtYWNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9STEMyTUFDX1NUUlVDVF9ICisjZGVmaW5lIF9STEMyTUFDX1NUUlVDVF9ICisKKy8qRXZlbHluOiBSZW1vdmUgcmVkdW5kYW50IGhlYWRlciBhbmQgZmlsZSAqLworI2luY2x1ZGUgInJyX2NvbW1vbl9kZWYuaCIKKyNpbmNsdWRlICJybGNtYWNfc3RydWN0LmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJncHJzX3JsY21hY19jb21tb25fc3RydWN0LmgiCisKKy8qIEV2ZWx5biAyMDA5MDQxNTogTWVyZ2UgUjYgKi8KK3R5cGVkZWYgc3RydWN0IG11bHRpcGxlX3Jlc19yZXFfc3RydWN0IHJsY19tYWNfcmVzX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHRiZl9yZWxfc3RydWN0IHJsY19tYWNfdGJmX3JlbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IHBheWxvYWRfdHlwZTsKKyAgICBrYWxfdWludDggY3Y7CisgICAga2FsX3VpbnQ4IHN0YWxsX2luZDsKKyAgICBrYWxfdWludDggcmV0cnk7CisgICAga2FsX3VpbnQ4IHNwYXJlOworICAgIGthbF91aW50OCBwZmlfaW5kOworICAgIGthbF91aW50OCB0Zmk7CisgICAga2FsX3VpbnQ4IHRsbGlfaW5kOworICAgIGthbF91aW50OCBic247CisgICAga2FsX3VpbnQ4IGV4dG47Cit9IHVsX2hlYWRlcl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bF9oZWFkZXJfc3RydWN0IGdwcnNfaGRyOworfSB1bF9ibG9ja19oZWFkZXJfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLy91bF9ibG9ja19oZWFkZXJfc3RydWN0IHVsaGVhZGVyOworICAgIGthbF91aW50OCBjczsKKyAgICNpZm5kZWYgX19NVEtfVEFSR0VUX18KKyAgICBrYWxfdWludDggZGF0YTFbNzVdOworICAgICNlbHNlCisgICAga2FsX3VpbnQ4ICpkYXRhMTsKKyAgICAjZW5kaWYKKyAgICAjaWZkZWYgX19FR1BSU19NT0RFX18KKyAgICAjaWZuZGVmIF9fTVRLX1RBUkdFVF9fCisgICAga2FsX3VpbnQ4IGRhdGEyWzc1XTsKKyAgICAjZWxzZQorICAgIGthbF91aW50OCAqZGF0YTI7CisgICAgI2VuZGlmCisgICAga2FsX3VpbnQ4IGhlYWRlcls2XTsKKyAgICAvKiBDbGFpcmUgMDQxMjA4IGNoYW5nZSA6IEZpbGwgVUwgZGF0YSBoZWFkZXIsIGJsb2NrRGF0YVBTMSwgIGJsb2NrRGF0YVBTMiBmaWVsZHMgKi8KKyAgICBrYWxfdWludDggYmxvY2tEYXRhUFMxOyAgICAvLyBwdW50dXJpbmcgc2NoZW1lIGZvciBFR1BSUyBpbiB0aGUgZmlyc3QgUkxDIGRhdGEgYmxvY2sgb2Ygb25lIGJsb2NrCisgICAga2FsX3VpbnQ4IGJsb2NrRGF0YVBTMjsgICAgLy8gcHVudHVyaW5nIHNjaGVtZSBmb3IgRUdQUlMgaW4gdGhlIHNlY29uZCBSTEMgZGF0YSBibG9jayBvZiBvbmUgYmxvY2sKKyAgICAjZW5kaWYKKworICAgICNpZmRlZiBfX0dFUkFOX0ZBTlJfXworICAgIGthbF91aW50OCBwYW5bNF07CisgICAgI2VuZGlmCisKK30gdWxfZGF0YV9ibG9ja19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCByZXNfcmVxX2JsazsKKyAgICBrYWxfdWludDggbm9fcmxjX21hY19yZXNfcmVxOworICAgIGthbF91aW50OCBybGNfbWFjX3Jlc19yZXFfc2l6ZTsKKyAgICBybGNfbWFjX3Jlc19yZXFfc3RydWN0ICpybGNfbWFjX3Jlc19yZXE7CisgICAga2FsX3VpbnQxNiBub191bF9ibGtzOworICAgIC8qIEV2ZWx5biAyMDA5MDkwNTogTW9kaWZ5IGZvciBIaWdoIG11bHRpc2xvdCBjbGFzcyAqLworICAgIHVsX2RhdGFfYmxvY2tfc3RydWN0IHVsX2Jsa3NbTUFYX1RYX1RJTUVTTE9UUyoyXTsKKy8qIEV2ZWx5biAyMDA5MDQxNTogTWVyZ2UgUjYgKi8KK30gcmxjX21hY191bF9kYXRhX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGFja19uYWNrX2Rlc2Nfc3RydWN0IGFja19uYWNrX3JlczsKKyAgICAjaWZkZWYgX19FR1BSU19NT0RFX18KKyAgICBlZ3Byc2Fja19uYWNrX2Rlc2NyaXB0aW9uX3N0cnVjdCBlZ3Byc19hY2tfbmFjX3JlczsKKyAgICAjZW5kaWYKKy8qIEV2ZWx5biAyMDA5MDQxNTogTWVyZ2UgUjYgKi8KK30gcmxjX21hY19hY2tfcmVzX3N0cnVjdDsKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybGMycmVhc21fc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmxjMnJlYXNtX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NWUyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmxjMnJlYXNtX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqCXJsYzJyZWFzbV9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9STEMyUkVBU01fU1RSVUNUX0gKKyNkZWZpbmUgX1JMQzJSRUFTTV9TVFJVQ1RfSAorCisvKiBOYW5jeSAyMDEwMTAwNTogU3VnZ2VzdCBBZGQgZm9yIFJIUiAqLworI2luY2x1ZGUgInJyX2NvbW1vbl9kZWYuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisjaWZkZWYgX19FR1BSU19NT0RFX18KKwlUQkZfVFlQRSB0YmZfdHlwZTsKKyNlbmRpZgorICAgIGthbF91aW50MTYgbnVtX2Jsa3NfdG9fcmVhc207CisgICAga2FsX3VpbnQxNiBiZWdpbl9pbmR4OworICAgIGthbF91aW50OCBybnJfcmVhc21faW5fcHJvZ3Jlc3M7CisgICAga2FsX3VpbnQ4IHJsY19tb2RlOworICAgIGthbF91aW50OCBUQkZfaW5kZXg7ICAgIAorfSBybGNfcmVhc21fYmVnaW5fcmVhc21faW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQxNiBlbmRfb2Zfd2luX2luZHg7CisgICAga2FsX3VpbnQ4IGlzX25lZWRfY2xlYW5fYnNuX2luX3RiZjsKKyAgICAjaWZkZWYgX19FR1BSU19NT0RFX18KKwlUQkZfVFlQRSB0YmZfdHlwZTsKKyAgICAjZW5kaWYKKyAgICBrYWxfdWludDggVEJGX2luZGV4OyAgICAKKyAgICAvKldlIHdpbGwgcmVsZWFzZSBkbCBtZW1vcnkgaW4gUkVBU00gd2hlbiBkbCB0YmYgcmVsZWFzZS4gU2V0IHR1cmUgaW4gcmxjX2RsX3RiZl9yZWwuKi8KKwlrYWxfYm9vbCBETF9yZWw7Cit9IHJsY19yZWFzbV90YmZfcmVsX2luZF9zdHJ1Y3Q7CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybGMycm1wY19zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybGMycm1wY19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmYzYTFjCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JsYzJybXBjX3N0cnVjdC5oCkBAIC0wLDAgKzEsODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICoJcmxjMnJtcGNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiBSTEMgYW5kIFJNUEMKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9STEMyUk1QQ19TVFJVQ1RfSAorI2RlZmluZSBfUkxDMlJNUENfU1RSVUNUX0gKKworI2luY2x1ZGUgInJyX2NvbW1vbl9kZWYuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG11bHRpcGxlOworfSBybGNfcm1wY19hZGp1c3RfcGFnaW5nX3BlcmlvZF9pbmRfc3RydWN0OworCisjZW5kaWYgLyogX1JMQzJSTVBDX1NUUlVDVF9IICovCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JsY19lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JsY19lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYmU1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmxjX2VudW1zLmgKQEAgLTAsMCArMSwyNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICAgIHJsY19lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9STENfRU5VTVNfSAorI2RlZmluZSBfUkxDX0VOVU1TX0gKKworLy9mb3IgdGVzdCBtb2RlCit0eXBlZGVmIGVudW0KK3sKKyAgICBHUFJTX1RFU1RfTU9ERV9BLAorICAgIEdQUlNfVEVTVF9NT0RFX0IsCisgICAgRUdQUlNfU1JCX0xPT1BCQUNLX01PREUKK30gZ3Byc190ZXN0X21vZGU7CisKK3R5cGVkZWYgZW51bQoreworICAgIFJMQ19IT19JRExFLAorICAgIFJMQ19IT19TVEFSVCwKKyAgICBSTENfSE9fU1RBVEVfTlVNCit9IHJsY19ob19tb2RlOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSTENfVU5MT0NLRURfVUwsCisgICAgUkxDX0xPQ0tfVUxfV0FJVF9GT1JfWElELAorICAgIFJMQ19VTF9RX0ZMVVNIRUQsCisgICAgUkxDX1hJRF9JTl9RLAorICAgIFJMQ19OVU1fWElEX1NUQVRFCit9IHJsY19wc2hvX3hpZF9zdGF0ZV9lbnVtOworCisjaW5jbHVkZSAibDNfaW5jX2VudW1zLmgiCit0eXBlZGVmIGVudW0geworICAgIFJMQ19UWF9TVUNDRVNTID0gIERDX1N0YXR1c19TVUNDRVNTICwKKyAgICBSTENfVFhfRkFJTCA9IERDX1N0YXR1c19Ob3JtYWxfRkFJTFVSRSwKKyAgICBSTENfVFhfRkFJTF9XSVRIX0NFTExfUkVTRUwgPSBEQ19TdGF0dXNfR0FTX0NlbGxSZXNlbF9EaXNjYXJkLAorICAgIFJMQ19UWF9GQUlMX0NDT19BQ1RJVkFUSU9OX1RJTUVfT05HT0lORyA9IERDX1N0YXR1c19STENfQ0NPX0FjdGl2YXRpb25fVGltZV9PbmdvaW5nLAorICAgIFJMQ19UWF9GQUlMX1dJVEhfR1BSU19SRVNVTUUgPSBEQ19TdGF0dXNfR0FTX1JMQ19HUFJTX1Jlc3VtZV9EaXNjYXJkLCAgICAvKlNNL01NIGFzayBSTEMgdG8gc2VuZCBDTkYgdG8gTExDIGlmIFJMQyBkaXNjYXJkIHNpZ25hbGxpbmcgcGR1IHdoZW4gR1BSU19SRVNVTUUgKi8KKyAgICBSTENfVFhfRkFJTF9OT19DRUxMX0NPVkVSQUdFID0gRENfU3RhdHVzX1JMQ19Ob19DZWxsX0NvdmVyYWdlX0Rpc2NhcmQKKyNpZmRlZiBfX0dFTUlOSV9fCisgICAgLAorICAgIFJMQ19UWF9GQUlMX0dFTUlOSV9QU19BQ1RJVkUgPSBEQ19TdGF0dXNfR2VtaW5pX0ZhaWwKKyNlbmRpZiAvKiBfX0dFTUlOSV9fICovCit9IHJsY190eF9zdGF0dXNfZW51bTsKKworI2lmZGVmIF9fRUdQUlNfTU9ERV9fCit0eXBlZGVmIGVudW0KK3sKKyAgICBSTENfREVDT0RFX09LLAorICAgIFJMQ19OQUNLX0JMT0NLLAorICAgIFJMQ19JTlZBTElEX0JJVE1BUCwKKyAgICBSTENfSU5WQUxJRF9TU04KK30gcmxjX2RlY29kZV9iaXRtYXBfcmVzdWx0OworI2VuZGlmIC8qIF9fRUdQUlNfTU9ERV9fICovIC8qIF9fRVBTS19UWF9fICovCisKK3R5cGVkZWYgZW51bQoreworICAgIFJMQ19JRExFLAorICAgIFJMQ19PUEVOX1BFTkQsCisgICAgUkxDX1RSQU5TRkVSLAorICAgIFJMQ19SRUxfUEVORCwKKyAgICBSTENfVUxfVEVTVF9NT0RFLAorICAgIFJMQ19OVU1fU1RBVEVTCit9IHJsY19zdGF0ZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSTENfRExfSURMRSwKKyAgICBSTENfRExfVFJBTlNGRVIsCisgICAgUkxDX0RMX1JFTF9QRU5ELAorICAgIFJMQ19ETF9URVNUX01PREUsCisgICAgUkxDX0RMX05VTV9TVEFURVMKK30gcmxjX2RsX3N0YXRlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFJMQ19BQ0tFRCwKKyAgICBSTENfTkFDS0VELAorICAgIFJMQ19QRU5EX0FDSywKKyAgICBSTENfTkVXX0JMSworICAgICAgICAvLywKKyAgICAgICAgLy8gUkxDX0JMS19UT19ERUxFVEUKK30gcmxjX2Jsa19zdGF0ZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSTENfUkVTT0xWRUQsCisgICAgUkxDX0lOUFJPR1JFU1MKK30gcmxjX3BoYXNlX2NvbnRfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUkxDX05PLAorICAgIFJMQ19ZRVMKK30gcmxjX2Jvb2xfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUkxDX1BGSV9CRVNUX0VGRk9SVCA9IDAsCisgICAgUkxDX1BGSV9TSUdOQUwKK30gcmxjX3BmaV90eXBlOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSTENfQUNDRVNTX0FMTE9XID0gMCwKKyAgICBSTENfQUNDRVNTX05PVF9BTExPVywKKyAgICBSTENfQUNDRVNTX1QzMTQyX1JVTk5JTkcsCisgICAgUkxDX0FDQ0VTU19OT1RfQUxMT1dfQU5EX1QzMTQyX1JVTk5JTkcKK30KK3JsY19hY2Nlc3Nfc3RhdGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUFJFVklPVVNfQkxLLAorICAgIENVUlJFTlRfQkxLLAorICAgIE5FWFRfQkxLCit9IHJlc2VnX2Jsa190eXBlX2VudW07CisKK3R5cGVkZWYgZW51bQoreyAgIC8qIHNoYWxsIHN5bmMgd2l0aCBSTENfVElNRVJfTlVNX01TR1MgdmFsdWUgKi8KKyAgICBSTENfVDMxODJfVElNRVJfSUQgPSAwLAorI2lmbmRlZiBfX1JFTU9WRV9GQV9fCisgICAgUkxDX1QzMTg0X1RJTUVSX0lELAorI2VuZGlmIC8qIF9fUkVNT1ZFX0ZBX18gKi8KKworICAgIFJMQ19SRUFEWV9USU1FUl9JRCwgLyogVmluY2VudDogbmV3IGFkZCAqLworI2lmZGVmIF9fR0VSQU5fUjRfXworICAgIFJMQ19UMzE4NV9USU1FUl9JRCwKKyNlbmRpZiAvKiBfX0dFUkFOX1I0X18gKi8KKyAgICBSTENfUFNfQ09ORl9USU1FUl9JRCwKKyAgICBSTENfRVZFTlRfVElNRVJfSUQsCisgICAgUkxDX1RJTUVSX05VTV9NU0dTCit9IHJsY190aW1lcl9pZF9lbnVtOyAgICAvKiBSTENfVElNRVIgTWVzc2FnZSBUeXBlICovCisKKyNpZmRlZiBfX0VHUFJTX01PREVfXwordHlwZWRlZiBlbnVtCit7CisgICAgUFVOX1NDSEVNRTEsCisgICAgUFVOX1NDSEVNRTIsCisgICAgUFVOX1NDSEVNRTMKK30gcHVuX3NjaGVtZV9lbnVtOworI2VuZGlmIC8qIF9fRUdQUlNfTU9ERV9fICovIAorCit0eXBlZGVmIGVudW0KK3sKKyAgICBSTENfQUNLRURfQkxLX1JFVFJBTlNfRkxVU0gsCisgICAgQ09OVEVOVElPTl9SRVNPTFZFRF9GTFVTSCwKKyAgICBDU19DSEFOR0VEX0ZMVVNILAorICAgIFVMVEJGX0VORF9GTFVTSCwKKyAgICBSTENfTkFDS19GTFVTSCwKKyAgICBTVEFMTF9DSEFOR0VEX0ZMVVNILAorICAgIFVOQUNLX0NWMF9GTFVTSCwKKyAgICBFWFRfVUxUQkZfRkxVU0gsCisgICAgTUFDX0ZMVVNIX0FMTCwKKyAgICBUQkZfQ0hBTkdFRF9JTl9QU0hPX0ZMVVNILAorICAgIE5PX0ZMVVNICit9IGZsdXNoX2NhdXNlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFJMQ19UQkZfU1dJVENIX0ZBSUwsCisgICAgUkxDX1RCRl9TV0lUQ0hfTk9fVEJGLAorICAgIFJMQ19UQkZfU1dJVENIX1NVQ0NFU1MsCisgICAgUkxDX1RCRl9TV0lUQ0hfQUREX05FV19UQkYsCisgICAgUkNMX1RCRl9TV1RJQ0hfTk8KK30gcmxjX3RiZl9zd2l0Y2hfZW51bTsKKworLyogdHlwZWRlZiBlbnVtCisgICB7CisgICBSTENfUkVTX1JFUV9JRExFID0gMCwKKyAgIFJMQ19SRVNfUkVRX1dBSVQgCisgICB9IHJsY19yZXNfcmVxX3N0YXRlX2VudW07ICovCisgICAKKy8qIHR5cGVkZWYgZW51bXsKKyAgIFJMQ19FVkVOVF9USU1FUl9JRCA9IDMxODIKKyAgIH1STENfVElNRVJfSURfRU5VTTsgKi8KKworI2VuZGlmIC8qIF9STENfRU5VTVNfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JsY19tYWNfZW51bXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybGNfbWFjX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y1ZWM3NgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybGNfbWFjX2VudW1zLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICoJcmxjX21hY19lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgaXMgaW50ZW5kcyB0byBkZWZpbmUgdGhlIGVudW1zIHVzZWQgYmV0d2VlbiBNQUMgYW5kIFJMQy4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUkxDX01BQ19FTlVNU19ICisjZGVmaW5lIF9STENfTUFDX0VOVU1TX0gKKworI2lmbmRlZiBfUlJfQ09NTU9OX0RFRl9ICisjZXJyb3IgInJyX2NvbW1vbl9kZWYuaCBzaG91bGQgYmUgaW5jbHVkZWQgZmlyc3QiCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29uc3RhbnQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJMQ19NQVhfRExfU0xPVFMgICA4CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVudW0gVmFsdWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIGVudW0KK3sKKyAgIFJMQ19BQ0tfTU9ERSwKKyAgIFJMQ19VTkFDS19NT0RFCit9IHJsY19tb2RlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgUkxDX1RCRl9DTE9TRV9FTkRFRCwKKyAgIFJMQ19UQkZfT1BFTl9FTkRFRAorfSBybGNfdGJmX2VuZG5lc3NfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICBSRVFfRlRfT05FX1BIQVNFX0NPTlRFTlRJT05fRkFJTCwKKyAgIFJFUV9GVF9BQ0NFU1NfTk9UX0FMTE9XRUQsCisgICBSRVFfRlRfVU5BU1NJR05FRF9UTExJLAorICAgUkVRX0ZUX1BBX0ZBSUxFRAorfSByZXFfZmFpbHVyZV90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgQVNLX1JFU19SRVFfQUxMT1dFRCwKKyAgIEFTS19SRVNfUkVRX05PVF9BTExPV0VELAorICAgQVNLX1JFU19SRVFfVU5DSEFOR0VECit9IGFza19yZXNfcmVxX2VudW07IC8qIGluZm9ybSBSTEMgaWYgYXNrIHJlcyByZXEgaXMgYWxsb3dlZCBvciBub3QgKi8KKwordHlwZWRlZiBlbnVtCit7CisgICAgUFNfQ09ORl9USU1FUl9TVEFSVCwKKyAgICBQU19DT05GX1RJTUVSX1NUT1AsCisgICAgUFNfQ09ORl9USU1FUl9SRVNUQVJUCit9IHBzX2NvbmZfdGltZXJfYWN0aW9uX2VudW07CisKKyNlbmRpZiAvKiBlbmQgb2YgX1JMQ19NQUNfRU5VTVNfSCAqLworCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybGNtYWNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmxjbWFjX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjcyYzIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcmxjbWFjX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqCXJsY21hY19zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUkxDTUFDX1NUUlVDVF9ICisjZGVmaW5lIF9STENNQUNfU1RSVUNUX0gKKworLypFdmVseW46IFJlbW92ZSByZWR1bmRhbnQgaGVhZGVyIGFuZCBmaWxlICovCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJycl9jb21tb25fZGVmLmgiCisKKy8qIEV2ZWx5biAyMDA5MDQxNTogTWVyZ2UgUjYgKi8KKy8vI2lmZGVmIF9fTVRCRl9fCit0eXBlZGVmIHN0cnVjdCB0YmZfcmVsX3N0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcmVsX3R5cGU7CisgICAga2FsX3VpbnQ4IG5vX3VsX3BmaV92YWxpZDsKKyAgICBrYWxfdWludDggdWxfcGZpW01VTFRJUExFX1RCRl9OVU1dOworICAgIGthbF91aW50OCBub19kbF9wZmlfdmFsaWQ7CisgICAga2FsX3VpbnQ4IGRsX3BmaVtNVUxUSVBMRV9UQkZfTlVNXTsKKyAgICBrYWxfdWludDggaXNfYWxsX3RiZl9yZWw7Cit9IHRiZl9yZWxfc3RydWN0OworLy8jZWxzZQorI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorLy8jZW5kaWYgLyogZW5kIG9mIF9fTVRCRl9fKi8KKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JtcGMybWFjX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JtcGMybWFjX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNjY3YTEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcm1wYzJtYWNfc3RydWN0LmgKQEAgLTAsMCArMSwyOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICoJcm1wYzJtYWNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1JNUEMyTUFDX1NUUlVDVF9ICisjZGVmaW5lIF9STVBDMk1BQ19TVFJVQ1RfSAorCisvKkV2ZWx5bjogUmVtb3ZlIHJlZHVuZGFudCBoZWFkZXIgYW5kIGZpbGUgKi8KKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgInJtY19wZWVyX3N0cnVjdC5oIgorI2luY2x1ZGUgInJyX2NvbW1vbl9kZWYuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCBpc192YWxpZDsKKyAgICBrYWxfdWludDggbGVuZ3RoX29mX2xpc3Q7CisgICAga2FsX3VpbnQxNiBmcmVxX2xpc3RbNjRdOworfSBmcmVxX2FsbG9jX2xpc3Rfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IGJpdF9vZmZzZXQ7CisgICAga2FsX3VpbnQ4IG5vX3VsX2Fzc2lnbl9wdHI7CisgICAga2FsX3VpbnQ4IHVsX2Fzc2lnbl9wdHJfc2l6ZTsKKyAgICBrYWxfdWludDggKnVsX2Fzc2lnbl9wdHI7Cit9IHJtcGNfbWFjX3BrdF91bF9hc3NpZ25faW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHBrdF9jaGFuX2Rlc2Nfc3RydWN0IHBrdF9jaF9kZXNjOworICAgIHRpbWluZ19hZHZhbmNlX3N0cnVjdCB0aW1pbmdfYWR2OworICAgIGZyZXFfYWxsb2NfbGlzdF9zdHJ1Y3QgZnJlcV9hbGxvYzsKKyAgICBrYWxfdWludDggbm9faWFfcmVzdF9vY3RzOworICAgIGthbF91aW50OCBpYV9yZXN0X29jdHNfc2l6ZTsKKyAgICBrYWxfdWludDggKmlhX3Jlc3Rfb2N0czsKK30gcm1wY19tYWNfaW1tX3BrdF91bF9hc3NpZ25faW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCBiZWZvcmVfdGltZV92YWxpZDsKKyAgICBjaGFubmVsX2Rlc2Nfc3RydWN0IGNoYW5fZGVzY19iZWZvcmVfdGltZTsKKyAgICBmcmVxX2FsbG9jX2xpc3Rfc3RydWN0IGZyZXFfYWxsb2NfYmVmb3JlX3RpbWU7CisgICAgU1RBUlRJTkdfVElNRV9TVFJVQ1RfMSBzdGFydF90aW1lOworICAgIGNoYW5uZWxfZGVzY19zdHJ1Y3QgY2hhbl9kZXNjX2FmdGVyX3RpbWU7CisgICAgZnJlcV9hbGxvY19saXN0X3N0cnVjdCBmcmVxX2FsbG9jX2FmdGVyX3RpbWU7CisgICAga2FsX3VpbnQ4IG5vX3VsX2FzZ247CisgICAga2FsX3VpbnQ4IHVsX2FzZ25fc2l6ZTsKKyAgICBrYWxfdWludDggKnVsX2FzZ247Cit9IHJtcGNfbWFjX3BkY2hfcGt0X3VsX2Fzc2lnbl9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IGJpdF9vZmZzZXQ7CisgICAga2FsX3VpbnQ4IG5vX2RsX2Fzc2lnbl9wdHI7CisgICAga2FsX3VpbnQ4IGRsX2Fzc2lnbl9wdHJfc2l6ZTsKKyAgICBrYWxfdWludDggKmRsX2Fzc2lnbl9wdHI7Cit9IHJtcGNfbWFjX3BrdF9kbF9hc3NpZ25faW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHBrdF9jaGFuX2Rlc2Nfc3RydWN0IHBrdF9jaF9kZXNjOworICAgIHRpbWluZ19hZHZhbmNlX3N0cnVjdCB0aW1pbmdfYWR2OworICAgIGZyZXFfYWxsb2NfbGlzdF9zdHJ1Y3QgZnJlcV9hbGxvYzsKKyAgICBrYWxfdWludDggbm9faWFfcmVzdF9vY3RzOworICAgIGthbF91aW50OCBpYV9yZXN0X29jdHNfc2l6ZTsKKyAgICBrYWxfdWludDggKmlhX3Jlc3Rfb2N0czsKK30gcm1wY19tYWNfaW1tX3BrdF9kbF9hc3NpZ25faW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCBiZWZvcmVfdGltZV92YWxpZDsKKyAgICBjaGFubmVsX2Rlc2Nfc3RydWN0IGNoYW5fZGVzY19iZWZvcmVfdGltZTsKKyAgICBmcmVxX2FsbG9jX2xpc3Rfc3RydWN0IGZyZXFfYWxsb2NfYmVmb3JlX3RpbWU7CisgICAgU1RBUlRJTkdfVElNRV9TVFJVQ1RfMSBzdGFydF90aW1lOworICAgIGNoYW5uZWxfZGVzY19zdHJ1Y3QgY2hhbl9kZXNjX2FmdGVyX3RpbWU7CisgICAgZnJlcV9hbGxvY19saXN0X3N0cnVjdCBmcmVxX2FsbG9jX2FmdGVyX3RpbWU7CisgICAga2FsX3VpbnQ4IG5vX2RsX2FzZ247CisgICAga2FsX3VpbnQ4IGRsX2FzZ25fc2l6ZTsKKyAgICBrYWxfdWludDggKmRsX2FzZ247Cit9IHJtcGNfbWFjX3BkY2hfcGt0X2RsX2Fzc2lnbl9pbmRfc3RydWN0OworCisvLyBFdmVseW4gOiBtZXJnZSBjb250cm9sIG1lc3NhZ2UgaW5kaWNhdGlvbiBybyBSTVBDIGFzIG1hY19ybXBjX2N0cmxfbXNnX2luZAorI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisvKiBFeGNlIDAzMDgyNzogQ2hhbmdlIGludGVyZmFjZTsgUkVTX1JFUSBmb3dhcmRlZCBiYWNrIHRvIE1BQyBpcyBrZXB0IGluIHRoZSBwcmltaXRpdmUgaXRzZWxmICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICAvKiBFdmVseW4gMjAwOTA0MTU6IE1lcmdlIFI2ICovCisgICAgLy8gRXZlbHluIE1UQkY6IENoYW5nZSB0aGUgcGFja2V0IGFjY2VzcyBzdHJ1Y3R1cmUKKyAgICBtdWx0aXBsZV9yZXNfcmVxX3N0cnVjdCByZXNfcmVxX21zZzsgICAgIC8qIEV4Y2UgMDMwODI3OiBOb3RlIHRoYXQgZm9yd2FyZGVkIGJhY2sgUkVTX1JFUSBpbiB0aGUgcHJpbWl0dmUgaXMgQUxXQVlTIHZhbGlkICovCisgICAgdHNfZnJhbWVfbm9fc3RydWN0IHRzX2ZyYW1lX25vOworICAgIGthbF91aW50OCBhY2Nlc3NfdHlwZTsKKyAgICBwa3RfYXNzaWduX3R5cGVfZW51bSBwa3RfYXNzaWduX3R5cGVfdGFnOworICAgIHVuaW9uIHsKKyAgICAgICAgcm1wY19tYWNfcGt0X3VsX2Fzc2lnbl9pbmRfc3RydWN0IHBrdF91bF9hc3NpZ247CisgICAgICAgIHJtcGNfbWFjX2ltbV9wa3RfdWxfYXNzaWduX2luZF9zdHJ1Y3QgaW1tX3VsX2Fzc2lnbjsKKyAgICAgICAgcm1wY19tYWNfcGRjaF9wa3RfdWxfYXNzaWduX2luZF9zdHJ1Y3QgcGRjaF91bF9hc3NpZ247CisgICAgfSBwa3RfYXNzaWduX3R5cGVfdmFsdWU7Cit9IHJtcGNfbWFjX3VsX2Fzc2lnbl9pbmRfc3RydWN0OworCisvKiBFeGNlIDAzMDgyNzogQ2hhbmdlIGludGVyZmFjZTsgUkVTX1JFUSBmb3dhcmRlZCBiYWNrIHRvIE1BQyBpcyBrZXB0IGluIHRoZSBwcmltaXRpdmUgaXRzZWxmLCBhbHNvIHJlbW92ZSB1bm5lY2Vzc2FyeSBmaWVsZHMuICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKy8vICAgIGthbF91aW50OCBub19yZXNfcmVxX21zZzsKKy8vICAgIGthbF91aW50OCByZXNfcmVxX21zZ19zaXplOworICAgIGthbF9ib29sIGlzX3Jlc19yZXFfbXNnX3ZhbGlkOworLyogRXZlbHluIDIwMDkwNDE1OiBNZXJnZSBSNiAqLworICAgIG11bHRpcGxlX3Jlc19yZXFfc3RydWN0IHJlc19yZXFfbXNnOworICAgIHRzX2ZyYW1lX25vX3N0cnVjdCB0c19mcmFtZV9ubzsKKyAgICBwa3RfYXNzaWduX3R5cGVfZW51bSBwa3RfYXNzaWduX3R5cGVfdGFnOworICAgIHVuaW9uIHsKKyAgICAgICAgcm1wY19tYWNfcGt0X2RsX2Fzc2lnbl9pbmRfc3RydWN0IHBrdF9kbF9hc3NpZ247CisgICAgICAgIHJtcGNfbWFjX2ltbV9wa3RfZGxfYXNzaWduX2luZF9zdHJ1Y3QgaW1tX2RsX2Fzc2lnbjsKKyAgICAgICAgcm1wY19tYWNfcGRjaF9wa3RfZGxfYXNzaWduX2luZF9zdHJ1Y3QgcGRjaF9kbF9hc3NpZ247CisgICAgfSBwa3RfYXNzaWduX3R5cGVfdmFsdWU7Cit9IHJtcGNfbWFjX2RsX2Fzc2lnbl9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcmVhZHlfZmxhZzsKKyAgICBrYWxfdWludDggY29uZl9yZXFkOworICAgIGthbF91aW50OCBub19ybXBjX21zZ19wdHI7CisgICAga2FsX3VpbnQ4IHJtcGNfbXNnX3B0cl9zaXplOworICAgIGthbF91aW50OCAqcm1wY19tc2dfcHRyOworfSBybXBjX21hY19zaV9pbmZvX3JlYWR5X2luZF9zdHJ1Y3Q7CisKKy8qIExhbnNsbyAyMDA1MTEwMjogZm9yIE1OVCAqLworI2lmICAoIWRlZmluZWQoX19NVEtfVEFSR0VUX18pKSB8fCBkZWZpbmVkKF9fTUFDX1NIT1dfVFJBTlNfREFUQV9fKQordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgdGJmX3JlbF90eXBlX2VudW0gcmVsX2NhdXNlOworICAgIGthbF9ib29sICBpc19mb3Jfcm1wY190ZXN0OworfSBybXBjX21hY19jZWxsX3N0YXR1c19pbmRfc3RydWN0OworI2VuZGlmCisKKy8vIEV2ZWx5biA6IG1lcmdlIGNvbnRyb2wgbWVzc2FnZSBpbmRpY2F0aW9uIHJvIFJNUEMgYXMgbWFjX3JtcGNfY3RybF9tc2dfaW5kCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKKy8qIEV2ZWx5biAyMDA5MDQxNTogTWVyZ2UgUjYgKi8KK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcm1wY19tYWNfY3RybF9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIGthbF91aW50OCogZW5jX2RhdGFfcHRyOworICAgIGthbF91aW50OCByZXFfaWQ7Cit9IHJtcGNfbWFjX2N0cmxfbXNnX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcm1wY19tYWNfY3RybF9tc2dfdHlwZV9lbnVtIG1zZ190eXBlOworICAgIGthbF91aW50OCByZXFfaWQ7Cit9IHJtcGNfbWFjX2N0cmxfbXNnX2RlbGV0ZV9yZXFfc3RydWN0OworCisKK3R5cGVkZWYgZW51bSB7CisgICAgU0VSVl9TSV9QVFIsCisgICAgUFNfSE9fQkVHSU5fVEFSR0VUX0NFTExfU0lfUFRSLAorICAgIFBTX0hPX0ZBSUxfT0xEX1NFUlZfU0lfUFRSCit9IG1hY19zaV9wdHJfcXVlcnlfdHlwZV9lbnVtOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybXBjMnJsY19zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybXBjMnJsY19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTFjYzNlCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JtcGMycmxjX3N0cnVjdC5oCkBAIC0wLDAgKzEsODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICoJcm1wYzJybGNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1JNUEMyUkxDX1NUUlVDVF9ICisjZGVmaW5lIF9STVBDMlJMQ19TVFJVQ1RfSAorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggY2F1c2U7Cit9IHJtcGNfcmxjX2FjY2Vzc19mYWlsdXJlX2luZF9zdHJ1Y3Q7CisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcm1wYzJycm1fc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcm1wYzJycm1fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjMmUwZAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybXBjMnJybV9zdHJ1Y3QuaApAQCAtMCwwICsxLDEwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJtcGMycnJtX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUk1QQzJSUk1fU1RSVUNUX0gKKyNkZWZpbmUgX1JNUEMyUlJNX1NUUlVDVF9ICisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzdGFydF9vcl9zdG9wOworfSBybXBjX3JybV9ocGxtbl9zcmNoX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB1cGRhdGVfdHlwZTsKKyAgICAvKiBKQUNLIDA3MTAsIG1vZGlmeSBmb3IgaW5mb3JtaW5nIFJSTSBhYm5vcm1hbCBjZWxsIHJlc2VsZWN0aW9uIAorICAgICAqIHN0YXJ0L2VuZCAqLworfSBybXBjX3JybV9iYV9jaGFuZ2VfaW5kX3N0cnVjdDsKKworIC8qIENsYWlyZSAwNDExMDUgY2hhbmdlIDogSW1wbGVtZW50IEludGVyLVBMTU4gaGFuZG92ZXIgKi8KKyB0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggaXNfaW50ZXJfcGxtbl9oYW5kb3ZlcjsKKyAgICBrYWxfdWludDggbnVtYmVyX29mX2NoYW5uZWxzOworICAgIGthbF91aW50MTYgKmFyZmNuX2xpc3Q7ICAgIAorfSBybXBjX3JybV9jZWxsX3NlbF9yZXFfc3RydWN0OworI2VuZGlmCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybXBjX3JsY19lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JtcGNfcmxjX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5ZWRiNwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ybXBjX3JsY19lbnVtcy5oCkBAIC0wLDAgKzEsMTA0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqCXJtcGNfcmxjX2VudW1zLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRzIHRvIGRlZmluZSByZWxhdGVkIG1lc3NhZ2VzIGFuZCBwYXJhbXRlcnMgYmV0d2VlbiBSTEMKKyAqICAgYW5kIFJNUEMuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUk1QQ19STENfRU5VTVNfSAorI2RlZmluZSBfUk1QQ19STENfRU5VTVNfSAorCisjaWZuZGVmIF9SUl9DT01NT05fREVGX0gKKyNlcnJvciAicnJfY29tbW9uX2RlZi5oIHNob3VsZCBiZSBpbmNsdWRlZCBmaXJzdCIKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb25zdGFudAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW51bSBWYWx1ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgZW51bQoreworICAgLy9BQ0NFU1NfTk9UX0FMTE9XRUQsCisgICBDRUxMX1JFU0VMRUNUSU9OLAorICAgTldfQ05UUkxfQ0VMTF9SRVNFTCwKKyAgIE5XX0NOVFJMX0NFTExfUkVTRUxfRkFJTCwKKyAgIE5FVFdPUktfTk9UX1JFU1BPTkRJTkcsCisgICBUQkZfRVNUQUJMSVNITUVOVF9SRUlOSVRJQVRFLAorICAgLy9UQkZfRVNUQUJMSVNITUVOVF9GQUlMVVJFLAorICAgLy9SQU5EX0FDQ0VTU19GQUlMVVJFLAorICAgTk9fU0lNX0ZBSUwsCisgICBSUl9ERVRBQ0gKK30gQUNDRVNTX0ZBSUxVUkVfQ0FVU0U7CisKKyNlbmRpZiAvKiBlbmQgb2YgX1JNUENfUkxDX0VOVU1TX0ggKi8KKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcm9oY19leHBvcnRfYXBpLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcm9oY19leHBvcnRfYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkODgxZgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yb2hjX2V4cG9ydF9hcGkuaApAQCAtMCwwICsxLDE0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJvaGNfZXhwb3J0X2FwaS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIFZNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGNvbnRhaW5zIFJBTCAoUk9IQyBBYnN0cmFjdCBMYXllcikgZXhwb3J0IGludGVyZmFjZSBkZWZpbml0aW9ucy4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9ST0hDX0VYUE9SVF9BUElfSF8KKyNkZWZpbmUgX1JPSENfRVhQT1JUX0FQSV9IXworCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29uc3RhbnQgRGVmaW5pdGlvbgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgUk9IQ19SRUdfUlRQX0ZMT1dfSVBfSERSX01BWF9OVU0gKDIpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN0cnVjdHVyZSBEZWZpbml0aW9uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiBpc19pcHY0OworCisgICAgLyoKKyAgICAgKiBzcmMvZHN0IGFkZHJlc3MsIHdoaWNoIGFyZSBuZXR3b3JrIGJ5dGUgb3JkZXIKKyAgICAgKiBOb3RlIHRoYXQgdGhlIG9yZGVyIG9mIHNyY19hZGRyIGFuZCBkc3RfYWRkciBjYW4ndCBiZSBjaGFuZ2VkLgorICAgICAqLworICAgIGthbF91aW50MzIgc3JjX2FkZHJbNF07CisgICAga2FsX3VpbnQzMiBkc3RfYWRkcls0XTsKK30gcmFsX3J0cF9mbG93X2lwX3BhcmFtX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLy8vIHNyYy9kc3QgcG9ydHMsIHdoaWNoIGFyZSBuZXR3b3JrIGJ5dGUgb3JkZXIKKyAgICBrYWxfdWludDE2IHNyY19wb3J0OworICAgIGthbF91aW50MTYgZHN0X3BvcnQ7Cit9IHJhbF9ydHBfZmxvd191ZHBfcGFyYW1fdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvLy8gc3NyYywgd2hpY2ggaXMgbmV0d29yayBieXRlIG9yZGVyCisgICAga2FsX3VpbnQzMiBzc3JjOworCisgICAgLy8vIGV4cGVjdGVkIHRzX3N0cmlkZSB3aGlsZSB2b2ljZSBpcyBvbmdvaW5nCisgICAga2FsX3VpbnQzMiB0c19zdHJpZGU7Cit9IHJhbF9ydHBfZmxvd19ydHBfcGFyYW1fdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvLy8gbnVtYmVyIG9mIGVudHJ5IGluIGlwX2Zsb3dfcGFyYW0KKyAgICBrYWxfdWludDMyIGlwX2hkcl9udW07CisKKyAgICAvKgorICAgICAqIGlwIGZsb3cgcGFyYW1ldGVycywgZnJvbSBvdXRlciB0byBpbm5lciwgZS5nLiBpcF9mbG93X3BhcmFtW2lwX2hkcl9udW0tMV0gaXMgdGhlCisgICAgICogaW5uZXJtb3N0IGlwIGhlYWRlciBwYXJhbWV0ZXIuCisgICAgICovCisgICAgcmFsX3J0cF9mbG93X2lwX3BhcmFtX3QgaXBfcGFyYW1bUk9IQ19SRUdfUlRQX0ZMT1dfSVBfSERSX01BWF9OVU1dOworCisgICAgLy8vIHVkcCBmbG93IHBhcmFtZXRlcnMKKyAgICByYWxfcnRwX2Zsb3dfdWRwX3BhcmFtX3QgdWRwX3BhcmFtOworCisgICAgLy8vIHJ0cCBmbG93IHBhcmFtZXRlcnMKKyAgICByYWxfcnRwX2Zsb3dfcnRwX3BhcmFtX3QgcnRwX3BhcmFtOworCit9IHJhbF9ydHBfZmxvd19wYXJhbV90OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQdWJsaWMgTWFjcm8gRGVmaW5pdGlvbgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSW50ZXJmYWNlIEZ1bmN0aW9uIERlZmluaXRpb24KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioKKyAqIEBicmllZiBSZWdpc3RlciB0aGUgUlRQIGZsb3cgZGVzY3JpYmVkIGluIHBfcnRwX2Zsb3dfcGFyYW0gdG8gdXNlIFJUUCBwcm9maWxlCisgKiBAcGFyYW0gcF9ydHBfZmxvd19wYXJhbSB0aGUgUlRQIGZsb3cgcGFyYW1ldGVycworICogQHJldHVybiA8IDAgaWYgYW55IGVycm9yIGhhcHBlbnMKKyAqICAgICAgICAgMCBvdGhlcndpc2UKKyAqLwora2FsX2ludDMyIHJhbF9jcjRfcmVnX3J0cF9mbG93KHJhbF9ydHBfZmxvd19wYXJhbV90ICpwX3J0cF9mbG93X3BhcmFtKTsKKworLyoqCisgKiBAYnJpZWYgVW5yZWdpc3RlciB0aGUgUlRQIGZsb3cgZGVzY3JpYmVkIGluIHBfcnRwX2Zsb3dfcGFyYW0KKyAqIEBwYXJhbSBwX3J0cF9mbG93X3BhcmFtIHRoZSBSVFAgZmxvdyBwYXJhbWV0ZXJzCisgKiBAcmV0dXJuIDwgMCBpZiBhbnkgZXJyb3IgaGFwcGVucworICogICAgICAgICAwIG90aGVyd2lzZQorICovCitrYWxfaW50MzIgcmFsX2NyNF91bnJlZ19ydHBfZmxvdyhyYWxfcnRwX2Zsb3dfcGFyYW1fdCAqcF9ydHBfZmxvd19wYXJhbSk7CisKKyNlbmRpZiAvKiBfUk9IQ19FWFBPUlRfQVBJX0hfICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcnIybGFwZG1fc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcnIybGFwZG1fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxY2QzYwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ycjJsYXBkbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDIyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJyMmxhcGRtX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9SUjJMQVBETV9TVFJVQ1RfSAorI2RlZmluZSBfUlIyTEFQRE1fU1RSVUNUX0gKKworLyogYWRkIFJIUiAqLworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIiAvKiBNU0JCIGJ5IFJhY2hlbCAqLworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisKKyNpbmNsdWRlICJycl9jb21tb25fZW51bXMuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCBpc19kdHhfdXBkYXRlZDsKKyAgICBrYWxfdWludDggaXNfZHR4X3RjaF9oOworICAgIGthbF91aW50OCBpc19kdHhfdGNoX2Y7Cit9Citycl9kdHhfdXBkYXRlX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfYm9vbCBpc19tYXhybGNfdXBkYXRlZDsKKyAgICBrYWxfdWludDE2IG1heF9ybGN2YWx1ZTsgCit9Citycl9tYXhybGNfdXBkYXRlX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgbGFwZG1fc2FwaV9oZWFkZXIgc2FwX2lkOworICAgIGthbF91aW50OCBsMmhlYWRlcjsKKyAgICBjaGFubmVsX3R5cGVfZW51bSBjaGFubmVsX3R5cGU7Cit9IHJyX2xhcGRtX3VuaXRkYXRhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGxhcGRtX3NhcGlfaGVhZGVyIHNhcF9pZDsKKyAgICBMQVBETV9FU1RCX01PREUgZXN0Yl9tb2RlOworICAgIGNoYW5uZWxfdHlwZV9lbnVtIGNoYW5uZWxfdHlwZTsKKyAgICBycl9tYXhybGNfdXBkYXRlX3N0cnVjdCBtYXhybGNfdXBkYXRlOworfSBycl9sYXBkbV9lc3RiX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGxhcGRtX3NhcGlfaGVhZGVyIHNhcF9pZDsKKyAgICBjaGFubmVsX3R5cGVfZW51bSBjaGFubmVsX3R5cGU7CisgICAga2FsX3VpbnQ4IGhhbGZfdG9fZnVsbDsKK30gcnJfbGFwZG1fc3VzX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGxhcGRtX3NhcGlfaGVhZGVyIHNhcF9pZDsKKyAgICBjaGFubmVsX3R5cGVfZW51bSBjaGFubmVsX3R5cGU7Cit9IHJyX2xhcGRtX3Jlc3VtZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBsYXBkbV9zYXBpX2hlYWRlciBzYXBfaWQ7CisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hhbm5lbF90eXBlOworfSBycl9sYXBkbV9yZWNvbl9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBsYXBkbV9zYXBpX2hlYWRlciBzYXBfaWQ7CisgICAga2FsX3VpbnQ4IHByaW9yaXR5OworICAgIGNoYW5uZWxfdHlwZV9lbnVtIGNoYW5uZWxfdHlwZTsKKy8qIGJyd2FuZywgMDYvMDQvMDgsIFtNQVVJXzAwMTg1OTE1XSB7ICovCisgICAga2FsX3VpbnQ4IG11aTsKKy8qIGJyd2FuZywgMDYvMDQvMDgsIFtNQVVJXzAwMTg1OTE1XSB9ICovICAgIAorfSBycl9sYXBkbV9kYXRhX3JlcV9zdHJ1Y3Q7CisKKyNpZmRlZiBfX0FHUFNfQ09OVFJPTF9QTEFORV9fCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBsYXBkbV9zYXBpX2hlYWRlciBzYXBfaWQ7CisgICAga2FsX3VpbnQ4IHByaW9yaXR5OworICAgIGNoYW5uZWxfdHlwZV9lbnVtIGNoYW5uZWxfdHlwZTsKKyAgICBsYXBkbV9sYXllcjNfbWVzc2FnZV90eXBlX2VudW0gc2VnbWVudF90eXBlOworICAgIGthbF91aW50OCBtdWk7Cit9IHJyX2xhcGRtX2FwcF9kYXRhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIG5lZWRfY2xlYXI7Cit9IHJyX2xhcGRtX2NsZWFyX2FwcF9xdWV1ZV9yZXFfc3RydWN0OworI2VuZGlmIC8qIF9fQUdQU19DT05UUk9MX1BMQU5FX18gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgbGFwZG1fc2FwaV9oZWFkZXIgc2FwX2lkOworICAgIGthbF91aW50OCByZWxlYXNlX21vZGU7CisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hhbm5lbF90eXBlOworfSBycl9sYXBkbV9yZWxfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgbGFwZG1fc2FwaV9oZWFkZXIgc2FwX2lkOworICAgIGNoYW5uZWxfdHlwZV9lbnVtIGNoYW5uZWxfdHlwZTsKK30gcnJfbGFwZG1fbWRsX3JlbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBycl9kdHhfdXBkYXRlX3N0cnVjdCBkdHhfdXBkYXRlOworICAgIHJyX21heHJsY191cGRhdGVfc3RydWN0IG1heHJsY191cGRhdGU7Cit9IHJyX2xhcGRtX2NlbGxfb3B0aW9uX3VwZGF0ZV9yZXFfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGxhcGRtX3NhcGlfaGVhZGVyIHNhcF9pZDsKKyAgICBjaGFubmVsX3R5cGVfZW51bSBjaGFubmVsX3R5cGU7CisgICAgcnJfbWF4cmxjX3VwZGF0ZV9zdHJ1Y3QgbWF4cmxjX3VwZGF0ZTsgICAgCit9IHJyX2xhcGRtX2ludGVyX3JhdF9lc3RfcmVxX3N0cnVjdDsKKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JyMm1wYWxfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcnIybXBhbF9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODdmNzllCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JyMm1wYWxfc3RydWN0LmgKQEAgLTAsMCArMSwxNjczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgTW9kaWZpY2F0aW9uIE5vdGljZToKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRoaXMgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgTWVkaWFUZWsgSW5jLiBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorICogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisgKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisgKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDAxCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBycjJtcGFsX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1hdWlfU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICoKKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX1JSMk1QQUxfU1RSVUNUX0gKKyNkZWZpbmUgX1JSMk1QQUxfU1RSVUNUX0gKKworLypFdmVseW46IFJlbW92ZSByZWR1bmRhbnQgaGVhZGVyIGFuZCBmaWxlICovCisjaW5jbHVkZSAicnJfbXBhbF9pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJsM19pbmNfbG9jYWwuaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImdtc3NfcHVibGljLmgiCisvKkp1c3RpbjogUkhSKi8KKyNpZmRlZiBfX1VNVFNfUkFUX18KKyNpbmNsdWRlICJ1YXNfZ2FzX2VudW1zLmgiCisjZW5kaWYKKyNpbmNsdWRlICJycl9jb21tb25fZGVmLmgiCisjaW5jbHVkZSAiZ2FzX2Vhc19lbnVtcy5oIgorCisjaW5jbHVkZSAicnJfY29tbW9uX2VudW1zLmgiCisKKyNpbmNsdWRlICJnYXNfZ2lzZV9lbnVtLmgiCisjaWYgZGVmaW5lZChfX1VNVFNfUkFUX18pIHx8IGRlZmluZWQoX19MVEVfUkFUX18pCisjaW5jbHVkZSAidWFzX2dhc19pbnRlcl9jb3JlX2VudW0uaCIKKyNpbmNsdWRlICJhc19pbnRlcl9jb3JlX3N0cnVjdC5oIgorI2VuZGlmIC8qIGRlZmluZWQoX19VTVRTX1JBVF9fKSB8fCBkZWZpbmVkKF9fTFRFX1JBVF9fKSAqLworI2lmIGRlZmluZWQoX18yM0dfUFJJX1JFU0VMX1NVUFBPUlRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykKKyNpbmNsdWRlICJnYXNfZWFzX2ludGVyX2NvcmVfZW51bS5oIgorI2VuZGlmIC8qIGRlZmluZWQoX18yM0dfUFJJX1JFU0VMX1NVUFBPUlRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykgKi8KKworI2lmZGVmIF9fR0VNSU5JX18KKyNpbmNsdWRlICJyc3Zhc19lbnVtLmgiCisjZW5kaWYgLyogX19HRU1JTklfXyAqLworCisjaWYgZGVmaW5lZChfX1VNVFNfUkFUX18pIHx8IGRlZmluZWQoX19MVEVfUkFUX18pCisjZGVmaW5lIFNUQU5EQllfR1NNX01FQVNfTUFYX0NFTExfTlVNICgzMikgLy8gcmVmIHRvIE1QSF9TVEFOREJZX0dTTV9NRUFTX01BWF9DRUxMX05VTQorI2RlZmluZSBTVEFOREJZX0dTTV9NQVhfQlNJQ19OVU0gKDMyKSAgICAgIC8vIHJlZiB0byBNUEhfU1RBTkRCWV9HU01fTUVBU19NQVhfQ0VMTF9OVU0KKyNlbmRpZiAvKiBkZWZpbmVkKF9fVU1UU19SQVRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykgKi8KKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IHZhbGlkOworICAgIGthbF91aW50MTYgdDE7CisgICAga2FsX3VpbnQ4IHQyOworICAgIGthbF91aW50OCB0MzsKK30gc3RhcnRpbmdfdGltZV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggaXNfdmFsdWVfdmFsaWQ7CisgICAga2FsX3VpbnQ4IHZhbHVlOworfSB0aW1pbmdfYWR2X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCBpc192YWx1ZV92YWxpZDsKKyAgICBrYWxfdWludDggcHdyX2N0cmxfbGV2ZWw7Cit9IHB3cl9jbWRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IGNpcGhlcl9tb2RlOworICAgIGthbF91aW50OCBjaXBoZXJfa2V5W0tDX0xFTl07CisjaWZkZWYgX19BNTRfQUxHT1JJVEhNX1NVUFBPUlRfXwkKKyAgICBrYWxfdWludDggY2lwaGVyX2tleV8xMjhbS0MxMjhfTEVOXTsKKyNlbmRpZiAvKiBfX0E1NF9BTEdPUklUSE1fU1VQUE9SVF9fICovCit9IGNpcGhlcl9zZXR0aW5nX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCBtYWlvOworICAgIGthbF91aW50OCBoc247CisgICAga2FsX3VpbnQ4IGxlbmd0aF9vZl9saXN0OworICAgIGthbF91aW50MTYgZnJlcV9saXN0WzY0XTsKK30gaG9wcGluZ19mcmVxX2xpc3Rfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQxNiBhcmZjbjsKKyAgICBob3BwaW5nX2ZyZXFfbGlzdF9zdHJ1Y3QgaG9wcGluZ19mcmVxX2xpc3Q7Cit9IGZyZXFfY29tcF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfYm9vbCBpc19ob3BwaW5nOworICAgIGthbF91aW50OCB0c2M7CisgICAga2FsX3VpbnQ4IHRzY19zZXQ7IC8qIDAgb3IgMTsgb25seSB2YWxpZCBpbiBoYW5kb3Zlcl9yZXEgYW5kIGRlZGljYXRlZF9jaGFubmVsX2Nvbm5lY3RfcmVxICovCisgICAgZnJlcV9jb21wX3N0cnVjdCBmcmVxX2NvbXA7Cit9IGZyZXFfcGFyYW1zX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCB0aW1lX3Nsb3Q7CisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hfdHlwZTsKKyAgICBjaGFubmVsX21vZGVfZW51bSBjaF9tb2RlOworICAgIGZyZXFfcGFyYW1zX3N0cnVjdCBmcmVxX3BhcmFtczsKK30gY2hfY29ubmVjdF9jdHJsX3BhcmFtc19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggbGlzdF9yZWY7CisgICAga2FsX3VpbnQ4IGFyZmNuX2xpc3RfbGVuOworICAgIGthbF91aW50MTYgYXJmY25fbGlzdFszM107Cit9IGJjY2hfbGlzdF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggbGlzdF9yZWY7CisgICAga2FsX3VpbnQxNiBhcmZjbl9saXN0X2xlbjsKKyAgICBrYWxfdWludDE2IGFyZmNuX2xpc3RbNTEyXTsKK30gc3RvcmVkX2JjY2hfbGlzdF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDE2IGFyZmNuOworICAgIGthbF91aW50OCBic2ljX3ZhbGlkOworICAgIGthbF9pbnQzMiBmcmFtZV9vZmZzZXQ7CisgICAga2FsX2ludDMyIGViaXRfb2Zmc2V0OworICAgIGthbF91aW50OCBuZWVkX3JldHJ5OworICAgIGthbF91aW50OCByZXRyeV9GQl9TQjsKKyAgICBrYWxfYm9vbCBzaG9ydF9GQjsKK30gbmVpZ2hib3JfYnNpY19hY3F1aXNpdGlvbl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDE2IGFyZmNuOworICAgIGthbF91aW50OCBpc19uZWVkX2ZyZXFfY29ycmVjdGlvbjsKK30gY2VsbF9ic2ljX2FjcXVpc2l0aW9uX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50MTYgYXJmY247CisgICAga2FsX3VpbnQ4IGJzaWNfdmFsaWQ7CisgICAga2FsX3VpbnQ4IGJzaWM7CisgICAga2FsX3VpbnQxNiBiY2NoX21hc2s7CisgICAga2FsX2ludDMyIGZyYW1lX29mZnNldDsKKyAgICBrYWxfaW50MzIgZWJpdF9vZmZzZXQ7CisgICAga2FsX3VpbnQ4IGlzX3ByaW9yX3RvX2FjcXVpcmU7CisgICAga2FsX3VpbnQ4IG5lZWRfcmV0cnk7CisgICAga2FsX3VpbnQ4IHVzZV9wcmlvcml0eV9pbmRleF9vcmRlcjsKKyNpZmRlZiBfX0dFTUlOSV9fCisgICAga2FsX3VpbnQxNiBwcmlvcml0eV9pbmRleDsgLyptYXJ1Y28yMDA3MTEwNyxSUiBtYXkgYWRkIG1vcmUgcHJpb3JpdGllcyBmb3IgYWNxdWlyaW5nIE5CQ0NILiovCisjZWxzZQorICAgIGthbF91aW50OCBwcmlvcml0eV9pbmRleDsKKyNlbmRpZi8qIGVuZCBvZiBfX0dFTUlOSV9fKi8KK30gbmVpZ2hib3JfYmNjaF9hY3F1aXNpdGlvbl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDE2IGFyZmNuOworICAgIGthbF91aW50OCBic2ljOworICAgIGthbF91aW50MTYgYmNjaF9tYXNrOworICAgIGthbF9pbnQzMiBmcmFtZV9vZmZzZXQ7CisgICAga2FsX2ludDMyIGViaXRfb2Zmc2V0OworICAgIGthbF91aW50OCB1c2VfcHJpb3JpdHlfaW5kZXhfb3JkZXI7CisjaWZkZWYgX19HRU1JTklfXworICAgIGthbF91aW50MTYgcHJpb3JpdHlfaW5kZXg7IC8qbWFydWNvMjAwNzExMDcsUlIgbWF5IGFkZCBtb3JlIHByaW9yaXRpZXMgZm9yIGFjcXVpcmluZyBOQkNDSC4qLworI2Vsc2UKKyAgICBrYWxfdWludDggcHJpb3JpdHlfaW5kZXg7CisjZW5kaWYgLyogZW5kIG9mIF9fR0VNSU5JX18qLworCisjaWZkZWYgX19HRU1JTklfXworICAgIC8qIE1hcnVjbzIwMDgxMTI1LEdFTUlOSSBNQVVJXzkxNTUzLGZvciBCQ0NIX3ByZWVtcHRfcGVlcl9QQ0ggKi8KKyAgICBrYWxfdWludDggaXNfcHJpb3JfdG9fYWNxdWlyZTsKKyNlbmRpZiAvKiBlbmQgb2YgX19HRU1JTklfXyovCit9IGNlbGxfYmNjaF9hY3F1aXNpdGlvbl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggaXNfdmFsaWQ7CisgICAga2FsX3VpbnQ4IGdhbW1hOworfSBnYW1tYV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggYWxwaGE7CisgICAga2FsX3VpbnQ4IHBiOworICAgIGthbF91aW50OCB0X2F2Z193OworICAgIGthbF91aW50OCBwY19tZWFzX2NoYW47CisgICAga2FsX3VpbnQ4IHRfYXZnX3Q7CisgICAgZ2FtbWFfc3RydWN0IGdhbW1hWzhdOworfSBwd3JfY3RybF9wYXJhbXNfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IGlzX3ZhbGlkOworICAgIGthbF91aW50OCB2YWx1ZTsKK30gdXNmX3ZhbHVlX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCBpc192YWx1ZV92YWxpZDsKKyAgICBrYWxfdWludDggdmFsdWU7CisgICAga2FsX3VpbnQ4IGlzX3VsX3ZhbGlkOworICAgIGthbF91aW50OCB1bF9pbmRleDsKKyAgICBrYWxfdWludDggdWxfdGltZXNsb3Rfbm87CisgICAga2FsX3VpbnQ4IGlzX2RsX3ZhbGlkOworICAgIGthbF91aW50OCBkbF9pbmRleDsKKyAgICBrYWxfdWludDggZGxfdGltZXNsb3Rfbm87Cit9IHBrdF90aW1pbmdfYWR2X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCBpc192YWxpZDsKKyAgICBrYWxfdWludDggcDA7CisgICAga2FsX3VpbnQ4IGJ0c19wd3JfY3RybF9tb2RlOworICAgIGthbF91aW50OCBwcl9tb2RlOworfSBkbF9wd3JfY3RybF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggYmxrX29yX2Jsa19wZXJpb2Q7CisgICAga2FsX3VpbnQ4IGRsX2N0cmxfdGltZXNsb3Q7CisgICAga2FsX3VpbnQ4IGlzX3JlcGVhdF9pbmZvX3ZhbGlkOworICAgIGthbF91aW50OCByZXBlYXRfYWxsb2M7CisgICAga2FsX3VpbnQ4IHRzX292ZXJyaWRlOworICAgIGthbF91aW50MTYgYWxsb2NfYml0bWFwX2xlbjsKKyAgICBrYWxfdWludDggYWxsb2NfYml0bWFwWzM2XTsKK30gcnJfZml4ZWRfYWxsb2Nfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IHVsX3RmaTsKKyAgICBrYWxfdWludDggdWxfdGltZXNsb3RfYWxsb2M7CisgICAgcnJfZml4ZWRfYWxsb2Nfc3RydWN0IGZpeGVkX2FsbG9jOworfSB1bF9hbGxvY19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggZGxfdGZpOworICAgIGthbF91aW50OCBkbF90aW1lc2xvdF9hbGxvYzsKK30gZGxfYWxsb2Nfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgZnJlcV9wYXJhbXNfc3RydWN0IGZyZXFfcGFyYW1zOworI2lmZGVmIF9fUFNfU0VSVklDRV9fCQorICAgIGNoX2Nvbm5lY3RfaW5kX2VudW0gaXNfY2hfY29ubmVjdF9pbmRfbmVlZGVkOwkKKyNlbHNlCisgICAga2FsX3VpbnQ4IGlzX2NoX2Nvbm5lY3RfaW5kX25lZWRlZDsKKyNlbmRpZgorICAgIGthbF91aW50OCBpc19zdGFydGluZ19mcmFtZV92YWxpZDsKKyAgICBrYWxfdWludDMyIHRiZl9zdGFydGluZ19mcmFtZTsKKyAgICBwa3RfdGltaW5nX2Fkdl9zdHJ1Y3QgcGt0X3RpbWluZ19hZHY7CisgICAgcHdyX2N0cmxfcGFyYW1zX3N0cnVjdCBwd3JfY3RybF9wYXJhbXM7CisgICAgZGxfcHdyX2N0cmxfc3RydWN0IGRsX3B3cl9jdHJsOworICAgIHVsX2FsbG9jX3N0cnVjdCB1bF9hbGxvYzsKKyAgICBkbF9hbGxvY19zdHJ1Y3QgZGxfYWxsb2M7Cit9IHBkdGNoX2NoX2N0cmxfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQzMiBmcmFtZV9udW1iZXI7CisgICAga2FsX3VpbnQ4IHRpbWVfc2xvdDsKKyNpZmRlZiBfX0dFUkFOX1JUVElfXworICAgIGthbF91aW50OCB0aW1lX3Nsb3RfMjsKKyNlbmRpZgorICAgIGJ1cnN0X3R5cGVfZW51bSBidXJzdF90eXBlOworICAgIGthbF91aW50OCBub19kYXRhOworI2lmZGVmIE1DRF9QQUNLX1VOUEFDSworICAgIGthbF91aW50OCBkYXRhWzIzXTsKKyNlbHNlCisgICAga2FsX3VpbnQ4ICpkYXRhOworI2VuZGlmCisKKyNpZmRlZiBfX0dFUkFOX0ZBTlJfXworICAgIHJsY19wb2xsaW5nX3R5cGVfZW51bSBwb2xsaW5nX3R5cGU7CisgICAga2FsX2Jvb2wgaXNfcGFuX3ZhbGlkOworICAgIGthbF91aW50OCBwYW5bNF07CisjZW5kaWYKKworfSB1bF9ycmJwX2Jsb2NrX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCBub19kYXRhOworI2lmZGVmIE1DRF9QQUNLX1VOUEFDSworICAgIGthbF91aW50OCBkYXRhWzIzXTsKKyNlbHNlCisgICAga2FsX3VpbnQ4ICpkYXRhOworI2VuZGlmCit9IHVsX2N0cmxfYmxvY2tfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IGJ1cnN0X3R5cGU7CisjaWZkZWYgTUNEX1BBQ0tfVU5QQUNLCisgICAga2FsX3VpbnQ4IGRhdGFbNzVdOworI2Vsc2UKKyAgICBrYWxfdWludDggKmRhdGE7CisjZW5kaWYKKyAgI2lmZGVmIF9fRUdQUlNfTU9ERV9fCisjaWZkZWYgTUNEX1BBQ0tfVU5QQUNLCisgICAga2FsX3VpbnQ4IGRhdGEyWzc1XTsKKyNlbHNlCisgICAga2FsX3VpbnQ4ICpkYXRhMjsgICAgICAgICAgLyogRm9yIE1DUzl+TUNTNywgdGhlcmUgYXJlIDIgUkxDIGJsb2NrcyBwZXIgcmFkaW8gYmxvY2sqLworI2VuZGlmCisgICAga2FsX3VpbnQ4IGhlYWRlcls2XTsKKyAgICBrYWxfdWludDggYmxvY2tEYXRhUFMxOyAgICAvLyBwdW50dXJpbmcgc2NoZW1lIGZvciBFR1BSUyBpbiB0aGUgZmlyc3QgUkxDIGRhdGEgYmxvY2sgb2Ygb25lIGJsb2NrCisgICAga2FsX3VpbnQ4IGJsb2NrRGF0YVBTMjsgICAgLy8gcHVudHVyaW5nIHNjaGVtZSBmb3IgRUdQUlMgaW4gdGhlIHNlY29uZCBSTEMgZGF0YSBibG9jayBvZiBvbmUgYmxvY2sKKyNlbmRpZgorCit9IHVsX3JhZGlvX2Jsa19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIGthbF91aW50OCB0cmFuc2l0aW9uX2lkOworICAgIGthbF91aW50OCBpc19zdGFydGluZ19mcmFtZV92YWxpZDsKKyAgICBrYWxfdWludDMyIHRiZl9zdGFydGluZ19mcmFtZTsKKyAgICBrYWxfdWludDggdXNmX2dyYW51bGFyaXR5OworICAgIHVzZl92YWx1ZV9zdHJ1Y3QgdXNmWzhdOworICAgIGthbF91aW50OCB1bF90Zmk7CisgICAga2FsX3VpbnQ4IHVsX3RpbWVzbG90X2FsbG9jOworICAgIGthbF91aW50OCB0eXBlX29mX2FsbG9jYXRpb247CisgICAgLypUaGVyZSBpcyBubyBmaXggYWxsb2NhdGlvbiBpbiBSZWwtNiovCisgICNpZm5kZWYgX19SRU1PVkVfRkFfXworICAgIHJyX2ZpeGVkX2FsbG9jX3N0cnVjdCBmaXhlZF9hbGxvYzsKKyAgI2VuZGlmIC8qX19SRU1PVkVfRkFfXyovCisgIC8qIEV2ZWx5bjogUjcgTGF0ZW5jeSBSZWR1Y2F0aW9uIERldmVsb3BtZW50ICovCisgICNpZmRlZiBfX0dFUkFOX1JUVElfXworICAgIGthbF91aW50OCBkbF90aW1lc2xvdF9wYWlyOworICAgIHR0aV9jb25maWdfZW51bSB0dGlfbW9kZTsKKyAgICB1c2ZfbW9kZV9lbnVtIHVzZl9tb2RlOworICAjZW5kaWYKKyAgI2lmZGVmIF9fR0VSQU5fRkFOUl9fCisgICAga2FsX2Jvb2wgaXNfZmFucl9hY3RpdmU7CisgICAga2FsX2Jvb2wgdGFuX3R5cGU7CisgICNlbmRpZgorfXVsX3RiZl9wYXJhbXNfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBrYWxfdWludDggdHJhbnNpdGlvbl9pZDsKKyAgICBrYWxfdWludDggaXNfc3RhcnRpbmdfZnJhbWVfdmFsaWQ7CisgICAga2FsX3VpbnQzMiB0YmZfc3RhcnRpbmdfZnJhbWU7CisgICAga2FsX3VpbnQ4IGRsX3RmaTsKKyAgICBrYWxfdWludDggZGxfdGltZXNsb3RfYWxsb2M7CisgICNpZmRlZiBfX0VHUFJTX01PREVfXworICAgIGthbF9ib29sIGlzX2VncHJzX2Fja21vZGU7CisgICAga2FsX2Jvb2wgaXNfcmVzZXRfaXJfbWVtb3J5OworICAgIGthbF91aW50MTYgZWdwcnNfd2luZG93X3NpemU7CisgICNlbmRpZgorICAgIGthbF91aW50OCB0eXBlX29mX2FsbG9jYXRpb247CisgIC8qIEV2ZWx5bjogUjcgTGF0ZW5jeSBSZWR1Y2F0aW9uIERldmVsb3BtZW50ICovCisgICNpZmRlZiBfX0dFUkFOX1JUVElfXworICAgIHR0aV9jb25maWdfZW51bSB0dGlfbW9kZTsKKyAgI2VuZGlmCisgICNpZmRlZiBfX0dFUkFOX0ZBTlJfXworICAgIGthbF9ib29sIGlzX2ZhbnJfYWN0aXZhdGVkOworICAgIGthbF9ib29sIGlzX2V2ZW50X2Jhc2VkX2ZhbnI7CisgICNlbmRpZgorfWRsX3RiZl9wYXJhbXNfc3RydWN0OworCisKKyNpZmRlZiBfX0dFTUlOSV9fCit0eXBlZGVmIGVudW17CisgICAgTVBBTF9TSU0xX09OTFlfQ09ORklHLAorICAgIE1QQUxfU0lNMl9PTkxZX0NPTkZJRywKKyAgICBNUEFMX0RBVUxfU0lNX0NPTkZJRworfW1wYWxfc2ltX2NvbmZpZ19zdGF0dXNfZW51bTsKKwordHlwZWRlZiBlbnVteworICAgIE1QQUxfTk9fU0lNX0lOU0VSVEVELAorICAgIE1QQUxfT05MWV9TSU0xX0lOU0VSVEVELAorICAgIE1QQUxfT05MWV9TSU0yX0lOU0VSVEVELAorICAgIE1QQUxfRFVBTF9TSU1fSU5TRVJURUQKK31tcGFsX3NpbV9pbnNlcnRfc3RhdHVzX2VudW07CQorI2VuZGlmIC8qIGVuZCBvZiBfX0dFTUlOSV9fKi8KKworI2lmIGRlZmluZWQgKF9fQU1SX1NVUFBPUlRfXykgfHwgZGVmaW5lZCAoX19BTVJXQl9MSU5LX1NVUFBPUlRfXykKK3R5cGVkZWYgZW51bXsKKyAgICBBTVJfU1BFRUNIX1ZFUlNJT05fMSA9IDEKKyNpZmRlZiBfX0FNUldCX0xJTktfU1VQUE9SVF9fCisgICAsQU1SX1NQRUVDSF9WRVJTSU9OXzIgPSAyCisjZW5kaWYgLy9fX0FNUldCX0xJTktfU1VQUE9SVF8KK31tdWx0aXJhdGVfc3BlZWNoX3ZlcnNpb25fZW51bTsKKyNlbmRpZiAvKiBfX0FNUl9TVVBQT1JUX18gfHwgX19BTVJXQl9MSU5LX1NVUFBPUlRfXyovCisKKyNpZmRlZiBfX1BTX1NFUlZJQ0VfXworI2VuZGlmIC8qIGVuZCBvZiBfX1BTX1NFUlZJQ0VfXyAqLworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNjYW5faWQ7CisgICAga2FsX3VpbnQ4IGJhbmRzX3NjYW47CisgICAga2FsX3VpbnQ4IGJjY2hfbGlzdF92YWxpZDsKKyAgICBrYWxfdWludDggaXNfZm9yX3BsbW5fbGlzdDsKKyAgICBzdG9yZWRfYmNjaF9saXN0X3N0cnVjdCBiY2NoX2xpc3Q7CisjaWZkZWYgX19HRU1JTklfXworICAgIGthbF91aW50MzIgcHdyX3NjYW5fcGVyaW9kX2luX3ZpcnR1YWw7IC8vaW4gZnJhbWUsIDA6IGludmFsaWQsIE1BWDogVEJELCBNSU46IFRCRAorICAgIGthbF91aW50MzIgdmlydHVhbF9tb2RlX251bV9pbl92aXJ0dWFsOyAvL2luIGZyYW1lLCAwOiBpbnZhbGlkLCBNQVg6IFRCRCwgTUlOOiBUQkQKKyNlbmRpZiAvKiBfX0dFTUlOSV9fKi8KKyNpZmRlZiBfX0dFTUlOSV9XQ0RNQV9fCisgICAga2FsX2Jvb2wgaXNfcGxtbl9saXN0OworI2VuZGlmIC8qIF9fR0VNSU5JX1dDRE1BX18qLworICAgIGthbF9ib29sIGlzX3F1aWNrX21jY19zZWFyY2g7IC8vcGxtbiBzZWFyY2ggZW5oYW5jZW1lbnQgbWNjIHF1aWNrIHNlYXJjaC4KK30gcnJfbXBhbF9zZWFyY2hfcmZfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNjYW5faWQ7Cit9IHJyX21wYWxfc2VhcmNoX3JmX3N0b3BfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQxNiBhcmZjbjsKKyAgICBrYWxfdWludDggaXNfbmVlZF9mcmVxX2NvcnJlY3Rpb247CisjaWZkZWYgX19MVEVfUkFUX18KKwkJa2FsX2Jvb2wgaXNfc3J2Y2Nfbl90aW1pbmdfdmFsaWQ7CisgICAga2FsX2ludDMyIGZyYW1lX29mZnNldDsKKyAgICBrYWxfaW50MzIgZWJpdF9vZmZzZXQ7CisjZW5kaWYgICAgCit9IHJyX21wYWxfYnNpY19zeW5jX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MTYgYXJmY25fc3luYzsKKyAgICBrYWxfdWludDggYnNpYzsKKyAgICBrYWxfaW50MzIgZnJhbWVfb2Zmc2V0OworICAgIGthbF9pbnQzMiBlYml0X29mZnNldDsKK30gcnJfbXBhbF9zcGVjaWZpY19zeW5jX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MTYgYXJmY247CisgICAga2FsX3VpbnQxNiBtYXNrOworI2lmZGVmIF9fR0VNSU5JX18KKyAgICAvKiBNYXJ1Y28yMDA4MTEyNSxHRU1JTkkgTUFVSV85MTU1Myxmb3IgQkNDSF9wcmVlbXB0X3BlZXJfUENIICovCisgICAga2FsX3VpbnQ4IGlzX3ByaW9yX3RvX2FjcXVpcmU7CisjZW5kaWYgLypfX0dFTUlOSV9fKi8KK30gcnJfbXBhbF9zZXJ2X2JjY2hfbW9uaXRvcl9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggaW1zaV92YWxpZDsKKyAgICBrYWxfdWludDE2IGltc2lfbW9kXzEwMDA7CisgICAga2FsX3VpbnQ4IGJzX3BhX21mcm1zOworICAgIGthbF91aW50OCBic19hZ19ibGtzX3JlczsKKyAgICBrYWxfdWludDggY2NjaF9jb25mOworICAgIHJyX21vZGVfZW51bSBycl9tb2RlOworICAgIGthbF91aW50OCBhbHBoYTsgICAgICAgICAgICAvKiBBdXN0aW46IDA0MDcwOTogYWxwaGEgc2hvdWxkIG5vdCBiZSByZW1vdmVkICovCisgICAga2FsX3VpbnQ4IHRfYXZnX3c7CisgICAga2FsX3VpbnQ4IHBjX21lYXNfY2hhbjsKKyAgICBrYWxfdWludDggdF9hdmdfdDsKKyAgICAvKiBBdXN0aW46IGZvciBOTU8gSUlJLCBmb3IgY3VyY3VycmVudCBjY2NoICYgcGNjY2ggbW9uaXRvcmluZyAqLworICAgIGthbF91aW50OCBtb25pdG9yX3JlcXVpcmVkOworfSBycl9tcGFsX2NjY2hfbW9uaXRvcl9yZXFfc3RydWN0OworCisjaWZkZWYgX19NT05JVE9SX1BBR0VfRFVSSU5HX1RSQU5TRkVSX18KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBpbXNpX3ZhbGlkOworICAgIGthbF91aW50MTYgaW1zaV9tb2RfMTAwMDsKKyAgICBrYWxfdWludDggYnNfcGFfbWZybXM7CisgICAga2FsX3VpbnQ4IGJzX2FnX2Jsa3NfcmVzOworICAgIGthbF91aW50OCBjY2NoX2NvbmY7CisgICAga2FsX3VpbnQ4IHBhZ2luZ19tb2RlOworICAgIGthbF91aW50OCBzbWFydF9ic19wYV9tZnJtczsKKyAgICBrYWxfdWludDggc21hcnRfbWZybXNfZ3JvdXBfb2Zmc2V0OworfSBycl9tcGFsX21vbml0b3JfcGFnZV9pbl9wdG1fc3RhcnRfcmVxX3N0cnVjdDsKKyNlbmRpZiAvKiBfX01PTklUT1JfUEFHRV9EVVJJTkdfVFJBTlNGRVJfXyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcGFnaW5nX21vZGU7CisgICAgLyogQXVzdGluOiBmb3IgTk1PIElJSSwgcGFnZSBtb2RlIGNoYW5nZXMgb2YgY2NjaCBhbmQgcGNjY2ggYXJlIGhhbmRsZWQgc2VwYXJhdGVseSAgKi8KKyAgICBrYWxfdWludDggcGFnZV9jaGFubmVsX3R5cGU7Cit9IHJyX21wYWxfcGFnZV9tb2RlX2NoYW5nZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggcmVxX2lkOyAgLypzZXF1ZW5jZSBudW1iZXIgZm9yIFJSIHRvIGtub3cgdGhlIC5fY25mIHJlY2VpdmVkIGlzIG9sZCBvciBuZXcqLworICAgIGJ1cnN0X3R5cGVfZW51bSBidXJzdF90eXBlOworICAgIHJhY2hfcmVxX3R5cGVfZW51bSByZXFfdHlwZTsKKyAgICBrYWxfdWludDE2IHJhY2hfZGF0YTsKKyAgICBrYWxfdWludDE2IHJhbmQ7CisgICNpZmRlZiBfX0VHUFJTX01PREVfXworICAgIGF0c190eXBlX2VudW0gYXRzX3R5cGU7ICAgICAvKiBzeW5jaC4gc2VxdWVuY2UgYml0cyB0eXBlLCBUUzA1LjAyIGNsYXVzZSA1LjIuNyAqLworICAjZW5kaWYgIAorfSBycl9tcGFsX3JhY2hfcmVxX3N0cnVjdDsKKworCisjaWYgZGVmaW5lZCAoX19BTVJfU1VQUE9SVF9fKSB8fCBkZWZpbmVkIChfX0FNUldCX0xJTktfU1VQUE9SVF9fKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgUFJJTUlUSVZFIFNUUlVDVFVSRQorKiAgICAgcnJfbXBhbF9hbXJfcmVxX3N0cnVjdAorKgorKiAgREVTQ1JJUFRJT04KKyogICAgIFRoaXMgc3RydWN0IGlzIHNlbnQgZnJvbSBSUiB0byBNUEFMIHdpdGggcnJfbXBhbF9kZWRpY2F0ZWRfY2hhbm5lbF9jb25uZWN0X3JlcV9zdHJ1Y3QKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfYm9vbCBhbXJfdmFsaWQ7IC8qIHRoZSBBTVIoVFJVRSkgb3Igbm90KEZBTFNFKSAqLworLy8gICBrYWxfdWludDMyIGZyYW1lX251bWJlcjsvKiB0aGUgZnJhbWUgbnVtYmVyIHRvIGdldCBSQVRTQ0NIIG1lc3NhZ2VzICovCisvLyAgIGthbF91aW50OCBjbWlwOyAgLyogQ01JIHBoYXNlICovCisKKyAgIC8qWlk6IGFkZCBmb3IgQU1SLVdCKi8KKyAgIG11bHRpcmF0ZV9zcGVlY2hfdmVyc2lvbl9lbnVtIG1yX3ZlcjsgLyogTXVsdGlSYXRlIHNwZWVjaCBWRVJzaW9uIDogMDAxLWFtciB2ZXJpb24gMSovCisKKyAgIGthbF9ib29sIG5zY2I7ICAgICAgLyogTm9pc2UgU3VwcmVzc2lvbiBDb250cm9sIEJpdCA6IDAtbm9pc2Ugc3VwcmVzc2lvbiBpcyB1c2VkICovCisgICBrYWxfYm9vbCBpY21pOyAgICAgICAvKiBJbml0aWFsIENvZGVjIE1vZGUgSW5kaWNhdG9yIDogMC1pcyBkZWZpbmVkIGJ5dGhlIGltcGxpY2l0IHJ1bGUgKi8KKyAgIGthbF91aW50OCBzdGFydF9jb2RlY19tb2RlOyAvKiBTdGFydCBDb2RlYyBNb2RlICovCisgICBrYWxfdWludDggYWNzOyAgICAgICAvKiBBTVIgQ29kZWMgQWN0aXZhdGUgU2V0ICovCisgICBrYWxfdWludDggdGhyZXNob2xkWzNdOyAvKiBUaHJlc2hvbGQxL1RocmVzaG9sZDIvVGhyZXNob2xkMyAqLworICAga2FsX3VpbnQ4IGh5c3RlcmVzaXNbM107IC8qIEh5c3RlcmVzaXMxL0h5c3RlcmVzaXMyL0h5c3RlcmVzaXMzICovCit9IHJyX21wYWxfYW1yX3JlcV9zdHJ1Y3Q7CisjZW5kaWYgLyogX19BTVJfU1VQUE9SVF9fIHx8IF9fQU1SV0JfTElOS19TVVBQT1JUX18qLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHJlcV90eXBlOworICAgIGthbF91aW50OCBkdHhfYWxsb3dlZDsKKyAgICBrYWxfdWludDggcHdyYzsKKyAgICB0aW1pbmdfYWR2X3N0cnVjdCB0aW1pbmdfYWR2YW5jZTsKKyAgICBwd3JfY21kX3N0cnVjdCBwd3JfY21kOworICAgIHN0YXJ0aW5nX3RpbWVfc3RydWN0IHN0YXJ0aW5nX3RpbWU7CisgICAga2FsX3VpbnQ4IGJlZm9yZV90aW1lX2NoYW5uZWxfdmFsaWQ7CisgICAgY2lwaGVyX3NldHRpbmdfc3RydWN0IGNpcGhlcl9zZXQ7CisgICAgY2hfY29ubmVjdF9jdHJsX3BhcmFtc19zdHJ1Y3QgYmVmb3JlX3RpbWVfY2hhbm5lbDsKKyAgICBjaF9jb25uZWN0X2N0cmxfcGFyYW1zX3N0cnVjdCBhZnRlcl90aW1lX2NoYW5uZWw7CisjaWYgZGVmaW5lZCAoX19BTVJfU1VQUE9SVF9fKSB8fCBkZWZpbmVkIChfX0FNUldCX0xJTktfU1VQUE9SVF9fKQorICAgIHJyX21wYWxfYW1yX3JlcV9zdHJ1Y3QgcnJfbXBhbF9hbXJfcGFyYTsKKyNlbmRpZiAvKiBfX0FNUl9TVVBQT1JUX18gfHwgX19BTVJXQl9MSU5LX1NVUFBPUlRfXyovCisgICAga2FsX3VpbnQ4IHZhbW9zX2xldmVsOyAvKiBUbyBjb25maWcgTDEgbm9uLVZBTU9TLCBWQU1PUzEsIG9yIFZBTU9TMiAqLworfSBycl9tcGFsX2RlZGljYXRlZF9jaGFubmVsX2Nvbm5lY3RfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGhhbmRvdmVyX3R5cGU7CisgICAgaGFuZG92ZXJfYXRjX2VudW0gYXRjOworICAgIGthbF91aW50OCBkdHhfYWxsb3dlZDsKKyAgICBzdGFydGluZ190aW1lX3N0cnVjdCBzdGFydGluZ190aW1lOworICAgIHRpbWluZ19hZHZfc3RydWN0IHRpbWluZ19hZHZhbmNlOworICAgIHB3cl9jbWRfc3RydWN0IHB3cl9jbWQ7CisgICAgY2lwaGVyX3NldHRpbmdfc3RydWN0IGNpcGhlcl9zZXQ7CisgICAga2FsX3VpbnQ4IGJlZm9yZV90aW1lX2NoYW5uZWxfdmFsaWQ7CisgICAgY2hfY29ubmVjdF9jdHJsX3BhcmFtc19zdHJ1Y3QgYmVmb3JlX3RpbWVfY2hhbm5lbDsKKyAgICBjaF9jb25uZWN0X2N0cmxfcGFyYW1zX3N0cnVjdCBhZnRlcl90aW1lX2NoYW5uZWw7CisgICAga2FsX3VpbnQ4IGhhbmRvdmVyX3JlZjsKKyAgICBrYWxfdWludDggcnRkX3ZhbGlkOworICAgIGthbF91aW50OCBydGQ7CisgICAga2FsX3VpbnQ4IG5jYzsKKyAgICBrYWxfdWludDggYmNjOworICAgIGthbF91aW50OCBuY2k7CisgICAga2FsX2ludDMyIGZyYW1lX29mZnNldDsKKyAgICBrYWxfaW50MzIgZWJpdF9vZmZzZXQ7CisgICAga2FsX3VpbnQxNiB0YXJnZXRfYmNjaF9hcmZjbjsKKyNpZiBkZWZpbmVkIChfX0FNUl9TVVBQT1JUX18pIHx8IGRlZmluZWQgKF9fQU1SV0JfTElOS19TVVBQT1JUX18pCisgICAgcnJfbXBhbF9hbXJfcmVxX3N0cnVjdCBycl9tcGFsX2Ftcl9wYXJhOworI2VuZGlmICAvKiBfX0FNUl9TVVBQT1JUX18gfHwgX19BTVJXQl9MSU5LX1NVUFBPUlRfXyovCisjaWZkZWYgX19CTElORF9IQU5ET1ZFUl9fCisgICAga2FsX2Jvb2wgaXNfYmxpbmRfaGFuZG92ZXJfcmVxOworI2VuZGlmIC8qX19CTElORF9IQU5ET1ZFUl9fKi8KKyNpZmRlZiBfX1BTX0wxX0RDX0FSQ0hfXworI2lmZGVmIF9fSE9fSU1QUk9WRV9fCisgICAga2FsX3VpbnQ4IHNhYm1fZGF0YVsyM107IC8qIFtVM0ddOiBTQUJNIHBhdHRlcm4uICovCisjZW5kaWYgLyogX19IT19JTVBST1ZFX18gKi8KKyNlbmRpZiAvKiBfX1BTX0wxX0RDX0FSQ0hfXyAqLworfSBycl9tcGFsX2hhbmRvdmVyX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB0aW1pbmdfYWR2YW5jZTsKK30gcnJfbXBhbF9oYW5kb3Zlcl9zdG9wX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBpc19mcmVxX2luX29uZV9iYW5kOworICAgIHN0YXJ0aW5nX3RpbWVfc3RydWN0IHN0YXJ0aW5nX3RpbWU7CisgICAgZnJlcV9wYXJhbXNfc3RydWN0IGZyZXFfZGVmOworfSBycl9tcGFsX2ZyZXF1ZW5jeV9yZWRlZmluaXRpb25fcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgY2hhbm5lbF9tb2RlX2VudW0gY2hfbW9kZTsKKyAgICBrYWxfdWludDggZHR4X2FsbG93ZWQ7CisjaWYgZGVmaW5lZCAoX19BTVJfU1VQUE9SVF9fKSB8fCBkZWZpbmVkIChfX0FNUldCX0xJTktfU1VQUE9SVF9fKQorICAgIHJyX21wYWxfYW1yX3JlcV9zdHJ1Y3QgcnJfbXBhbF9hbXJfcGFyYTsKKyNlbmRpZiAvKiBfX0FNUl9TVVBQT1JUX18gIHx8IF9fQU1SV0JfTElOS19TVVBQT1JUX18qLworfSBycl9tcGFsX2NoYW5uZWxfbW9kZV9tb2RpZnlfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgY2lwaGVyX3NldHRpbmdfc3RydWN0IGNpcGhlcl9jbWQ7Cit9IHJyX21wYWxfY2lwaGVyaW5nX21vZGVfY29tbWFuZF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfaW50OCBsb29wYmFja190eXBlOworfSBycl9tcGFsX2Nsb3NlX3RjaF9sb29wX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBkZXZpY2U7Cit9IHJyX21wYWxfZGFpX3Rlc3RfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGR0eF9hbGxvd2VkOworICAgIGthbF91aW50OCBwd3JjOworfSBycl9tcGFsX2NlbGxfb3B0aW9uX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggY2F1c2U7ICAvKmN1cnJlbnQgbm8gdXNlKi8KK30gcnJfbXBhbF9kZWRpY2F0ZWRfY2hhbm5lbF9kaXNjb25uZWN0X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9pbnQ4IGdzbTQ1MF9wb3dlcl9jbGFzczsKKyAgICBrYWxfaW50OCBnc200ODBfcG93ZXJfY2xhc3M7CisgICAga2FsX2ludDggZ3NtODUwX3Bvd2VyX2NsYXNzOworICAgIGthbF9pbnQ4IGdzbTkwMF9wb3dlcl9jbGFzczsKKyAgICBrYWxfaW50OCBkY3NfcG93ZXJfY2xhc3M7CisgICAga2FsX2ludDggcGNzX3Bvd2VyX2NsYXNzOworICAgIGthbF9pbnQ4IHR4X3B3cjsKKyAgICBrYWxfaW50OCB0eF9wd3JfcGNjY2g7CisgICAgY2hhbmdlX2NhdXNlX2VudW0gY2hhbmdlX2NhdXNlOworICAgIC8qUG9wIDA5MDQyMCBhZGQgZm9yIHN1cHBvcnQgdG8gRTIgaW4gOC1QU0sqLworI2lmZGVmIF9fRVBTS19UWF9fCisgICAga2FsX2ludDggZ3NtNDUwX3Bvd2VyX2NsYXNzXzhwc2s7CisgICAga2FsX2ludDggZ3NtNDgwX3Bvd2VyX2NsYXNzXzhwc2s7CisgICAga2FsX2ludDggZ3NtODUwX3Bvd2VyX2NsYXNzXzhwc2s7CisgICAga2FsX2ludDggZ3NtOTAwX3Bvd2VyX2NsYXNzXzhwc2s7CisgICAga2FsX2ludDggZGNzX3Bvd2VyX2NsYXNzXzhwc2s7CisgICAga2FsX2ludDggcGNzX3Bvd2VyX2NsYXNzXzhwc2s7CisjZW5kaWYKKyNpZmRlZiBfX0dFUkFOX1I2X18gCisgICAga2FsX2ludDggdHhfcHdyX0xCOworICAgIGthbF9ib29sIExCX3ZhbGlkOworI2VuZGlmIC8qX19HRVJBTl9SNl9fICovCit9IHJyX21wYWxfcG93ZXJfY2xhc3NfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgYmNjaF9saXN0X3N0cnVjdCBleHRfbWVhc19mcmVxX2xpc3Q7Cit9IHJyX21wYWxfZXh0ZW5kZWRfbWVhc19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBuYnJfbWVhc19tb2RlX2VudW0gbWVhc19tb2RlOworICAgIGthbF91aW50OCBpc19iYV9saXN0X3ZhbGlkOworICAgIGJjY2hfbGlzdF9zdHJ1Y3QgYmFfbGlzdDsKK30gcnJfbXBhbF9uZWlnaGJvcl9tZWFzX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBidXJzdF9hY2Nlc3NfaWQ7CisjaWZkZWYgX19QS1RfRVhUX01FQVNfXworICAgIGthbF91aW50OCBpc19mb3JfZXh0ZW5kZWRfbWVhczsKKyNlbmRpZgorICAgIGthbF91aW50OCBsaXN0X2xlbjsKKyAgICBuZWlnaGJvcl9ic2ljX2FjcXVpc2l0aW9uX3N0cnVjdCBuZWlnaGJvcl9ic2ljX2FjcXVpc2l0aW9uX2xpc3RbMzNdOworCisjaWZkZWYgX19HRU1JTklfXworICAgIGthbF91aW50MzIgZmJfZGVjb2RlX2ludGVydmFsOyAvL3VzZWQgaW4gUExNTiBMaXN0IHR1bm5pbmcsIDA6IGludmFsaWQsIG90aGVyIHZhbHVlcyBpbiBmcmFtZS4KKyNlbmRpZiAvKiBfX0dFTUlOSV9fKi8KKyNpZmRlZiBfX0dFTUlOSV9XQ0RNQV9fCisgICAga2FsX2Jvb2wgaXNfcGxtbl9saXN0OworI2VuZGlmIC8qIF9fR0VNSU5JX1dDRE1BX18qLworfSBycl9tcGFsX25laWdoYm9yX2JzaWNfc3RhcnRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisjaWZkZWYgX19QS1RfRVhUX01FQVNfXworICAgIGthbF91aW50OCBpc19mb3JfZXh0ZW5kZWRfbWVhczsKKyNlbmRpZgorICAgIGthbF91aW50OCBsaXN0X2xlbjsKKyAgICBrYWxfdWludDE2IG5laWdoYm9yX2JzaWNfYWNxdWlzaXRpb25fc3RvcF9saXN0WzMzXTsKK30gcnJfbXBhbF9uZWlnaGJvcl9ic2ljX3N0b3BfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgbmVpZ2hib3JfYmNjaF9hY3F1aXNpdGlvbl9zdHJ1Y3QgbmJjY2hfYWNxdWlzaXRpb25fbGlzdFsxXTsKKyAgICBrYWxfdWludDggaXNfcHJpb3JfdG9fcGR0Y2hfcng7CisjaWZkZWYgX19HRU1JTklfV0NETUFfXworICAgIGthbF9ib29sIGlzX3BsbW5fbGlzdDsKKyNlbmRpZiAvKiBfX0dFTUlOSV9XQ0RNQV9fKi8KK30gcnJfbXBhbF9uZWlnaGJvcl9zeXNfaW5mb19yZWFkX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBsaXN0X2xlbjsKKyAgICBrYWxfdWludDE2IG5iY2NoX2FjcXVpc2l0aW9uX3N0b3BfbGlzdFsxXTsKKyAgICBrYWxfdWludDggbWFudWFsX2xpc3Q7ICAvKiAxOiBzdG9wIHRoZSBtYW51YWwgbGlzdCwgMDogc3RvcCB0aGUgbmVpZ2hib3IgbGlzdCAqLworfSBycl9tcGFsX25laWdoYm9yX3N5c19pbmZvX3N0b3BfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGJ1cnN0X2FjY2Vzc19pZDsKKyAgICBrYWxfdWludDggbGlzdF9sZW47CisgICAgY2VsbF9ic2ljX2FjcXVpc2l0aW9uX3N0cnVjdCBjZWxsX2JzaWNfYWNxdWlzaXRpb25fbGlzdFszM107CisgIAorICAgIC8qIFVzZWQgaW4gUExNTiBsaXN0IGFuZCA0Ry0+MkcgbWVhcy9yZXNlbCBpbiB2aXJ0dWFsIG1vZGUgKi8KKyAgICBrYWxfdWludDMyIGZiX2RlY29kZV9pbnRlcnZhbDsgLy91c2VkIGluIFBMTU4gTGlzdCB0dW5uaW5nLCAwOiBpbnZhbGlkLCBvdGhlciB2YWx1ZXMgaW4gZnJhbWUuCisjaWZkZWYgX19HRU1JTklfV0NETUFfXworICAgIGthbF9ib29sIGlzX3BsbW5fbGlzdDsKKyNlbmRpZiAvKl9fR0VNSU5JX1dDRE1BX18qLworfSBycl9tcGFsX2NlbGxfYnNpY19zdGFydF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKK30gcnJfbXBhbF9jZWxsX2JzaWNfc3RvcF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBjZWxsX2JjY2hfYWNxdWlzaXRpb25fc3RydWN0IGNlbGxfYmNjaF9hY3F1aXNpdGlvbl9saXN0WzFdOworI2lmZGVmIF9fR0VNSU5JX1dDRE1BX18KKyAgICBrYWxfYm9vbCBpc19wbG1uX2xpc3Q7CisjZW5kaWYgLyogX19HRU1JTklfV0NETUFfXyovCit9IHJyX21wYWxfY2VsbF9zeXNfaW5mb19yZWFkX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBsaXN0X2xlbjsKKyAgICBrYWxfdWludDE2IGNlbGxfYmNjaF9hY3F1aXNpdGlvbl9zdG9wX2xpc3RbMV07Cit9IHJyX21wYWxfY2VsbF9zeXNfaW5mb19zdG9wX3JlcV9zdHJ1Y3Q7CisKKy8qIDIwMTMvMS8yIEphbWVzOiBuZXcgcHJpbWl0aXZlIHRvIGFkanVzdCBwcm9yaXR5ICovCisjaWZkZWYgX19HRU1JTklfXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQxNiBhcmZjbjsKKyAgICBrYWxfdWludDggaXNfcHJpb3JfdG9fYWNxdWlyZTsKK30gcnJfbXBhbF9jZWxsX3N5c19pbmZvX3ByaV9hZGp1c3RfcmVxX3N0cnVjdDsKKyNlbmRpZiAvKiBfX0dFTUlOSV9fICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBwYjsKKyAgICBrYWxfdWludDggdGltZXNsb3RfYWxsb2M7CisgICAgZnJlcV9wYXJhbXNfc3RydWN0IGZyZXFfcGFyYW1zOworICAgIGthbF91aW50OCBic19wYmNjaF9ibGtzOworICAgIGthbF91aW50OCBwc2kxX3JlcGVhdF9wZXJpb2Q7CisgICAga2FsX3VpbnQ4IHBzaV9jb3VudF9ocjsKKyNpZmRlZiBfX1BTX1NFUlZJQ0VfXworICAgIHBzaV9tb2RlX2VudW0gcHNpX3JlYWRpbmdfbW9kZTsKKyNlbHNlCisgICAga2FsX3VpbnQ4IHBzaV9yZWFkaW5nX21vZGU7CQorI2VuZGlmCit9IHJyX21wYWxfbW9uaXRvcl9wYmNjaF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBmcmVxX3BhcmFtc19zdHJ1Y3QgZnJlcV9wYXJhbXM7CisgICAga2FsX3VpbnQ4IHRpbWVzbG90X2FsbG9jOworICAgIHB3cl9jdHJsX3BhcmFtc19zdHJ1Y3QgcHdyX2N0cmxfcGFyYW1zOworICAgIGthbF91aW50MTYgaW1zaV9tb2RfMTAwMDsKKyAgICBrYWxfdWludDE2IHNwbGl0X3BnX2N5Y2xlOworICAgIGthbF91aW50MTYga2NuOworICAgIGthbF91aW50OCBic19wYWdfYmxrc19yZXM7CisgICAga2FsX3VpbnQ4IGJzX3BiY2NoX2Jsa3M7Cit9IHJyX21wYWxfbW9uaXRvcl9wY2NjaF9yZXFfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MTYgYzBfYXJmY247CisgICAga2FsX3VpbnQ4IHBiOworICAgIGthbF91aW50OCB0aW1lc2xvdF9hbGxvYzsKKyAgICBmcmVxX3BhcmFtc19zdHJ1Y3QgZnJlcV9wYXJhbXM7CisgICAga2FsX3VpbnQ4IGJzX3BiY2NoX2Jsa3M7CisgICAga2FsX3VpbnQ4IHBzaTFfcmVwZWF0X3BlcmlvZDsKKyNpZmRlZiBfX1BTX1NFUlZJQ0VfXworICAgIHBzaV9tb2RlX2VudW0gcHNpX3JlYWRpbmdfbW9kZTsKKyNlbHNlCisgICAga2FsX3VpbnQ4IHBzaV9yZWFkaW5nX21vZGU7CQorI2VuZGlmCisgICAga2FsX2ludDMyIGZyYW1lX29mZnNldDsKKyAgICBrYWxfaW50MzIgZWJpdF9vZmZzZXQ7Cit9IHJyX21wYWxfbmNlbGxfcGJjY2hfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG5jX3JlcG9ydGluZ19wZXJpb2RfaTsKKyAgICBrYWxfdWludDggbmNfcmVwb3J0aW5nX3BlcmlvZF90OworfSBycl9tcGFsX25jX21lYXN1cmVtZW50X3JlcV9zdHJ1Y3Q7CisKKyNpZmRlZiBfX1BLVF9FWFRfTUVBU19fCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbGlzdF9sZW47CisgICAga2FsX3VpbnQxNiBleHRfZnJlcV9saXN0WzMyXTsKK30gcnJfbXBhbF9wa3RfZXh0X21lYXN1cmVtZW50X3JlcV9zdHJ1Y3Q7CisjZW5kaWYgLypfX1BLVF9FWFRfTUVBU19fKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGNhcnJpZXJfcmVmOworICAgIGZyZXFfcGFyYW1zX3N0cnVjdCBmcmVxX3BhcmFtczsKKyAgICBrYWxfdWludDggdHNfYWxsb2NhdGlvbjsKK30gcnJfbXBhbF9pbnRfbWVhc3VyZW1lbnRfcmVxX3N0cnVjdDsKKworCisgICB0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBmcmVxX3BhcmFtc19zdHJ1Y3QgZnJlcV9wYXJhbXM7CisgICAgcGt0X3RpbWluZ19hZHZfc3RydWN0IHBrdF90aW1pbmdfYWR2OworICAgIHB3cl9jdHJsX3BhcmFtc19zdHJ1Y3QgcHdyX2N0cmxfcGFyYW1zOworICAgIGRsX3B3cl9jdHJsX3N0cnVjdCBkbF9wd3JfY3RybDsKKyAgICBrYWxfdWludDggaXNfcHRjY2hfOGJpdF9hY2Nlc3M7CisgICNpZmRlZiBfX0VHUFJTX01PREVfXworICAgIGthbF9ib29sIGlzX2VncHJzOworICAjZW5kaWYKKyAgI2lmZGVmIF9fUkVMNF9fCisgICBrYWxfdWludDggZXh0X3V0YmZfbm9kYXRhOyAgIC8qIDA6IFBVRENCIG11c3QgYmUgc2VudCAoZGVsYXllZCB1cGxpbmsgVEJGIG5vdCBzdXBwb3J0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6IFBVRENCIG1heSBub3QgYmUgc2VudCAoZGVsYXllZCB1cGxpbmsgVEJGIHN1cHBvcnRlZCkgKi8KKyAgICNlbmRpZiAvKiBfX1JFTDRfXyAqLworICAga2FsX3VpbnQ4IHVsX3RiZl9iaXRtYXA7CisgICBrYWxfdWludDggZGxfdGJmX2JpdG1hcDsKKyAgIHVsX3RiZl9wYXJhbXNfc3RydWN0IHVsX3RiZl9wYXJhbXNbTUFYX1RCRl9OVU1dOworICAgZGxfdGJmX3BhcmFtc19zdHJ1Y3QgZGxfdGJmX3BhcmFtc1tNQVhfVEJGX05VTV07Cit9IHJyX21wYWxfcGR0Y2hfY29ubmVjdF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggdHlwZV9vZl9hbGxvY2F0aW9uOworICAgIGthbF91aW50OCBpZGVudGl0eTsKKyAgICBrYWxfdWludDggdXNmX2dyYW51bGFyaXR5OworICAgIHVzZl92YWx1ZV9zdHJ1Y3QgdXNmWzhdOworICAgIGthbF91aW50OCBpc19iZWZvcmVfcGFyYW1zX3ZhbGlkOworICAgIHBkdGNoX2NoX2N0cmxfc3RydWN0IHBkdGNoX2NoYW5fcGFyYW1zX2JlZm9yZTsKKyAgICBwZHRjaF9jaF9jdHJsX3N0cnVjdCBwZHRjaF9jaGFuX3BhcmFtc19hZnRlcjsKKyAgICBrYWxfdWludDggZGlyZWN0aW9uOworICAgIGthbF91aW50OCBpc191bF9ud19hc3NpZ247CisgICAga2FsX3VpbnQ4IGlzX2RsX253X2Fzc2lnbjsKKyAgICBrYWxfdWludDggaXNfcHRjY2hfOGJpdF9hY2Nlc3M7Cit9IHJyX21wYWxfcGRjaF9hc3NpZ25tZW50X3JlcV9zdHJ1Y3Q7CisKKyNpZmRlZiBfX0VHUFJTX01PREVfXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGVncHJzX2xvb3BiYWNrX29uOworICAgIGthbF91aW50OCBtb2RlX2ZsYWc7Cit9IHJyX21wYWxfZWdwcnNfbG9vcF9yZXFfc3RydWN0OworI2VuZGlmCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbm9fcnJicF9ibGtzOworICAgIHVsX3JyYnBfYmxvY2tfc3RydWN0IHJyYnBfYmxrc1s0XTsKK30gcnJfbXBhbF9ycmJwX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBub19jdHJsX2Jsa3M7CisgICAgdWxfY3RybF9ibG9ja19zdHJ1Y3QgY3RybF9ibGtzWzRdOworfSBycl9tcGFsX2N0cmxfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisjaWZkZWYgX19QU19TRVJWSUNFX18JCisgICAgYmxvY2tfdHlwZV9lbnVtIHR5cGVfb2ZfYmxvY2s7CisjZWxzZQorICAgIGthbF91aW50OCB0eXBlX29mX2Jsb2NrOworI2VuZGlmCisgICAga2FsX3VpbnQ4IG5vX3VsX2Jsa3M7CisgICAgdWxfcmFkaW9fYmxrX3N0cnVjdCB1bF9ibGtzWzhdOworICAgIGthbF91aW50OCB0YmZfaW5kZXg7Cit9IHJyX21wYWxfZGF0YV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggaXNfdGltaW5nX2Fkdl92YWxpZDsKKyAgICBwa3RfdGltaW5nX2Fkdl9zdHJ1Y3QgcGt0X3RpbWluZ19hZHY7CisgICAga2FsX3VpbnQ4IGlzX3B0Y2NoXzhiaXRfYWNjZXNzOworICAgIGthbF91aW50OCBpc19wd3JfY3RybF92YWxpZDsKKyAgICBwd3JfY3RybF9wYXJhbXNfc3RydWN0IHB3cl9jdHJsX3BhcmFtczsKK30gcnJfbXBhbF9wa3RfdGltaW5nX2Fkdl9wd3JfY3RybF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggdHNfYXZhaWxhYmxlOworICAgIGthbF91aW50OCBsaW1pdDsgLyogMDogT0xELCAxOkFMTCAqLworfSBycl9tcGFsX3BkY2hfcmVsZWFzZV9yZXFfc3RydWN0OworCisgdHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19hbGxfdGJmX3JlbDsKKyAgICBrYWxfdWludDggdWxfdGJmX2JpdG1hcDsKKyAgICBrYWxfdWludDggZGxfdGJmX2JpdG1hcDsKKyAgICBrYWxfdWludDggaWRlbnRpdHk7LyogYWRkIGlkZW50aXR5IGZvciBMMSAqLwkKKyB9cnJfbXBhbF9wZHRjaF9kaXNjb25uX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGNoX2Nvbm5lY3RfY3RybF9wYXJhbXNfc3RydWN0IGNoX2Rlc2M7Cit9IHJyX21wYWxfY2JjaF9jb25maWdfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGNiY2hfbW9kZTsKKyAgICBrYWxfYm9vbCBoaWdoX3ByaW9yaXR5X29uX2NiY2g7ICAgIAorfSBycl9tcGFsX2NiY2hfc3RhcnRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGNiY2hfbW9kZTsKK30gcnJfbXBhbF9jYmNoX3N0b3BfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2ludDMyIG51bV9za2lwOworICAgIGthbF91aW50OCBjYmNoX21vZGU7Cit9IHJyX21wYWxfY2JjaF9za2lwX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzdGF0dXM7Cit9IHJyX21wYWxfc2ltX3JlYWR5X25vdGlmeV9yZXFfc3RydWN0OworCisjaWZkZWYgX19FR1BSU19NT0RFX18KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCB0YmZfcmVzZXRJUjsvL3RoZSBpbmRleCBvZiBUQkYgdG8gcmVzZXRJUgorfXJyX21wYWxfdXBkYXRlX2lyX3Jlc2V0X3JlcV9zdHJ1Y3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hfdHlwZTsKKyAgICBrYWxfdWludDggaXNfYmFkX2ZyYW1lOworI2lmZGVmIF9fUkVQRUFURURfQUNDSF9fCisgICAga2FsX2Jvb2wgaXNfY29tYmluZWQ7CisjZW5kaWYKKyAgICBrYWxfdWludDggZGF0YVsyM107Cit9IG1wYWxfcnJfZGVkaWNhdGVkX2RhdGFfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hfdHlwZTsKKyAgICBrYWxfdWludDggaXNfYmFkX2ZyYW1lOworI2lmZGVmIF9fUkVQRUFURURfQUNDSF9fCisgICAga2FsX2Jvb2wgaXNfY29tYmluZWQ7CisjZW5kaWYKKyAgICBrYWxfdWludDggZGF0YVsyM107Cit9IG1wYWxfcnJfZGVkaWNhdGVkX2RhdGFfY2FsbGJhY2tfaW5kX3N0cnVjdDsKKworI2lmIDAgLy9fX1VNVFNfVEREMTI4X01PREVfXworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2lmZGVmIF9fUkVQRUFURURfQUNDSF9fCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLyogX19SRVBFQVRFRF9BQ0NIX18gKi8gICAgCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjaWZkZWYgX19SRVBFQVRFRF9BQ0NIX18KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAvKiBfX1JFUEVBVEVEX0FDQ0hfXyAqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBfaWQ7CisgICAga2FsX2Jvb2wgaXNfc2lnbmFsbGluZzsKKyAgICBjaGFubmVsX3R5cGVfZW51bSBjaF90eXBlOwkKKyAgICBrYWxfdWludDggdGNoX3R5cGU7CisjaWZkZWYgX19SRVBFQVRFRF9BQ0NIX18KKyAgICBrYWxfYm9vbCBpc19yZXBldGl0aW9uOworI2VuZGlmIC8qIF9fUkVQRUFURURfQUNDSF9fICovICAgIAorfSBycl9tcGFsX2RlZGljYXRlZF9kYXRhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBfaWQ7CisgICAga2FsX2Jvb2wgaXNfc2lnbmFsbGluZzsKKyAgICBjaGFubmVsX3R5cGVfZW51bSBjaF90eXBlOworICAgIGthbF91aW50OCB0Y2hfdHlwZTsKKyNpZmRlZiBfX1JFUEVBVEVEX0FDQ0hfXworICAgIGthbF9ib29sIGlzX3JlcGV0aXRpb247CisjZW5kaWYgLyogX19SRVBFQVRFRF9BQ0NIX18gKi8KK30gbXBhbF9ycl9kZWRpY2F0ZWRfcmVhZHlfdG9fc2VuZF9pbmRfc3RydWN0OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBfaWQ7CisgICAgY2hhbm5lbF9tb2RlX2VudW0gY2hfbW9kZTsKKyAgICBjaGFubmVsX3R5cGVfZW51bSBjaF90eXBlOworICAgIGthbF91aW50OCB0Y2hfdHlwZTsKK30gbXBhbF9ycl9kZWRpY2F0ZWRfcmVhZHlfdG9fc2VuZF9jYWxsYmFja19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCByZXN1bHQ7Cit9IHJyX21wYWxfZGV0ZWN0X3BhZ2luZ19ibG9ja19yZXN1bHRfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgc3lzdGVtX21vZGVfZW51bSBzeXN0ZW1fbW9kZTsKK31ycl9tcGFsX3NldF9yYXRfc2VydmljZV9yZXFfc3RydWN0OworCisjaWYgZGVmaW5lZChfX1VNVFNfUkFUX18pIHx8IGRlZmluZWQoX19MVEVfUkFUX18pCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbGlzdF9yZWY7CisgICAgdHNfaXJfZ3NtX2NlbGxfbGlzdCBnc21fY2VsbF9saXN0OworCisgICAvKiBUaGlzIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG1lYXN1cmVtZW50IHBlcmlvZCBzaG91bGQgYmUgcmVzZXQKKyAgICAqIGltbWVkaWF0ZWx5IChpLmUuLCBHQVMgbWVhc3VyZW1lbnQgd2lsbCBiZSB0cmlnZ2VyZWQgZm9yIHRoZSBmaXJzdCBhdmFpbGFibGUKKyAgICAqIGdhcCBmcm9tIG90aGVyIFJBVCkuIEluIGN1cnJlbnQgZGVzaWduLCB0aGUgZm9sbG93aW5nIHJ1bGVzIHNob3VsZCBiZSBmb2xsb3dlZC4KKyAgICAqICgxKUlmIGxpc3RfbGVuICE9IDAsIHRoaXMgZmxhZyB3aWxsIGJlIHNldCBhcyBGQUxTRSBvbmx5IGlmIHRtZWFzLGdzbSBtZWFzdXJlbWVudCAKKyAgICAqICAgICAgICAgICAgICAgICAgICAgIGlzIHRyaWdnZXJlZCB3aGVuIHByaW9yaXR5IG1lYXN1cmVtZW50IGlzIG9uLWdvaW5nIChpLmUuLCBvbmUgCisgICAgKiAgICAgICAgICAgICAgICAgICAgICBvZiBHU00gY2VsbHMgaGl0cyBwcmlvcml0eSByZXNlbGVjdGlvbiBjcml0ZXJpYSBmb3IgcHJpb3JpdHkgCisgICAgKiAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBtZWFzdXJlbWVudCByZXNlbGVjdGlvbikuIEZvciBvdGhlciBjYXNlLCB0aGlzIGZsYWcgc2hvdWxkIAorICAgICogICAgICAgICAgICAgICAgICAgICAgYmUgc2V0IGFzIFRSVUUuIElmIGFueSBpbXByb3ZlbWVudCBpcyBuZWVkZWQsIHRoZSB1c2FnZSBsaW1pdGF0aW9uIAorICAgICogICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgZmxhZyBzaG91bGQgYmUgY29uZmlybWVkIHdpdGggR0wxJ3MgY29sbGVhZ3VlLgorICAgICogKDIpIElmIGxpc3RfbGVuID09IDAsIHRoaXMgZmxhZyB3aWxsIGFsd3lhcyBiZSBzZXQgYXMgRkFMU0U7CisgICAgKi8KKyAgIGthbF9ib29sIGlzX21lYXNfcGVyaW9kX3Jlc2V0OworICAKKyAgIC8qIFdoZW4gdGhpcyBmbGFnIGlzIHNldCB0byBUUlVFLCB0aGUgc3RhbmRieSBtZWFzdXJlbWVudCB3aWxsIGJlIHBlcmZvcm1lZCBldmVyeSBULW1lYXMgd2l0aG91dCAqLworICAgLyogbXVsdGlwbHlpbmcgYnkgTiBsYXllcnMuIFNvIHRoYXQgdGhlcmUgd2lsbCBiZSAyIG1lYXN1cmVtZW50IHJlc3VsdHMgd2l0aGluIDEwcyBPT1MgcGVyaW9kLCB3aGljaCAqLworICAgLyogaW5jcmVhc2VzIHRoZSBzdWNjZXNzZnVsIHJhdGUgb2YgZmluZGluZyBhIGNhbmRpZGF0ZSBkdXJpbmcgT09TICovCisgICBrYWxfYm9vbCBwcm9oaWJpdF9hcHBseV9uX2xheWVyOworICAgc3RhbmRieV9nc21fbWVhc19yZXFfcmF0X2VudW0gcmVxdWVzdF9yYXQ7CisgICB0ZV9pcl91cnJjX3N0YXRlIHVtdHNfcnJjX3N0YXRlOworICAgdGVfaXJfZXJyY19zdGF0ZSBsdGVfcnJjX3N0YXRlOworI2lmZGVmIF9fVEREX0RNX0dBUF9PUFRJTUlaQVRJT05fXworICAga2FsX2Jvb2wgaXNfYnNpY19nYXBfdmFsaWQ7CisjZW5kaWYgLyogX19URERfRE1fR0FQX09QVElNSVpBVElPTl9fICovCisjaWZkZWYgX19MVEVfUkFUX18KKwkvKmVhcyBjb25maWd1cmVzIGdhcyB0byBtYWtlIHVzZSBvZiBpZGxlIHJmIHRvIGRlY29kZSBic2ljIGluIG9yZGVyIHRvIHNwZWVkIHVwIHNydmNjIHRvIGdlcmFuKi8KKyAgIGthbF9ib29sIGlzX2F1dG9fZ2FwX3ZhbGlkOworI2VuZGlmCisgICBrYWxfaW50MTYgYjJfdGhyZXNob2xkX2luX3FkYm07IC8vIHBhc3MgdGhlIEIyIHRocmVzaG9sZCB0byBHTDEKK30gcnJfbXBhbF9zdGFuZGJ5X2dzbV9tZWFzX3JlcV9zdHJ1Y3Q7CisKKyNpZiBkZWZpbmVkKF9fMjNHX1BSSV9SRVNFTF9TVVBQT1JUX18pIHx8IGRlZmluZWQoX19MVEVfUkFUX18pCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbGlzdF9yZWY7CisgICAgdHNfaXJfZ3NtX2NlbGxfbGlzdCBnc21fY2VsbF9saXN0OworICAgIGthbF91aW50MTYgcGVyaW9kX2luX3NlY29uZDsKKyAgICBzdGFuZGJ5X2dzbV9tZWFzX3JlcV9yYXRfZW51bSByZXF1ZXN0X3JhdDsKKyAgICB0ZV9pcl91cnJjX3N0YXRlIHVtdHNfcnJjX3N0YXRlOworICAgIHRlX2lyX2VycmNfc3RhdGUgbHRlX3JyY19zdGF0ZTsKK30gcnJfbXBhbF9zdGFuZGJ5X2dzbV9wcmlvX21lYXNfcmVxX3N0cnVjdDsKKyNlbmRpZiAvKiBkZWZpbmVkKF9fMjNHX1BSSV9SRVNFTF9TVVBQT1JUX18pIHx8IGRlZmluZWQoX19MVEVfUkFUX18pICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICBrYWxfdWludDE2IGFyZmNuOworICAga2FsX3VpbnQ4IGJzaWNfdmFsaWQ7CisgICBrYWxfaW50MzIgZnJhbWVfb2Zmc2V0OworICAga2FsX2ludDMyIGViaXRfb2Zmc2V0OworICAga2FsX2Jvb2wgcmV0cnlfRkJfU0I7CisgICBrYWxfdWludDMyIHRpbWVfc3RhbXA7CisgICBrYWxfYm9vbCBpc19lbmhfYnNpY192ZXJpZnlfdXNlZDsKK30gbXBhbF9zdGFuZGJ5X2dzbV9ic2ljX3JlYWRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGthbF91aW50OCBsaXN0X2xlbjsgLyogVGhlIG51bWJlciBvZiB2YWxpZCBlbGVtZW50IGluIGJzaWNfcmVhZF9saXN0ICovCisgICBtcGFsX3N0YW5kYnlfZ3NtX2JzaWNfcmVhZF9zdHJ1Y3QgY2VsbF9ic2ljX2xpc3RbU1RBRE5CWV9HU01fTUFYX0JTSUNfTlVNXTsgLyogVGhlIGRhdGFiYXNlIGZvciBCU0lDIHJlYWQgKi8KK30gcnJfbXBhbF9zdGFuZGJ5X2dzbV9ic2ljX3JlYWRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfdWludDggbGlzdF9sZW47IC8qIFRoZSBudW1iZXIgb2YgdmFsaWQgZWxlbWVudCBpbiBic2ljX3N0b3BfbGlzdCAqLworICAga2FsX3VpbnQxNiBzdG9wX2JzaWNfbGlzdFtTVEFETkJZX0dTTV9NQVhfQlNJQ19OVU1dOyAgLyogVGhlIGRhdGFiYXNlIGZvciBCU0lDIHN0b3AgKi8KK30gcnJfbXBhbF9zdGFuZGJ5X2dzbV9ic2ljX3N0b3BfcmVxX3N0cnVjdDsKKyAgIAorCisjaWZkZWYgX19MVEVfUkFUX18KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzY2FuX2lkOworICAgIGthbF91aW50MTYgYXJmY247Cit9IHJyX21wYWxfc3RhbmRieV9nc21fcmVwb3J0X2NnaV9zZWFyY2hfcmZfcmVxX3N0cnVjdDsgCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzY2FuX2lkOworfSBycl9tcGFsX3N0YW5kYnlfZ3NtX3JlcG9ydF9jZ2lfc2VhcmNoX3JmX3N0b3BfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGJzaWNfdGlkOworICAgIGthbF91aW50MTYgYXJmY247Cit9IHJyX21wYWxfc3RhbmRieV9nc21fcmVwb3J0X2NnaV9ic2ljX3N0YXJ0X3JlcV9zdHJ1Y3Q7ICAKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCit9IHJyX21wYWxfc3RhbmRieV9nc21fcmVwb3J0X2NnaV9ic2ljX3N0b3BfcmVxX3N0cnVjdDsgICAKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQxNiBhcmZjbjsKKyAgICBrYWxfdWludDggYnNpYzsKKyAgICBrYWxfdWludDE2IGJjY2hfbWFzazsKKyAgICBrYWxfaW50MzIgZnJhbWVfb2Zmc2V0OworICAgIGthbF9pbnQzMiBlYml0X29mZnNldDsKK30gcnJfbXBhbF9zdGFuZGJ5X2dzbV9yZXBvcnRfY2dpX3N5c19pbmZvX3JlYWRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiBtc2dfbGVuOworfSBycl9tcGFsX3N0YW5kYnlfZ3NtX3JlcG9ydF9jZ2lfc3lzX2luZm9fc3RvcF9yZXFfc3RydWN0OworI2VuZGlmIC8qIF9fTFRFX1JBVF9fICovCisKKy8qIG1ha2UgTDEga2VlcCB0aGUgcmVzb3VyY2UgKGdhcCkgZm9yIG5leHQgQlNJQyBkZWNvZGluZyBhY3Rpdml0eSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfc3RhbmRieV9jZWxsX2JzaWNfcmVzX3JlcXVpcmVkOworfSBycl9tcGFsX3N0YW5kYnlfY2VsbF9ic2ljX3Jlc19yZXFfc3RydWN0OworCisjZW5kaWYgLyogZGVmaW5lZChfX1VNVFNfUkFUX18pIHx8IGRlZmluZWQoX19MVEVfUkFUX18pICovCisKKyNpZmRlZiBfX1VNVFNfUkFUX18KKyNpZmRlZiBfX1VNVFNfVEREMTI4X01PREVfXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCByZWZfY291bnQ7CisgICAga2FsX3VpbnQxNiBtc2dfbGVuOworICAgIGthbF9ib29sIGhpZ2hfcHJpb3JpdHk7Cit9IHJyX21wYWxfM2dfc2VhcmNoX3ByaW9yaXR5X3JlcV9zdHJ1Y3Q7CisjZW5kaWYKKyNlbmRpZiAvKl9fVU1UU19SQVRfXyAqLworCisjaWYgZGVmaW5lZChfX0dFTUlOSV9fKQordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNpbV9jb25maWdfc3RhdHVzOworICAgIGthbF91aW50OCBzaW1faW5zZXJ0X3N0YXR1czsKK30gcnJfbXBhbF9zaW1fc3RhdHVzX3VwZGF0ZV9yZXFfc3RydWN0OworI2VuZGlmCisKKyNpZmRlZiBfX0dFTUlOSV9fCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIHByb3RlY3RlZF9jaGFubmVsOworfSBycl9tcGFsX2NoYW5uZWxfcHJvdGVjdF9zdGFydF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICByc3Zhc19zaW1fZW51bSBzaW1faW5fdHJhbnNmZXI7Cit9IHJyX21wYWxfdmlydHVhbF9zdXNwZW5kX3JlcV9zdHJ1Y3Q7CisKKyNlbmRpZi8qIGVuZCBvZiBfX0dFTUlOSV9fKi8KKworI2lmZGVmIF9fUFNfU0VSVklDRV9fCisjZW5kaWYgLyogZW5kIG9mIF9fUFNfU0VSVklDRV9fICovCisKKyNpZm5kZWYgX19NVEtfVEFSR0VUX18KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAqbm9fcnRzX3NlbnQ7CisgICAga2FsX3VpbnQ4ICp0b3RhbF9ibGtzX3NlbnQ7CisgICAga2FsX3VpbnQ4IHRiZl9pbmRleDsKK30gcnJfbXBhbF9mbHVzaF9yZXFfc3RydWN0OworI2VuZGlmCisKKyNpZm5kZWYgX19NVEtfVEFSR0VUX18gLyogZm9yIFVUICovCisjaW5jbHVkZSAibXBoX3R5cGVzLmgiCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hfdHlwZTsKK30gbXBoY191dF9kbF9kYXRhX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBjaGFubmVsX3R5cGVfZW51bSBjaF90eXBlOworICAgIFRDaE1vZGUgY2hfbW9kZTsKKyAgICBMb2dDaGFubmVsIHRjaF90eXBlOworI2lmZGVmIF9fUFNfTDFfRENfQVJDSF9fCisgICAga2FsX3VpbnQzMiB1bF9kYXRhX2luZGV4OworI2VuZGlmIC8qIF9fUFNfTDFfRENfQVJDSF9fICovCit9IG1waGNfdXRfdWxfZGF0YV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hfdHlwZTsKKyAgICBrYWxfYm9vbCBpc19iYWRfZnJhbWU7CisgICAga2FsX3VpbnQ4KiBkb3dubGlua19kYXRhX3B0cjsKKyNpZmRlZiBfX1JFUEVBVEVEX0FDQ0hfXworICAgIGthbF9ib29sIGlzQ29tYmluZWRBQ0NoOworI2VuZGlmICAvKmVuZCBvZiAoX19SRVBFQVRFRF9BQ0NIX18pICovCit9IG1wYWxfcnJfdXRfZGxfZGF0YV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgY2hhbm5lbF90eXBlX2VudW0gY2hfdHlwZTsKKyAgICBjaGFubmVsX3R5cGVfZW51bSB0Y2hfdHlwZTsKKyAgICBrYWxfYm9vbCBpc19zaWduYWxsaW5nOworICAgIGthbF9ib29sIGlzX2ZpbGxfZnJhbWU7Cit9IG1wYWxfcnJfdXRfdWxfZGF0YV9yZXFfc3RydWN0OworI2VuZGlmCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ycjJwcnJfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcnIycHJyX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NGRhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcnIycHJyX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgTW9kaWZpY2F0aW9uIE5vdGljZToKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRoaXMgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgTWVkaWFUZWsgSW5jLiBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorICogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisgKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisgKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDAxCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBycjJwcnJfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUlIyUFJSX1NUUlVDVF9ICisjZGVmaW5lIF9SUjJQUlJfU1RSVUNUX0gKKworI2luY2x1ZGUgIm1waF9jc19kZWYuaCIKKworI2lmZGVmIF9fR0VNSU5JX18KKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAgLyogUGxlYXNlIG5vdGlmeSB0aGF0IHRoaXMgc3RydWN0dXJlIHNob3VsZCBiZSBleGFjdGx5IHRoZSBzYW1lIGFzIG1wYWxfcnJfU2VhcmNoX3JmX2NuZl9zdHJ1Y3QuICovCisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc2Nhbl9pZDsKKyAgICBrYWxfYm9vbCBiY2NoX2xpc3RfdmFsaWQ7CisgICAga2FsX2ludDE2IHBvd2VyX3N1bV9pbl9xdWFydGVyX2RibVtNUEhfTUFYX1BPV0VSX1NDQU5fUkVTVUxUU19MRU5dOyAvKiBEZWZpbmVkIGluIG1waF9jc19tc2cuaCAqLworfSBycl9wcnJfcmZfcmVzdWx0X25vdGlmeV9yZXFfc3RydWN0OworCisjaWZkZWYgX19BREFQVElWRV9QQUdJTkdfUEVSSU9EX0lOX1VOQUNLX01PREVfXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG11bHRpcGxlOyAvKiBOb3RpZnkgcGVlciBTSU0gdG8gYWRqdXN0IHBhZ2luZyBwZXJpb2QgY29uZmlndXJlZCBieSBSTEMuICovCit9IHJyX3Bycl9hZGp1c3RfcGFnaW5nX3BlcmlvZF9pbmRfc3RydWN0OworI2VuZGlmIC8qIF9fQURBUFRJVkVfUEFHSU5HX1BFUklPRF9JTl9VTkFDS19NT0RFX18gKi8KKworI2VuZGlmIC8qIF9fR0VNSU5JX18gKi8KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ycjJycmxwX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JyMnJybHBfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkOTFiZQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ycjJycmxwX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDYKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICBycjJycmxwX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgY29udGFpbnMgU1VQTCB0YXNrIGVudHJ5IGZ1bmN0aW9uLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgUlIyUlJMUF9TVFJVQ1RfSAorI2RlZmluZSBSUjJSUkxQX1NUUlVDVF9ICisKKy8qIGFkZCBSSFIgKi8KKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBUyB0byBSUkxQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgbWNjOworICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgbW5jOworICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgbGFjOworICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgY2k7CisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICBubXJfaWR4OyAgICAgICAgIC8qIGluZGV4IHRvIG5tcl9jZWxsIGFycmF5ICovCit9cnJfcnJscF9jZWxsX2luZm9fc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgYXJmY247CisgICBrYWxfdWludDggICAgICAgICAgICAgICAgICBic2ljOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgcnhfbGV2OworfXJyX3JybHBfbm1yX2NlbGxfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgbm1yX2NlbGxfbnVtOyAgICAvKiBudW1iZXIgb2YgY2VsbCB3aXRoIG5tciBpbmZvci4gKi8gCisgICBycl9ycmxwX25tcl9jZWxsX3N0cnVjdCAgICBubXJfY2VsbFsxNV07ICAgIC8qIG1heCByZXBvcnRlZCBjZWxsIG51bWJlciBpcyBkZWZpbmVkIHRvIGJlIDE1IGFjY29yZGluZyB0byBzdXBsIHNwZWMuICovCit9cnJfcnJscF9ubXJfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAga2FsX2ludDMyICAgICAgICAgICAgICAgICAgcmVwb3J0ZWRfRk47ICAgICAvKiBjdXJyZW50IHJlcG9ydGVkIGZyYW1lIG51bWJlciAqLworICAgcnJfcnJscF9jZWxsX2luZm9fc3RydWN0ICAgc2Vydl9pbmZvOyAgICAgICAvKiBzZXJ2aW5nIGNlbGwgaW5mb3JtYXRpb24gKi8KKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgIG5jZWxsX251bTsgICAgICAgLyogbmVpZ2hib3IgY2VsbCBudW1iZXIgKi8KKyAgIHJyX3JybHBfY2VsbF9pbmZvX3N0cnVjdCAgIG5jZWxsX2luZm9bNl07ICAgLyogbWF4IGFsbG93ZWQgbnVtYmVyIG9mIG5laWdoYm9yIGNlbGwgaXMgZGVmaW5lZCB0byBiZSA2ICovCisgICBycl9ycmxwX25tcl9zdHJ1Y3QgICAgICAgICBubXI7ICAgICAgICAgICAgIC8qIG5ldHdvcmsgbWVhc3VyZW1lbnQgcmVwb3J0IGluZm9yID0+IG9ubHkgdmFsaWQgZm9yIHNlcnZpbmcgY2VsbD8gKi8KK31ycl9ycmxwX2NlbGxfaW5mb19yZXBvcnRfc3RydWN0OworCisjaWZkZWYgX19BR1BTX0NPTlRST0xfUExBTkVfXwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBtb3JlX3RvX3NlbmQ7ICAgICAgLyogbW9yZSBSUkxQIG1lc3NhZ2Ugd291bGQgYmUgc2VudCBjb250aW51b3VzLCBmb3IgZnV0dXJlIHVzZSAqLworICAgIGFwcF9kYXRhX2NyX2VudW0gY3JfZmxhZzsgICAvKiBkaXN0aW5ndWlzaCBjb21tYW5kIGFuZCByZXNwb25zZSAqLworICAgIGthbF91aW50MTYgYXJmY247Cit9Z2FzX3JybHBfZGF0YV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGFib3J0X3JybHBfY2F1c2VfZW51bSBhYm9ydF9jYXVzZTsgIC8qIG5vdGlmeSBSUkxQIGlmIEdQUyBjaGlwIHNob3VsZCBiZSBkaXNhYmxlZCBvciBub3QgKi8KK31nYXNfcnJscF9hYm9ydF9pbmRfc3RydWN0OworI2VuZGlmIC8qIF9fQUdQU19DT05UUk9MX1BMQU5FX18gKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlJMUCB0byBHQVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIF9fQUdQU19DT05UUk9MX1BMQU5FX18KK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG11aTsKKyAgICBrYWxfYm9vbCBpc19zdWNjZXNzZnVsOworfXJybHBfZ2FzX2RhdGFfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbXVpOworICAgIGthbF9ib29sIG1vcmVfdG9fc2VuZDsgICAgICAgICAvKiBtb3JlIFJSTFAgbWVzc2FnZSB3b3VsZCBiZSBzZW50IGNvbnRpbnVvdXMgKi8KKyAgICBhcHBfZGF0YV9jcl9lbnVtIGNyX2ZsYWc7ICAgIC8qIGRpc3Rpbmd1aXNoIGNvbW1hbmQgb3IgZmluYWwgcmVzcG9uc2UgKi8KKyAgICAvL2thbF91aW50OCBjcl9mbGFnOyAgICAgICAgICAgICAgICAgICAgLyogZGlzdGluZ3Vpc2ggY29tbWFuZCBvciBmaW5hbCByZXNwb25zZSAqLyAgICAKK31ycmxwX2dhc19kYXRhX3JlcV9zdHJ1Y3Q7CisjZW5kaWYgLyogX19BR1BTX0NPTlRST0xfUExBTkVfXyAqLworCisjZW5kaWYgLyogUlIyUlJMUF9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JyX2NvbW1vbl9kZWYuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ycl9jb21tb25fZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg2NDI1NAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ycl9jb21tb25fZGVmLmgKQEAgLTAsMCArMSw3OTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgcnJfY29tbW9uX2RlZi5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICRMb2ckCisgKgorICogMDUgMzEgMjAxOCBhbnVyYWcucGFuY2hvbGkKKyAqIFtNT0xZMDAzMjUyMjhdIFtVTU9MWUVdIFJlbW92ZSBOVlJBTSBncm91cCBoZWFkZXIgZmlsZQorICogLgorICoKKyAqIDA0IDA3IDIwMTcgYW51cmFnLnBhbmNob2xpCisgKiBbTU9MWTAwMjM5ODQyXSBbU0UyL1NFMyBpbnRlcm5hbF1bVU1PTFlBXSBTTVAgbW9kaWZpY2F0aW9ucyA6IEdBUywgR0wxCisgKiAuU01QIENoZWNrLWluIFRvIFVNT0xZQS4KKyAqCisgKiAwMiAxOSAyMDE2IHl1LXBvLndhbmcKKyAqIFtNT0xZMDAxNjU0MTNdIFtVTU9MWV0gY2hhbmdlIHRoZSBuYW1pbmcgZm9yIFRDTSB1c2FnZQorICogLgorICoKKyAqIDA5IDE1IDIwMTUgY2hpLWNodW5nLmxpbgorICogW01PTFkwMDE0MTM2MF0gW0dBU10gTFIxMSBidWlsZCB3YXJuaW5nIGZpeAorICogCS4KKyAqCisgKiAwNSAyNyAyMDE1IHRpdGkud3UKKyAqIFtNT0xZMDAwOTc1MDJdIFNSVkNDIEhPIGV2YWx1YXRpb24gcGhhc2UgZmFpbCwgdHJpZ2dlciBzZW5kIFNJUCByZS1pbnZpdGUKKyAqIC4KKyAqCisgKiAwMyAyMCAyMDE1IHl1LXBvLndhbmcKKyAqIFtNT0xZMDAwODc2MTldIFtVTU9MWV1bVW5pdmVyc2FsIEJpbl0gR0FTIGNoZWNrIGluCisgKiBMZXQgdGhlIHNoYXJlZCBkYXRhIHdpdGggRFNQIGJlIDQgYnl0ZSBhbGlnbmVkLgorICoKKyAqIDAxIDI2IDIwMTUgdHN1bmctd2VpLnR1CisgKiBbTU9MWTAwMDg3NjE5XSBbVU1PTFldW1VuaXZlcnNhbCBCaW5dIEdBUyBjaGVjayBpbgorICogLgorICoKKyAqIDAxIDEyIDIwMTUgbWluZy5sZWUKKyAqIFtNT0xZMDAwODc0NzBdIFtVbml2ZXJzYWwgQmluXSBGREQgR0FTIGRldmVsb3BlbWVudAorICogLgorICoKKyAqIDAxIDEyIDIwMTUgbWluZy5sZWUKKyAqIFtNT0xZMDAwODc0NzBdIFtVbml2ZXJzYWwgQmluXSBGREQgR0FTIGRldmVsb3BlbWVudAorICogLgorICoKKyAqIDAxIDEyIDIwMTUgbWluZy5sZWUKKyAqIFtNT0xZMDAwODc0NzBdIFtVbml2ZXJzYWwgQmluXSBGREQgR0FTIGRldmVsb3BlbWVudAorICogRml4IGxpbmsgZXJyb3IuCisgKgorICogMDEgMDUgMjAxNSBtaW5nLmxlZQorICogW01PTFkwMDA4NzQ3MF0gW1VuaXZlcnNhbCBCaW5dIEZERCBHQVMgZGV2ZWxvcGVtZW50CisgKiB4eHhfZW51bXMuaCBub3QgaW5jbHVkZWQgKGNvZGUgbm90IHN5bmNlZCBiZXR3ZWVuIHBlbmctYW4gQ0JyIGFuZCBVTU9MWSkKKyAqCisgKiAxMSAxMyAyMDE0IG1pbmcubGVlCisgKiBbTU9MWTAwMDgwMjExXSBbTVQ2MjkxX0RFVl1bTVQ2MjkxX1VFU0lNX0RFVl0gQ2hlY2sgaW4gbG93IHBvd2VyIHRvIE1UNjI5MV9ERVYsIE1UNjI5MV9VRVNJTV9ERVYKKyAqIEdJU0UgUGFnaW5nLgorICoKKyAqIDExIDA1IDIwMTQgbWluZy5sZWUKKyAqIFtNT0xZMDAwODExNTRdIFtBVFRfVE1PX0RFVl0gQVQmVCByZXF1aXJlbWVudCBtZXJnZSBiYWNrCisgKiBDU0cgZmluZ2VycHJpbnQgR0FTIHBhcnQuCisgKgorICogMDQgMDggMjAxNCB5dS1wby53YW5nCisgKiBbTU9MWTAwMDYxNzExXSBbSzIgTUQyXSBDYWxsIGZvciBDaGVja2luIC0gW01QQUxdIHJlZHVjaW5nIFRDTSB1c2FnZSBmb3IgSzIgTUQyCisgKgorICogMDMgMTcgMjAxNCB0YW5ndGUubG8KKyAqIFtNT0xZMDAwNTg2NTVdIEFkZCBQU0lfMTMgbWVzc2FnZSB0cmFjZSBkZWNvZGUgc3VwcG9ydCBpbiBFTFQKKyAqCisgKiAxMCAwMyAyMDEzIGplcmVtaWFoLmxpbgorICogW01PTFkwMDA0MDA5MV0gW01BQ10gTUFDL0FDUyBQZWVyIE1zZyBEZWNvZGUKKyAqCisgKiAwOSAxNiAyMDEzIGhlbnJ5LmxhaQorICogW01PTFkwMDAzNzY2MV0gW01UNjI5MF0gR0FTIGRldmVsb3BtZW50IGZvciBBRlIsIEwxIG1lYXN1cmVtZW50IGNvbnRyb2wsIGJhY2t1cCBJUiBtZWFzdXJlbWVudCBtZWNoYW5pc20sIGFuZCBtZWF1cmVtZW50IHJlcG9ydAorICogCS4KKyAqCisgKiAwOCAzMCAyMDEzIGthdGllLnRzZW5nCisgKiBbTU9MWTAwMDM1ODg3XSBbM0cgR2VtaW5pMi4wK11bR0FTXSBMaW1pdCBQUyBhY2Nlc3MgY2hhbm5lbCBwcm90ZWN0IGR1cmF0aW9uIGluIEdlbWluaSAyLjAgcHJvamVjdHMKKyAqIAkuCisgKgorICogMDggMjYgMjAxMyBqYW1lcy5jaGFuCisgKiBbTU9MWTAwMDMxMzczXSBbTU9MWV1bU01dW01NXVtSTENdW1JSXSBVTklUREFUQV9DTkYgbWVjaGFuaXNtIG1vZGlmaWNhdGlvbgorICogLgorICoKKyAqIDA0IDI5IDIwMTMgdmVuZF9yZXgudHVuZworICogW01PTFkwMDAyMDU0Ml0gW1N5c3RlbVNlcnZpY2VdW01PTFldIFRvIHJlbW92ZSB1c2VsZXNzIGlucHV0IHNlY3Rpb25zIGJ5IHRoZSByZXF1ZXN0CisgKiBbZ2FzXSBSZW1vdmUgaW5wdXQgc2VjdGlvbiBmb3IgaW5wdXQgc2VjdGlvbiBjZW50cmFsIG1hbmFnZW1lbnQKKyAqCisgKiAwMyAyMiAyMDEzIHZlbmRfcmV4LnR1bmcKKyAqIFtNT0xZMDAwMTIwMzFdIFtNT0RJU10gV1I4IHdhcm5pbmcgZml4IG9uIE1PTFkgYnJhbmNoCisgKgorICogMDMgMTUgMjAxMyBoZW5yeS5sYWkKKyAqIFtNT0xZMDAwMDkyMjJdIFtHQVNdW011bHRpLU1vZGUgRGV2ZWxvcG1lbnRdIE1lcmdlIEdBUyBtdWx0aS1tb2RlIGRldmVsb3BtZW50IHRvIE1PTFkKKyAqIC4KKyAqCisgKiAwMSAyMyAyMDEzIGhlbnJ5LmxhaQorICogW01PTFkwMDAwOTIyMl0gW0dBU11bTXVsdGktTW9kZSBEZXZlbG9wbWVudF0gTWVyZ2UgR0FTIG11bHRpLW1vZGUgZGV2ZWxvcG1lbnQgdG8gTU9MWQorICogLgorICoKKyAqIDAxIDExIDIwMTMgaGVucnkubGFpCisgKiBbSGVucnldW011bHRpLU1vZGUgRGV2ZWxvcG1lbnRdIEdBUyBEZXZlbG9wbWVudCBhbmQgUjggQ1IgU3luYworICoKKyAqIDEyIDEzIDIwMTIga2F0aWUudHNlbmcKKyAqIFtNT0xZMDAwMDc0NDZdIFtNT0xZXSBNT0xZIExPQ0FMX1BBUkFfSERSL1BFRVJfQlVGRl9IRFIgcmVwbGFjZW1lbnQKKyAqIC4KKyAqIAorICogMDggMTQgMjAxMiBwZXRlci5jaGllbgorICogW01PTFkwMDAwMjExOF0gW1BTMV1bR0FTXSBJbnRlcm5hbCBpbmplY3QgbWVzc2FnZSB0ZXN0IGZvciBNRUFTIElUCisgKiAuCisgKiAKKyAqIDA4IDE0IDIwMTIgcGV0ZXIuY2hpZW4KKyAqIFtNT0xZMDAwMDIxMThdIFtQUzFdW0dBU10gSW50ZXJuYWwgaW5qZWN0IG1lc3NhZ2UgdGVzdCBmb3IgTUVBUyBJVAorICogLgorICoKKyAqIDA1IDIyIDIwMTIgYWRlbGluZS5jaGFuZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwNSAxNyAyMDEyIHBldGVyLmNoaWVuCisgKiAuCisgKgorICogMDQgMTcgMjAxMiB5aXRpbmcuY2hlbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDQgMTMgMjAxMiBoZW5yeS5sYWkKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDQgMTMgMjAxMiB5aXRpbmcuY2hlbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDQgMTMgMjAxMiB5aXRpbmcuY2hlbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDQgMTIgMjAxMiB5aXRpbmcuY2hlbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDQgMTIgMjAxMiBoZW5yeS5sYWkKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDMgMDcgMjAxMiBhZGVsaW5lLmNoYW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDAxIDExIDIwMTIgaGVucnkubGFpCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDEyIDIwIDIwMTEgaGVucnkubGFpCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDA5IDIxIDIwMTEgamVyZW1pYWgubGluCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDEyIDE0IDIwMTAgbmFuY3kuY2hhbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTAgMjcgMjAxMCBoZW5yeS5sYWkKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTAgMTYgMjAxMCBuYW5jeS5jaGFuZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwOSAyMSAyMDEwIGV2ZWx5bi53YW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIGFkZCB0byBzb3VyY2UgY29udHJvbCByZWN1cnNlbHkKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIENoYW5nZSByciB0byBycjIuCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogYWRkIElSIEhPIHJlbGF0ZWQgZW51bXMgaW50byB0YmZfcmVsX3R5cGVfZW51bQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogY3JlYXRlZCBieSBjbGVhcmZzaW1wb3J0CisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogdGhpcyBpcyBhIHRlbXBvcmFyeSBzb2x1dGlvbiB0byByZW1vdmUgdGhlIGNvbXBpbGUgb3B0aW9uIE1US19LQUxfTU5UIGZyb20gTW9ESVMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUlJfQ09NTU9OX0RFRl9ICisjZGVmaW5lIF9SUl9DT01NT05fREVGX0gKKworLyogTmFuY3kgMjAxMDEwMDU6IFN1Z2dlc3QgQWRkIGZvciBSSFIgKi8KKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisvKiBmb3IgTU9ERU1fV0FSTklOR19NRVNTQUdFIG1hY3JvICovCisjaW5jbHVkZSAiZXZlbnRfaW5mb191dGlsaXR5LmgiCisjaW5jbHVkZSAibnZyYW1fZWRpdG9yX2RhdGFfaXRlbS5oIgorI2luY2x1ZGUgInJyX252cmFtX2VkaXRvci5oIgorI2luY2x1ZGUgImJpdHN0cmVhbS5oIgorI2luY2x1ZGUgInJyX2NvbW1vbl9lbnVtcy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb25zdGFudHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgX19NVEtfSU5URVJOQUxfXworI2lmbmRlZiBfX0dBU19JTlRFUk5BTF9JVF9fCisjZGVmaW5lIF9fR0FTX0lOVEVSTkFMX0lUX18KKyNlbmRpZiAvKiBfX0dBU19JTlRFUk5BTF9JVF9fICovCisjaWZuZGVmIF9fR0FTX0lOVEVSTkFMX0lSX0lUX18KKyNkZWZpbmUgX19HQVNfSU5URVJOQUxfSVJfSVRfXworI2VuZGlmIC8qIF9fR0FTX0lOVEVSTkFMX0lSX0lUX18gKi8KKyNlbmRpZiAvKiBfX01US19JTlRFUk5BTF9fICovCisKKyNkZWZpbmUgUkxDX01BQ19DVFJMX0JMS19TSVpFICAyMworCisvKiBFdmVseW4gMjAwOTA0MTU6IE1lcmdlIFI2ICovCisjZGVmaW5lIE1VTFRJUExFX1RCRl9OVU0gMQorCisvKiBWaW5jZW50OiBkZWZpbmVkIGZvciBSUi1NUEFMICovCisKKyNpZmRlZiBfX1BTX1NFUlZJQ0VfXworI2RlZmluZSBQS1RfQ0VMTF9DSEFOR0VfRkFJTFVSRV9NU0cgICAgICAgIDB4MDAKKworLyogUlJCUCByZXNwb25zZSBtZXNzYWdlIHR5cGVzICovCisjZGVmaW5lIFBLVF9DVFJMX0FDS19NU0cgICAgICAgICAgICAgICAgICAgMHgwMSAvKiBSUkJQIHJlc3BvbnNlIHRvIGNvbnRyb2wgbWVzc2FnZXMgKi8KKyNkZWZpbmUgUEtUX0RMX0NUUkxfQUNLX01TRyAgICAgICAgICAgICAgICAweDAzIC8qIFJSQlAgcmVzcG9uc2UgdG8gZGF0YSBibG9jayB3aXRoIEZCSSBpbiBSTEMgVU5BQ0sgbW9kZSAqLworI2RlZmluZSBQS1RfRExfQUNLX05BQ0tfTVNHICAgICAgICAgICAgICAgIDB4MDIgLyogUlJCUCByZXNwb25zZSB0byBkYXRhIGJsb2NrIGluIFJMQyBBQ0sgbW9kZSAqLworCisvKgorICogVG8gaW5kaWNhdGUgYW4gUlJCUCByZXNwb25kaW5nIHRvIFBVQU4gd2l0aCBGQUkgYWxsb3dpbmcgZm9yIAorICogVEJGLUVTVCBwcm9jZWR1cmUgc2hvdWxkIGJlIHNlbnQgbGF0ZXIuIFRoZSBhY3R1YWwgUlJCUCBzZW50IAorICogZGVwZW5kcyBvbiB3aGV0aGVyIFJMQyByZXF1ZXN0cyBmb3IgVEJGLUVTVCBhbmQgQ29udHJvbCBBY2sgVHlwZQorICovCisjZGVmaW5lIFBLVF9DVFJMX0FDS19UQkZfRVNUX01TRyAgICAgICAgICAgMHgwNAorLyogQ2xhaXJlIDA0MTIxNiBjaGFuZ2UgOiBJbXBsZW1lbnQgUjk5IFBGSSAqLworI2RlZmluZSBSTENfTUFDX0lOVkFMSURfUEZJICAgICAgICAgICAgICAgIDB4ZmYKKworI2RlZmluZSBQS1RfVUxfRFVNTVlfQ1RSTF9CVVJTVF9NU0cgICAgICAgIDB4MDMKKyNkZWZpbmUgUEtUX01FQVNVUkVNRU5UX1JFUE9SVF9NU0cgICAgICAgICAweDA0CisjZGVmaW5lIFBLVF9SRVNPVVJDRV9SRVFfTVNHICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBQS1RfTU9CSUxFX1RCRl9TVEFUVVNfTVNHICAgICAgICAgIDB4MDYKKyNkZWZpbmUgUEtUX1BTSV9TVEFUVVNfTVNHICAgICAgICAgICAgICAgICAweDA3CisjaWZkZWYgX19FR1BSU19NT0RFX18KKyNkZWZpbmUgRUdQUlNfUEtUX0RMX0FDS19OQUNLX01TRyAgICAgICAgICAweDA4CisjZW5kaWYgCisjZGVmaW5lIFBLVF9QQVVTRV9NU0cgICAgICAgICAgICAgICAgICAgICAgMHgwOQorI2RlZmluZSBBRERJVElPTkFMX01TX1JBRElPX0FDQ0VTU19NU0cgICAgIDB4MGIKKyNkZWZpbmUgUEtUX0VOSEFOQ0VEX01FQVNVUkVNRU5UX01TRyAgICAgICAweDBhIC8qIG5vIGVycm9yIGluIHN0YW5kYXJkICovCisKKy8qIEJ5cm9uOiBBZGQgZm9yIFBLVCBTSSBTdGF0dXMgKi8KKyNpZmRlZiBfX0dFUkFOX1I0X18KKyNkZWZpbmUgUEtUX1NJX1NUQVRVU19NU0cgICAgICAgMHgwZCAgICAvKiBubyBlcnJvciBpbiBzdGFuZGFyZCAqLworI2RlZmluZSBQS1RfQ0VMTF9DSEFOR0VfTk9USUZJQ0FUSU9OX01TRyAgICAweDBjCisjZW5kaWYgCisKKy8qCisgKiBEb3dubGluayBQZWVyLXRvLVBlZXIgTWVzc2FnZXMuKE5ldHdvcmsgLS0+IE1vYmlsZSBTdGF0aW9uKVRoZQorICogKiBkaXN0cmlidXRpb24gbWVzc2FnZXMgc3RhcnQgd2l0aCAxIGluIHRoZWlyIE1TQiBhbmQgbm9uLWRpc3RyaWJ1dGlvbgorICogKiBtZXNzYWdlcyBzdGFydCB3aXRoIDAgaW4gdGhlaXIgTVNCKHY2LjQuMCBzZWMgMTEuMS4xKQorICovCisjZGVmaW5lIFBLVF9BQ0NFU1NfUkVKRUNUX01TRyAgICAgICAgICAgICAgMHgyMQorI2RlZmluZSBQS1RfQ0VMTF9DSEFOR0VfT1JERVJfTVNHICAgICAgICAgIDB4MDEKKyNkZWZpbmUgUEtUX0RMX0FTU0lHTk1FTlRfTVNHICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIFBLVF9NRUFTVVJFTUVOVF9PUkRFUl9NU0cgICAgICAgICAgMHgwMworI2RlZmluZSBQS1RfUEFHSU5HX1JFUV9NU0cgICAgICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgUEtUX1BEQ0hfUkVMRUFTRV9NU0cgICAgICAgICAgICAgICAweDIzCisjZGVmaW5lIFBLVF9QT0xMSU5HX1JFUV9NU0cgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBQS1RfUFdSX0NUUkxfVElNSU5HX0FEVkFOQ0VfTVNHICAgIDB4MDUKKyNkZWZpbmUgUEtUX1BSQUNIX1BBUkFNU19NU0cgICAgICAgICAgICAgICAweDI0CisjZGVmaW5lIFBLVF9RVUVVSU5HX05PVElGSUNBVElPTl9NU0cgICAgICAgMHgwNgorI2RlZmluZSBQS1RfVElNRVNMT1RfUkVDT05GSUdfTVNHICAgICAgICAgIDB4MDcKKyNkZWZpbmUgUEtUX1RCRl9SRUxFQVNFX01TRyAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFBLVF9UQkZfUkVMRUFTRV9VTF9NU0cgICAgICAgICAgICAgMHhFOCAvKiBUbyBkaXN0aW5ndWlzaCBSUkJQIHJlc3BvbmRpbmcgdG8gUEtUIFRCRiBSRUxFQVNFIHJlbGVhc2luZyBVTCBUQkY7IHNlZSBjb21tZW50IG9mIHJyX3JyYnBfcmVzcHNfYWRkKCkgb24gZGF0ZSAwMzA5MDIgKi8KKyNkZWZpbmUgUEtUX1RCRl9SRUxFQVNFX0RMX01TRyAgICAgICAgICAgICAweEY4IC8qIFRvIGRpc3Rpbmd1aXNoIFJSQlAgcmVzcG9uZGluZyB0byBQS1QgVEJGIFJFTEVBU0UgcmVsZWFzaW5nIERMIFRCRjsgc2VlIGNvbW1lbnQgb2YgcnJfcnJicF9yZXNwc19hZGQoKSBvbiBkYXRlIDAzMDkwMiAqLworI2RlZmluZSBQS1RfVUxfQUNLX05BQ0tfTVNHICAgICAgICAgICAgICAgIDB4MDkKKyNkZWZpbmUgUEtUX1VMX0FTU0lHTk1FTlRfTVNHICAgICAgICAgICAgICAweDBhCisjZGVmaW5lIFBLVF9ETF9EVU1NWV9DVFJMX01TRyAgICAgICAgICAgICAgMHgyNQorI2RlZmluZSBQS1RfSU5WQUxJRF9NU0cgICAgICAgICAgICAgICAgICAgIDB4RkYgLyogRXhjZSAyMDA0MDMwNjogYWRkIGludmFsaWQgbXNnIHR5cGUgZm9yIHJyX2NoZWNrX25zZW5kX3JyYnByZXNwb25zZSgpICovCisKKy8qIExhbnNsbyAyMDA3MDcwNjogTkFDQyAqLworI2lmZGVmIF9fR0VSQU5fUjRfXworI2RlZmluZSBQS1RfQ0VMTF9DSEFOR0VfQ09OVElOVUVfTVNHICAgMHgwYgorI2RlZmluZSBQS1RfTkVJR0hfQ0VMTF9EQVRBX01TRyAgICAgICAgICAgICAgMHgwYworI2RlZmluZSBQS1RfU0VSVl9DRUxMX0RBVEFfTVNHICAgICAgICAgICAgICAgICAweDBkCisjZW5kaWYgLyogX19HRVJBTl9SNF9fICovIAorCisvKiBFdmVseW4gMjAwOTA0MTU6IE1lcmdlIFI2ICovCisvKiBFdmVseW4gTVRCRiAqLworCisjZGVmaW5lIFBTX0hBTkRPVkVSX0NPTU1BTkRfTVNHICAgICAgICAgIDB4MTUKKworI2lmZGVmIF9fR0VSQU5fUjZfXworI2RlZmluZSBQS1RfU0VSVl9DRUxMX1NJX01TRyAgMHgyMAorI2VuZGlmIC8qIF9fR0VSQU5fUjZfXyAqLworCisjaWZkZWYgX19FVFdTX1NVUFBPUlRfXworI2RlZmluZSBQS1RfQVBQX0lORk9fTVNHIDB4MmQKKyNlbmRpZgorCisvKiBQQUNLRVQgU1lTVEVNIElORk9STUFUSU9OIE1lc3NhZ2VzICovCisjZGVmaW5lIFBTSTFfTVNHICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMQorI2RlZmluZSBQU0kyX01TRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzIKKyNkZWZpbmUgUFNJM19NU0cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMzCisjZGVmaW5lIFBTSTNfQklTX01TRyAgICAgICAgICAgICAgICAgICAgICAgMHgzNAorI2RlZmluZSBQU0k0X01TRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzUKKyNkZWZpbmUgUFNJNV9NU0cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM2CisjZGVmaW5lIFBTSTEzX01TRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzNworCisjaWZkZWYgX19HRVJBTl9SNF9fCisjZGVmaW5lIFBTSTNfVEVSX01TRyAgICAgICAgICAgICAgICAgICAgICAgMHgzYworI2RlZmluZSBQU0kzX1FVQVRFUl9NU0cgICAgICAgICAgICAgICAgICAgMHgzZAorI2RlZmluZSBQU0k2X01TRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgUFNJN19NU0cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDM4CisjZGVmaW5lIFBTSThfTVNHICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzOQorI2RlZmluZSBQU0kxNF9NU0cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2EKKyNkZWZpbmUgUFNJMTVfTVNHICAgICAgICAgICAgICAgICAgICAgICAgICAweDNlCisjZW5kaWYgLyogX19HRVJBTl9SNF9fICovCisKKyNpZmRlZiBfX0dFUkFOX1I1X18KKyNkZWZpbmUgUFNJMTZfTVNHICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4CisjZW5kaWYgLyogX19HRVJBTl9SNV9fICovCisKKyNkZWZpbmUgQUxMX1BTSV9NU0dTICAgICAgICAgICAgICAgICAgICAgICAweDM5CisKKyNkZWZpbmUgTUFYX1RJTUVTTE9UUyAgICAgICAgICAgICAgIDgKKy8qIEV2ZWx5biAyMDA5MDkwNTogTW9kaWZ5IGZvciBIaWdoIG11bHRpc2xvdCBjbGFzcyAqLworI2lmIGRlZmluZWQgKF9fTVVMVElTTE9UX0NMQVNTXzQ1X18pCisjZGVmaW5lIE1BWF9UWF9USU1FU0xPVFMgICAgICAgICAgICA2CisjZGVmaW5lIE1BWF9SWF9USU1FU0xPVFMgICAgICAgICAgICA2CisjZWxpZiBkZWZpbmVkIChfX01VTFRJU0xPVF9DTEFTU18zNF9fKQorI2RlZmluZSBNQVhfVFhfVElNRVNMT1RTICAgICAgICAgICAgNQorI2RlZmluZSBNQVhfUlhfVElNRVNMT1RTICAgICAgICAgICAgNQorI2Vsc2UKKyNkZWZpbmUgTUFYX1RYX1RJTUVTTE9UUyAgICAgICAgICAgIDQKKyNkZWZpbmUgTUFYX1JYX1RJTUVTTE9UUyAgICAgICAgICAgIDQKKyNlbmRpZgorCisjZGVmaW5lIFJSX0lOVkFMSURfRk5fTlVNQkVSICAgICAgICAweEZGRkZGRkZGCisKKyNkZWZpbmUgUlJfSU5WQUxJRF9UTiAgICAgICAgICAgICAgIDB4RkYgICAgICAgIC8qIEV4Y2UgMjAwNDAzMTA6IGFkZCBpbnZhbGlkIHRpbWVzbG90IG51bWJlciAqLworI2RlZmluZSBSUl9SVElfSU5WQUxJRCAgICAgICAgICAgICAgMHhGRiAgICAgICAgLyogRXhjZSAyMDA0MDMxMDogYWRkIGludmFsaWQgUlRJIHZhbHVlICovCisKKyNkZWZpbmUgTVBBTF9STENfQ09OVElOVUVfRkxVU0hfTkVYVCAweDEKKyNkZWZpbmUgTVBBTF9STENfQ09OVElOVUVfRkxVU0hfQ1VSUkVOVCAweDIKKyNkZWZpbmUgTVBBTF9STENfUkVTRUdfQ09OVElOVUVfRkxVU0hfTkVYVCAweDMKKyNkZWZpbmUgTVBBTF9STENfUkVTRUdNRU5UX0NVUlJFTlQgMHg0CisjZW5kaWYgLyogX19QU19TRVJWSUNFX18gKi8KKworLyogSW5mb3JtYXRpb24gRWxlbWVudCBJZGVudGlmaWVycyAoSUVJKSBmb3IgUlIgbWVzZ3MgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTU9CSUxFX0lERU5USVRZX0lFSSAgMHgxNworI2RlZmluZSBTVEFSVElOR19USU1FX0lFSSAgICAweDdjCisjZGVmaW5lIENFTExfQ0hBTl9ERVNDX0lFSSAgICAgICAgICAgICAweDYyCisKKyNkZWZpbmUgTVVMVElTTE9UX0NPTkZJR19JRUkgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQ0hBTl9NT0RFX1NFVF8xX0lFSSAgICAgICAgICAgIDB4NjMKKyNkZWZpbmUgQ0hBTl9NT0RFX1NFVF8yX0lFSSAgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgQ0hBTl9NT0RFX1NFVF8zX0lFSSAgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgQ0hBTl9NT0RFX1NFVF80X0lFSSAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgQ0hBTl9NT0RFX1NFVF81X0lFSSAgICAgICAgICAgIDB4MTUKKyNkZWZpbmUgQ0hBTl9NT0RFX1NFVF82X0lFSSAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgQ0hBTl9NT0RFX1NFVF83X0lFSSAgICAgICAgICAgIDB4MTcKKyNkZWZpbmUgQ0hBTl9NT0RFX1NFVF84X0lFSSAgICAgICAgICAgIDB4MTgKKworI2RlZmluZSBTRUNPTkRfQ0hBTl9NT0RFX0lFSSAgICAgICAgICAgMHg2NgorCisjZGVmaW5lIFNFQ09ORF9DSEFOX0RFU0NfQUZURVJfVElNRV9JRUkgICAweDY0CisjZGVmaW5lIEZSRVFfTElTVF9BRlRFUl9USU1FX0lFSSAgICAgICAweDA1CisjZGVmaW5lIE1PQl9BTExPQ19BRlRFUl9USU1FX0lFSSAgICAgICAweDcyCisjZGVmaW5lIE1PQl9BTExPQ19JRUkgICAgICAgICAgICAgICAgICAweDcyCisKKyNkZWZpbmUgRlJFUV9MSVNUX0JFRk9SRV9USU1FX0lFSSAgICAgIDB4MTkKKyNkZWZpbmUgQ0hBTl9ERVNDX0JFRk9SRV9USU1FX0lFSSAgICAgIDB4MWMKKyNkZWZpbmUgRlJFUV9DSEFOX1NFUV9CRUZPUkVfVElNRV9JRUkgIDB4MWUKKyNkZWZpbmUgRlJFUV9DSEFOX1NFUV9BRlRFUl9USU1FX0lFSSAgIDB4NjkKKyNkZWZpbmUgTU9CX0FMTE9DX0JFRk9SRV9USU1FX0lFSSAgICAgIDB4MjEKKyNkZWZpbmUgU0VDT05EX0NIQU5fREVTQ19CRUZPUkVfVElNRV9JRUkgIDB4MWQKKworI2RlZmluZSBDSVBIRVJfTU9ERV9TRVRUSU5HX0lFSSAgICAgICAgMHg5MAorCisjZGVmaW5lIFJSX1BLVF9VTF9BU0dOX0lFSSAgICAgICAgICAgICAweDIyCisjZGVmaW5lIFJSX1BLVF9ETF9BU0dOX0lFSSAgICAgICAgICAgICAweDIzCisjZGVmaW5lIFNZTkNfSU5EX0lFSSAgICAgICAgICAgICAgICAgICAweDBkCisjZGVmaW5lIEZSRVFfU0hPUlRfTElTVF9BRlRFUl9USU1FX0lFSSAweDAyCisjZGVmaW5lIFJFQUxfVElNRV9ESUZGRVJFTkNFX0lFSSAgICAgICAweDdiCisjZGVmaW5lIFRJTUlOR19BRFZBTkNFX0lFSSAgICAgICAgICAgICAweDdkCisjZGVmaW5lIEZSRVFVRU5DWV9TSE9SVF9MSVNUX0JFRk9SRV9USU1FX0lFSSAweDEyCisjZGVmaW5lIE1TX1RJTUVfRElGRl9JRSAgICAgICAweDc3CisjZGVmaW5lIFZHQ1NfVEFSR0VUX01PREVfSU5EX0lFSSAgICAgICAweDAxCisjZGVmaW5lIE1VTFRJX1JBVEVfQ09ORklHX0lFSSAgICAgICAgICAweDAzCisKKyNkZWZpbmUgUlJfQkFfUkFOR0VfSUVJICAgICAgICAgICAgICAgIDB4NzMKKyNkZWZpbmUgUlJfR1JPVVBfQ0hBTk5FTF9ERVNDX0lFSSAgICAgIDB4NzQKKyNkZWZpbmUgUlJfR1JPVVBfQ0lQSEVSX0tFWV9OVU1fSUVJICAgIDB4ODAKKyNkZWZpbmUgUlJfR1BSU19SRVNVTUVfSUVJICAgICAgICAgICAgIDB4YzAKKyNkZWZpbmUgUlJfQkFfTElTVF9QUkVGX0lFSSAgICAgICAgICAgIDB4NzUKKyNkZWZpbmUgUlJfVVRSQU5fRlJFUV9MSVNUX0lFSSAgICAgICAgIDB4NzYKKyNkZWZpbmUgUlJfQ0VMTF9TRUxFQ1RJT05fSU5EX0lFSSAgICAgIDB4NzcKKyNkZWZpbmUgUlJfRU5IX0RUTV9DU19SRUxfSU5EX0lFSSAgICAgIDB4YTAKKyNkZWZpbmUgUlJfVkdDU19DSVBIRVJfUEFSQV9JRUkgICAgICAgIDB4MDQKKyNkZWZpbmUgUlJfR1JPVVBfQ0hBTk5FTF9ERVNDXzJfSUVJICAgIDB4NzgKKyNkZWZpbmUgUlJfVEFMS0VSX0lERU5USVRZX0lFSSAgICAgICAgIDB4NzkKKyNkZWZpbmUgUlJfVEFMS0VSX1BSSU9fU1RBVFVTX0lFSSAgICAgIDB4N0EKKyNkZWZpbmUgUlJfVkdDU19BTVJfQ09ORklHX0lFSSAgICAgICAgIDB4N0IKKyNkZWZpbmUgUlJfSU5ESVZJRFVBTF9QUklPUklUSUVTX0lFSSAgIDB4N2MKKworI2RlZmluZSBSUl9DTEFTU01BUktfRU5RX01BU0tfSUVJICAgICAgMHgxMAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFJSX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgUlJfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBSUl9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFJSX0lOVkFMSURfU1lTX0lORk9fSUQgICAgICAgICAgICAgIDB4ZmYKKworLyogM0dQUCBUUyAwNC4xOCB2IDguNy4wIHNlYyAxMC41LjIuMzgKKyAqIENhbGN1bGF0aW9uIG9mIHN0YXJ0IGZyYW1lIG51bWJlci4KKyAqLworI2RlZmluZSBTX1JSX0ZOX0lOVEVSVkFMXzQyNDMyIDQyNDMyCisjZGVmaW5lIFNfUlJfRlJBTUVfTlVNXzMyMDI0IDMyMDI0CisjZGVmaW5lIFNfUlJfTU9TVF9QT1NUSVZFX0RFTEFZIDMxNjIzCisKKy8qIENsYWlyZSAwNDEyMDggY2hhbmdlIDogU29sdmUgcnJfbXBhbF9kYXRhX3JlcV9zdHJ1Y3QgaGVhZGVyIG1pc3NpbmcgcHJvYmxlbSAqLworI2lmZGVmIF9fRUdQUlNfTU9ERV9fCisjZGVmaW5lIEVHUFJTX1JMQ19NQUNfSEVBREVSX0xFTiA2CisjZGVmaW5lIEVHUFJTX1NJWkVPRl9NQ1MxIDIyCisjZW5kaWYgLyogX19FR1BSU19NT0RFX18gKi8gCisKKy8qIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBkZWZpbmVkIGluIGJpdHMgKi8KKyNkZWZpbmUgTUFDX0hFQURFUl9MRU4gOAorI2RlZmluZSBSTENfTUFDX01TR19UWVBFX0xFTiA2CisjZGVmaW5lIFRMTElfTEVOIDMyCisKKy8qIENsYWlyZSAwNTAxMTggY2hhbmdlIDogQWRkIHNpZ25hbGluZyBtYWNybyBmb3IgYm90aCBSTEMgYW5kIE1BQyB1c2UgICovCisjZGVmaW5lIFJSX0lTX1NJR05BTF9QRFUoY2F1c2UpIChjYXVzZSA9PSBSUl9DQVVTRV9HTU1fU0lHTkFMSU5HIHx8IGNhdXNlID09IFJSX0NBVVNFX0NFTExfVVBEQVRFIHx8IFwKKyAgICAgICAgICAgICAgICAgIGNhdXNlID09ICBSUl9DQVVTRV9TTV9TSUdOQUxJTkcgfHwgY2F1c2UgPT0gUlJfQ0FVU0VfU05EX1NJR05BTElORyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgfHwgY2F1c2UgPT0gUlJfQ0FVU0VfTExDX1NJR05BTElORyB8fCBjYXVzZSA9PSBSUl9DQVVTRV9QQUdFX1JFU1AgfHwgY2F1c2UgPT0gUlJfQ0FVU0VfQ0VMTF9VUERBVEVfV0lUSF9VU0VSX0RBVEEpCisKKyNpZmRlZiBfX0FSTUNDX1ZFUlNJT04KKyNkZWZpbmUgX19aSV9fICAgICAgICAgIF9fYXR0cmlidXRlX18gKCh6ZXJvX2luaXQpKQorI2Vsc2UKKyNkZWZpbmUgX19aSV9fCisjZW5kaWYKKworI2lmZGVmIF9fTVRLX1RBUkdFVF9fCisjaW5jbHVkZSAic3lzL2NkZWZzLmgiICAgICAgICAgICAgICAgICAgLyogR0NDIGhhcyBkaWZmZXJlbnQgZGVmaW5pdGlvbiBmb3IgX19zZWN0aW9uIGluIGNkZWZzLmggKi8KKyN1bmRlZiBfX3NlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAvKiB1bmRlZmluZWQgaXQgdG8gYXZvaWQgcmUtZGVmaW5lICovCisjZGVmaW5lIF9fc2VjdGlvbihTKSAgICBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18oI1MpKSkKKyNkZWZpbmUgX19TRUNPTkRBUllfUk9DT0RFX18gICAgICAgICAgICAKKyNkZWZpbmUgX19TRUNPTkRBUllfUk9EQVRBX18gICAgICAgICAgICBfX3NlY3Rpb24oU0VDT05EQVJZX1JPREFUQSkKKyNpZiBkZWZpbmVkKE1UNjc1MikKKyNpZiBkZWZpbmVkKF9fTUQyX18pCisjZGVmaW5lIF9fSU5URVJOQ09ERV9fICAgICAgICAgICAgICAgICAgCisjZWxzZQkJCQkJCQkJCisjZGVmaW5lIF9fSU5URVJOQ09ERV9fICAgICAgICAgICAgICAgIAlfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIklTUFJBTV9ST0NPREVfQ09SRTIiKSkpCisjZW5kaWYgICAgICAgICAgICAKKyNlbHNlCisjZGVmaW5lIF9fSU5URVJOQ09ERV9fICAKKyNlbmRpZgorI2RlZmluZSBfX0VYVFJBTV9UWERBVEFfXyAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiRVhUUkFNX1RYREFUQSIpLCBhbGlnbmVkKDQpKSkgICBfX1pJX18KKyNkZWZpbmUgX19FWFRSQU1fVFhEQVRBXzBfXyAgICAgICAgICAgICAgX19zZWN0aW9uKEVYVFJBTV9UWERBVEFfMCkgICBfX1pJX18KKyNlbHNlCisjZGVmaW5lIF9fU0VDT05EQVJZX1JPQ09ERV9fCisjZGVmaW5lIF9fU0VDT05EQVJZX1JPREFUQV9fCisjZGVmaW5lIF9fSU5URVJOQ09ERV9fCisjZGVmaW5lIF9fRVhUUkFNX1RYREFUQV9fCisjZGVmaW5lIF9fRVhUUkFNX1RYREFUQV8wX18KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKF9fTVRLX1RBUkdFVF9fKQorI2lmIGRlZmluZWQgKF9fQVJNQ0NfVkVSU0lPTikKKyNkZWZpbmUgSU5MSU5FIF9faW5saW5lCisjZWxpZiBkZWZpbmVkIChfX0dOVUNfXykKKyNkZWZpbmUgSU5MSU5FIGlubGluZQorI2VuZGlmIC8qIEFSTUNDICwgR05VQyAqLworI2Vsc2UgIC8qIF9fTVRLX1RBUkdFVF9fICovCisjZGVmaW5lIElOTElORSBfX2lubGluZQorI2VuZGlmIC8qIF9fTVRLX1RBUkdFVF9fICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtcyBXaXRob3V0IFRhZ3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBfX1BTX1NFUlZJQ0VfXworI2lmZGVmIEVHUFJTCisjaW5jbHVkZSAiZWdwcnNfaGVhZGVyc19zdHJ1Y3QuaCIKKyNlbmRpZiAKKyNlbmRpZiAvKiBfX1BTX1NFUlZJQ0VfXyAqLworCit0eXBlZGVmIGthbF9pbnQzMiBURE1BX0ZSQU1FX05VTUJFUl9UWVBFOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTdHJ1Y3R1cmUgRGVmaW5pdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IHRpbWVfc2xvdDsKKyAgICBrYWxfdWludDMyIHRkbWFfZnJhbWVfbnVtYmVyOworfSB0c19mcmFtZV9ub19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQ4IHZhbGlkOworICAgIGthbF91aW50OCB0MTsKKyAgICBrYWxfdWludDggdDI7CisgICAga2FsX3VpbnQ4IHQzOworfSBTVEFSVElOR19USU1FX1NUUlVDVF8xOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCBtYWlvOworICAgIGthbF91aW50OCBtYV9udW1faW5kZXg7CisgICAga2FsX3VpbnQ4IGNoYW5nZV9tYXJrOworICAgIGthbF91aW50OCBoc247Cit9IGhvcHBpbmdfY2hhbl9kZXNjOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCBpc192YWxpZDsKKyAgICBrYWxfdWludDggcGt0X29yX2RlZDsKKyAgICBrYWxfdWludDggY2hhbl90eXBlOworICAgIGthbF91aW50OCB0bjsKKyAgICBrYWxfdWludDggdHNjOworICAgIHJtY190c2Nfc2V0X3R5cGUgdHNjX3NldDsKKyAgICBpc3ByZXNlbnQgaG9wcF9vcl9ub25faG9wcF90YWc7CisgICAgdW5pb24KKyAgICB7CisgICAgICAgIGthbF91aW50MTYgYXJmY247CisgICAgICAgIGhvcHBpbmdfY2hhbl9kZXNjIGhvcF9wYXJhbXM7CisgICAgfSBob3BwX29yX25vbl9ob3BwX3ZhbHVlOworfSBjaGFubmVsX2Rlc2Nfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50OCB2YWxpZDsKKyAgICBrYWxfdWludDggdmFsdWU7Cit9IHRpbWluZ19hZHZhbmNlX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2IGFyZmNuOworICAgIGthbF91aW50OCBic2ljOworICAgIGthbF9pbnQzMiBmcmFtZV9vZmZzZXQ7CisgICAga2FsX2ludDMyIGViaXRfb2Zmc2V0OworfSB0YXJnZXRfY2VsbF90aW1pbmdfc3RydWN0OworCisjaWZkZWYgX19QU19TRVJWSUNFX18KK3R5cGVkZWYgc3RydWN0IHJlc19yZXFfc3RydWN0Cit7CisgICAgLyogRXZlbHluIDIwMDkwNDE1OiBNZXJnZSBSNiAqLworICAgIGthbF91aW50OCBwdGM7ICAgICAgICAgICAgICAvKiBwZWFrX3Rocm91Z2hwdXRfY2xhc3MgKi8KKyAgICBrYWxfdWludDggcnA7ICAgICAgICAgICAgICAgLyogcmFkaW9fcHJpb3JpdHkgKi8KKyAgICBrYWxfdWludDggcmxjX21vZGU7ICAgICAgICAgLyogcmxjX21vZGVfZW51bSAqLworICAgIGthbF91aW50OCBsbGNfcGR1X3R5cGU7ICAgICAvKiBsbGNfcGR1X3R5cGUgKi8KKyAgICBrYWxfdWludDggcmVzX3JlcV9jYXVzZTsgICAgLyogcmVzX3JlcV9jYXVzZSAqLworICAgIGthbF91aW50MTYgcmxjX29jdGV0czsKKyAgICBrYWxfdWludDggcGZpOyAgICAgICAgICAgICAgLyogQ2xhaXJlIDA0MTIxNiBjaGFuZ2UgOiBJbXBsZW1lbnQgUjk5IFBGSSAqLworICAgIGthbF91aW50OCBtb2RlZmxhZzsgICAgICAgICAvKiBTaW1vbiBmb3IgU1JCICovCit9IHJlc19yZXFfc3RydWN0OworCisvKiBFdmVseW4gMjAwOTA0MTU6IE1lcmdlIFI2ICovCisvKiBFdmVseW4gTVRCRiAqLworCisKK3R5cGVkZWYgc3RydWN0IG11bHRpcGxlX3Jlc19yZXFfc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICAvKiBLYXRpZSAyMDEzMDUzMTogcHMgY2hhbm5lbCBwcm90ZWN0IGlzc3VlICovCisgICAgLyogbWFjX3JtcGNfcGt0X2FjY2Vzc19yZXFfc3RydWN0IGFuZCBtdWx0aXBsZV9yZXNfcmVxX3N0cnVjdCBhcmUgdGhlIHNhbWUgc3RydWN0ICovCisgICAga2FsX3VpbnQ4IGlzX3Byb3RlY3RfcHNfY2hhbm5lbDsgLyogdGhpcyB2YXJpYWJsZSBvbmx5IHVzZWQgaW4gbWFjX3JtcGNfcGt0X2FjY2Vzc19yZXFfc3RydWN0ICovCisgICAga2FsX3VpbnQ4IG5vX3Jlc19yZXE7CisgICAgcmVzX3JlcV9zdHJ1Y3QgbXVsdGlfcmVzX3JlcVtNVUxUSVBMRV9UQkZfTlVNXTsKK30gbXVsdGlwbGVfcmVzX3JlcV9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfX1BTX1NFUlZJQ0VfXyAqLworCit0eXBlZGVmIHVuaW9uCit7CisgICAgbnZyYW1fZWZfZ2FzX2NzZ19maW5nZXJwcmludF9zdHJ1Y3QgZ2FzX2NzZ19mZ19pbmZvOworfSBycm1fc3RydWN0X3RvX3ZlcmlmeV91bmlvbjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHJybV9zdHJ1Y3RfdG9fdmVyaWZ5X3VuaW9uIHN0cnVjdF90b192ZXJpZnk7Cit9IHJybV92ZXJpZnlfZ3ZfZm9yX3V0X3N0cnVjdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbiBQcm90b3R5cGUgZGVmaW5pdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBrYWxfdWludDggcnJfZ2V0X3NwYXJlX2JpdChiaXRfc3RyZWFtICpiaXRfc3RyZWFtX3B0cik7CitleHRlcm4ga2FsX2Jvb2wgcnJfdmFsaWRhdGVfcmVzdF9iaXRfbnVtYmVyKGthbF91aW50MzIgcmVzdF9sZW4sIGthbF91aW50MzIgbGVuX3RvX2JlX2RlY29kZWQpOworI2lmZGVmIF9fRVRXU19TVVBQT1JUX18KK2V4dGVybiB2b2lkIHJyX2RlY29kZV9ncm91cF9jYWxsX2luZm8oYml0X3N0cmVhbSAqYnNfcHRyLCBrYWxfdWludDE2ICpsZW5ndGgsIGthbF9ib29sICpyZXN1bHQpOworZXh0ZXJuIHZvaWQgcnJfZGVjb2RlX2NlbGxfZ2xvYmFsX2NvdW50KGJpdF9zdHJlYW0gKmJzX3B0ciwga2FsX3VpbnQxNiAqbGVuZ3RoLCBrYWxfYm9vbCAqcmVzdWx0KTsKK2V4dGVybiB2b2lkIHJyX2RlY29kZV9tYm1zX2ZyZXFfcGFyYV9pZShiaXRfc3RyZWFtICpic19wdHIsIGthbF91aW50MTYqIGxlbmd0aCwga2FsX2Jvb2wgKnJlc3VsdCk7CitleHRlcm4gdm9pZCBycl9kZWNvZGVfbWJtc19zZXNzaW9uX2xpc3RfaWUoYml0X3N0cmVhbSAqYnNfcHRyLCBrYWxfdWludDE2KiBsZW5ndGgsIGthbF9ib29sICpyZXN1bHQpOworZXh0ZXJuIHZvaWQgcnJfZGVjb2RlX21ibXNfY2hhbm5lbF9wYXJhX2llKGJpdF9zdHJlYW0gKmJzX3B0ciwga2FsX3VpbnQxNiogbGVuZ3RoLCBrYWxfYm9vbCAqcmVzdWx0KTsKK2V4dGVybiB2b2lkIHJyX2RlY29kZV9tYm1zX3BhcmEoYml0X3N0cmVhbSAqYnNfcHRyLCBrYWxfdWludDE2KiBsZW5ndGgsIGthbF9ib29sICpyZXN1bHQpOworI2lmZGVmIF9fUFNfU0VSVklDRV9fCitleHRlcm4gdm9pZCBycl9kZWNvZGVfcGFnZV9pbmZvX3N0cnVjdChiaXRfc3RyZWFtICpic19wdHIsIGthbF91aW50MTYgKmxlbmd0aCk7CitleHRlcm4gdm9pZCBycl9kZWNvZGVfcmVwZWF0ZWRfaXVfcGFnZV9pbmZvKGJpdF9zdHJlYW0gKmJzX3B0ciwga2FsX3VpbnQxNiAqbGVuZ3RoKTsKKyNlbmRpZiAvKiBfX1BTX1NFUlZJQ0VfXyAqLworI2VuZGlmIC8qIF9fRVRXU19TVVBQT1JUX18gKi8KKworI2VuZGlmIC8qIF9SUl9DT01NT05fREVGX0ggKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JyX2NvbW1vbl9lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JyX2NvbW1vbl9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYjk3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcnJfY29tbW9uX2VudW1zLmgKQEAgLTAsMCArMSwyMDE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgICBycl9jb21tb25fZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1JSX0NPTU1PTl9FTlVNU19ICisjZGVmaW5lIF9SUl9DT01NT05fRU5VTVNfSAorCit0eXBlZGVmIGVudW0KK3sKKyAgICBSUl9QU0lfMV9NU0dfVFlQRSA9IDB4MzEsCisgICAgUlJfUFNJXzJfTVNHX1RZUEUgPSAweDMyLAorICAgIFJSX1BTSV8zX01TR19UWVBFID0gMHgzMywKKyAgICBSUl9QU0lfM19CSVNfTVNHX1RZUEUgPSAweDM0LAorICAgIFJSX1BTSV80X01TR19UWVBFID0gMHgzNSwKKyAgICBSUl9QU0lfNV9NU0dfVFlQRSA9IDB4MzYsCisgICAgUlJfUFNJXzZfTVNHX1RZUEUgPSAweDMwLAorICAgIFJSX1BTSV83X01TR19UWVBFID0gMHgzOCwKKyAgICBSUl9QU0lfM19URVJfTVNHX1RZUEUgPSAweDNDLAorICAgIFJSX1BTSV8zX1FVQVRFUl9NU0dfVFlQRSA9IDB4M0QsCisgICAgUlJfUFNJXzEzX01TR19UWVBFID0gMHgzNywKKyAgICBSUl9QU0lfOF9NU0dfVFlQRSA9IDB4MzksCisgICAgUlJfUFNJXzE0X01TR19UWVBFID0gMHgzYQorfSBycl9wc2lfbXNnX3R5cGU7CisKK3R5cGVkZWYgZW51bQoreworICAgIFBTSV9OT19CQU5ESU5GTywKKyAgICBQU0lfRENTMTgwMCwKKyAgICBQU0lfUENTMTkwMAorfSBiYW5kX2luZGljYXRvcl9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICAvKiBOb3RlIHRoYXQgdGhlIHNlcXVlbmNlIGFuZCB0aGUgdmFsdWUgb2YgZWFjaCBpdGVtIGNhbid0IGJlIGNoYW5nZWQgYmVjYXVzZSB0aGUKKyAgICAgKiBjb250ZW50IG9mIHBiY2NoX21vZGVfbWFwcGluZ1tdIGlzIGRlc2lnbmVkIGFjY29yZGluZyB0byB0aGlzIGRlZmluZSB2YWx1ZSEgKi8KKyAgICBQU0lfUE9TSVRJT05fTk9ORSA9IDAsCisgICAgUFNJX1BPU0lUSU9OX1BTSTEgPSAxLAorICAgIFBTSV9QT1NJVElPTl9MUiA9IDIsCisgICAgUFNJX1BPU0lUSU9OX0hSID0gNCwKKyAgICBQU0lfUE9TSVRJT05fVU5LTk9XTiA9IDggICAgLyogZGVmYXVsdCB2YWx1ZSBmb3IgcHNpX3Bvc2l0aW9uW10gKi8KK30gcHNpX3Bvc2l0aW9uX2VudW07CisKKyNpZmRlZiBfX1BTX1NFUlZJQ0VfXworLyogZW51bSBmb3IgaW5kaWNhdGluZyBob3BwaW5nIG9yIG5vbi1ob3BwaW5nIHBiY2NoICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBQU0lfU0lfTk9OX0hPUFBJTkdfUEJDQ0gsCisgICAgUFNJX1NJX0hPUFBJTkdfUEJDQ0gKK30KK1BCQ0NIX1RZUEU7CisjZW5kaWYgLyogX19QU19TRVJWSUNFX18gKi8gCisKK3R5cGVkZWYgZW51bQoreworICAgIFNBUEkwID0gMCwKKyAgICBTQVBJMyA9IDMKK30gbGFwZG1fc2FwaV9oZWFkZXI7CisKK3R5cGVkZWYgZW51bQoreworICAgIFVOVVNFRF9FU1RCLAorICAgIE5PUk1BTF9FU1RCLAorICAgIENPUkVTX0VTVEIKK30gTEFQRE1fRVNUQl9NT0RFOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBVTlVTRURfUkVMLAorICAgIE5PUk1BTF9SRUwsCisgICAgTE9DQUxfRU5EX1JFTCwKKyAgICBBQk5PUk1BTF9SRUwKK30gTEFQRE1fUkVMX01PREU7CisKK3R5cGVkZWYgZW51bQoreworICAgIE5PUk1BTF9IRUFERVIgPSAxLAorICAgIFNIT1JUX0hFQURFUgorfSBsYXBkbV9sMl9oZWFkZXI7CisKK3R5cGVkZWYgZW51bQoreworICAgIExPV19QUklPID0gMSwKKyAgICBOT1JNQUxfUFJJTywKKyAgICBISUdIX1BSSU8KK30gbGFwZG1fcHJpb3JpdHk7CisKKyNpZmRlZiBfX0FHUFNfQ09OVFJPTF9QTEFORV9fCit0eXBlZGVmIGVudW0KK3sKKyAgICBSUk1fQVBEVV9JTklUSUFMX1ZBTFVFID0gMCwgLy9pbml0YWwgdmFsdWUKKyAgICBSUk1fQVBEVV9TSU5HTEVfTUVTU0FHRSA9IDEsIC8vIEFQRFUgd2l0aG91dCBzZWdtZW50CisgICAgUlJNX0FQRFVfRklSU1RfU0VHTUVOVCA9IDIsIC8vIEFQRFUgd2l0aCBmaXJzdCBzZWdtZW50CisgICAgUlJNX0FQRFVfTUlERExFX1NFR01FTlQgPSAzLCAvLyBBUERVIHdpdGggbWlkZGxlIHNlZ21lbnQKKyAgICBSUk1fQVBEVV9MQVNUX1NFR01FTlQgPSA0LCAvLyBBUERVIHdpdGggbGFzdCBzZWdtZW50CisgICAgUlJNX05PUk1BTF9MQVlFUjNfTUVTRyA9IDUgLy8gTm9ybWFsIExheWVyMyBtZXNzYWdlCit9IGxhcGRtX2xheWVyM19tZXNzYWdlX3R5cGVfZW51bTsKKworI2VuZGlmIC8qIF9fQUdQU19DT05UUk9MX1BMQU5FX18gKi8gCisKK3R5cGVkZWYgZW51bQoreworICAgIEVSUk9SX05PID0gMSwKKyAgICBFUlJPUl9USU1FUl9FWFBEX04yMDBfQUJOT1JNQUxfUkVMLAorICAgIEVSUk9SX1JFX0VTVF9SRVEsCisgICAgRVJST1JfVU5TT0xfVUEsCisgICAgRVJST1JfVU5TT0xfRE0sCisgICAgRVJST1JfVU5TT0xfRE1fRVNURF9TVEFURV9BQk5PUk1BTF9SRUwsCisgICAgRVJST1JfVU5TT0xfU19SRVNQLAorICAgIEVSUk9SX1NFUV9FUlJPUl9BQk5PUk1BTF9SRUwsCisgICAgRVJST1JfVV9JTkNPUlJFQ1RfUEFSQSwKKyAgICBFUlJPUl9TSE9SVF9MMl9UWVBFMV9OT1RfU1VQLAorICAgIEVSUk9SX1NIT1JUTDJUWVBFMV9OT1RfQVBQLAorICAgIEVSUk9SX1NfSU5DT1JSRUNUX1BBUkEsCisgICAgRVJST1JfSV9JTkNPUlJFQ1RfTSwKKyAgICBFUlJPUl9JX0lOQ09SUkVDVF9MRU4sCisgICAgRVJST1JfRlJBTUVfTk9UX0lNUEwsCisgICAgRVJST1JfU0FCTV9FU1REX1NUQVRFLAorICAgIEVSUk9SX1NBQk1fSU5GT19OT1RfQUxMLAorICAgIEVSUk9SX1NBQk1fSU5GT19NSVNNQVRDSCwKKyAgICBFUlJPUl9SQURJT19MSU5LX0ZBSUxVUkUsCisgICAgRVJST1JfU0FQSTBfTk9UX0VTVEFCTElTSEVELAorICAgIEVSUk9SX0VYQ0VFRF9NQVhfTDNfTEVOLAorICAgIEVSUk9SX1NBUEkzX05PVF9FU1RBQkxJU0hFRAorICAgIC8vRVJST1JfUkNWRF9OV19ESVNDCit9IExBUERNX0VSUk9SX0NBVVNFOworCisvKiBFdmVseW46IFI3IExhdGVuY3kgUmVkdWNhdGlvbiBEZXZlbG9wbWVudCAqLworI2lmZGVmIF9fR0VSQU5fUlRUSV9fCit0eXBlZGVmIGVudW0KK3sKKyAgIFJSX0JUVElfTU9ERSA9IDAsCisgICBSUl9SVFRJX01PREUKK30gdHRpX2NvbmZpZ19lbnVtOwordHlwZWRlZiBlbnVtCit7CisgICBSUl9CVFRJX1VTRl9NT0RFID0gMCwKKyAgIFJSX1JUVElfVVNGX01PREUKK30gdXNmX21vZGVfZW51bTsKKyNlbmRpZi8qIF9fR0VSQU5fUlRUSV9fICovCisKKyNpZmRlZiBfX0dFUkFOX0ZBTlJfXwordHlwZWRlZiBlbnVtCit7CisgICBSTENfTk9STUFMX1BPTExJTkcgPSAwLAorICAgUkxDX1BBTl9QT0xMSU5HCit9IHJsY19wb2xsaW5nX3R5cGVfZW51bTsKKyNlbmRpZi8qIF9fR0VSQU5fRkFOUl9fICovCisKK3R5cGVkZWYgZW51bQoreworICAgIEFCU0VOVCwKKyAgICBQUkVTRU5UCit9IGlzcHJlc2VudDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgWkVSTyA9IDAsCisgICAgT05FID0gMSwKKyAgICBUV08gPSAyLAorICAgIFRIUkVFID0gMworfSB0d29iaXQ7CisKKy8qIFByb3QgRGlzYyBmb3IgUlIgbWVzZ3MgKi8KK3R5cGVkZWYgZW51bQoreworICAgIFJSX1BEID0gMHgwNiwKKyAgICBTTVNfUEQgPSAweDA5LAorICAgIFRFU1RfUEQgPSAweDBmLAorICAgIFJFU0VSVl9QRCA9IDB4MGUKK30gUlJfUERfVFlQRTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgREVESUNBVEVELAorICAgIFRCRgorfSBDSEFOTkVMX1JFU09VUkNFX1RZUEU7CisKK3R5cGVkZWYgZW51bQoreworICAgIFJNQ19DSEFOTkVMX0RFU0NSSVBUSU9OXzEsCisgICAgUk1DX0NIQU5ORUxfREVTQ1JJUFRJT05fMgorfSBDSEFOTkVMX0RFU0NSSVBUSU9OX1RZUEU7CisKK3R5cGVkZWYgZW51bQoreworICAgIFJNQ19UU0NfU0VUXzEsCisgICAgUk1DX1RTQ19TRVRfMgorfSBybWNfdHNjX3NldF90eXBlOworCisKK3R5cGVkZWYgZW51bQoreworICAgIE5PX0NJUEhFUklORywKKyAgICBDSVBIRVJJTkcKK30gQ0lQSEVSSU5HX01PREVfU0VUVElORzsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQUZURVJfQkVGT1JFLAorICAgIEFGVEVSX09OTFksCisgICAgT0xEX0NIQU5ORUxfREVTQworfSBERURfQ0hBTl9QQVJBTVM7CisKK3R5cGVkZWYgZW51bQoreworICAgIENIQU5fREVTQzEsCisgICAgQ0hBTl9ERVNDMgorfSBDSEFOX0RFU0NfSUVfVFlQRTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQ05fQU5ZX0NIQU4sCisgICAgQ05fU0RDQ0gsCisgICAgQ05fVENIX0YsCisgICAgQ05fVENIX0ZfSAorfSBDSEFOX05FRURFRDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVFdPX1BIQVNFLAorICAgIFBBR0VfUkVTUE9OU0UsCisgICAgQ0VMTF9VUERBVEUsCisgICAgR01NX1BST0MsCisgICAgU0hPUlRfQUNDRVNTLAorICAgIE9ORV9QSEFTRSwKKyAgICBNRUFTX1BST0MsCisgICAgQ0VMTF9DSEFOR0VfRkFJTFVSRSwKKyNpZmRlZiBfX0VHUFJTX01PREVfXworICAgIFNJR05BTExJTkcsCisjZW5kaWYgCisgICAgR1NNX1BST0MgICAgLyogVmluY2VudCBhZGQgKGZvciBHU00pICovCit9IEFDQ0VTU19UWVBFOworCisvKiBWaW5jZW50ICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBTQVBJX05PVF9FU1RBQkxJU0hFRCwKKyAgICBTQVBJX0VTVEFCTElTSElORywKKyAgICBTQVBJX0VTVEFCTElTSEVECit9IHNhcGlfc3RhdHVzX2VudW07CisKKyNpZmRlZiBfX1BTX1NFUlZJQ0VfXwordHlwZWRlZiBlbnVtCit7CisgICAgRlJFUVVFTkNZX05PVF9JTVBMRU1FTlRFRCwKKyAgICBOT19SRVNQT05TRV9PTl9UQVJHRVRfQ0VMTCwKKyAgICBSRUpFQ1RfT05fVEFSR0VUX0NFTEwsCisgICAgT05fR09JTkdfQ1NfQ09OTkVDVElPTiwKKyAgICBBTk9ZTU9VU19BQ0NFU1MsCisgICAgTVNfR01NX1NUQU5EQllfU1RBVEUsCisgICAgTVNfR01NX0ZPUkNFRF9UT19TVEFOREJZLAorICAgIENFTExfQ0hHX1VOVVNFRF9WQUxVRQorfSBjZWxsX2NoYW5nZV9mYWlsdXJlX2NhdXNlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIENFTExfQ0hBTkdFX0JTSUNfU1lOQ19JTl9QUk9HUkVTUywKKyAgICBDRUxMX0NIQU5HRV9BQk9SVF9TVUNDRVNTCit9IENFTExfQ0hBTkdFX0FCT1JUX1JFU1VMVF9FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBQTF9EQVRBX0JMT0NLLAorICAgIFBMX0NUUkxfQkxPQ0sxLAorICAgIFBMX0NUUkxfQkxPQ0syLAorICAgIFBMX1JFU0VSVkVECit9IHBheV9sb2FkX3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQVJGQ05fVFlQRSA9IDAsCisgICAgSU5ESVJFQ1RfRU5DT0QgPSAxLAorICAgIERJUkVDVF9FTkNPRDEgPSAyLAorICAgIERJUkVDVF9FTkNPRDIgPSAzCit9IGZyZXFfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgTVNJRF9HTE9CQUxURkkgPSAwLAorICAgIE1TSURfVExMSSA9IDIsCisgICAgTVNJRF9UUUkgPSA2LAorICAgIE1TSURfUEtUUkVRUkVGID0gNworfSBtc2lkX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIE1TSUQxX1RMTEkgPSAxLAorICAgIE1TSUQxX1RRSSA9IDYsCisgICAgTVNJRDFfUEtUUkVRUkVGID0gNywKKyAgICBNU0lEMV9HTE9CQUxURkkgPSAwCit9IG1zaWQxX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIERZTkFNSUMgPSAxLAorICAgIFNJTkdMRUJMSyA9IDIsCisgICAgRVhURU5TSU9OID0gMCwKKyAgICBGSVhFRF9UWVBFID0gMworfSBjaGFsbG9jX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFRMTEkxID0gMCwKKyAgICBQS1RSRVFSRUYxID0gMiwKKyAgICBHTE9CQUxURkkxID0gMworfSBhZGRfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQUNDRVNTX0JVUlNUX1RZUEVfOF9CSVRTLAorICAgIEFDQ0VTU19CVVJTVF9UWVBFXzExX0JJVFMKK30gYWNjZXNzX2J1cnN0X3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUkxDX01BQ19EQVRBX0JMT0NLLAorICAgIENPTlRST0xfQkxPQ0tfV0lUSE9VVF9PUFRfT0NURVRTLAorICAgIENPTlRST0xfQkxPQ0tfV0lUSF9PUFRfT0NURVRTCit9IGJsa190eXBlX2VudW07CisKKy8qIEV2ZWx5biAyMDA5MDQxNTogTWVyZ2UgUjYgKi8KK3R5cGVkZWYgZW51bQoreworICAgIFBTX0hPX1RPX0FfR0JfUEFZTE9BRCwKKyAgICBQU19IT19UT19VVFJBTl9QQVlMT0FECit9IHBzX2hvX3BheWxvYWQ7CisKK3R5cGVkZWYgZW51bQoreworICAgIFBTX0hPX1JSX0lORk8KK30gcHNfaG9fcnI7CisKKy8qIENsYWlyZSAwNTAxMjggY2hhbmdlIDogSW1wbGVtZW50IEVHUFJTIFNSQiBtb2RlICovCisjaWZkZWYgX19FR1BSU19NT0RFX18KK3R5cGVkZWYgZW51bQoreworICAgIEVHUFJTX1NSQl9MT09QQkFDS19PTl9XSVRIT1VUX09QVF9PQ1RFVFMsICAgLyogMHgwMCAqLworICAgIEVHUFJTX1NSQl9MT09QQkFDS19PRkZfV0lUSE9VVF9PUFRfT0NURVRTLCAgLyogMHgwMSAqLworICAgIEVHUFJTX1NSQl9MT09QQkFDS19PTl9XSVRIX09QVF9PQ1RFVFMsICAgICAgLyogMHgxMCAqLworICAgIEVHUFJTX1NSQl9MT09QQkFDS19PRkZfV0lUSF9PUFRfT0NURVRTICAgICAgLyogMHgxMSAqLworfSBlZ3Byc19zcmJfYmxrX3R5cGVfZW51bTsKKyNlbmRpZiAvKiBfX0VHUFJTX01PREVfXyAqLyAKKwordHlwZWRlZiBlbnVtCit7CisgICAvKioqKioqIFNJICoqKioqKi8KKyAgICBTSV9JTkZPX1JFQURZID0gMCwgICAgICAgICAgICAgICAgICAgICAgLyogMCAqLworICAgIFNJX0lORk9fTk9UX1JFQURZLCAgICAgICAgICAgICAgICAgICAgICAvKiAxICovCisgICAgU0lfSU5GT19OT1RfUkVBRFlfQVNfQ0VMTF9TRUwsICAgICAgICAgIC8qIDIgKi8KKyAgICBTSV9JTkZPX05PVF9SRUFEWV9BU19MSU1JVEVEX1NFUlZJQ0UsICAgLyogMyAqLworICAgIFNJX0lORk9fTk9UX1JFQURZX0FTX05PX1NFUlZJQ0UsICAgICAgICAvKiA0ICovCisgICAgU0lfSU5GT19HUFJTX1RPX0VHUFJTLCAgICAgICAgICAgICAgICAgIC8qIDUgKi8KKyAgICBTSV9JTkZPX0VHUFJTX1RPX0dQUlMsICAgICAgICAgICAgICAgICAgLyogNiAqLworCisgICAvKioqKioqIENTIFNFUlZJQ0UgKioqKioqLworICAgIFJBTkRfQUNDRVNTX0ZBSUxVUkUgPSAyMCwgICAvKiAyMCAqLworICAgIEFDQ0VTU19OT1RfQUxMT1dFRCwgICAgICAgICAvKiAyMSAqLworICAgIEdQUlNfU1VTUEVORCwgICAgICAgICAgICAgICAvKiAyMiAqLworICAgIEdQUlNfUkVTVU1FX05PVF9QT1NTSUJMRSwgICAvKiAyMyAqLworICAgIEdQUlNfUkVTVU1FX1BPU1NJQkxFLCAgICAgICAvKiAyNCAqLworICAgIEdQUlNfUkVTVU1FX0NTX0FDQ0VTU19GQUlMLCAvKiAyNSAqLworCisgICAvKioqKioqIFBTIFNFUlZJQ0UgKioqKioqLworICAgIFRCRl9FU1RBQkxJU0hNRU5UX0ZBSUxVUkUgPSA0MCwgICAgIC8qIDQwICovCisgICAgUEFOX01BWF9SRUlOSVQsICAgICAgICAgICAgICAgICAgICAgLyogNDEgKi8KKyAgICBUQkZfUkVMX05PUk1BTCwgICAgICAgICAgICAgICAgICAgICAvKiA0MiAqLworICAgIFRCRl9SRUxfQUJOT1JNQUwsICAgICAgICAgICAgICAgICAgIC8qIDQzICovCisgICAgVEJGX1JFTF9STkRfQUNDRVNTLCAgICAgICAgICAgICAgICAgLyogNDQgKi8KKyAgICBUQkZfUkVMX0NFTExfUkVTRUwsICAgICAgICAgICAgICAgICAvKiA0NSAqLworICAgIFRCRl9SRUxfUkVUVVJOX1BDQ0NILCAgICAgICAgICAgICAgIC8qIDQ2ICovCisgICAgVEJGX1JFTF9SRVRVUk5fU0ksICAgICAgICAgICAgICAgICAgLyogNDcgKi8KKyAgICBUQkZfUkVMX0FDQ0VTU1JFSkVDVF9FTkQsICAgICAgICAgICAvKiA0OCAqLworICAgIFRCRl9SRUxfREVUQUNILCAgICAgICAgICAgICAgICAgICAgIC8qIDQ5ICovCisgICAgVEJGX1JFTF9OT19TSU0sICAgICAgICAgICAgICAgICAgICAgLyogNTAgKi8KKyAgICBUQkZfUkVMX0FUVF9SRUosICAgICAgICAgICAgICAgICAgICAvKiA1MSAqLworICAgIFRCRl9SRUxfVDMxNDJfVDMxNzJfUlVOSU5HLCAgICAgICAgIC8qIDUyICovCisgICAgRExfU0lOR0xFX0JMT0NLX1BST0NfSU5fUFJPR1JFU1MsICAgLyogNTMgKi8KKyAgICBETF9TSU5HTEVfQkxPQ0tfUFJPQ19FTkQsICAgICAgICAgICAvKiA1NCAqLworICAgIFVMX1NJTkdMRV9CTE9DS19QUk9DX0lOX1BST0dSRVNTLCAgIC8qIDU1ICovCisgICAgVUxfU0lOR0xFX0JMT0NLX1BST0NfRU5ELCAgICAgICAgICAgLyogNTYgKi8KKyAgICBVTF9TSU5HTEVfQkxPQ0tfUFJPQ19GQUlMLCAgICAgICAgICAvKiA1NyAqLworICAgIFJBVV9QUk9DX0JFR0lOLCAgICAgICAgICAgICAgICAgICAgIC8qIDU4ICovCisgICAgUkFVX1BST0NfU1VDQ0VTUywgICAgICAgICAgICAgICAgICAgLyogNTkgKi8KKyAgICBSQVVfUFJPQ19GQUlMVVJFLCAgICAgICAgICAgICAgICAgICAvKiA2MCAqLworICAgIFRCRl9SRUxfUE9XRVJfT0ZGLCAgICAgICAgICAgICAgICAgIC8qIDYxICovCisgICAgVEJGX0VTVF9GQUlMX1dJVEhfUkVUVVJOX1NJLCAgICAgICAgLyogNjIgKi8KKyAgICBUQkZfRVNUX0ZBSUxfV0lUSF9NQVhfUkVUUlksICAgICAgICAvKiA2MyAqLworI2lmZGVmIF9fVEJGX0VTVF9fCisgICAgVEJGX1JFTF9GT1JfVEJGX0VTVCwgICAgICAgICAgICAgICAgLyogNjQgKi8KKyNlbmRpZiAvKiBfX1RCRl9FU1RfXyAqLworCisjaWZkZWYgX19HRU1JTklfXworICAgIFJSX1NVU1BFTkRfRFVBTF9TSU0sICAgIC8qIDY1ICovCisjZW5kaWYgLyogX19HRU1JTklfXyAqLworCisgICAgVEJGX1JFTF9BQ0NFU1NSRUpFQ1RfV0FJVF9JTkQsICAvKiA2NyAqLworICAgIFRCRl9SRUxfVU5TT0xJQ0lURURfRklOQUxfUFVBTiwgLyogNjggKi8KKworICAgLyoqKioqKiBDRUxMIFJFU0VMRUNUSU9OICoqKioqKi8KKyAgICBBQk5PUk1BTF9SRVNFTF9CRUdJTiA9IDgwLCAgICAgICAgICAvKiA4MCAqLworICAgIC8qIElmIFJQTUMgcmVzZWxlY3RzIGJhY2sgdG8gb3JpZ2luYWwgY2VsbCwgQUJOT1JNQUxfUkVTRUxfRkFJTCB3aWxsIGJlIHNlbnQKKyAgICAgKiB0byBwcmV2ZW50IFJMQyBjbGVhcmluZyBpdHMgc2lnbmFsaW5nIHF1ZXVlICovCisgICAgQUJOT1JNQUxfUkVTRUxfRkFJTCwgICAgICAgICAgICAgICAgLyogODEgKi8KKyAgICAvKiBBZGRlZCBmb3IgQzIgYW5kIFBDQ08gYmFzZWQgcmVzZWwgc2NlbmFyaW9zICovCisgICAgQzFfQzJfUkVTRUxfQkVHSU4sICAgICAgICAgICAgICAgICAgLyogODIgKi8KKyAgICBDMV9DMl9SRVNFTF9TVUNDRVNTLCAgICAgICAgICAgICAgICAvKiA4MyAqLworICAgIEMxX0MyX1JFU0VMX0ZBSUwsICAgICAgICAgICAgICAgICAgIC8qIDg0ICovCisgICAgQzFfQzJfUkVTRUxfRkFJTF9HU01fQ0VMTCwgICAgICAgICAgLyogODUgKi8KKyAgICBDMzFfQzMyX1JFU0VMX0JFR0lOLCAgICAgICAgICAgICAgICAvKiA4NiAqLworICAgIEMzMV9DMzJfUkVTRUxfU1VDQ0VTUywgICAgICAgICAgICAgIC8qIDg3ICovCisgICAgQzMxX0MzMl9SRVNFTF9GQUlMLCAgICAgICAgICAgICAgICAgLyogODggKi8KKyAgICBOV19DVFJMX1JFU0VMX0JFR0lOLCAgICAgICAgICAgICAgICAvKiA4OSAqLworICAgIE5XX0NUUkxfUkVTRUxfRkFJTCwgICAgICAgICAgICAgICAgIC8qIDkwICovCisgICAgTldfQ1RSTF9SRVNFTF9TVUNDRVNTLCAgICAgICAgICAgICAgLyogOTEgKi8KKyAgICBQQ0NPX1JFU0VMX1NVQ0NFU1MsICAgICAgICAgICAgICAgICAvKiA5MiAqLworICAgIFBDQ09fUkVTRUxfQkVHSU4sICAgICAgICAgICAgICAgICAgIC8qIDkzICovCisgICAgUENDT19SRVNFTF9GQUlMLCAgICAgICAgICAgICAgICAgICAgLyogOTQgKi8KKyAgICBQQ0NPX1JFU0VMX0lOVEVSTUVESUFURV9TVUNDRVNTLCAgICAvKiA5NSAqLworICAgIFBDQ09fUkVTRUxfSU5URVJNRURJQVRFX0ZBSUwsICAgICAgIC8qIDk2ICovCisgICAgLyogQUJOT1JNQUxfUkVTRUxfU1VDQ0VTUyBpbmZvcm1zIFJMQyB0byBjbGVhciBpdHMgc2lnbmFsaW5nIHF1ZXVlICovCisgICAgQUJOT1JNQUxfUkVTRUxfU1VDQ0VTUywgICAgICAgICAgICAgLyogOTcgKi8KKworICAgLyoqKioqKiBJdGVyLVJBVCBDRUxMIFJFU0VMRUNUSU9OICoqKioqKi8KKyAgICBJUl9SRVNFTF9CRUdJTiA9IDEyMCwgICAgICAgICAgICAgICAgICAgLyogMTIwICovCisgICAgSVJfUkVTRUxfU1VDQ0VTUywgICAgICAgICAgICAgICAgICAgICAgIC8qIDEyMSAqLworICAgIElSX1JFU0VMX0ZBSUwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMjIgKi8KKyAgICAvKiBCeXJvbjogMjAwNy8wNS8wODogV2hlbiBDQ08gQWN0aXZhdGlvbiB0aW1lIHRpbWVyIGlzIHJ1bm5pbmcsIGNhbiBub3QgZG8gYWNjZXNzICovCisgICAgVEJGX1JFTF9DQ09fQUNUSVZBVElPTl9USU1FX09OR09JTkcsICAgIC8qIDEyMyAqLworICAgIC8qIEJ5cm9uOiAyMDA3LzA1LzI4OiBUbyB0ZWxsIFJMQyB0aGUgR1NNIFJBVCBjaGFuZ2VzIHRvIHN0YW5kYnkgKi8KKyAgICBJUl9SQVRfQ0hBTkdFX0dTTV9TVEFOREJZLCAgICAgICAgICAgICAgLyogMTI0ICovCisKKyAgICAvKiBicndhbmcsIDA3MDIwNSwgdG8gYXZvaWQgUkxDIGFzc2VydCBkdWUgdG8gbm90IHBhaXJlZCBSRVNVTUVfTk9UX1BPU1NJQkxFICovCisgICAvKioqKioqIEl0ZXItUkFUIEhPICoqKioqKi8KKyAgICBJUl9IT19CRUdJTiA9IDE0MCwgIC8qIDE0MCAqLworICAgIElSX0hPX1RPX1VUUkFOLCAgICAgLyogMTQxICovCisgICAgSVJfSE9fRlJPTV9VVFJBTiwgICAvKiAxNDIgKi8KKworICAgIC8qIEV2ZWx5biAyMDA5MDQxNTogTWVyZ2UgUjYgKi8KKworICAgIC8qIFRvIEluZGljYXRlIFZJUlRVQUwgTU9ERSB0byBNQUMgKi8KKyAgICBSUl9HRU1JTklfVklSVFVBTCwgIC8qIDE0NCAqLworICAgIC8qIFRvIEluZGljYXRlIE5PUk1BTCBNT0RFIHRvIE1BQyAqLworICAgIFJSX0dFTUlOSV9OT1JNQUwsICAvKiAxNDUgKi8KKyAgICAJLypJdCBpcyBpbiB2aXJ0dWFsIGJ1dCBjYW4gYWxzbyB0cmlnZ2VyIFBTIGFjY2VzcyovCisJUlJfR0VNSU5JX1ZJUlRVQUxfQUxMT1csIC8qMTQ2Ki8KKyAgICBNU1BNX1JGX09XTkVSX1BSSU9SSVRZX0NIQU5HRSwgLyoxNDcqLworICAgIFRCRl9SRUxfUEtUX1RCRl9SRUxfQUJOT1JNQUxfTUFYLCAgLyogMTQ4ICovCisgICAgU0lfSU5GT19OT1RfUkVBRFlfT1VUX09GX0RBVEUsIC8qIDE0OSAqLworICAgIFRPVEFMX1RCRl9SRUxfVFlQRV9FTlVNID0gMjU1ICAgLyogMjU1ICovCit9IHRiZl9yZWxfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBEWU5BTUlDX01PREUsCisgICAgRVhUX0RZTkFNSUNfTU9ERSwKKyAgICBGSVhFRF9XSVRIT1VUX0hBTEZfRFVQTEVYX01PREUsCisgICAgRklYRURfV0lUSF9IQUxGX0RVUExFWF9NT0RFLAorICAgIFNJTkdMRV9CTE9DS19XSVRIT1VUX1RCRiwKKyAgICBTSU5HTEVfQkxPQ0tfRk9SX1RXT19QSEFTRSwKKyNpZmRlZiBfX0VHUFJTX01PREVfXworICAgIE1VTFRJX0JMT0NLX0ZPUl9UV09fUEhBU0UsCisjZW5kaWYgLyogX19FR1BSU19NT0RFX18gKi8KKyAgICBEWU5BTUlDX1RFU1RfTU9ERSwKKyAgICBFWFRfRFlOQU1JQ19URVNUX01PREUsCisgICAgTk9fTUFDX01PREUsICAgIC8qIE1BQyBtb2RlIGlzIG5vdCBhc3NpZ25lZCBieSB0aGUgTmV0d29yaywgZWcsIGRvd25saW5rIElNTSBBU1NJR04gKi8KKyAgICBUT1RBTF9NQUNfTU9ERV9FTlVNCit9IG1hY19tb2RlX2VudW07CisKKy8qIEV4Y2UgMDMwOTE3OiBBZGQgYW4gaW52YWxpZCB2YWx1ZSBmb3IgZW5naW5lZXJpbmcgbW9kZSAqLwordHlwZWRlZiBlbnVtCit7CisgICAgQ1MxLAorICAgIENTMiwKKyAgICBDUzMsCisgICAgQ1M0LAorICAgIC8qIENsYWlyZSAwNDExMTggY2hhbmdlIDogTW9kaWZ5IE1DUyBlbnVtcyAqLworI2lmZGVmIF9fRUdQUlNfTU9ERV9fCisgICAgTUNTMSwKKyAgICBNQ1MyLAorICAgIE1DUzMsCisgICAgTUNTNCwKKyAgICBNQ1M1LAorICAgIE1DUzYsCisgICAgTUNTNywKKyAgICBNQ1M4LAorICAgIE1DUzksCisgICAgTUNTNV83LAorICAgIE1DUzZfOSwKKyNlbmRpZiAvKiBfX0VHUFJTX01PREVfXyAqLyAKKworLyogRXZlbHluOiBSNyBMYXRlbmN5IFJlZHVjYXRpb24gRGV2ZWxvcG1lbnQgKi8KKyNpZmRlZiBfX0dFUkFOX1JUVElfXworICAgIE1DUzAsCisjZW5kaWYgLyogX19HRVJBTl9SVFRJX18gKi8gCisKKyAgICBDU19JTlZBTElECit9IGdwcnNfY3NfZW51bTsKKworLyogRXhjZSAyMDA0MDExNjogYHJyYnBfbW9kZScgaXMgdG8gcHJvdmlkZSBhbiBpbnRlcmZhY2UgdG8gUk1QQyBmb3IgYWRqdXN0aW5nIFBDQS9QREFOL05CIHByb3JpdHkgZHluYW1pY2FsbHkgKi8KK3R5cGVkZWYgZW51bQoreworICAgIFJSQlBfTU9ERV9OT1JNQUwgPSAwLAorICAgIFJSQlBfTU9ERV9OQl9QUklPUklUWV9PVkVSX1BEQU4KK30gcnJicF9tb2RlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFBLVF9BU1NJR04sCisgICAgSU1NX1BLVF9BU1NJR04sCisgICAgUERDSF9BU1NJR04KK30gcGt0X2Fzc2lnbl90eXBlX2VudW07CisKKyNpZmRlZiBFR1BSUworI2luY2x1ZGUgImVncHJzX2hlYWRlcnNfc3RydWN0LmgiCisjZW5kaWYgCisKKyNpZmRlZiBfX0VHUFJTX01PREVfXworCit0eXBlZGVmIGVudW0KK3sKKyAgICBNT0RVTEFUSU9OX0dNU0ssCisgICAgTU9EVUxBVElPTl84UFNLCit9IE1PRFVMQVRJT05fVFlQRTsKKworLyogQ2xhaXJlIDA0MTExOCBjaGFuZ2UgOiBNb2RpZnkgTUNTIGVudW1zICovCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmIC8qIDAgKi8gCisKK3R5cGVkZWYgZW51bQoreworICAgIEdQUlNfVEJGLAorICAgIEVHUFJTX1RCRgorfSBUQkZfVFlQRTsKKworI2VuZGlmIC8qIF9fRUdQUlNfTU9ERV9fICovCisKKy8qIExhbnNsbyAyMDA1MDgwMSBSZWY6IDNHUFAgVFMgMDQuNjAgVjguMjUuMCAyMDA0LTA5ICovCit0eXBlZGVmIGVudW0KK3sKKyAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgLyogRG93bmxpbmsgUkxDL01BQyBjb250cm9sIG1lc3NhZ2VzICovCisgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIFJSX19ETF9NU0dfVFlQRV9WQUxVRV8wLCAgICAgICAgICAgICAgICAgICAgLyogMCAqLworICAgIFJSX19QQUNLRVRfQ0VMTF9DSEFOR0VfT1JERVIsICAgICAgICAgICAgICAgLyogMSAqLworICAgIFJSX19QQUNLRVRfRE9XTkxJTktfQVNTSUdOTUVOVCwgICAgICAgICAgICAgLyogMiAqLworICAgIFJSX19QQUNLRVRfTUVBU1VSRU1FTlRfT1JERVIsICAgICAgICAgICAgICAgLyogMyAqLworICAgIFJSX19QQUNLRVRfUE9MTElOR19SRVFVRVNULCAgICAgICAgICAgICAgICAgLyogNCAqLworICAgIFJSX19QQUNLRVRfUE9XRVJfQ09OVFJPTF9USU1JTkdfQURWQU5DRSwgICAgLyogNSAqLworICAgIFJSX19QQUNLRVRfUVVFVUVJTkdfTk9USUZJQ0FUSU9OLCAgICAgICAgICAgLyogNiAqLworICAgIFJSX19QQUNLRVRfVElNRVNMT1RfUkVDT05GSUdVUkUsICAgICAgICAgICAgLyogNyAqLworICAgIFJSX19QQUNLRVRfVEJGX1JFTEVBU0UsICAgICAgICAgICAgICAgICAgICAgLyogOCAqLworICAgIFJSX19QQUNLRVRfVVBMSU5LX0FDS19OQUNLLCAgICAgICAgICAgICAgICAgLyogOSAqLworICAgIFJSX19QQUNLRVRfVVBMSU5LX0FTU0lHTk1FTlQsICAgICAgICAgICAgICAgLyogMTAgKi8KKyAgICBSUl9fUEtUX0NFTExfQ0hBTkdFX0NPTlRJTlVFLCAgICAgICAgICAgICAgIC8qIDExICovCisgICAgUlJfX1BBQ0tFVF9ORUlHSF9DRUxMX0RBVEEsICAgICAgICAgICAgICAgICAvKiAxMiAqLworICAgIFJSX19QQUNLRVRfU0VSVl9DRUxMX0RBVEEsICAgICAgICAgICAgICAgICAgLyogMTMgKi8KKyAgICBSUl9fRExfTVNHX1RZUEVfVkFMVUVfMTQsICAgICAgICAgICAgICAgICAgIC8qIDE0ICovCisgICAgUlJfX01UQkZfRExfQVNTSUdOTUVOVCwgICAgICAgICAgICAgICAgICAgICAvKiAxNSAqLworICAgIFJSX19NVEJGX1VMX0FTU0lHTk1FTlQsICAgICAgICAgICAgICAgICAgICAgLyogMTYgKi8KKyAgICBSUl9fTVRCRl9USU1FU0xPVF9SRUNPTkZJRywgICAgICAgICAgICAgICAgIC8qIDE3ICovCisgICAgUlJfX0RMX01TR19UWVBFX1ZBTFVFXzE4LCAgICAgICAgICAgICAgICAgICAvKiAxOCAqLworICAgIFJSX19ETF9NU0dfVFlQRV9WQUxVRV8xOSwgICAgICAgICAgICAgICAgICAgLyogMTkgKi8KKyAgICBSUl9fRExfTVNHX1RZUEVfVkFMVUVfMjAsICAgICAgICAgICAgICAgICAgIC8qIDIwICovCisgICAgUlJfX1BTX0hBTkRPVkVSX0NPTU1BTkQsICAgICAgICAgICAgICAgICAgICAvKiAyMSAqLworICAgIFJSX19QS1RfUEhZU0lDQUxfSU5GTywgICAgICAgICAgICAgICAgICAgICAgLyogMjIgKi8KKyAgICBSUl9fRExfTVNHX1RZUEVfVkFMVUVfMjMsICAgICAgICAgICAgICAgICAgIC8qIDIzICovCisgICAgUlJfX0RMX01TR19UWVBFX1ZBTFVFXzI0LCAgICAgICAgICAgICAgICAgICAvKiAyNCAqLworICAgIFJSX19ETF9NU0dfVFlQRV9WQUxVRV8yNSwgICAgICAgICAgICAgICAgICAgLyogMjUgKi8KKyAgICBSUl9fRExfTVNHX1RZUEVfVkFMVUVfMjYsICAgICAgICAgICAgICAgICAgIC8qIDI2ICovCisgICAgUlJfX0RMX01TR19UWVBFX1ZBTFVFXzI3LCAgICAgICAgICAgICAgICAgICAvKiAyNyAqLworICAgIFJSX19ETF9NU0dfVFlQRV9WQUxVRV8yOCwgICAgICAgICAgICAgICAgICAgLyogMjggKi8KKyAgICBSUl9fRExfTVNHX1RZUEVfVkFMVUVfMjksICAgICAgICAgICAgICAgICAgIC8qIDI5ICovCisgICAgUlJfX0RMX01TR19UWVBFX1ZBTFVFXzMwLCAgICAgICAgICAgICAgICAgICAvKiAzMCAqLworICAgIFJSX19ETF9NU0dfVFlQRV9WQUxVRV8zMSwgICAgICAgICAgICAgICAgICAgLyogMzEgKi8KKyAgICBSUl9fUEFDS0VUX1NFUlZfQ0VMTF9TSSwgICAgICAgICAgICAgICAgICAgIC8qIDMyKi8KKyAgICBSUl9fUEFDS0VUX0FDQ0VTU19SRUpFQ1QsICAgICAgICAgICAgICAgICAgIC8qIDMzICovCisgICAgUlJfX1BBQ0tFVF9QQUdJTkdfUkVRVUVTVCwgICAgICAgICAgICAgICAgICAvKiAzNCAqLworICAgIFJSX19QQUNLRVRfUERDSF9SRUxFQVNFLCAgICAgICAgICAgICAgICAgICAgLyogMzUgKi8KKyAgICBSUl9fUEFDS0VUX1BSQUNIX1BBUkFNRVRFUlMsICAgICAgICAgICAgICAgIC8qIDM2ICovCisgICAgUlJfX1BBQ0tFVF9EVU1NWV9DT05UUk9MLCAgICAgICAgICAgICAgICAgICAvKiAzNyAqLworICAgIFJSX19ETF9NU0dfVFlQRV9WQUxVRV8zOCwgICAgICAgICAgICAgICAgICAgLyogMzggKi8KKyAgICBSUl9fRExfTVNHX1RZUEVfVkFMVUVfMzksICAgICAgICAgICAgICAgICAgIC8qIDM5ICovCisgICAgUlJfX1BTSV8xNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0MCAqLworICAgIFJSX19ETF9NU0dfVFlQRV9WQUxVRV80MSwgICAgICAgICAgICAgICAgICAgLyogNDEgKi8KKyAgICBSUl9fRExfTVNHX1RZUEVfVkFMVUVfNDIsICAgICAgICAgICAgICAgICAgIC8qIDQyICovCisgICAgUlJfX0RMX01TR19UWVBFX1ZBTFVFXzQzLCAgICAgICAgICAgICAgICAgICAvKiA0MyAqLworICAgIFJSX19ETF9NU0dfVFlQRV9WQUxVRV80NCwgICAgICAgICAgICAgICAgICAgLyogNDQgKi8KKyAgICBSUl9fUEFDS0VUX0FQUExJQ0FUSU9OX0lORk8sICAgICAgICAgICAgICAgIC8qIDQ1ICovCisgICAgUlJfX0RMX01TR19UWVBFX1ZBTFVFXzQ2LCAgICAgICAgICAgICAgICAgICAvKiA0NiAqLworICAgIFJSX19ETF9NU0dfVFlQRV9WQUxVRV80NywgICAgICAgICAgICAgICAgICAgLyogNDcgKi8KKyAgICBSUl9fUFNJXzYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ4ICovCisgICAgUlJfX1BTSV8xLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0OSAqLworICAgIFJSX19QU0lfMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTAgKi8KKyAgICBSUl9fUFNJXzMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUxICovCisgICAgUlJfX1BTSV8zX2JpcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1MiAqLworICAgIFJSX19QU0lfNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTMgKi8KKyAgICBSUl9fUFNJXzUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDU0ICovCisgICAgUlJfX1BTSV8xMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1NSAqLworICAgIFJSX19QU0lfNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTYgKi8KKyAgICBSUl9fUFNJXzgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDU3ICovCisgICAgUlJfX1BTSV8xNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1OCAqLworICAgIFJSX19ETF9NU0dfVFlQRV9WQUxVRV81OSwgICAgICAgICAgICAgICAgICAgLyogNTkgKi8KKyAgICBSUl9fUFNJXzNfdGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDYwICovCisgICAgUlJfX1BTSV8zX3F1YXRlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2MSAqLworICAgIFJSX19QU0lfMTUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjIgKi8KKyAgICBSUl9fRExfTVNHX1RZUEVfVkFMVUVfNjMgICAgICAgICAgICAgICAgICAgIC8qIDYzICovCit9IHJyX2dwcnNfZGxfcGVlcl9tc2dfbmFtZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgLyogVXBsaW5rIFJMQy9NQUMgY29udHJvbCBtZXNzYWdlcyAoKi8KKyAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgUlJfX1BBQ0tFVF9DRUxMX0NIQU5HRV9GQUlMVVJFLCAgICAgICAgICAgICAvKiAwICovCisgICAgUlJfX1BBQ0tFVF9DT05UUk9MX0FDS05PV0xFREdFLCAgICAgICAgICAgICAvKiAxICovCisgICAgUlJfX1BBQ0tFVF9ET1dOTElOS19BQ0tfTkFDSywgICAgICAgICAgICAgICAvKiAyICovCisgICAgUlJfX1BBQ0tFVF9VTF9EVU1NWV9DVFJMLCAgICAgICAgICAgICAgICAgICAvKiAzICovCisgICAgUlJfX1BBQ0tFVF9NRUFTVVJFTUVOVF9SRVBPUlQsICAgICAgICAgICAgICAvKiA0ICovCisgICAgUlJfX1BBQ0tFVF9SRVNPVVJDRV9SRVFVRVNULCAgICAgICAgICAgICAgICAvKiA1ICovCisgICAgUlJfX1BBQ0tFVF9NT0JJTEVfVEJGX1NUQVRVUywgICAgICAgICAgICAgICAvKiA2ICovCisgICAgUlJfX1BBQ0tFVF9QU0lfU1RBVFVTLCAgICAgICAgICAgICAgICAgICAgICAvKiA3ICovCisgICAgUlJfX0VHUFJTX1BLVF9ETF9BQ0tfTkFDSywgICAgICAgICAgICAgICAgICAvKiA4ICovCisgICAgUlJfX1VMX01TR19UWVBFX1ZBTFVFXzksICAgICAgICAgICAgICAgICAgICAvKiA5ICovCisgICAgUlJfX1BBQ0tFVF9FTkhBTkNFRF9NRUFTVVJFTUVOVF9SRVBPUlQsICAgICAvKjB4MGEgKi8KKyAgICBSUl9fQURESVRJT05BTF9NU19SQURJT19BQ0NFU1NfQ0FQLCAgICAgICAgIC8qMHgwYiAqLworICAgIFJSX19QQUNLRVRfQ0VMTF9DSEFOR0VfTk9USUZDQVRJT04sICAgICAgICAgLyoweDBjICovCisgICAgUlJfX1BBQ0tFVF9TSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDBkICovCit9IHJyX2dwcnNfdWxfcGVlcl9tc2dfbmFtZV9lbnVtOworCisvKiBFdmVseW4gMjAwOTA0MTU6IE1lcmdlIFI2ICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBGQUlMVVJFID0gMCwKKyAgICBTVUNDRVNTCit9IHJlc3VsdF90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFBNUl9OQyA9IDAgLAorI2lmZGVmIF9fUEtUX0VYVF9NRUFTX18KKyAgICBQTVJfRVhUICwKKyNlbmRpZiAvKiBfX1BLVF9FWFRfTUVBU19fICovICAgIAorICAgIFBNUl9FTkggLAorICAgIFBDQ0YsCisgICAgUENDTiwKKyAgICBQU1MsCisgICAgUFBTCit9IHJtcGNfbWFjX2N0cmxfbXNnX3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQ1NfUEFHSU5HID0gMCwKKyAgICBQQ0NPLAorICAgIFBNTywKKyNpZmRlZiBfX0dFUkFOX1I0X18KKyAgICBQQ0NDLAorICAgIFBTQ0QsCisgICAgUE5DRCwKKyNlbmRpZiAvKiBfX0dFUkFOX1I0X18gKi8gCisjaWZkZWYgX19HRVJBTl9SNl9fCisgICAgUFNDUywKKyNlbmRpZiAvKiBfX0dFUkFOX1I2X18gKi8KKyNpZm5kZWYgX19NVEtfVEFSR0VUX18gCisgICAgUFNJXzEzX01TRywKKyNlbmRpZiAvKiBfX01US19UQVJHRVRfXyAqLworICAgIE1BQ19STVBDX0NUUkxfTVNHX05VTQorfQorbWFjX3JtcGNfY3RybF9tc2dfdHlwZV9lbnVtOworCisvKiBBZGVsaW5lOiBSZWxwYWNlIGNzIHBhZ2luZywgUENDTywgUE1PLCBQQ0NDLCBQU0NELCBQTkNELCBQU0NTICovCisKKy8qIEthdGllIDIwMTMwNTMxOiBwcyBjaGFubmVsIHByb3RlY3QgaXNzdWUgKi8KK3R5cGVkZWYgZW51bQoreworICAgIFBST1RFQ1RfQ0hBTk5FTCA9IDAsCisgICAgTk9UX1BST1RFQ1RfQ0hBTk5FTAorfSBpc19wcm90ZWN0X3BzX2NoYW5uZWxfdHlwZV9lbnVtOworCisvKiBTaW1vbjIwMDUxMjIyIGZvciBGTEMyICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBHUFJTX1NBUEkzX01FTSwKKyAgICBHUFJTX1NBUEk1X01FTSwKKyAgICBHUFJTX1NBUEk5X01FTSwKKyAgICBHUFJTX1NBUEkxMV9NRU0sCisgICAgR1BSU19OVU1fU0FQSVMsCisgICAgR1BSU19JTlZBTElEX1NBUEkKK30gZ3Byc19mbGNfc2FwaV90eXBlX2VudW07CisKKyNlbmRpZiAvKiBfX1BTX1NFUlZJQ0VfXyAqLworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSUl9aRVJPX0NFTEwgICAgPSAwLAorICAgIFJSX09ORV9DRUxMICAgICA9IDEsCisgICAgUlJfVFdPX0NFTEwgICAgID0gMiwKKyAgICBSUl9USFJFRV9DRUxMICAgPSAzLAorICAgIFJSX0ZPVVJfQ0VMTCAgICA9IDQsCisgICAgUlJfRklWRV9DRUxMICAgID0gNSwKKyAgICBSUl9TSVhfQ0VMTCAgICAgPSA2LAorICAgIFJSX1NFVkVOX0NFTEwgICA9IDcsCisgICAgUlJfRUlHSFRfQ0VMTCAgID0gOAorfSBycl9jZWxsX251bV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSUl9OT19QQUdFX1BFTkRJTkcsCisgICAgUlJfQ1NfSU1TSV9QQUdFX1BFTkRJTkcsCisgICAgUlJfQ1NfVE1TSV9QQUdFX1BFTkRJTkcsCisgICAgUlJfUFNfSU1TSV9QQUdFX1BFTkRJTkcsCisgICAgUlJfUFNfUFRNU0lfUEFHRV9QRU5ESU5HCit9IHBhZ2VfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSUjEgPSAwLAorICAgIFJSMiA9IDEsCisgICAgUlIzID0gMiwKKyAgICBSUjQgPSAzLAorICAgIE1BWF9SUiA9IDQKK30gcnJfY3VycmVudF9jbnR4X3B0cl9lbnVtOworCisjaWZkZWYgX19HRU1JTklfXworLyogVGhlIGN1cnJlbnQgc2VtYXBob3JlIGlzIG93bmVkIGJ5IHdoaWNoIG1vZHVsZSAqLwordHlwZWRlZiBlbnVtCit7CisgICAgUlJfT1dORVJfTk9ORSwKKyAgICBSUl9PV05FUl9PRl9DTlRYXzEsCisgICAgUlJfT1dORVJfT0ZfQ05UWF8yCit9IHJyX3NlbWFwaG9yZV9vd25lcl9lbnVtOworCisvKiBJcyBjdXJyZW50IFBTIHNlc3Npb24gb25nb2luZyAqLwordHlwZWRlZiBlbnVtCit7CisgICAgUlJfUFNfU0VTU0lPTl9OT05FLAorICAgIFJSX1BTX1NFU1NJT05fT05HT0lORworfSBycl9wc19zZXNzaW9uX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFJSX05PTkVfU0VSVklDRSwKKyAgICBSUl9DU19TRVJWSUNFLAorICAgIFJSX1RSQU5TRkVSX0ZST01fQ1NfVE9fUFNfU0VSVklDRSwKKyAgICBSUl9QU19TRVJWSUNFLAorICAgIFJSX1RSQU5TRkVSX0ZST01fUFNfVE9fQ1NfU0VSVklDRSwKK30gcnJfY3NfcHNfc2VydmljZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBHQVNfU0VNQV9SRUxFQVNFLAorICAgIEdBU19TRU1BX09DQ1VQWSwKKyAgICBHQVNfU0VNQV9PQ0NVUFlfRFVSSU5HX0FCT1JUCit9IGdhc19zZW1hX3N0YXR1c19lbnVtOworCisKK3R5cGVkZWYgZW51bQoreworICAgIFJSX0dFTUlOSV9OT1JNQUxfTU9ERSA9IDAsCisgICAgUlJfR0VNSU5JX1ZJUlRVQUxfTU9ERSA9IDEsCisgICAgUlJfR0VNSU5JX1NVU1BFTkRfTU9ERSA9IDIKKworICAgICwgUlJfR0VNSU5JX1ZJUlRVQUxfQ09OTkVDVEVEX01PREUgPSAzCisKK30gcnJfbW9uaXRvcl9wZWVyX3BhZ2luZ19tb2RlOworCisKKyNlbmRpZiAvKiBfX0dFTUlOSV9fICovIAorCit0eXBlZGVmIGVudW0KK3sKKyAgICBMSU1JVEVEX1NFUlZJQ0UsCisgICAgTk9STUFMX1NFUlZJQ0UsCisgICAgTk9fUExNTl9TRVJWSUNFCit9IHJyX3NlcnZpY2VfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSUk1fUkFUX0dTTSA9IDAsCisgICAgUlJNX1JBVF9VTVRTID0gMSwKKyAgICBSUk1fUkFUX0xURSA9IDIKK30gcnJfc3VwcG9ydF9yYXRfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUU1TR19UWVBFX1NJMlRFUiwKKyAgICBRTVNHX1RZUEVfU0kyUSwKKyAgICBRTVNHX1RZUEVfU0kyTiwKKworICAgIFFNU0dfVFlQRV9QU0kyLAorICAgIFFNU0dfVFlQRV9QU0kzQklTLAorICAgIFFNU0dfVFlQRV9QU0kzVEVSLAorICAgIFFNU0dfVFlQRV9QU0kzUSwKKyAgICBRTVNHX1RZUEVfUFNJNSwKKworICAgIFFNU0dfVFlQRV9NSSwKKyAgICBRTVNHX1RZUEVfUE1PLAorCisgICAgUU1TR19UWVBFX1BOQ0RfRk9SX1NJLAorICAgIFFNU0dfVFlQRV9QTkNEX0ZPUl9QU0kKK30KK3F1ZXVlX21zZ190eXBlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFFNU0dfTk9UX1JFUVVJUkVEX0FCTk9SQU1MICA9IDAsCisgICAgUU1TR19OT1RfUkVRVUlSRURfQ09NUExFVEUgID0gMSwKKyAgICBRTVNHX1JFUVVJUkVEX0ZPUl9ERUNPREUgPSAyCit9IFFVRVVFX1NUQVRVU19FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBGT1JDRV9TTEVFUF9JUl9OVUxMICAgICAgICAgICAgICAgICAgICAgPSAwLAorCisgICAgRk9SQ0VfU0xFRVBfWEcySVJfU0VORF9BQ1RJVkFURV9DTkYgICAgID0gMHgwMSwKKyAgICBGT1JDRV9TTEVFUF9YRzJJUl9TRU5EX0NIQU5HRV9DT01QTEVURSwKKyAgICBGT1JDRV9TTEVFUF9YRzJJUl9SRVZFUlRfUkFUX1RPX0lOQUNUSVZFLAorCisgICAgRk9SQ0VfU0xFRVBfMkdYSVJfU0VUX1JBVF9UT19JTkFDVElWRSA9IDB4MTAsCisgICAgRk9SQ0VfU0xFRVBfMkdYSVJfUEVORElOR19BQ1RJVkFURV9DTkYsCisgICAgRk9SQ0VfU0xFRVBfMkdYSVJfRkFJTF9CU0lDX1NZTkMsCisgICAgRk9SQ0VfU0xFRVBfMkdYSVJfUEVORElOR19DSEFOR0VfQ09NUExFVEUsCisgICAgRk9SQ0VfU0xFRVBfMkdYSVJfUEVORF9JUl9NRUFTX1JFUSwKKworICAgIEZPUkNFX1NMRUVQX0NHSV9TQ0FOID0gMHgyMCwKKyAgICBGT1JDRV9TTEVFUF9DR0lfQlNJQywKKyAgICBGT1JDRV9TTEVFUF9DR0lfU0ksCisgICAgRk9SQ0VfU0xFRVBfQ0dJX0NPTVBMRVRFLAorfSBycl9mb3JjZV9zbGVlcF9kdXJpbmdfMmdpcl9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSUl9SVElfU1RBVFVTX0lOVkFMSUQsICAvKiBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBUQkYtRVNUIHByb2NlZHVyZSAqLworICAgIFJSX1JUSV9TVEFUVVNfTk9fTUFUQ0gsCisgICAgUlJfUlRJX1NUQVRVU19GSVJTVF9CTE9DSywKKyAgICBSUl9SVElfU1RBVFVTX01BVENICit9IHJyX3J0aV9zdGF0dXNfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUlJfTk9fRVJST1JfTVNHX1JFVFVSTiwKKyAgICBSUl9JTkNPTVBBVElCTEVfU1RBVEVfTVNHX1JFVFVSTiwKKyAgICBSUl9VTktOT1dOX01TR19SRVRVUk4sCisgICAgUlJfRElTVF9QQVJUX0VSUl9SRVRVUk4sCisgICAgUlJfQUREUkVTU19QQVJUX0VSUl9SRVRVUk4sCisgICAgUlJfTk9OX0RJU1RfUEFSVF9FUlJPUl9SRVRVUk4sCisgICAgUlJfTVNHX0VTQ19FUlJPUl9SRVRVUk4sCisgICAgUlJfSUdOT1JFX0xBQkVMX0VSUl9SRVRVUk4sCisgICAgUlJfVFJVTkNBVEVEX0NPTkNBQ1RfRVJSX1JFVFVSTiwKKyAgICBSUl9QU0lfSU5DT05TSVNURU5DRV9SRVRVUk4sCisgICAgUlJfSU5TVEFOQ0VfTk9UX0NPTVBMRVRFCit9IHJyX21zZ19yZXRfcmVzdWx0X2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFJSX0RMX0JMS19JTlZBTElELAorICAgIFJSX0RMX0JMS19JTlZBTElEX1BBWUxPQURfVFlQRSwKKyAgICBSUl9ETF9CTEtfSU5WQUxJRF9SQlNOX0ZTLAorICAgIFJSX0RMX0JMS19EQVRBX0JMSywKKyAgICBSUl9ETF9CTEtfQ1RSTF9NU0dfVU5TR0VNRU5URUQsIC8qIHVuc2VnZW1lbnRlZCBjb250cm9sIG1lc3NhZ2UgKi8KKyAgICBSUl9ETF9CTEtfQ1RSTF9NU0dfU0VHTUVOVEVELCAgIC8qIHNlZ21lbnRlZCBjb250cm9sIG1lc3NhZ2UsIGlmIHJldHVybmVkIHBvaW50ZXIgb2YgcnJfY29tbW9uX21wYWxfZGF0YV9pbmRfaGxkcigpIGlzIG5vdCBOVUxMLCB0aGVuIGNvbnRyb2wgbWVzc2FnZSBpcyBjb25jYXRlbmF0ZWQgKi8KKyAgICBSUl9ETF9CTEtfQ1RSTF9CTEtfTk9UX0ZPUl9VUywKKyAgICBSUl9ETF9CTEtfQ1RSTF9CTEtfTk9OX0NTMSAgICAgIC8qIEV4Y2UgMjAwNDAyMTA6IFRvIGRpc3Rpbmd1aXNoIFJMQy9NQUMgY29udHJvbCBibG9ja3Mgd2l0aCBub24tQ1MxIGNvZGluZyBzY2hlbWUuICovCit9IHJyX2RsX2Jsa190eXBlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFJSX0VNX1RCRl9JRExFLAorICAgIFJSX0VNX1RCRl9QS1RfQUNDRVNTLAorICAgIFJSX0VNX1RCRl9PTkdPSU5HLAorICAgIFJSX0VNX1RCRl9VTF9SRUxFQVNJTkcsCisgICAgUlJfRU1fVEJGX0RMX1JFTEVBU0lOR19UMzE5MiwKKyAgICBSUl9FTV9UQkZfRExfUkVMRUFTSU5HX1BLVF9UQkZfUkVMCit9IHJyX2VtX3RiZl9zdGF0dXNfZW51bTsKKworLy8gVE9ETzogUmVmaW5lIHRoZXNlIHN0YXR1cyBtYXkgYmUgbmVjZXNzYXJ5Li4uCit0eXBlZGVmIGVudW0KK3sKKyAgICBSUl9FTV9UQkZfVUxfSU5BQ1RJVkUsCisgICAgUlJfRU1fVEJGX1VMX0FDQ0VTUywKKyAgICBSUl9FTV9UQkZfVUxfQUNUSVZFLAorICAgIFJSX0VNX1RCRl9VTF9JTlZBTElECit9IHJyX2VtX3RiZl9zdGF0dXNfdWxfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUlJfRU1fVEJGX0RMX0lOQUNUSVZFLAorICAgIFJSX0VNX1RCRl9ETF9BQ1RJVkUsCisgICAgUlJfRU1fVEJGX0RMX1JFTF9QRU5ELAorICAgIFJSX0VNX1RCRl9ETF9JTlZBTElECit9IHJyX2VtX3RiZl9zdGF0dXNfZGxfZW51bTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKiAzRyAmIDRHIFBhcnQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBlbnVtCit7CisgICAgQkFSUkVEX0NFTExfT0JKLAorICAgIEJBUlJFRF9HUk9VUF9DRUxMX09CSiwKKyAgICBCQVJSRURfRlJFUV9PQkoKK30gYmFycmVkX29ial9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBCQVJSRURfQ0FVU0VfUkVNT1ZFRCwKKyAgICBCQVJSRURfQ0FVU0VfQURERUQKK30gaXJfYmFyX2NhdXNlX2FjdGlvbl9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBJUl9SRVNFTF9NT0RFX1JBTktJTkcgPSAwCisKKyNpZiBkZWZpbmVkKF9fTFRFX1JBVF9fKSB8fCBkZWZpbmVkKF9fMjNHX1BSSV9SRVNFTF9TVVBQT1JUX18pCisgICAgLCBJUl9SRVNFTF9NT0RFX1BSSU9SSVRZCisjZW5kaWYgLyogZGVmaW5lZChfX0xURV9SQVRfXykgfHwgZGVmaW5lZChfXzIzR19QUklfUkVTRUxfU1VQUE9SVF9fKSAqLworCit9IGlyX3Jlc2VsX21vZGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgSVJfUkVTRUxfTk9fQ1JJVEVSSUFfSElUID0gMHgwMCwKKyAgICBJUl9SRVNFTF9SQU5LSU5HX0NSSVRFUklBX0hJVCA9IDB4MDEKKyAgIAorICAgCisjaWYgZGVmaW5lZChfX0xURV9SQVRfXykgfHwgZGVmaW5lZChfXzIzR19QUklfUkVTRUxfU1VQUE9SVF9fKQorICAgICwgSVJfUkVTRUxfSElHSF9QUklPUklUWV9ISVQgPSAweDEwLAorICAgICAgSVJfUkVTRUxfTE9XX1BSSU9SSVRZX0hJVCAgPSAweDIwLAorICAgICAgSVJfUkVTRUxfQU5ZX1BSSU9SSVRZX0hJVCAgPSAweDQwCisjZW5kaWYgLyogZGVmaW5lZChfX0xURV9SQVRfXykgfHwgZGVmaW5lZChfXzIzR19QUklfUkVTRUxfU1VQUE9SVF9fKSAqLworfSBpcl9yZXNlbF9jcml0ZXJpYV9oaXRfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgIElSX1JFU0VMX0NSSVRFUklBX0NIRUNLX05PVF9BTExPV19SQVRfTU9ERV9JTlZBTElELAorICAgICBJUl9SRVNFTF9DUklURVJJQV9DSEVDS19OT1RfQUxMT1dfTUVBU19TVE9QUEVELAorICAgICBJUl9SRVNFTF9DUklURVJJQV9DSEVDS19OT1RfQUxMT1dfUlJNX1NUQVRFX0lOVkFMSUQsCisgICAgIElSX1JFU0VMX0NSSVRFUklBX0NIRUNLX05PVF9BTExPV19NU19JTl9WSVJUVUFMX01PREUsCisgICAgIElSX1JFU0VMX0NSSVRFUklBX0NIRUNLX05PVF9BTExPV19NU19JTl9OQzJfTU9ERSwKKyAgICAgSVJfUkVTRUxfQ1JJVEVSSUFfQ0hFQ0tfTk9UX0FMTE9XX1NZU19JTkZPX05PVF9TRU5ULAorICAgICBJUl9SRVNFTF9DUklURVJJQV9DSEVDS19OT1RfQUxMT1dfU0VSVl9STEFfSU5WQUxJRCwKKyAgICAgSVJfUkVTRUxfQ1JJVEVSSUFfQ0hFQ0tfTk9UX0FMTE9XX1JFU0VMX1BBUkFfSU5WQUxJRCwKKyAgICAgSVJfUkVTRUxfQ1JJVEVSSUFfQ0hFQ0tfTk9UX0FMTE9XX1JBVF9DQVBfRElTRUFCTEVELAorICAgICBJUl9SRVNFTF9DUklURVJJQV9DSEVDS19BTExPVworfSBJUl9SRVNFTF9DUklURVJJQV9DSEVDS19BTExPV19TVEFUVVNfRU5VTTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgSVJfUkVTRUxfV0lUSF9CQUNLVVBfUkVTVUxUX05PVF9BTExPVywKKyAgICBJUl9SRVNFTF9XSVRIX0JBQ0tVUF9SRVNVTFRfU1VTUEVORCwKKyAgICBJUl9SRVNFTF9XSVRIX0JBQ0tVUF9SRVNVTFRfQUxMT1cKK30gSVJfUkVTRUxfV0lUSF9CQUNLVVBfUkVTVUxUX1NUQVRVU19FTlVNOworCit0eXBlZGVmIGVudW17CisgICAgSVJfUVNFQVJDSF9DUklURVJJQV9DSEVDS19QVVJQT1NFX01FQVMsCisgICAgSVJfUVNFQVJDSF9DUklURVJJQV9DSEVDS19QVVJQT1NFX1JFUE9SVCAgICAKK30gaXJfcXNlYXJjaF9jcml0ZXJpYV9jaGVja19wdXJwb3NlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIE5PX0lORElWX1BSSU8gPSAwLAorICAgIE5FV19JTkRJVl9QUklPLAorICAgIERFTF9JTkRJVl9QUklPCit9IGluZGl2X3ByaW9fYWN0aW9uX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIElORElWX1BSSU9fU1JDX0NITF9SRUwsCisgICAgSU5ESVZfUFJJT19TUkNfUE1PLAorICAgIElORElWX1BSSU9fU1JDX1BDQ08KK30gaW5kaXZfcHJpb19zcmNfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgU0VSVl9QUklPX1NSQ19JTlZBTElELAorICAgIFNFUlZfUFJJT19TUkNfU0ksCisgICAgU0VSVl9QUklPX1NSQ19QTU8KK30gc2VydmluZ19wcmlvX3NyY19lbnVtOyAgCisKK3R5cGVkZWYgZW51bXsKKyAgICBOT19SUExNTiwKKyAgICBOT19JTkRJVklfUFJJT19TVE9SRV9JTl9TQ1NJLAorICAgIElORElWSV9QUklPX05PVF9CRUxPTkdfVE9fRVFfUExNTl9MSVNULAorICAgIE1TX0lOX0FOWV9DRUxMX1NUQVRFLAorICAgIElOVkFMSURfSU5ESVZJX1BSSU9fU0VULAorICAgIE1TX05PVF9DQU1QX09OX0NFTEwsCisgICAgUENDT19OT1RfU1VDQ0VTUywKKyAgICBJTkRJVklfUFJJT19VUERBVEVEX0JZX05SX1JBVAorfWFwcGx5X2luZGl2aV9wcmlvX2ZhaWxsX2NhdXNlX2VudW07CisKK3R5cGVkZWYgZW51bXsKKyAgICBERVBSSU9fTk9fUlBMTU4sCisgICAgREVQUklPX05PX0lORk9fSU5fU0NTSSwKKyAgICBERVBSSU9fTVNfSU5fQU5ZX0NFTExfU1RBVEUKK31hcHBseV9kZXByaW9faW5mb19mYWlsbF9jYXVzZV9lbnVtOworCit0eXBlZGVmIGVudW17CisgICAgUFJJT19DT01NT04gPSAwLAorICAgIFBSSU9fQ09NTU9OX0RFRkFVTFQgPSAxLAorICAgIFBSSU9fSU5ESVZJICA9IDIsCisgICAgUFJJT19JTkRJVklfREVGQVVMVCA9IDMgICAKK31wcmlvX2luZm9fc291cmNlX2VudW07CisKK3R5cGVkZWYgZW51bXsKKyAgICBDT01NT05fUFJJT19DSEVDSywKKyAgICBJTkRJVklfUFJJT19DSEVDSworfSBwcmlvX2luZm9fY2hlY2tfc3JjX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIENIRUNLX1NFQVJDSF9DU0dfQ0VMTF9SRVFfQUxMT1dFRCA9IDAsCisgICAgQ0hFQ0tfU1RBUlRfVF9SRVNFTF9USU1FUl9BTExPV0VELAorICAgIENIRUNLX0VWQUxVQVRFX0NTR19DRUxMX1JFUV9BTExPV0VELAorICAgIENIRUNLX0FDVElWQVRFX0NTR19DRUxMX0FMTE9XRUQgIAorfSBDSEVDS19QVVJQT1NFOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSRVBPUlRfQ0dJX05VTExfU1RBVEUsCisgICAgUkVQT1JUX0NHSV9QT1dFUl9TQ0FOX1NUQVRFLAorICAgIFJFUE9SVF9DR0lfQlNJQ19SRUFEX1NUQVRFLAorICAgIFJFUE9SVF9DR0lfU0lfSU5GT19SRUFEX1NUQVRFCit9IHJlcG9ydF9jZ2lfc3RhdGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUkVQT1JUX0NHSV9JTkZPX1NUQVRVU19OT19FUlJPUiwKKyAgICBSRVBPUlRfQ0dJX0lORk9fU1RBVFVTX1BPV0VSX1NDQU5fRVJST1IsCisgICAgUkVQT1JUX0NHSV9JTkZPX1NUQVRVU19CU0lDX0VSUk9SLAorICAgIFJFUE9SVF9DR0lfSU5GT19TVEFUVVNfU0lfSU5GT19FUlJPUgorfSByZXBvcnRfY2dpX2Vycm9yX3N0YXR1c19lbnVtOworCisvKioqKioqKioqKioqKioqKioqKioqKioqIDNHIE9ubHkgUGFydCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVtCit7CisgICAgVU1UU19DQVJSSUVSID0gMCwKKyAgICBVTVRTX0NFTEwgPSAxCit9IHVtdHNfY2Fycmllcl9vcl9jZWxsX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIEZST01fTlcgPSAwLAorICAgIEZST01fTVMgPSAxCisjaWZkZWYgX19DTUNDX1NURF9GUl9fCisJICAsCisJICBGUk9NX0ZSID0gMgorI2VuZGlmCit9IHVtdHNfZnJvbV9ud19vcl9tc19lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBVTVRTX0NFTExfTElTVF9JTlZBTElELAorICAgIFVNVFNfQ0VMTF9MSVNUX0ZST01fU0kyVCwKKyAgICBVTVRTX0NFTExfTElTVF9GUk9NX1NJMlEsCisgICAgVU1UU19DRUxMX0xJU1RfRlJPTV9QU0kzUSwKKyAgICBVTVRTX0NFTExfTElTVF9GUk9NX1BNTywKKyAgICBVTVRTX0NFTExfTElTVF9GUk9NX01JLAorI2lmIChkZWZpbmVkKF9fVU1UU19SQVRfXykgJiYgZGVmaW5lZChfX0ZERF9SRURJUkVDVElPTl9fKSkgfHwgZGVmaW5lZChfX1VNVFNfUjZfXykKKyAgICAvKiBaWSA6IFI2IHJlZGlyZWN0aW9uICovCisgICAgVU1UU19DRUxMX0xJU1RfRlJPTV9DSF9SRUwsCisjZW5kaWYgLyogKGRlZmluZWQoX19VTVRTX1JBVF9fKSAmJiBkZWZpbmVkKF9fRkREX1JFRElSRUNUSU9OX18pKSB8fCBkZWZpbmVkKF9fVU1UU19SNl9fKSAqLworICAgIFVNVFNfQ0VMTF9MSVNUX0ZST01fUENDTworfSB1bXRzX2NlbGxfbGlzdF9zcmNfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVU1UU19DQVJSSUVSX0xJU1RfU1JDX1NJMlRFUiwKKyAgICBVTVRTX0NBUlJJRVJfTElTVF9TUkNfU0kyUQorfSBVTVRTX0NBUlJJRVJfTElTVF9TUkM7CisKK3R5cGVkZWYgZW51bSB7CisgICAgVU1UU19SRVBfUVVBTl9SU0NQLAorICAgIFVNVFNfUkVQX1FVQU5fRUNOMCwKKyAgICBVTVRTX1JFUF9RVUFOX1JTU0kKK30gdW10c19yZXBfcXVhbjsKKwordHlwZWRlZiBlbnVteworICAgIFVDRUxMX1NPUlRfUFVSUE9TRV9SRVNFTCwKKyAgICBVQ0VMTF9TT1JUX1BVUlBPU0VfTUVBU19SRVAsCisgICAgVUNFTExfU09SVF9QVVJQT1NFX1BDQ05fUkVQCit9IHVjZWxsX3NvcnRfcHVycG9zZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBRU0VBUkNIX0lfVFlQRSwKKyAgICBRU0VBUkNIX1BfVFlQRSwKKyAgICBRU0VBUkNIX0NfVFlQRSwKKyAgICBRU0VBUkNIX0NfSU5JVF9UWVBFCit9IHVtdHNfcXNlYXJjaF92YWx1ZV90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bXsKKyAgICBVTVRTX1RPUF9QT1dFUkZVTF9DRUxMID0gMCwKKyAgICBVTVRTX0xPV19QUklPUklUWV9DRUxMID0gMSwKKyAgICBVTVRTX1JFU0VMX0NBTkRJREFURSAgID0gMiwKKyAgICBVTVRTX1JFU0VMX1RBUkdFVCAgICAgID0gMywKKyAgICBVTVRTX0NSM19CQVJSRURfQ0VMTCAgID0gNCwKKyAgICBVTVRTX0NSM19VTkJBUlJFRF9DRUxMID0gNSwKKyAgICBVTVRTX0JBUlJFRF9DRUxMX1RJTUUgID0gNiwKKyAgICBVTVRTX1VOQkFSUkVEX0NFTEwgICAgID0gNywKKyAgICBVTVRTX1RFTVBfRkFJTFVSRV9DRUxMX1RJTUUgID0gOCwKKyAgICBVTVRTX1VOX1RFTVBfRkFJTFVSRV9DRUxMICA9IDkgICAKK311bXRzX3RyYWNlX3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtIAoreworICAgIFNJMlFfVU1UU19JTkZPX0VYSVNUX1NUQVRVU19VTktOT1dOID0gMCwKKyAgICBTSTJRX1VNVFNfSU5GT19OT1RfQlJPQURDQVNULAorICAgIFNJMlFfVU1UU19JTkZPX05PVF9BVkFJTF9RX05PVF9FWElTVCwKKyAgICBTSTJRX1VNVFNfSU5GT19OT1RfQVZBSUxfUV9OT1RfRlVMTF9GQUNRX05PVF9ET05FLAorICAgIFNJMlFfVU1UU19JTkZPX1BBUlRJQUxfQVZBSUxfUV9OT1RfRlVMTF9GQUNRX05PVF9ET05FLAorICAgIFNJMlFfVU1UU19JTkZPX0FWQUlMX1FfTk9UX0VYSVNULAorICAgIFNJMlFfVU1UU19JTkZPX0FWQUlMX1FfTk9UX0ZVTExfRkFDUV9OT1RfRE9ORSwKKyAgICBTSTJRX1VNVFNfSU5GT19BVkFJTF9RX05PVF9GVUxMX0ZBQ1FfRE9ORSwKKyAgICBTSTJRX1VNVFNfSU5GT19BVkFJTF9RX0ZVTExfRkFDUV9ET05FLAorICAgIFNJMlFfVU1UU19JTkZPX0FWQUlMX1FfRlVMTF9GQUNRX05PVF9ET05FCit9IFNJMlFfVU1UU19JTkZPX1JDVkRfU1RBVFVTOworCit0eXBlZGVmIGVudW0gCit7CisgICAgU0kyVF9VTVRTX0lORk9fRVhJU1RfU1RBVFVTX1VOS05PV04gPSAwLAorICAgIFNJMlRfVU1UU19JTkZPX05PVF9CUk9BRENBU1QsCisgICAgU0kyVF9VTVRTX0lORk9fTk9UX0FWQUlMX1FfTk9UX0VYSVNULAorICAgIFNJMlRfVU1UU19JTkZPX05PVF9BVkFJTF9RX05PVF9GVUxMLAorICAgIFNJMlRfVU1UU19JTkZPX1BBUlRJQUxfQVZBSUxfUV9OT1RfRlVMTCwKKyAgICBTSTJUX1VNVFNfSU5GT19BVkFJTF9RX05PVF9FWElTVCwKKyAgICBTSTJUX1VNVFNfSU5GT19BVkFJTF9RX05PVF9GVUxMLAorICAgIFNJMlRfVU1UU19JTkZPX0FWQUlMX1FfRlVMTAorfSBTSTJUX1VNVFNfSU5GT19SQ1ZEX1NUQVRVUzsKKwordHlwZWRlZiBlbnVtIAoreworICAgIE1JX1VNVFNfSU5GT19OT1RfQVZBSUxfUV9OT1RfRVhJU1QgPSAwLAorICAgIE1JX1VNVFNfSU5GT19OT1RfQVZBSUxfUV9OT1RfRlVMTF9GQUNRX05PVF9ET05FLAorICAgIE1JX1VNVFNfSU5GT19BVkFJTF9RX05PVF9FWElTVCwKKyAgICBNSV9VTVRTX0lORk9fQVZBSUxfUV9OT1RfRlVMTF9GQUNRX05PVF9ET05FLAorICAgIE1JX1VNVFNfSU5GT19BVkFJTF9RX05PVF9GVUxMX0ZBQ1FfRE9ORSwKKyAgICBNSV9VTVRTX0lORk9fQVZBSUxfUV9GVUxMX0ZBQ1FfRE9ORSwKKyAgICBNSV9VTVRTX0lORk9fQVZBSUxfUV9GVUxMX0ZBQ1FfTk9UX0RPTkUKK30gTUlfVU1UU19JTkZPX1JDVkRfU1RBVFVTOworCit0eXBlZGVmIGVudW0gCit7CisgICAgUFNJX1VNVFNfSU5GT19FWElTVF9TVEFUVVNfVU5LTk9XTiA9IDAsCisgICAgUFNJX1VNVFNfSU5GT19CUk9BRENBU1QsCisgICAgUFNJX1VNVFNfSU5GT19FWElTVAorfSBQU0lfVU1UU19JTkZPX1JDVkRfU1RBVFVTOworCit0eXBlZGVmIGVudW0gCit7CisgICAgVU1UU19SQU5LSU5HX1JFU0VMX1BBUkFfTk9fUkNWRCA9IDB4MDAsCisgICAgVU1UU19SQU5LSU5HX1JFU0VMX1BBUkFfUVNFQVJDSF9JX1JDVkQgPSAweDAxCisjaWZkZWYgX19VTVRTX0ZERF9NT0RFX18gICAKKyAgICAsIFVNVFNfUkFOS0lOR19SRVNFTF9QQVJBX0ZERF9RX09GRlNFVF9SQ1ZEID0gMHgwMgorICAgICwgVU1UU19SQU5LSU5HX1JFU0VMX1BBUkFfRkREX1FfTUlOX1JDVkQgPSAweDA0CisjaWZkZWYgX19HRVJBTl9SNV9fICAgIAorICAgICwgVU1UU19SQU5LSU5HX1JFU0VMX1BBUkFfRkREX1FfTUlOX09GRlNFVF9SQ1ZEID0gMHgwOAorICAgICwgVU1UU19SQU5LSU5HX1JFU0VMX1BBUkFfRkREX1JTQ1BfTUlOX1JDVkQgPSAweDEwCisgICAgLCBVTVRTX1JBTktJTkdfUkVTRUxfUEFSQV9GRERfQUxMX1JDVkRfV09fM0dfQUREX1BBUkEgPSAweDA3CisgICAgLCBVTVRTX1JBTktJTkdfUkVTRUxfUEFSQV9GRERfQUxMX1JDVkQgPSAweDFGCisjZWxzZSAvKiBfX0dFUkFOX1I1X18gKi8KKyAgICAsIFVNVFNfUkFOS0lOR19SRVNFTF9QQVJBX0ZERF9BTExfUkNWRCA9IDB4MDcgICAgCisjZW5kaWYgLyogX19HRVJBTl9SNV9fICovCisjZW5kaWYgLyogX19VTVRTX0ZERF9NT0RFX18gKi8KKyNpZmRlZiBfX1VNVFNfVEREMTI4X01PREVfXworICAgICwgVU1UU19SQU5LSU5HX1JFU0VMX1BBUkFfVEREX1FfT0ZGU0VUX1JDVkQgPSAweDIyCisgICAgLCBVTVRTX1JBTktJTkdfUkVTRUxfUEFSQV9URERfQUxMX1JDVkQgPSAweDIzCisjZW5kaWYgLyogX19VTVRTX1RERDEyOF9NT0RFX18gKi8KKworfSBVTVRTX1JBTktJTkdfUkVTRUxfUEFSQV9SQ1ZEX1NUQVRVUzsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVU1UU19NRUFTX0xJU1RfTk9fUkNWRCA9IDAsCisgICAgVU1UU19NRUFTX0xJU1RfUEFSSUFMX1JDVkQsCisgICAgVU1UU19NRUFTX0xJU1RfQUxMX1JDVkQKK30gVU1UU19NRUFTX0xJU1RfUkNWRF9TVEFUVVM7CisKK3R5cGVkZWYgZW51bQoreworICAgIFdDRE1BX1BSRUZFUl9BTExPVyAgPSAwLAorICAgIFdDRE1BX1BSRUZFUl9OT1RfQUxMT1cgID0gMSwKKyAgICBXQ0RNQV9QUkVGRVJfTk9UX0FMTE9XX0ZPUl9OV19DT05UUk9MID0gMgorfSBXQ0RNQV9QUkVGRVJfU1RBVFVTX0VOVU07CisKK3R5cGVkZWYgZW51bSB7CisgICAgVU1UU19zb3J0X21ldGhvZF9zX25vbl9zZXJ2aW5nLAorICAgIFVNVFNfc29ydF9tZXRob2RfcHJpb3JpdHlfbl9zX25vbl9zZXJ2aW5nCit9IHVtdHNfcHJpb19yZXNlbF9zb3J0X21ldGhvZF9lbnVtOworCisvKioqKioqKioqKioqKioqKioqKioqKioqIDRHIE9ubHkgUGFydCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBlbnVteworICAgIExBSV9VTktOT1dOX0FTX01NX0xBSSwKKyAgICBMQUlfU0FNRV9BU19NTV9MQUksCisgICAgTEFJX0RJRkZfQVNfTU1fTEFJICAgIAorfSBsdGVfbGFpX3N0YXR1c19pbl9jc2ZiX2dlcmFuX3NpOworCit0eXBlZGVmIGVudW0geworICAgIExURV9SRVBfUVVBTl9SU1JQLAorICAgIExURV9SRVBfUVVBTl9SU1JRLAorfSBsdGVfcmVwX3F1YW5fZW51bTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBMVEVfQ1NfM0JJVF9USFJFU0hPTEQsCisgICAgTFRFX0NTXzZCSVRfVEhSRVNIT0xELAorICAgIExURV9QU182QklUX1RIUkVTSE9MRAorfSBsdGVfcmVwX3RocmVzX3NyY19lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBMVEVfU1VJVEFCSUxJVFlfQ0hFQ0tfSU5WQUxJRCA9IDAsIAorICAgIExURV9SU1JRX1NVSVRBQklMSVRZX0NIRUNLLAorICAgIExURV9SU1JQX1NVSVRBQklMSVRZX0NIRUNLCit9IGx0ZV9zdWl0YWJpbGl0eV9jaGVja19lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBMVEVfUEFSQV9JTlZBTElEID0gMCwKKyAgICBMVEVfUEFSQV9GUk9NX1NJMlEgPSAxLAorICAgIExURV9QQVJBX0ZST01fTUkgPSAyLAorICAgIExURV9QQVJBX0ZST01fUE1PID0gMworfSBsdGVfcGFyYV9zcmNfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgTFRFX01FQVNfTElTVF9OT19SQ1ZEID0gMCwKKyAgICBMVEVfTUVBU19MSVNUX1BBUklBTF9SQ1ZELAorICAgIExURV9NRUFTX0xJU1RfQUxMX1JDVkQKK30gTFRFX01FQVNfTElTVF9SQ1ZEX1NUQVRVUzsKKwordHlwZWRlZiBlbnVtIAoreworICAgIFNJMlFfTFRFX0lORk9fRVhJU1RfU1RBVFVTX1VOS05PV04gPSAwLAorICAgIFNJMlFfTFRFX0lORk9fTk9UX0JST0FEQ0FTVCwKKyAgICBTSTJRX0xURV9JTkZPX05PVF9BVkFJTF9RX05PVF9FWElTVCwKKyAgICBTSTJRX0xURV9JTkZPX05PVF9BVkFJTF9RX05PVF9GVUxMX0ZBQ1FfTk9UX0RPTkUsCisgICAgU0kyUV9MVEVfSU5GT19QQVJUSUFMX0FWQUlMX1FfTk9UX0ZVTExfRkFDUV9OT1RfRE9ORSwKKyAgICBTSTJRX0xURV9JTkZPX0FWQUlMX1FfTk9UX0VYSVNULAorICAgIFNJMlFfTFRFX0lORk9fQVZBSUxfUV9OT1RfRlVMTF9GQUNRX05PVF9ET05FLAorICAgIFNJMlFfTFRFX0lORk9fQVZBSUxfUV9OT1RfRlVMTF9GQUNRX0RPTkUsCisgICAgU0kyUV9MVEVfSU5GT19BVkFJTF9RX0ZVTExfRkFDUV9ET05FLAorICAgIFNJMlFfTFRFX0lORk9fQVZBSUxfUV9GVUxMX0ZBQ1FfTk9UX0RPTkUKK30gU0kyUV9MVEVfSU5GT19SQ1ZEX1NUQVRVUzsKKwordHlwZWRlZiBlbnVteworICAgIExURV9UT1BfUE9XRVJGVUxfQ0VMTCA9IDAsCisgICAgTFRFX0xPV19QUklPUklUWV9DRUxMID0gMSwKKyAgICBMVEVfUkVTRUxfQ0FORElEQVRFICAgPSAyLAorICAgIExURV9SRVNFTF9UQVJHRVQgICAgICA9IDMsCisgICAgTFRFX0NSM19CQVJSRURfQ0VMTCAgID0gNCwKKyAgICBMVEVfQ1IzX1VOQkFSUkVEX0NFTEwgPSA1LAorICAgIExURV9CQVJSRURfQ0VMTF9USU1FICA9IDYsCisgICAgTFRFX1VOQkFSUkVEX0NFTEwgICAgID0gNywKKyAgICBMVEVfVEVNUF9GQUlMVVJFX0NFTExfVElNRSAgPSA4LAorICAgIExURV9VTl9URU1QX0ZBSUxVUkVfQ0VMTCAgPSA5ICAgCit9IGx0ZV90cmFjZV90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIExURV9RU0VBUkNIX1RZUEVfSU5WQUxJRCwKKyAgICBMVEVfUVNFQVJDSF9DX0lOSVRfVFlQRSwgICAgICAgIAorICAgIExURV9RU0VBUkNIX0NfVFlQRSwKKyAgICBMVEVfUVNFQVJDSF9QX1RZUEUKK30gbHRlX3FzZWFyY2hfdmFsdWVfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW17CisgICAgRVVUUkFOX0NBUF9VUERBVEVfSEFORExFX05PVF9BTExPVywKKyAgICBFVVRSQU5fQ0FQX1VQREFURV9IQU5ETEVfQUxMT1csCisgICAgRVVUUkFOX0NBUF9VUERBVEVfSEFORExFX1NVU1BFTkQKK30gZXV0cmFuX2NhcF91cGRhdGVfaGFuZGxlX2VudW07CisKK3R5cGVkZWYgZW51bXsKKyAgICBDQVBfVVBEQVRFX0hBTkRMRV9OT1RfQUxMT1csCisgICAgQ0FQX1VQREFURV9IQU5ETEVfQUxMT1csCisgICAgQ0FQX1VQREFURV9IQU5ETEVfU1VTUEVORAorfSBjYXBfdXBkYXRlX2hhbmRsZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBMVV9GT1JfQ1NGQl9TRVJWSUNFX05PTkUgPSAwLAorICAgIExVX0ZPUl9DU0ZCX01PX0NBTExfU0VSVklDRSA9IDEsCisgICAgTFVfRk9SX0NTRkJfTU9fU1NfU0VSVklDRSA9IDIsCisgICAgTFVfRk9SX0NTRkJfTU9fTENTX1NFUlZJQ0UgPSAzLAorICAgIExVX0ZPUl9DU0ZCX01PX1VOS05PV05fU0VSVklDRSA9IDQsCisgICAgTFVfRk9SX0NTRkJfTVRfQ0FMTF9TRVJWSUNFID0gNSwKKyAgICBMVV9GT1JfQ1NGQl9NVF9TU19TRVJWSUNFID0gNiwKKyAgICBMVV9GT1JfQ1NGQl9NVF9MQ1NfU0VSVklDRSA9IDcsCisgICAgTFVfRk9SX0NTRkJfTVRfVU5LTk9XTl9TRVJWSUNFID0gOAorfSBsdV9mb3JfY3NmYl9zZXJ2aWNlX3R5cGVfZW51bTsKKworI2lmIGRlZmluZWQoX19MVEVfUkFUX18pIHx8IGRlZmluZWQoX19OUl9SQVRfXykKKy8qVGhlIGFib3J0IHJlYXNvbiBmb3IgTFRFL05SIGJhY2tncm91bmQgc2VhcmNoKi8KK3R5cGVkZWYgZW51bQoreworICAgIEFCT1JUX0JZX0xURV9SRVNFTF9TVUNDRVNTLAorICAgIEFCT1JUX0JZX1VNVFNfUkVTRUxfU1VDQ0VTUywKKyAgICBBQk9SVF9CWV9ERUFDVElWQVRFX1JFUSwKKyAgICBBQk9SVF9CWV9QTE1OX1NFQVJDSF9SRVEsCisgICAgQUJPUlRfQllfRVVUUkFOX1VQREFURV9SRVEsCisgICAgQUJPUlRfQllfQ0VMTF9TRUwsCisgICAgQUJPUlRfQllfQ1NfQ0FMTCwKKyAgICBBQk9SVF9CWV9MVEVfTUVBUywKKyAgICBBQk9SVF9CWV9NRUFTX1RJQ0ssCisgICAgQUJPUlRfQllfR0VNSU5JLAorICAgIEFCT1JUX0JZX0FGUiwKKyAgICBBQk9SVF9CWV9OUl9SRVNFTF9TVUNDRVNTLAorICAgIEFCT1JUX0JZX05SX1VQREFURV9SRVEsCisgICAgQUJPUlRfQllfQ1JJVEVSSUFfTk9UX01FRVQKK30gbHRlX2JnX3NyY2hfYWJvcnRfcmVhc29uX2VudW0sCisgIGJnX3NyY2hfYWJvcnRfcmVhc29uX2VudW07CisjZW5kaWYgLyogZGVmaW5lZChfX0xURV9SQVRfXykgfHwgZGVmaW5lZChfX05SX1JBVF9fKSAqLworCisjaWYgZGVmaW5lZChfX0xURV9SQVRfXykgfHwgZGVmaW5lZChfX05SX1JBVF9fKQordHlwZWRlZiBlbnVtCit7CisgICAgU1RBUlRfTUVBU19JTkQsCisgICAgU1RBUlRfQ1NGQiwKKyAgICBTVEFSVF9PVEhFUlMKK31iZ19zdGFydF9lbnVtOworI2VuZGlmIC8qIGRlZmluZWQoX19MVEVfUkFUX18pIHx8IGRlZmluZWQoX19OUl9SQVRfXykgKi8KKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAvKiAwICovIAorCisjaWZkZWYgX19QU19TRVJWSUNFX18KK3R5cGVkZWYgZW51bQoreworICAgIENPTVBMRVRFLAorICAgIFBTSTFfT05MWSwKKyAgICBIUl9PTkxZLAorICAgIExSX09OTFksCisgICAgSFJfQU5EX1BTSTEsCisgICAgTFJfQU5EX1BTSTEsCisgICAgSFJfQU5EX0xSLAorICAgIFBTSTFfQjBfT05MWSwKKyAgICBOT19QU0kKK30gcHNpX21vZGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgSU5UX0FTX1JFUVVFU1QsCisgICAgSU5UX05FV19UQkYKK30gaW50X21lYXNfZnJlcV9lbnVtOworCisjZW5kaWYgLyogX19QU19TRVJWSUNFX18gKi8KKwordHlwZWRlZiBlbnVtCit7CisgICAgR1NNX0lETEVfTU9ERSwKKyAgICBDQ0NIX1BBQ0tFVF9JRExFX01PREUsCisgICAgQ1NfQUNDRVNTX1dJVEhfUEJDQ0gKK30gcnJfbW9kZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBHU01fTUVBU19NT0RFLAorICAgIEdQUlNfTUVBU19NT0RFCit9IG5icl9tZWFzX21vZGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgTVBBTF9CT1RIX0NIQU5HRSA9IDAsCisgICAgTVBBTF9CT1RIX0NIQU5HRV9QQ0NDSCwKKyAgICBNUEFMX1BPV0VSX0NMQVNTX0NIQU5HRSwKKyAgICBNUEFMX01TX1RYUFdSX0NIQU5HRSwKKyAgICBNUEFMX01TX1RYUFdSX0NIQU5HRV9QQ0NDSAorfSBjaGFuZ2VfY2F1c2VfZW51bTsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCit0eXBlZGVmIGVudW0KK3sKKyAgICBSUl9HT09EX0JMT0NLID0gMCwKKyAgICBSUl9CQURfQkxPQ0sgPSAxLAorICAgIFJSX0NPTkZMSUNUX1dJVEhfU0VMRl9DSEFOTkVMID0gMiwKKworICAgIC8qIF9fR0VNSU5JX18gKi8KKyAgICBSUl9TSEFSSU5HX1dJVEhfUEVFUl9HU01fUENIID0gMywgICAgICAgLyogY2hhbm5lbCBzaGFyaW5nIHdoZW4gY29uZmxpY3Qgd2l0aCBwZWVyLVBDSCAqLworICAgIFJSX1NIQVJJTkdfV0lUSF9QRUVSX0dTTV9CQ0NIID0gNCwgICAgICAvKiBjaGFubmVsIHNoYXJpbmcgd2hlbiBjb25mbGljdCB3aXRoIHBlZXItQkNDSCAqLworCisgICAgUlJfQ09ORkxJQ1RfV0lUSF9QRUVSX0dTTV9OQkNDSCA9IDUsICAgIC8qIGNoYW5uZWwgY29uZmxpY3Qgd2l0aCBwZWVyLU5CQ0NIICovCisgICAgUlJfQ09ORkxJQ1RfV0lUSF9QRUVSX0dTTV9QQ0ggPSA2LCAgICAgIC8qIGNoYW5uZWwgY29uZmxpY3Qgd2l0aCBwZWVyLVBDSCAqLworICAgIFJSX0NPTkZMSUNUX1dJVEhfUEVFUl9HU01fQkNDSCA9IDcsICAgICAvKiBjaGFubmVsIGNvbmZsaWN0IHdpdGggcGVlci1CQ0NIICovCisgICAgUlJfQ09ORkxJQ1RfV0lUSF9QRUVSX0dTTV9PVEhFUlMgPSA4LCAgIC8qIGNoYW5uZWwgY29uZmxpY3Qgd2l0aCBwZWVyIG1pc2MuIGNoYW5uZWxzICovCisKKyAgICAvKiBfX0NETUEyMDAwX1JBVF9fICovCisgICAgUlJfQ09ORkxJQ1RfV0lUSF9QRUVSX0NETUEyMDAwID0gOSwgICAgIC8qIGNoYW5uZWwgY29uZmxpY3Qgd2l0aCBoaWdoIHByaW9yaXR5IHBlZXItQzJLIGNoYW5uZWxzLiAqLworCisgICAgLyogX19HRU1JTklfXyArIF9fVU1UU19SQVRfXyAqLworICAgIFJSX0NPTkZMSUNUX1dJVEhfUEVFUl9VTVRTX0JDSF9ISUdIID0gMTAsICAgLyogY2hhbm5lbCBjb25mbGljdCB3aXRoIGhpZ2ggcHJpb3JpdHkgcGVlci1CQ0ggKi8KKyAgICBSUl9DT05GTElDVF9XSVRIX1BFRVJfVU1UU19QSUNIID0gMTEsICAgICAgLyogY2hhbm5lbCBjb25mbGljdCB3aXRoIHBlZXItUElDSCAqLworICAgIFJSX0NPTkZMSUNUX1dJVEhfUEVFUl9VTVRTX0JDSF9MT1cgPSAxMiwgICAvKiBjaGFubmVsIGNvbmZsaWN0IHdpdGggbG93IHByaW9yaXR5IHBlZXItQkNIICovCisgICAgUlJfQ09ORkxJQ1RfV0lUSF9QRUVSX1VNVFNfT1RIRVJTID0gMTMsICAgICAgLyogY2hhbm5lbCBjb25mbGljdCB3aXRoIHBlZXIgbWlzYy4gY2hhbm5lbHMgKi8KKworICAgIC8qIF9fR0VNSU5JX18gKyBfX0xURV9SQVRfXyAqLworICAgIFJSX0NPTkZMSUNUX1dJVEhfUEVFUl9MVEVfU1JWX0JDSCA9IDE0LCAgICAvKiBjaGFubmVsIGNvbmZsaWN0IHdpdGggcGVlci1CQ0ggKi8KKyAgICBSUl9DT05GTElDVF9XSVRIX1BFRVJfTFRFX05CQ0NIID0gMTUsIC8qIGNoYW5uZWwgY29uZmxpY3Qgd2l0aCBoaWdoIHByaW9yaXR5IHBlZXItTkJDQ0ggKi8KKyAgICBSUl9DT05GTElDVF9XSVRIX1BFRVJfTFRFX1BDSCA9IDE2LCAgICAgICAgLyogY2hhbm5lbCBjb25mbGljdCB3aXRoIHBlZXItUENIICovCisgICAgUlJfQ09ORkxJQ1RfV0lUSF9QRUVSX0xURV9PVEhFUlMgPSAxNywgICAgICAvKiBjaGFubmVsIGNvbmZsaWN0IHdpdGggcGVlciBtaXNjLiBjaGFubmVscyAqLworCisgICAgLyogX19HRU1JTklfXyArIF9fTlJfUkFUX18gKi8KKyAgICBSUl9DT05GTElDVF9XSVRIX1BFRVJfTlJfU1JWX0JDSCA9IDE4LCAgLyogY2hhbm5lbCBjb25mbGljdCB3aXRoIHBlZXIgQkNIICovCisgICAgUlJfQ09ORkxJQ1RfV0lUSF9QRUVSX05SX05CQ0NIID0gMTksICAvKiBjaGFubmVsIGNvbmZsaWN0IHdpdGggcGVlciBOQkNDSCAqLworICAgIFJSX0NPTkZMSUNUX1dJVEhfUEVFUl9OUl9QQ0ggPSAyMCwgIC8qIGNoYW5uZWwgY29uZmxpY3Qgd2l0aCBwZWVyIFBDSCAqLworICAgIFJSX0NPTkZMSUNUX1dJVEhfUEVFUl9OUl9PVEhFUlMgPSAyMSAgLyogY2hhbm5lbCBjb25mbGljdCB3aXRoIHBlZXIgbWlzYyBjaGFubmVsICovCit9IHJyX2Jsb2NrX21vbml0b3JfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgT05FX0FDQ0VTU19CVVJTVF9PRl9UWVBFXzhfQklUUywKKyAgICBPTkVfQUNDRVNTX0JVUlNUX09GX1RZUEVfMTFfQklUUywKKyAgICBGT1VSX0FDQ0VTU19CVVJTVF9PRl9UWVBFXzhfQklUUywKKyAgICBGT1VSX0FDQ0VTU19CVVJTVF9PRl9UWVBFXzExX0JJVFMsCisgICAgRFVNTVlfQlVSU1QsCisgICAgTk9STUFMX0NTXzFfUkFESU9fQkxLX0JVUlNULAorICAgIE5PUk1BTF9DU18yX1JBRElPX0JMS19CVVJTVCwKKyAgICBOT1JNQUxfQ1NfM19SQURJT19CTEtfQlVSU1QsCisgICAgTk9STUFMX0NTXzRfUkFESU9fQkxLX0JVUlNULAorI2lmZGVmIF9fRUdQUlNfTU9ERV9fCisgICAgTk9STUFMX01DU18xX1JBRElPX0JMS19CVVJTVCwKKyAgICBOT1JNQUxfTUNTXzJfUkFESU9fQkxLX0JVUlNULAorICAgIE5PUk1BTF9NQ1NfM19SQURJT19CTEtfQlVSU1QsCisgICAgTk9STUFMX01DU180X1JBRElPX0JMS19CVVJTVCwKKyAgICBOT1JNQUxfTUNTXzVfUkFESU9fQkxLX0JVUlNULAorICAgIE5PUk1BTF9NQ1NfNl9SQURJT19CTEtfQlVSU1QsCisgICAgTk9STUFMX01DU183X1JBRElPX0JMS19CVVJTVCwKKyAgICBOT1JNQUxfTUNTXzhfUkFESU9fQkxLX0JVUlNULAorICAgIE5PUk1BTF9NQ1NfOV9SQURJT19CTEtfQlVSU1QsCisjZW5kaWYgLyogX19FR1BSU19NT0RFX18gKi8gCisKKyAgICBOT1JNQUxfQlVSU1QgPSBOT1JNQUxfQ1NfMV9SQURJT19CTEtfQlVSU1QKK30gYnVyc3RfdHlwZV9lbnVtOworCisjaWZuZGVmIF9fRUdQUlNfTU9ERV9fCit0eXBlZGVmIGVudW0KK3sKKyAgICBQUkFDSF9SRVEsCisgICAgUkFDSF9SRVEKK30gcmFjaF9yZXFfdHlwZV9lbnVtOworI2Vsc2UgLyogX19FR1BSU19NT0RFX18gKi8gCit0eXBlZGVmIGVudW0KK3sKKyAgICBQUkFDSF9SRVEsCisgICAgUkFDSF9SRVEsCisgICAgRV9QUkFDSF9SRVEsCisgICAgRV9SQUNIX1JFUQorfSByYWNoX3JlcV90eXBlX2VudW07CisjZW5kaWYgLyogX19FR1BSU19NT0RFX18gKi8gCisKKyNpZmRlZiBfX0VHUFJTX01PREVfXwordHlwZWRlZiBlbnVtCit7CisgICAgTk9ORV9BVFMsCisgICAgVFMxLAorICAgIFRTMgorfSBhdHNfdHlwZV9lbnVtOworI2VuZGlmIC8qIF9fRUdQUlNfTU9ERV9fICovIAorCit0eXBlZGVmIGVudW0KK3sKKyAgICBBVENfTUFOREFUT1JZID0gMCwKKyAgICBBVENfT1BUSU9OQUwKK30gaGFuZG92ZXJfYXRjX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIE5PX0VSUk9SLAorICAgIFRBX09VVF9PRl9SQU5HRSwgICAgLyogTDFBIHNldCB0aGlzIGNhdXNlIGluIG0xMTEyNS5jICovCisgICAgVDMxMjRfVElNRU9VVCwKKyAgICBCTElORF9IQU5ET1ZFUl9CU0lDX0lOVkFMSUQKK30gaGFuZG92ZXJfZmFpbF9jYXVzZV9lbnVtOworCisjaWZkZWYgX19QU19TRVJWSUNFX18KKwordHlwZWRlZiBlbnVtCit7CisgICAgVEJGX0RMLAorICAgIFRCRl9VTCwKKyAgICBUQkZfVUxfREwsCisgICAgTk9fVEJGCit9IHRiZl9kaXJfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUlJCUF9CTEssCisgICAgQ1RSTF9CTEssCisgICAgREFUQV9CTEssCisgICAgRFVNTVlfQkxLCit9IGJsb2NrX3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQ0hfQ09OTkVDVF9JTkRfTk9UX05FRURFRCwKKyAgICBDSF9DT05ORUNUX0lORF9ORUVERUQKK30gY2hfY29ubmVjdF9pbmRfZW51bTsKKyNlbmRpZiAvKiBfX1BTX1NFUlZJQ0VfXyAqLworCisjaWZkZWYgX19HRU1JTklfXworLyogX19HRU1JTklfXywgR2VtaW5pIDIuMCAqLwordHlwZWRlZiBlbnVteworICAgIFBST1RFQ1RfQ0hfTk9ORSAgICAgPSAweDAwMDAsCisgICAgCisgICAgLyogQ0NDSDogYWNjZXNzcyBwcm9lY2VkdXJlICovCisgICAgUFJPVEVDVF9DSF9SQUNIICAgICA9IDB4MDAwMSwKKyAgICBQUk9URUNUX0NIX0FHQ0ggICAgID0gMHgwMDAyLAorICAgIFBST1RFQ1RfQ0hfUENIICAgICAgPSAweDAwMDQsCisgICAgUFJPVEVDVF9DSF9DQ0NIICAgICA9IDB4MDAwNywgLyogQ0NDSCA9IFJBQ0ggfCBBR0NIIHwgUENILCBmb3IgYWNjZXNzIHByb2NlZHVyZSAqLworCisgICAgLyogRkIrU0I6IFBTIEhPLCBQQ0NPLCBJUiBDQ08sIElSQ1IgKi8KKyAgICBQUk9URUNUX0NIX0ZCU0IgICAgID0gMHgwMDA4LAorCisgICAgLyogUENDQ0g6IGFjY2Vzc3MgcHJvZWNlZHVyZSAqLworICAgIFBST1RFQ1RfQ0hfUFJBQ0ggICAgPSAweDAwMTAsCisgICAgUFJPVEVDVF9DSF9QQUdDSCAgICA9IDB4MDAyMCwKKyAgICBQUk9URUNUX0NIX1BQQ0ggICAgID0gMHgwMDQwLAorICAgIFBST1RFQ1RfQ0hfUENDQ0ggICAgPSAweDAwNzAsIC8qIFBDQ0NIID0gUFJBQ0ggfCBQQUdDSCB8IFBQQ0gsIGZvciBhY2Nlc3MgcHJvY2VkdXJlICovCisKKyAgICAvKiBQT0xMSU5HIFJFU1BPTlNFIHRpbWVyOiBmb3IgYWNjZXNzcyBwcm9jZWR1cmUgKi8KKyAgICBQUk9URUNUX0NIX1BPTExSRVNQID0gMHgwMDgwLCAKKworICAgIC8qIFBUTUNIOiBSQVUgb3IgQVRUQUNIIHByb2VjZWR1cmUgKi8KKyAgICBQUk9URUNUX0NIX1BEVENIICAgID0gMHgwMTAwLAorICAgIFBST1RFQ1RfQ0hfUEFDQ0ggICAgPSAweDAyMDAsCisgICAgUFJPVEVDVF9DSF9QVENDSCAgICA9IDB4MDQwMCwKKyAgICBQUk9URUNUX0NIX1BUTUNIICAgID0gMHgwNzAwLCAvKiBQVE1DSCA9IFBEVENIIHwgUEFDQ0ggfCBQVENDSCwgZm9yIFJBVSBvciBHUFJTIGF0dGFjaCBwcm9jZWR1cmUgKi8KKworICAgIC8qIFBBQ0NIX1NCOiBVTCBTQiAqLworICAgIFBST1RFQ1RfQ0hfVUxTQiAgICAgPSAweDA4MDAsCisKKyAgICAvKiAoTikoUClCQ0NIOiByZXNlbGVjaXRvbiBwcm9lY3VkcmUgKi8KKyAgICBQUk9URUNUX0NIX0JDQ0ggICAgID0gMHgxMDAwLAorICAgIFBST1RFQ1RfQ0hfTkJDQ0ggICAgPSAweDIwMDAsCisgICAgUFJPVEVDVF9DSF9QQkNDSCAgICA9IDB4NDAwMCwKKyAgICBQUk9URUNUX0NIX05QQkNDSCAgID0gMHg4MDAwLAorICAgIAorICAgIC8qIE1JWCBDSEFOTkVMIFBST1RFQ1RJT04gKi8KKyAgICBQUk9URUNUX0NIX0NDQ0hfUFRNQ0ggPSAoUFJPVEVDVF9DSF9DQ0NIIHwgUFJPVEVDVF9DSF9QVE1DSCksIC8qIEZvciBvbmUtcGhhc2UgaW4gUFMgU2Vzc2lvbiAqLworICAgIFBST1RFQ1RfQ0hfRkJTQl9QVE1DSCA9IChQUk9URUNUX0NIX0ZCU0IgfCBQUk9URUNUX0NIX1BUTUNIKSwgLyogRm9yIEJsaW5kIFBTIEhPICovCisgICAgUFJPVEVDVF9DSF9DQ0NIX1VMU0JfUFRNQ0ggPSAoUFJPVEVDVF9DSF9DQ0NIIHwgUFJPVEVDVF9DSF9VTFNCIHwgUFJPVEVDVF9DSF9QVE1DSCksIC8qIEZvciB0d28tcGhhc2UgaW4gUFMgU2Vzc2lvbiAqLworICAgIFBST1RFQ1RfQ0hfQ0NDSF9VTFNCID0gKFBST1RFQ1RfQ0hfQ0NDSCB8IFBST1RFQ1RfQ0hfVUxTQiksIC8qIEZvciB0d28tcGhhc2UgYWNlc3NzICovCisgICAgUFJPVEVDVF9DSF9DQ0NIX1VMU0JfUE9MTFJFU1AgPSAoUFJPVEVDVF9DSF9DQ0NIIHwgUFJPVEVDVF9DSF9VTFNCIHwgUFJPVEVDVF9DSF9QT0xMUkVTUCkgLyogRm9yIGFjZXNzcyAqLworfSBwcm90ZWN0X2NoYW5uZWxfZW51bTsKKy8qIGVuZCBvZiBfX0dFTUlOSV9fICovCisjZW5kaWYgLyogX19HRU1JTklfXyAqLyAKKwordHlwZWRlZiBlbnVtCit7CisgICAgUlJfU1BBUkVfQklUX0wsCisgICAgUlJfU1BBUkVfQklUX0gKK30KK3JyX3NwYXJlX2JpdF9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSUl9NU0dfREVDT0RFX1NVQ0NFU1MsCisgICAgUlJfTk9fRVJST1IsCisgICAgUlJfSUdOT1JFX01TRywKKyAgICBSUl9VTktOT1dOX01TR19JTl9BQ0ssCisgICAgUlJfTVNHX0lOX0lOQ09NUEFUSUJMRV9TVEFURSwKKyAgICBSUl9TWU5UX0lOQ09SUkVDVF9NU0csCisgICAgUlJfVU5LTk9XTl9JRV9DT01QX1JFUUQsCisgICAgUlJfT1VUX1NFUV9JRV9DT01QX1JFUUQsCisgICAgUlJfQ09ORElUSU9OQUxfSUVfRVJST1IsCisgICAgUlJfU0VNX0lOQ09SUkVDVF9JRQorICAgIC8qIGJyd2FuZywgMDYvMDMvMTYsIFtNQVVJXzAwMTc5Nzc1XSB7ICovCisjaWZkZWYgX19BTVJfU1VQUE9SVF9fCisgICAgLFJSX0lOQ09OU0lTVEVOVF9NVUxUSVJBVEUKKyNlbmRpZgorICAgIC8qIGJyd2FuZywgMDYvMDMvMTYsIFtNQVVJXzAwMTc5Nzc1XSB9ICovICAKKyAgICAvKiBicndhbmcsIDA2LzAzLzI1LCBbTUFVSV8wMDE4MjEyOV0geyAqLyAgICAKKyAgICAsUlJfQ0hfTU9ERV9OT1RfU1VQUE9SVAorICAgIC8qIGJyd2FuZywgMDYvMDMvMjUsIFtNQVVJXzAwMTgyMTI5XSB9ICovICAgIAorICAgIC8qIGJyd2FuZywgMjAwNzAyMDUsIFtlcnJvciBoYW5kbGluZyBvZiBITyBmcm9tIFVUUkFOXSB7ICovICAgIAorICAgICxSUl9DQV9OT1RfQVZBSUxBQkxFCisgICAgLyogYnJ3YW5nLCAyMDA3MDIwNSwgW2Vycm9yIGhhbmRsaW5nIG9mIEhPIGZyb20gVVRSQU5dICB9ICovICAKKyAgICAvKiBicndhbmcsIDIwMDcwNDA4LCB0byBjaGVjayBpZiBjaXBoZXIgbW9kZSBzZXR0aW5nIGlzIGNvbnRhaW5lZCBpbiBITyBmcm9tIFVUUkFOICovCisgICAgLFJSX0NJUEhFUl9NT0RFX0lFX05PVF9SRUNFSVZFRAorICAgICxSUl9DSVBIRVJfU1RBVFVTX0lOQ09OU0lTVEVOVAorICAgICxSUl9GUkVRX05PVF9JTVBMRU1FTlRFRAorfQorcnJfZ3NtX3JldF9jb2RlOworCisjaWZkZWYgX19OQlJfQ0VMTF9JTkZPX18KK3R5cGVkZWYgZW51bQoreworICAgIFJSX05CUl9DRUxMX0lORk9fSU5ELAorICAgIFJSX05CUl9DRUxMX0lORk9fQ05GCit9Citycl9uYnJfY2VsbF9pbmZvX3JlcG9ydF90eXBlOworI2VuZGlmIC8qIF9fTkJSX0NFTExfSU5GT19fICovIAorCit0eXBlZGVmIGVudW0KK3sKKyAgICBUT19TUlZfQ0VMTF9TSV9DTlRYID0gMCwKKyAgICBUT19OQlJfVEFSR0VUX0NFTExfU0lfQ05UWCA9IDEsCisgICAgVE9fU1JWX0NFTExfUFNJX0NOVFggPSAyLAorICAgIFRPX01FQVNfQ05UWCA9IDMsCisgICAgVE9fUk1DX0NOVFggPSA0Cit9IHRhcmdldF9jb250ZXh0X2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFJNUENfT0xEX0NFTEwsCisgICAgUk1QQ19ORVdfQ0VMTCwKKyAgICBSTVBDX0lOVkFMSURfQ0VMTAorfSBSTVBDX0NFTExfU0VMRUNUSU9OX1RZUEU7CisKK3R5cGVkZWYgZW51bQoreworICAgIFJNUENfSFBMTU5fU1RBUlQsCisgICAgUk1QQ19IUExNTl9TVE9QCit9IEhQTE1OX1NSQ0hfVFlQRTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgU0lfSU5GT19JTlZBTElEID0gMCwKKyAgICBTSV9JTkZPX1ZBTElECit9CitTSV9JTkZPX1RZUEU7CisKKy8qIENsYWlyZSAwNDA0MDcgY2hhbmdlOiBTdG9yZSBTSTEzIHJvdyBkYXRhIHdoZW4gU0kxIGlzIG5vdCByZWNlaXZlZCB5ZXQgKi8KK3R5cGVkZWYgZW51bQoreworICAgIFNJX0dST1VQX05PTkUgPSAwLAorICAgIFNJX0dST1VQX1NFUlZJTkdfQ0VMTCwKKyAgICBTSV9HUk9VUF9UQVJHRVRfQ0VMTAorfQorU0lfR1JPVVBfSUQ7CisKK3R5cGVkZWYgZW51bQoreworICAgIEJBX1NUQVRFX05PVF9DT01QTEVURSwKKyAgICBCQV9TVEFURV9DT01QTEVURSwKKyAgICBCQV9TVEFURV9GVUxMLAorICAgIEJBX1NUQVRFX0ZVTExfUExVU19CU0lDX0lORk8KK30gQkFfU1RBVEVfRU5VTTsKKworI2lmZGVmIF9fR0VSQU5fUjZfXwordHlwZWRlZiBlbnVtCit7CisgICAgU0kyTl9OT1RfU1VQUE9SVEVELAorICAgIFNJMk5fT05fUEFDQ0gsCisgICAgU0kyTl9PTl9QQUNDSF9BTkRfQkNDSF9OT1JNLAorICAgIFNJMk5fT05fUEFDQ0hfQU5EX0JDQ0hfRVhUCit9IFNJMk5fU1VQUE9SVDsKKyNlbmRpZiAvKiBfX0dFUkFOX1I2X18gKi8gCisKK3R5cGVkZWYgZW51bQoreworICAgIFNFUlZJQ0VfVFlQRV9HU00sCisgICAgU0VSVklDRV9UWVBFX0dQUlMKK30gc2VydmljZV90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFNJX0RFQ09ERV9GQUlMICA9IDAsCisgICAgU0lfREVDT0RFX1NVQ0MgID0gMSwKKyAgICBTSV9OT1RfQ09NUExFVEUgPSAyLCAgICAvKiBvbmx5IGZvciBTSTJxIGFuZCBTSTJuICovCisgICAgU0lfUVVFVUVEICAgICAgID0gMyAgICAgLyogcXVldWVkIGZvciB3YWl0aW5nIFNJMSBvciBTSTIgKi8KK30gU0lfREVDT0RFX1NUQVRVU19FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBUQzAsCisgICAgVEMxLAorICAgIFRDMiwKKyAgICBUQzMsCisgICAgVEM0LAorICAgIFRDNSwKKyAgICBUQzYsCisgICAgVEM3LAorICAgIFRDX05PTkUKK30KK3RjX29uX2JjY2hfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQ0JDSF9DSEFOX0RFU0MgPSAweDY0LAorICAgIENCQ0hfTU9CSUxFX0FMTE9DID0gMHg3MgorfSBpZWlfZW51bV90eXBlOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBCQVJfUkVNT1ZFX05PTkUsCisgICAgQkFSX1JFTU9WRV9PVEhFUiwKKyAgICBCQVJfUkVNT1ZFX1RJTUVPVVQsCit9CitiYXJfcmVtb3ZlX2VudW07CisKKwordHlwZWRlZiBlbnVtCit7CisgICAgQkFSX1RZUEVfTk9ORSwKKyAgICBCQVJfVFlQRV9URVNULAorICAgIEJBUl9UWVBFX0FVVEhGQUlMLAorICAgIEJBUl9UWVBFX1JFSiwKKyAgICBCQVJfVFlQRV9SQUNIRkFJTCwKKyAgICBCQVJfVFlQRV9GT1JFVkVSLAorfQorYmFyX3R5cGVfZW51bTsKKworI2lmIChkZWZpbmVkKF9fTU9ERU1fRU1fTU9ERV9fKSB8fCBkZWZpbmVkKF9fU0xJTV9NT0RFTV9FTV9NT0RFX18pKQordHlwZWRlZiBlbnVtICAgICAgICAgICAgICAgICAgICAgCit7CisgICAgRU1fVE9fRUxULCAvL3JlcGxhY2UgRU1fRlJPTV9DQVRDSEVSCisgICAgRU1fVE9fUk1NSSwgLyogdG9tbXkgYWRkIGZvciBSTU1JIEVNIHN1cHBvcnQgKi8KKyAgICBFTV9UT19CT1RILAorICAgIEVNX1RPX05PTkUKK30gZW1fZGVzdF9lbnVtOworI2VuZGlmICAvKiAoZGVmaW5lZChfX01PREVNX0VNX01PREVfXykgfHwgZGVmaW5lZChfX1NMSU1fTU9ERU1fRU1fTU9ERV9fKSkgKi8KKwordHlwZWRlZiBlbnVtCit7CisgUlJNX0FQQ19GRUFUVVJFX1RZUEVfMCwgICAgICAJICAvKmRpc2FibGUgQVBDIGZlYXR1cmUqLworIFJSTV9BUENfRkVBVFVSRV9UWVBFX01PREVfSSwgICAgICAvKkFQQyBmZWF0dXJlIG1vZGUgSSovCisgUlJNX0FQQ19GRUFUVVJFX1RZUEVfTU9ERV9JSSwgICAgIC8qQVBDIGZlYXR1cmUgbW9kZSBJSSovCisgUlJNX0FQQ19GRUFUVVJFX1RZUEVfTU9ERV9JSUkgICAgLypBUEMgZmVhdHVyZSBtb2RlIElJSSBmb3IgSFcqLworCit9YXBjX2ZlYXR1cmVfdHlwZV9lbnVtOwordHlwZWRlZiBlbnVtICAgICAgICAgICAgICAgICAgICAgCit7CisgIFJTU0lfdGltZXJfU1RPUCwKKyAgUlNTSV90aW1lcl9TVEFSVCwKKyAgUlNTSV90aW1lcl9FWFBJUlkKK31NRF9vbmx5X2VsZXZhdG9yX21vZGVfdGltZXJfc3RhdHVzX2VudW07CisKK3R5cGVkZWYgZW51bSAgICAgICAgICAgICAgICAgICAgIAoreworICBMVEVfdGltZXJfU1RPUCwKKyAgTFRFX3RpbWVyX1NUQVJULAorICBMVEVfdGltZXJfRVhQSVJZCit9TURfb25seV9lbGV2YXRvcl9tb2RlX0xURV9jZWxsX2NhbXBpbmdfY2hlY2tfdGltZXJfc3RhdHVzX2VudW07CQorCisjaWYgZGVmaW5lZChfX05SX1JBVF9fKQordHlwZWRlZiBlbnVtICAgICAgICAgICAgICAgICAgICAgCit7CisgIE5SX3RpbWVyX1NUT1AsCisgIE5SX3RpbWVyX1NUQVJULAorICBOUl90aW1lcl9FWFBJUlkKK31NRF9vbmx5X2VsZXZhdG9yX21vZGVfTlJfY2VsbF9jYW1waW5nX2NoZWNrX3RpbWVyX3N0YXR1c19lbnVtOwkKKyNlbmRpZgorCit0eXBlZGVmIGVudW0gICAgICAgICAgICAgICAgICAgICAKK3sKKyAgRUxFVkFUT1JfU0VBUkNIX1JBVF9OT05FLAorICBFTEVWQVRPUl9TRUFSQ0hfUkFUX05SLAorICBFTEVWQVRPUl9TRUFSQ0hfUkFUX0xURQorfWVsZXZhdG9yX3NlYXJjaF9yYXRfZW51bTsKKworCisjZW5kaWYgLyogX1JSX0NPTU1PTl9FTlVNU19IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcnJfY29tbW9uX2hlYWRlcnMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ycl9jb21tb25faGVhZGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNTg3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcnJfY29tbW9uX2hlYWRlcnMuaApAQCAtMCwwICsxLDE2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBycl9jb21tb25faGVhZGVycy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICRMb2ckCisgKgorICogMTIgMTQgMjAxMCBuYW5jeS5jaGFuZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwOSAwMyAyMDEwIHNoZXJyeS5rdW8KKyAqIHJlbW92ZWQhCisgKiBkaXNhYmxlIGZhc3QgcmVzdW1lCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIGFkZCB0byBzb3VyY2UgY29udHJvbCByZWN1cnNlbHkKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIENoYW5nZSByciB0byBycjIuCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiBjcmVhdGVkIGJ5IGNsZWFyZnNpbXBvcnQKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlIGNvbXBpbGUgb3B0aW9uOiBUQVJHRVRfQlVJTEQgaW4gTVBBTCBhbmQgUk1QCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUlJfQ09NTU9OX0hFQURFUlNfSAorI2RlZmluZSBfUlJfQ09NTU9OX0hFQURFUlNfSAorCisvKiBMdWNpZW4gMjAwNi8wMS8wODogQWRkIGRlZmluaXRpb24gd2hpbGUgX19VTVRTX1JBVF9fIGlzIG5vdCBkZWZpbmVkICovCisjaWZuZGVmIF9fVU1UU19SQVRfXworI2RlZmluZSBVOCAgICAgICAga2FsX3VpbnQ4CisjZGVmaW5lIFM4ICAgICAgICBrYWxfaW50OAorI2RlZmluZSBVMTYgICAgICAga2FsX3VpbnQxNgorI2RlZmluZSBTMTYgICAgICAga2FsX2ludDE2CisjZGVmaW5lIFUzMiAgICAgICBrYWxfdWludDMyCisjZGVmaW5lIFMzMiAgICAgICBrYWxfaW50MzIKKyNlbmRpZiAvKiBfX1VNVFNfUkFUX18gKi8gCisKKyNlbmRpZiAvKiBfUlJfQ09NTU9OX0hFQURFUlNfSCAqLyAKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JyX2ZkZC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JyX2ZkZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NWI0N2EKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcnJfZmRkLmgKQEAgLTAsMCArMSw3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKglycl9mZGQuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogCQkJCUhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9SUl9GRERfSAorI2RlZmluZSBfUlJfRkREX0gKKworI2RlZmluZSBtR0FTKHgpIEZERF8jI3gKKworI2VuZGlmIC8qIF9SUl9GRERfSCAqLworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcnJfbXBhbF9pbnRlcmZhY2UuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ycl9tcGFsX2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Y2Q1YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcnJfbXBhbF9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDM1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisgKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyAqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyAqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBycl9tcGFsX2ludGVyZmFjZS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBNUEFMLVJSIGludGVyZmFjZSBkZWZpbml0aW9uCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAkTG9nJAorICoKKyAqIDAxIDIyIDIwMTQgY2hpLWNodW5nLmxpbgorICogW01PTFkwMDA0OTE2MV0gW0xURSBHZW1pbmldIEdBUyBjb2RlIHN5bmMgZnJvbSBCeXJvbiBDQnIgdG8gRGV2CisgKiAJLgorICoKKyAqIDExIDA2IDIwMTMgaGFtYW5uLmNoYW5nCisgKiBbTU9MWTAwMDM2NTE1XSBbZ2FzXSBkZXNpZ24gY2hhbmdlIGZvciBSTEMvIE1QQUwgZmx1c2gKKyAqIAkuCisgKgorICogMDEgMjMgMjAxMyBoZW5yeS5sYWkKKyAqIFtNT0xZMDAwMDkyMjJdIFtHQVNdW011bHRpLU1vZGUgRGV2ZWxvcG1lbnRdIE1lcmdlIEdBUyBtdWx0aS1tb2RlIGRldmVsb3BtZW50IHRvIE1PTFkKKyAqIC4KKyAqCisgKiAwMSAxMSAyMDEzIGhlbnJ5LmxhaQorICogW0hlbnJ5XVtNdWx0aS1Nb2RlIERldmVsb3BtZW50XSBHQVMgRGV2ZWxvcG1lbnQgYW5kIFI4IENSIFN5bmMKKyAqCisgKiAxMiAxMiAyMDEyIHR5LndhbmcKKyAqIFtNT0xZMDAwMDY5MzJdIEZpeCBNb0RJUyBidWlsZCB3YXJuaW5nIGluIFdSOC9NT0xZCisgKiAuCisgKgorICogMTIgMDMgMjAxMiB0eS53YW5nCisgKiBbTU9MWTAwMDA2OTMyXSBGaXggTW9ESVMgYnVpbGQgd2FybmluZyBpbiBXUjgvTU9MWQorICogLgorICoKKyAqIDExIDMwIDIwMTIgdHkud2FuZworICogW01PTFkwMDAwNjkzMl0gRml4IE1vRElTIGJ1aWxkIHdhcm5pbmcgaW4gV1I4L01PTFkKKyAqIC4KKyAqCisgKiAxMSAzMCAyMDEyIHR5LndhbmcKKyAqIFtNT0xZMDAwMDY5MzJdIEZpeCBNb0RJUyBidWlsZCB3YXJuaW5nIGluIFdSOC9NT0xZCisgKiAuCisgKiAKKyAqIDA5IDEwIDIwMTIgdHkud2FuZworICogW01PTFkwMDAwMzM3M10gW01BQy9STEMvTVBBTF0gUmVtb3ZlIF9fTkVXX1RCRl9BUkNIX18gZnJvbSAyRyBSUiBvbiBNT0xZCisgKiAuCisgKgorICogMTEgMDkgMjAxMSBzdGFubGV5aHkuY2hlbgorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwNiAwOSAyMDExIHBldGVyLmNoaWVuCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDA1IDEyIDIwMTEgaGVucnkubGFpCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDAzIDAyIDIwMTEgc3RhbmxleWh5LmNoZW4KKyAqIHJlbW92ZWQhCisgKiBHRU1JTkkyLjBdIEFDUyBhbmQgTUVBUyBwYXJ0cworICoKKyAqIDEyIDIwIDIwMTAgcmFjaGVsLmxpdQorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAxMiAxNCAyMDEwIG5hbmN5LmNoYW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDEyIDE0IDIwMTAgc2hlcnJ5Lmt1bworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAxMiAwMiAyMDEwIHNoZXJyeS5rdW8KKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTAgMTYgMjAxMCBuYW5jeS5jaGFuZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiBhZGQgdG8gc291cmNlIGNvbnRyb2wgcmVjdXJzZWx5CisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiBDaGFuZ2UgcnIgdG8gcnIyLgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIGNyZWF0ZWQgYnkgY2xlYXJmc2ltcG9ydAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1JSX01QQUxfSU5URVJGQUNFX0gKKyNkZWZpbmUgX1JSX01QQUxfSU5URVJGQUNFX0gKKworLyogTmFuY3kgMjAxMDEwMDU6IFN1Z2dlc3QgQWRkIGZvciBSSFIgKi8KKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorCisjaWZuZGVmIF9fTVRLX1RBUkdFVF9fCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisjZW5kaWYKKworLy8jaWZuZGVmIF9SUl9JTlRFUkZBQ0VfSAorLy8jZXJyb3IgInJyX2ludGVyZmFjZS5oIHNob3VsZCBiZSBpbmNsdWRlZCBmaXJzdCIKKy8vI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbnN0YW50CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBBTEdPUklUSE1fQTVfMSAgKDEpCisjZGVmaW5lIEFMR09SSVRITV9BNV8yICAoMikKKyNkZWZpbmUgQUxHT1JJVEhNX0E1XzMgICgzKQorI2RlZmluZSBBTEdPUklUSE1fQTVfNCAgKDQpCisjZGVmaW5lIEFMR09SSVRITV9BNV81ICAoNSkKKyNkZWZpbmUgQUxHT1JJVEhNX0E1XzYgICg2KQorI2RlZmluZSBBTEdPUklUSE1fQTVfNyAgKDcpCisKKyNkZWZpbmUgVENIX0xPT1BfQSAoMCkKKyNkZWZpbmUgVENIX0xPT1BfQiAoMSkKKyNkZWZpbmUgVENIX0xPT1BfQyAoMikKKyNkZWZpbmUgVENIX0xPT1BfRCAoMykKKyNkZWZpbmUgVENIX0xPT1BfRSAoNCkKKyNkZWZpbmUgVENIX0xPT1BfRiAoNSkKKyNkZWZpbmUgVENIX0xPT1BfSSAoNikKKworI2RlZmluZSBEQUlfVEVTVF9OT1JNQUwgICAgICAgICAgKDApCisjZGVmaW5lIERBSV9URVNUX1NQRUVDSF9ERUNfRFRYICAoMSkKKyNkZWZpbmUgREFJX1RFU1RfU1BFRUNIX0VOQ19EVFggICgyKQorI2RlZmluZSBEQUlfVEVTVF9BQ09VVElDX0FEX0RBICAgKDQpCisKKyNkZWZpbmUgSEFORE9WRVJfTDFfTk9fRVJST1IgICAgICAgICgwKQorI2RlZmluZSBIQU5ET1ZFUl9MMV9UQV9PVVRfT0ZfUkFOR0UgKDEpCisKKyNkZWZpbmUgSEFORE9WRVJfVFlQRV9QUkVfU1lOQyAgICAgICgwKQorI2RlZmluZSBIQU5ET1ZFUl9UWVBFX1BTRVVET19TWU5DICAgKDEpCisjZGVmaW5lIEhBTkRPVkVSX1RZUEVfRklORUxZX1NZTkMgICAoMikKKyNkZWZpbmUgSEFORE9WRVJfVFlQRV9OT05fU1lOQyAgICAgICgzKQorCisjZGVmaW5lIEdTTV9CTEtfU0laRSAgKDIzKQorI2RlZmluZSBNQVhfTlVNX09GX0hPUFBJTkdfRlJFUSAoNjQpCisjZGVmaW5lIE1BWF9CQV9MSVNUX0xFTiAoMzIpCisjZGVmaW5lIE1BWF9ORUlHSEJPUl9BQ1VJU0lUSU9OX0xJU1RfTEVOICg3KQorI2RlZmluZSBNQVhfUE9XRVJfU0NBTl9SRVNVTFRTX0xFTiAoMjAwKQorI2RlZmluZSBNQU5VQUxfU0VMX1NDQU5fSUQgKDEyOCkKKworI2RlZmluZSBCQU5EX1BHU005MDAgKDB4MDEpCisjZGVmaW5lIEJBTkRfRUdTTTkwMCAoMHgwMikKKyNkZWZpbmUgQkFORF9SR1NNOTAwICgweDA0KQorI2RlZmluZSBCQU5EX0RDUzE4MDAgKDB4MDgpCisjZGVmaW5lIEJBTkRfUENTMTkwMCAoMHgxMCkKKyNkZWZpbmUgQkFORF9HU000NTAgICgweDIwKQorI2RlZmluZSBCQU5EX0dTTTQ4MCAgKDB4NDApCisjZGVmaW5lIEJBTkRfR1NNODUwICAoMHg4MCkKKworI2RlZmluZSBQT1dFUl9DTEFTU18xICAgICAgICAgKDApCisjZGVmaW5lIFBPV0VSX0NMQVNTXzIgICAgICAgICAoMSkKKyNkZWZpbmUgUE9XRVJfQ0xBU1NfMyAgICAgICAgICgyKQorI2RlZmluZSBQT1dFUl9DTEFTU180ICAgICAgICAgKDMpCisjZGVmaW5lIFBPV0VSX0NMQVNTXzUgICAgICAgICAoNCkKKyNkZWZpbmUgUE9XRVJfQ0xBU1NfSU5WQUxJRCAgICgtMSkKKworI2lmZGVmIF9fUFNfU0VSVklDRV9fCisjZGVmaW5lIE1QQUxfTUFYX1VMX1NMT1RTICAoNCkKKyNkZWZpbmUgTVBBTF9NQVhfRExfU0xPVFMgICg0KQorI2RlZmluZSBNUEFMX0RBVEFfUV9TSVpFICgyKk1QQUxfTUFYX1VMX1NMT1RTKQorI2RlZmluZSBNQVhfRVhUX01FQVNfQVJGQ05TICAoMzIpCisjZGVmaW5lIE1BWF9BTExPQ19CSVRNQVBfTEVOR1RIICAoMzYpCisjZGVmaW5lIE1QQUxfSU5WQUxJRF9GUkFNRV9OTyAgKDB4ZmZmZmZmZmYpCisjZW5kaWYgLyogX19QU19TRVJWSUNFX18gKi8KKworI2RlZmluZSBNQVhfVEJGX05VTSAoMSkgLy9zdXBwb3J0IDEgVEJGcworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtIFZhbHVlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbmFsIHByb3RvdHlwZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmZGVmIF9fUFNfU0VSVklDRV9fCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbiBOYW1lOgorICogICAgbXBhbF9ybGNfZmx1c2hfcHJvYworICogREVTQ1JJUFRJT04KKyAqICAgVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCBieSBNUEFMLCBhbmQgUlIgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiB0aGUKKyAqICAgZmx1c2ggcHJvY2VkdXJlIHN0YXJ0cy4gTVBBTCB3aWxsIGZsdXNoIHRoZSBkYXRhIGJsb2NrcyBpbiBpdHMgZGF0YSBxdWV1ZSwKKyAqICAgYW5kIHRyYW5zbWl0IHVwbGluayBkdW1teSBibG9jayBiZWZvcmUgbmV3IGRhdGEgcmVxdWVzdCBpcyByZWNlaXZlZCBmcm9tIFJSLgorICogIEluIGFkZGl0aW9uLCBNUEFMIHdpbGwgcGFzcyB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgdG8gUlIuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIF9fTVRLX1RBUkdFVF9fCitleHRlcm4gdm9pZCBtcGFsX3JsY19mbHVzaF9wcm9jKGthbF91aW50OCAqbm9fcnRzX3NlbnQsIGthbF91aW50OCAqdG90YWxfYmxrc19zZW50LCBrYWxfdWludDggdGJmX2luZGV4LCBrYWxfdWludDE2ICpmcmFtZV9ub19vZl9sYXN0X3R4ZWQpOworZXh0ZXJuIHZvaWQgcmxjX21wYWxfcmxjX2ZsdXNoX3Byb2Moa2FsX3VpbnQ4ICpub19ydHNfc2VudCwga2FsX3VpbnQ4ICp0b3RhbF9ibGtzX3NlbnQsIGthbF91aW50MTYgKmZyYW1lX25vX29mX2xhc3RfdHhlZCk7CisjZWxzZQorZXh0ZXJuIHZvaWQgbXBhbF9ybGNfZmx1c2hfcHJvYyhpbG1fc3RydWN0ICppbG1fcHRyKTsKKyNlbmRpZgorCisKKworI2VuZGlmIC8qIF9fUFNfU0VSVklDRV9fICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN0cnVjdHVyZXMgZ2VuZXJhdGVkIGJ5IEFTTiBmaWxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovIAorCisjaWZkZWYgVEVTVF9UT09MCisjaW5jbHVkZSAidHRfZGVmcy5oIgorI2Vsc2UgCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNlbmRpZiAvKiBURVNUX1RPT0wgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qIF9SUl9NUEFMX0lOVEVSRkFDRV9IICovCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ycl9zcGFyZV9iaXQuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ycl9zcGFyZV9iaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWVmNzYxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JyX3NwYXJlX2JpdC5oCkBAIC0wLDAgKzEsMTYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHJyX3NwYXJlX2JpdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICRMb2ckCisgKgorICogMTEgMTMgMjAxNCBtaW5nLmxlZQorICogW01PTFkwMDA4MDIxMV0gW01UNjI5MV9ERVZdW01UNjI5MV9VRVNJTV9ERVZdIENoZWNrIGluIGxvdyBwb3dlciB0byBNVDYyOTFfREVWLCBNVDYyOTFfVUVTSU1fREVWCisgKiBHSVNFIFBhZ2luZy4KKyAqCisgKiAxMiAxNCAyMDEwIG5hbmN5LmNoYW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDEwIDE2IDIwMTAgbmFuY3kuY2hhbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDggMDMgMjAxMCBuYW5jeS5jaGFuZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIGFkZCB0byBzb3VyY2UgY29udHJvbCByZWN1cnNlbHkKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIENoYW5nZSByciB0byBycjIuCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUlJfU1BBUkVfQklUX0gKKyNkZWZpbmUgX1JSX1NQQVJFX0JJVF9ICisKKy8qIE5hbmN5IDIwMTAxMDA1OiBTdWdnZXN0IEFkZCBmb3IgUkhSICovCisjaW5jbHVkZSAiYml0c3RyZWFtLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJnYXNfZ2lzZV9kZWYuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKgorTWFjcm9zIFdpdGhvdXQgUGFyYW1ldGVycworKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIERlc2NyaXB0aW9uOiBUaGUgcGFkZGluZyBzZXF1ZW5jZSBpcyB0aGUgcmVwZXRpdGlvbiBvZiBvY3RldCAwMDEwMTAxMSwKKyAqIHN0YXJ0aW5nIG9uIGFuIG9jdGV0IGJvdW5kYXJ5LgorICogCisgKiAzRyBUUyAyNC4wMDcgVjMuMy4xIHNlYzogQi4xLjIuMgorICovCisKKy8qKioqKioqKioqKioqKioqKgorRW51bXMgV2l0aG91dCBUYWdzCisqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioKK01hY3JvcyBXaXRoIFBhcmFtZXRlcnMKKyoqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE1hY3JvcyB1c2VkIGJ5IHBhY2sgYW5kIHVucGFjayBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgUlJfU1BBUkVfQklUX0hfVkFMVUUoIGJpdF9vZmZzZXQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgKCggflNfUlJfU1BBUkVfT0NURVRfQ05TVCA+PiAoNy1iaXRfb2Zmc2V0KSkgJiAweDAxKQorI2RlZmluZSBSUl9TUEFSRV9CSVRfTF9WQUxVRSggYml0X29mZnNldCkgXAorICAgICAgICAgICAgICAgICAgICAgICAoKCBTX1JSX1NQQVJFX09DVEVUX0NOU1QgPj4gKDctYml0X29mZnNldCkpICYgMHgwMSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKgorRXhwb3J0ZWQgRnVuY3Rpb24gUHJvdG90eXBlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRnVuY3Rpb25zIHRvIGJlIHVzZWQgaW4gY29kZSB3aGVyZSBwYWNrIGFuZCB1bnBhY2sgaXMgbm90IHVzZWQgKi8KK2V4dGVybiBrYWxfdWludDggcnJfZ2V0X3NwYXJlX2JpdChiaXRfc3RyZWFtICpiaXRfc3RyZWFtX3B0cik7CisKKyNlbmRpZiAvKiBfUlJfU1BBUkVfQklUX0ggKi8gCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ycl90ZGQuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9ycl90ZGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGY0YTBmCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JyX3RkZC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICoJcnJfdGRkLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUlJfVEREX0gKKyNkZWZpbmUgX1JSX1RERF9ICisKKyNkZWZpbmUgbUdBUyh4KSBURERfIyN4CisKKyNlbmRpZiAvKiBfUlJfVEREX0ggKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JybTJybXBjX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JybTJybXBjX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMjEzYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcnJtMnJtcGNfc3RydWN0LmgKQEAgLTAsMCArMSwxMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBycm0ycm1wY19zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfUlJNMlJNUENfU1RSVUNUX0gKKyNkZWZpbmUgX1JSTTJSTVBDX1NUUlVDVF9ICisKKyNpbmNsdWRlICJtY2RfbDNfaW5jX3N0cnVjdC5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IHZhbGlkOworICAgIGthbF91aW50OCBwYjsKKyAgICBrYWxfdWludDggdHNjOworICAgIGthbF91aW50OCB0bjsKKyAgICBrYWxfdWludDggaG9wcF9vcl9ub25faG9wcDsKKyAgICBrYWxfdWludDE2IGFyZmNuOworICAgIGthbF91aW50OCBtYWlvOworfSBwYmNjaF9kZXNjX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IGFjY2Vzc190eXBlOworICAgIGthbF91aW50MTYgYXJmY247CisgICAgcGJjY2hfZGVzY19zdHJ1Y3QgcGJjY2hfZGVzYzsKKyAgICBrYWxfdWludDggaXNfaHBsbW5fc3JjaF9yZXFkOworICAgIGthbF91aW50OCBvbGRfb3JfbmV3X2NlbGw7CisgICAga2FsX2ludDE2IHNlcnZpbmdfcG93ZXJfaW5fcWRibTsKKyAgICBrYWxfdWludDggbXNfcGxtbl9zZWFyY2hfbW9kZTsgLypCeXJvbjogMjAwNS0wMzogZm9yIHJtYyB0byBrbm93IHRoZSBjdXJyZW50IG1zIHBsbW4gc2VsZWN0aW9uIG1vZGUqLworICAgIGthbF9ib29sIGlzX2FueV9wbG1uOyAvKkJ5cm9uOiAyMDA1LTAzOiBmb3Igcm1jIHRvIGtub3cgdGhhdCBpZiB0aGUgbXMgc2hvdWxkIGJlIGluIGFueSBwbG1uIHNlbGVjdGlvbiovCisgICAga2FsX3VpbnQ4IGlzX3JwbG1uX3ZhbGlkOyAvKkJ5cm9uOiAyMDA1LTAzOiBmb3Igcm1jIHRvIGtub3cgdGhlIGlmIHJwbG1uIGlzIHZhbGlkIGZvciBtYW51YWwgbW9kZSovCisgICAgcGxtbl9pZF9zdHJ1Y3QgcnBsbW47ICAgIC8qQnlyb246IDIwMDUtMDM6IGZvciBybWMgdG8ga25vdyB0aGUgY3VycmVudCBycGxtbiBmb3IgbWFudWFsIG1vZGUqLworfSBycm1fcm1wY19jZWxsX3NlbF9kb25lX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorfSBycm1fcm1wY19zdGFydF9ocGxtbl9zcmNoX3RpbWVyX3JlcV9zdHJ1Y3Q7CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JybV9lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JybV9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2Nzk3YzYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcnJtX2VudW1zLmgKQEAgLTAsMCArMSwxODU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgICBycm1fZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1JSTV9FTlVNU19ICisjZGVmaW5lIF9SUk1fRU5VTVNfSAorCisvKiBuZXcgYWRkIFJNQ19USU1FUiBlbnVtICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBSTUNfVDMxNjJfVElNRVJfRVhQSVJZID0gMCwKKyAgICBSTUNfVDMxNzhfVElNRVJfRVhQSVJZLAorICAgIFJNQ19UMzE4Nl9USU1FUl9FWFBJUlksCisgICAgUk1DX1QzMTcwX1RJTUVSX0VYUElSWSwKKyAgICBSTUNfVDMxNzJfVElNRVJfRVhQSVJZLAorICAgIFJNQ19UMzE3NF9USU1FUl9FWFBJUlksCisgICAgUk1DX1QzMTc2X1RJTUVSX0VYUElSWSwKKyAgICBSTUNfU0VSVl9DRUxMX1NJX1RJTUVSX0VYUElSWSwKKyAgICBSTUNfUFNJX1NJX1RJTUVSX0VYUElSWSwKKyAgICAvKiBBdXN0aW4gMDQwNDAyOiBhdHRlbXB0IHRvIHJlY2VpdmUgYWxsIFBTSSBiZWZvcmUgcGFja2V0IGFjY2VzcyAqLworICAgIFJNQ19QU0lfUkVBRElOR19USU1FUl9FWFBJUlksICAgCisgICAgUk1DX1JFU0VMX1BST0NFU1NfVElNRVJfRVhQSVJZLAorICAgIAorICAgIC8qIEFkZWxpbmUgMjAwOC4xMS4xMiAqLworI2lmbmRlZiBfX0dFUkFOX1I1X18gICAgICAgIAorICAgIFJNQ19BQk5PUl9SRVNFTF9QUk9DRVNTX1RJTUVSX0VYUElSWSwKKyNlbmRpZiAvKiBfX0dFUkFOX1I1X18gKi8KKyAgICBSTUNfT0xEX0NFTExfVElNRVJfRVhQSVJZLAorICAgIFJNQ19NQUNfVElNRVJfRVhQSVJZLAorICAgIFJNQ19QRU5BTFRZX0JBU0VfVElNRVJfRVhQSVJZLAorICAgIFJNQ19MQVNUX1JFU0VMX1RJTUVSX0VYUElSWSwKKyAgICBSTUNfTk9OX0RSWF9USU1FUl9FWFBJUlksCisgICAgUk1DX05DX05PTl9EUlhfVElNRVJfRVhQSVJZLAorICAgIFJNQ19NTV9OT05fRFJYX1RJTUVSX0VYUElSWSwKKyAgICBSTUNfVDMyMDBfVElNRVJfRVhQSVJZLAorICAgIFJNQ19FTU9fVElNRVJfRVhQSVJZLAorICAgIFJNQ19UMzE0Ml9USU1FUl9FWFBJUlksCisgICAgUk1DX1QzMTQ2X1RJTUVSX0VYUElSWSwKKyAgICBSTUNfVE1BX1RJTUVSX0VYUElSWSwKKworI2lmIGRlZmluZWQoX19VTVRTX1JBVF9fKSB8fCBkZWZpbmVkKF9fTFRFX1JBVF9fKQorICAgIFJNQ19DQ09fVElNRVJfRVhQSVJZLAorICAgIFJNQ19XQUlUVElNRV9USU1FUl9FWFBJUlksCisgICAgUk1DX1NUQU5EQllfR1NNX0VWQUxfVElNRVJfRVhQSVJZLAorI2VuZGlmIC8qIGRlZmluZWQoX19VTVRTX1JBVF9fKSB8fCBkZWZpbmVkKF9fTFRFX1JBVF9fKSAqLworI2lmZGVmIF9fVU1UU19SQVRfXworICAgIFJNQ19BQ1RJVkFUSU9NX1RJTUVfVElNRVJfRVhQSVJZLAorI2lmIGRlZmluZWQoX19QUkVGRVJfSElHSF9QUklPXzNHX0lOXzIzR19NT0RFX18pCisgICAgUk1DX1dBSVRUSU1FX1RJTUVSMl9FWFBJUlksCisjZW5kaWYgLyogX19XQ0RNQV9QUkVGRVJSRURfXyB8fCBfX1BSRUZFUl9ISUdIX1BSSU9fM0dfSU5fMjNHX01PREVfXyAqLworI2VuZGlmIC8qIF9fVU1UU19SQVRfXyAqLworI2lmIGRlZmluZWQoX19MVEVfUkFUX18pIHx8IGRlZmluZWQoX18yM0dfUFJJX1JFU0VMX1NVUFBPUlRfXykKKyAgICBSTUNfVDMyMzBfVElNRVJfRVhQSVJZLAorI2VuZGlmIC8qIGRlZmluZWQoX19MVEVfUkFUX18pIHx8IGRlZmluZWQoX18yM0dfUFJJX1JFU0VMX1NVUFBPUlRfXykgKi8gICAgCisKKyNpZmRlZiBfXzNHX0NTR19TVVBQT1JUX18KKyAgICBSUk1fVU1UU19DU0dfQVVUT19TRUFSQ0hfVElNRVJfRVhQSVJZLAorICAgIFJSTV9VTVRTX0NTR19DRUxMX0VWQUxVQVRJT05fVElNRVJfRVhQSVJZLAorI2VuZGlmIC8qIF9fM0dfQ1NHX1NVUFBPUlRfXyAqLworCisjaWZkZWYgX19MVEVfUkFUX18KKyAgICBSUk1fTFRFX0NTR19BVVRPX1NFQVJDSF9USU1FUl9FWFBJUlksCisgICAgUlJNX0xURV9DU0dfQ0VMTF9FVkFMVUFUSU9OX1RJTUVSX0VYUElSWSwKKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworCisgICAgLyogX19BVVRIX0ZBSUxfQkFSX0NFTExfXyAqLworICAgIFJSTV9CQVJfQ0VMTF9USU1FUl9JRCwKKworICAgIC8qIFJFRElSRUNUSU9OICovCisjaWYgZGVmaW5lZChfX0dFUkFOX1I2X18pIHx8IGRlZmluZWQgKF9fRkREX1JFRElSRUNUSU9OX18pCisgICAgUkNTX1JFRElSRUNUSU9OX0xJU1RfU0VBUkNIX1RJTUVSX0lELAorI2VuZGlmIC8qIGRlZmluZWQoX19HRVJBTl9SNl9fKSB8fCBkZWZpbmVkIChfX0ZERF9SRURJUkVDVElPTl9fKSAqLyAKKyAgICBSQ1NfRlVMTF9CQU5EX1NFQVJDSF9TRUdNRU5UQVRJT05fVElNRVJfSUQsCisjaWZkZWYgX19HRVJBTl9SNl9fCisgICAgUk1DX1NJMk5fVElNRVJfRVhQSVJZLAorI2VuZGlmIC8qIF9fR0VSQU5fUjZfXyAqLyAKKworICAgIC8qIEZBU1QgUkVDT1ZFUlkgKi8KKyAgICBSUk1fRkFTVF9SRUNPVkVSWV9USU1FUl9JRCwKKworICAgIC8qID09PT09PT09PT09PT09PT0gUk1DLUNTUlIgUGFydCA9PT09PT09PT09PT09PT0gKi8KKyAgICBSTUNfVDMxMjJfVElNRVJfRVhQSVJZLCAKKyAgICBSTUNfVDMxMjZfVElNRVJfRVhQSVJZLCAKKyAgICBSTUNfUkVFU1RfVElNRVJfRVhQSVJZLCAKKworI2lmZGVmIF9fQUdQU19DT05UUk9MX1BMQU5FX18KKyAgICBSTUNfQVBEVV9DSEVDS19USU1FUl9FWFBJUlksCisjZW5kaWYgLyogX19BR1BTX0NPTlRST0xfUExBTkVfXyAqLworCisjaWZkZWYgX19FVFdTX1NVUFBPUlRfXworICAgIFJNQ19UMzIzMl9USU1FUl9FWFBJUlksCisjZW5kaWYgLyogX19FVFdTX1NVUFBPUlRfXyAqLworCisgICAgLyogV2lsbGlhbSA6MjAwNzA2MTkgOiBBZGQgdGltZXIgZm9yIE5BQ0MgKi8KKyNpZmRlZiBfX0dFUkFOX1I0X18KKyAgICBSTUNfVDMyMDZfRVhQSVJZLAorICAgIFJNQ19UMzIwOF9FWFBJUlksCisgICAgUk1DX1QzMjEwX0VYUElSWSwKKyAgICBSTUNfUFNTX1RJTUVSX0VYUElSWSwKKyAgICBSTUNfUE5DRDBfVElNRVJfRVhQSVJZLAorICAgIFJNQ19QTkNEMV9USU1FUl9FWFBJUlksCisgICAgUk1DX1BOQ0QyX1RJTUVSX0VYUElSWSwKKyAgICBSTUNfUE5DRDNfVElNRVJfRVhQSVJZLAorICAgIC8vIENocmlzLCBuYWNjX2NvZGluZworICAgIFJNQ19QUFNfVElNRVJfRVhQSVJZLAorI2VuZGlmIC8qIF9fR0VSQU5fUjRfXyAqLyAKKworI2lmIGRlZmluZWQoX19MVEVfUkFUX18pIHx8IGRlZmluZWQoX19VTVRTX1JBVF9fKQorICAgIC8qIEV2ZW50IHNjaGVkdWxlciB0aW1lciBJRCBmb3IgSVIgYmFycmVkIGluZm8uICovCisgICAgUk1DX0lSX0JBUlJFRF9CQVNFX1RJTUVSX0lELAorI2VuZGlmIC8qIGRlZmluZWQoX19MVEVfUkFUX18pIHx8IGRlZmluZWQoX19VTVRTX1JBVF9fKSAqLworCisjaWYgZGVmaW5lZChfX0xURV9SQVRfXykgfHwgZGVmaW5lZChfX05SX1JBVF9fKQorLyogX180R19CQUNLR1JPVU5EX1NFQVJDSF9fIHx8IF9fNUdfQkFDS0dST1VORF9TRUFSQ0hfXyBiZWdpbiAqLworICAgIFJNQ19CR19TRUFSQ0hfUkVTRUxfVElNRVJfRVhQSVJZLAorICAgIFJNQ19CR19TRUFSQ0hfQVZPSURfSVJfTUVBU19USU1FUl9FWFBJUlksCisvKiBfXzRHX0JBQ0tHUk9VTkRfU0VBUkNIX18gfHwgX181R19CQUNLR1JPVU5EX1NFQVJDSF9fIGVuZCAqLworI2VuZGlmIC8qIGRlZmluZWQoX19MVEVfUkFUX18pIHx8IGRlZmluZWQoX19OUl9SQVRfXykgKi8KKworI2lmZGVmIF9fTFRFX1JBVF9fCisgICAgUk1DX1QzMjVfVElNRVJfRVhQSVJZLAorI2VuZGlmIC8qIF9fTFRFX1JBVF9fICovCisKKyNpZiBkZWZpbmVkKF9fVU1UU19SQVRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykKKwlSTUNfUkFVX1BST1RFQ1RfVElNRVJfRVhQSVJZLAorCVJNQ19BVFBfR1VBUkRfVElNRVJfRVhQSVJZLAorI2VuZGlmCisKKyNpZmRlZiBfX0xURV9SQVRfXworCQlSTUNfREVMQVlfSFBTX1RJTUVSX0VYUElSWSwgCisjZW5kaWYKKworI2lmZGVmIF9fQ01DQ18yM0dfUElOR1BPTkdfUkVTVFJBSU5fXworICAgIFJNQ18yRzNDUl9QSU5HX1BPTkdfVElNRVJfRVhQSVJZLAorICAgIFJNQ19WSVJUVUFMX1BJTkdfUE9OR19USU1FUl9FWFBJUlksCisjZW5kaWYKKworLyogc2hvdWxkIGFkZCBuZXcgdGltZXIgYmVmb3JlIFRERCBvbmx5IHRpbWVyIGJlbG93ICovCisjaWZkZWYgX18yR19QU19SRUpfQkFSX0NFTExfXworCVJNQ19QU19CQVJfVElNRVJfRVhQSVJZLAorI2VuZGlmCisjaWZkZWYgX18yR19DU19SRUpfQkFSX0NFTExfXworCQlSTUNfQ1NfQkFSX1RJTUVSX0VYUElSWSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1RDMDFfXykgJiYgZGVmaW5lZChfX01PREVNX0VNX01PREVfXykKKyAgICBSUk1fRU1fR0FTX1NFQVJDSF9JTkZPX1RJTUVSX0lELAorI2VuZGlmIC8qX19UQzAxX18gJiYgX19NT0RFTV9FTV9NT0RFX18qLworCisgICAgUlJNX0ZBS0VfQ0VMTF9BVVRPX1JFUE9SVF9USU1FUl9FWFBJUlksCisgICAgCisgICAgUk1DX1BBR0lOR19SRVRSWV9USU1FUl9FWFBJUlksCisgICAgLyogU2hvdWxkIGFkZCBuZXcgdGltZXIgYmVmb3JlIFJSTV9CQVNFX1RJTUVSX0lEICovCisgICAgUlJNX0VMRVZBVE9SX01PREVfVElNRVJfSUQsCisKKyAgICBSUk1fRUxFVkFUT1JfTU9ERV9USU1FUl9FWFBJUlksCisgICAgUlJNX01EX09OTFlfRUxFVkFUT1JfTU9ERV9USU1FUl9JRCwKKyAgICBSUk1fTURfT05MWV9FTEVWQVRPUl9NT0RFX1RJTUVSX0VYUElSWSwKKyAgICBSUk1fTURfT05MWV9FTEVWQVRPUl9NT0RFX0xURV9DQU1QSU5HX1RJTUVSX0lELAorICAgIFJSTV9NRF9PTkxZX0VMRVZBVE9SX01PREVfTFRFX0NBTVBJTkdfVElNRVJfRVhQSVJZLAorCisjaWYgZGVmaW5lZChfX05SX1JBVF9fKQorCVJSTV9NRF9PTkxZX0VMRVZBVE9SX01PREVfTlJfQ0FNUElOR19USU1FUl9JRCwKKyAgICBSUk1fTURfT05MWV9FTEVWQVRPUl9NT0RFX05SX0NBTVBJTkdfVElNRVJfRVhQSVJZLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTVRLX1RBUkdFVF9fKSAmJiBkZWZpbmVkKCBfX01EOTdfXykKKyAgICBSUk1fRUZVU0VfVElNRVJfSUQsCisjZW5kaWYgLyogZGVmaW5lZChfX01US19UQVJHRVRfXykgJiYgZGVmaW5lZCggX19NRDk3X18pICovCisKKyNpZmRlZiBfX05SX1JBVF9fCisgICAgUk1DXzVHX0JHX1NFQVJDSF9SRVNFTF9USU1FUl9FWFBJUlksCisjZW5kaWYgLyogX19OUl9SQVRfXyAqLworCisgICAgLyogdG90YWwgbnVtYmVyIG9mIFRJTUVSICovCisgICAgUlJNX0JBU0VfVElNRVJfSUQgIAorfSBybXBjX3RpbWVyX2lkX2VudW07CisKK3R5cGVkZWYgZW51bSB7CisgICAgVU1UU19URUNIX0ZERCA9IDAsCisgICAgVU1UU19URUNIX1RERCA9IDEKK30gdW10c190ZWNoX2VudW07CisKKy8qIHRoZSBjYW1wZWQgb24gY2VsbCB0eXBlICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBSUk1fU1VJVEFCTEVfQ0VMTCA9IDAsCisgICAgUlJNX0FDQ0VQVEFCTEVfQ0VMTCA9IDEsCisgICAgUlJNX05PX0NFTEwgPSAyCit9IHJybV9jZWxsX3R5cGVfZW51bTsKKworLyogcnJtX2xhX3R5cGVfZW51bSBzaG91bGQgbWF0Y2ggZm9yYmlkZGVuX2xhX3R5cGVfZW51bSAqLwordHlwZWRlZiBlbnVtCit7CisgICAgUlJNX0ZPUkJJRF9MQV9GT1JfUkVHX1BST1ZfT0ZfU0VSViA9IDAsCisgICAgUlJNX0ZPUkJJRF9MQV9GT1JfUk9BTUlORyA9IDEsCisgICAgUlJNX1VOS05PV05fTEEgPSAyLAorICAgIFJSTV9BTExPV0VEX0xBID0gMworLyogX19BUkFfRk9SX0NFTExfU0VMRUNUSU9OX18gYmVnaW4gKi8KKyAgICAsUlJNX0ZPUkJJRF9MQV9GT1JfTk9UX0FSQSA9IDQgICAgICAgICAgIAorLyogX19BUkFfRk9SX0NFTExfU0VMRUNUSU9OX18gZW5kICovIAorfSBycm1fbGFfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBQTE1OX0xFVkVMID0gMCwKKyAgICBMQV9MRVZFTCA9IDEsCisgICAgQ0VMTF9MRVZFTCA9IDIKK30gcnJtX21hdGNoX2NlbGxfbGV2ZWxfZW51bTsKKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSUk1fTk9fUEVORElOR19BQ1RJT04gPSAwLAorICAgIFJSTV9SQVRDTV9SRl9PTl9BQ1RJT04gPSAxLAorICAgIFJSTV9SQVRDTV9SRl9PRkZfQUNUSU9OID0gMiwKKyAgICBSUk1fUkFUQ01fREVBQ1RJVkFURV9BQ1RJT04gPSAzLAorICAgIFJSTV9SQVRDTV9QTE1OX1NFQVJDSF9BQ1RJT04gPSA0LAorICAgIFJSTV9SQVRDTV9QTE1OX0xJU1RfQUNUSU9OID0gNSwKKyAgICBSUk1fUkFUQ01fUExNTl9MSVNUX1NUT1BfQUNUSU9OID0gNiwKKyAgICBSUk1fUkFUQ01fUExNTl9MSVNUX0FGVEVSX1NFQVJDSF9BQ1RJT04gPSA3LAorICAgIFJSTV9SQVRDTV9QTE1OX0xJU1RfU1RPUF9BRlRFUl9TRUFSQ0hfQUNUSU9OID0gOCwKKyAgICBSUk1fUkFUQ01fUkVMX1NFTUFfQkVGT1JFX0RFQUNUSVZBVEVfQUNUSU9OID0gOSwgIC8qIF9fR0VNSU5JX18gKi8KKyAgICBSUk1fUlNWQV9GUkVRX1NDQU5fUFJFRU1QVF9BQ1RJT04gPSAxMCwgICAgICAgICAgIC8qIGZvciBSU1ZBICovCisgICAgUlJNX1JTVkFfUFJFRU1QVF9TRVJWSUNFX0FDVElPTiA9IDExLCAgICAgICAgICAgLyogZm9yIFJTVkEgKi8gICAgCisgICAgUlJNX1JDU19SRURJUkVDVElPTl9MSVNUX1RJTUVPVVQgPSAxMiwgICAgICAgICAgICAgLyogUjVSNiAqLworICAgIFJSTV9SQ1NfU1VTUEVORF9GVUxMX0JBTkRfUExNTl9TRUFSQ0ggPSAxMywgICAgICAgIC8qIF9fRkFTVF9ST0FNSU5HX1NFQVJDSF9fICovCisgICAgUlJNX1JBVENNX0dBU19TRVRfQUNUSVZFX1JBVF9BQ1RJT04gPSAxNCwgLyogZm9yIEZhc3QgcmVjb3ZlcnkgKi8KKyAgICBSUk1fUkFUQ01fQ09OTl9BQk9SVF9BQ1RJT04gPSAxNSwKKyAgICBSUk1fUkFUQ01fUExNTkxJU1RfQUJPUlRfQUNUSU9OID0gMTYsICAgIC8qTWFudWFsbHkgcmVwb3J0IGN1cnJlbnRseSByZWNvcmRlZCBQTE1OcyovCit9IHJybV9wZW5kaW5nX2FjdGlvbl9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSUk1fV0FJVF9GT1JfU0lNX1BPV0VSX09OX1JFQURZID0gMCwKKyAgICBSUk1fU0lNX0lTX1JFQURZID0gMSwKKyAgICBSUk1fV0FJVF9GT1JfU0lNX1JFQURZX0lORCA9IDIsCisgICAgUlJNX1BFTkRJTkdfU0lNX1JFQURZX0lORCA9IDMKK30gcnJtX3NpbV9yZWFkeV9zdGF0dXNfZW51bTsKKworLyogWlk6IHB1cnBvc2UgZm9yIGNvbXBvc2luZyB1Y2VsbCBsaXN0ICAqLwordHlwZWRlZiBlbnVtCit7CisgICAgSVJfTElTVF9OQlJfQ0VMTF9MSVNULCAKKyAgICBJUl9MSVNUX05CUl9DRUxMX0xJU1RfUExVU19SRVNFTF9MSVNUX0VYQ0xVREVfMlRFUl9GT1JfSVJfTUVBUywKKyAgICBJUl9MSVNUX05CUl9DRUxMX0xJU1RfUExVU19SRVNFTF9MSVNUX0lOQ0xVREVfMlRFUl9GT1JfSVJfTUVBUywKKyAgICBJUl9MSVNUX05CUl9DRUxMX0xJU1RfUExVU19SRVNFTF9MSVNUX0lOQ0xVREVfMlRFUl9GT1JfVVBEQVRFX1NDU0ksCisgICAgSVJfTElTVF9SRURJUkVDVElPTl9MSVNUICAvKiBaWSA6IFI2IHJlZGlyZWN0aW9uICovCit9IGNvbXBvc2VfdWNlbGxfbGlzdF9wdXJwb3NlX2VudW07CisKKyNpZmRlZiBfX0JBTkRfQkxPQ0tfXworLyogRm9yIExHIGJhbmQgYmxvY2sgZmVhdHVyZSAqLworCit0eXBlZGVmIGVudW0KK3sKKyAgICBCTE9DS19HU01fQkFORF84NTAgPSAwLAorICAgIEJMT0NLX0dTTV9CQU5EXzkwMCA9IDEsCisgICAgQkxPQ0tfR1NNX0JBTkRfMTgwMCA9IDIsCisgICAgQkxPQ0tfR1NNX0JBTkRfMTkwMCA9IDMKK30gYmxvY2tlZF9iYW5kX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFJSTV9CQVJSRURfQ0VMTF9GT1JfQkFORF9CTE9DSywKKyAgICBSUk1fQUNDRVBUQUJMRV9DRUxMX0ZPUl9CQU5EX0JMT0NLLAorICAgIFJSTV9TVUlUQUJMRV9DRUxMX0ZPUl9CQU5EX0JMT0NLCit9IHJybV9jZWxsX3R5cGVfZm9yX2JhbmRfYmxvY2tfZW51bTsKKwordHlwZWRlZiBlbnVtIAoreworICAgIFJSTV9CQU5EX0JMT0NLX0lOVkFMSUQgPSAwLAorICAgIFJSTV9CQU5EX0JMT0NLX1NQRUNJRklDX01OQyA9IDEsCisgICAgUlJNX0JBTkRfQkxPQ0tfQUxMX01OQ19JTl9TUEVDSUZJQ19NQ0MgPSAyLAorICAgIFJSTV9CQU5EX0JMT0NLX0FMTF9NQ0MgPSAzCit9IHJybV9iYW5kX2Jsb2NrX3R5cGVfZW51bTsKKworI2VuZGlmIC8qIF9fQkFORF9CTE9DS19fICovIAorCit0eXBlZGVmIGVudW0KK3sKKyAgICBCR19QTE1OX0xJU1RfTlVMTF9TVEFURSA9IDAsCisgICAgQkdfUExNTl9MSVNUX1BPV0VSX1NDQU5fU1RBVEUgPSAxLAorICAgIEJHX1BMTU5fTElTVF9CRUdJTl9TRUFSQ0hfU1RBVEUgPSAyLAorICAgIEJHX1BMTU5fTElTVF9OQlJfQlVSU1RfQUNDRVNTX1NUQVRFID0gMywKKyAgICBCR19QTE1OX0xJU1RfU1lOQ19GSVJTVF9DRUxMX0JTSUNfU1RBVEUgPSA0LAorICAgIEJHX1BMTU5fTElTVF9CVVJTVF9BQ0NFU1NfU1RBVEUgPSA1LAorICAgIEJHX1BMTU5fTElTVF9SRUFDSF9MQVNUX0FSRkNOX1NUQVRFID0gNiwKKyAgICBCR19QTE1OX0xJU1RfU1VTUEVORF9TVEFURSA9IDcsCisgICAgQkdfUExNTl9MSVNUX1BFTkRJTkdfVE9fV0FJVF9NU0dfU1RBVEUgPSA4ICAvKiBmb3IgUlNWQSAqLworfSByY3NfYmdfcGxtbl9saXN0X3N0YXRlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFJDU19VTktOT1dOX0ZSRVEgPSAwLAorICAgIFJDU19KVVNUX0dFVF9CU0lDID0gMSwKKyAgICBSQ1NfV0FJVF9TSTMgPSAyLAorICAgIFJDU19JTlZBTElEX0NFTEwgPSAzLAorICAgIFJDU19CQVJSRURfQ0VMTCA9IDQsCisgICAgUkNTX0xPV19QUklPX0NFTEwgPSA1LAorICAgIFJDU19OT1JNX1BSSU9fQ0VMTCA9IDYsCisgICAgUkNTX0VYQ0VFRF9CQU5EX0xJTUlUX0NFTEwgPSA3Cit9IHJjc19hcmZjbl90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFJDU19VTktOT1dOID0gMCwKKyAgICBSQ1NfTE9XX1FVQUxJVFkgPSAxLAorICAgIFJDU19ISUdIX1FVQUxJVFkgPSAyCit9IHJjc19wbG1uX3F1YWxpdHlfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUkNTX05PX1BPV0VSX1NDQU4gPSAwLAorICAgIFJDU19TVE9SRURfTElTVF9QT1dFUl9TQ0FOID0gMSwKKyAgICBSQ1NfRlVMTF9CQU5EX1BPV0VSX1NDQU4gPSAyLAorICAgIFJDU19XT1JLSU5HX0JBTkRfUE9XRVJfU0NBTiA9IDMsCisgICAgUkNTX0JHX0ZVTExfQkFORF9QT1dFUl9TQ0FOID0gNCwKKyAgICBSQ1NfQ0dJX1JFUE9SVElOR19QT1dFUl9TQ0FOID0gNQorfSByY3NfcG93ZXJfc2Nhbl9tb2RlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFJDU19NT0RFX05VTEwgPSAwLAorICAgIFJDU19NT0RFX0lfU0VRX0FDQ0VTU19NT0RFID0gMSwKKyAgICBSQ1NfTU9ERV9JSV9CVVJTVF9BQ0NFU1NfTU9ERSA9IDIsCisgICAgUkNTX01PREVfSUlJX0JHX0JVUlNUX0FDQ0VTU19NT0RFID0gMywKKyAgICBSQ1NfTU9ERV9JVl9CR19OQlJfQlVSU1RfQUNDRVNTX01PREUgPSA0LAorICAgIFJDU19NT0RFX1ZfQ0FNUF9PUklHX0NFTExfTU9ERSAgICAgICA9IDUgIC8qIF9fRkFTVF9SRVNVTUVfXyAqLworfSByY3NfY2VsbF9zZWxfbW9kZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBBTllfUFJJT1JJVFlfQ0VMTCA9IDAsCisgICAgSElHSF9QUklPUklUWV9DRUxMID0gMSwKKyAgICBMT1dfUFJJT1JJVFlfQ0VMTCA9IDIKK30gcmNzX2NlbGxfcHJpb3JpdHlfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgLyogdGhlIFBMTU4gaW5kZXggbGVzcyB0aGFuIFJDU19NQVhfUExNTl9JTkRFWCBpcyBhIHZhbGlkIHZhbHVlICovCisgICAgUkNTX01BWF9QTE1OX0lOREVYID0gTUFYX05VTV9QTE1OX1BFUl9SQVQsCisgICAgUkNTX0lOVkFMSURfUExNTl9JTkRFWCA9IDB4ZmUsCisgICAgUkNTX1BMTU5fVU5LTk9XTl9JTkRFWCA9IDB4ZmYKK30gcmNzX3BsbW5faW5kZXhfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUkNTX1RSSUdfTlVMTCA9IDAsCisgICAgUkNTX1RSSUdfQllfUkFUQ01fUExNTl9TRUFSQ0ggPSAxLAorICAgIFJDU19UUklHX0JZX1JBVENNX1BMTU5fTElTVCA9IDIsIC8qIFJlZmVyIHRvIFBMTU4gbGlzdCB0cmlnIHNvdXJjZSAqLworICAgIC8qIGNlbGwgcmVzZWxlY3Rpb24gZmFpbHVyZSB0cmlnZ2VycyBjZWxsIHNlbGVjdGlvbiAqLworICAgIFJDU19UUklHX0JZX0NFTExfUkVTRUxfRkFJTCA9IDMsCisgICAgUkNTX1RSSUdfQllfUExNTl9MSVNUX0FORF9DRUxMX1JFU0VMX0ZBSUwgPSA0LAorICAgIC8qIHJlZGlyZWN0aW9uOiAzRy0+MkcsIG9yIDRHLT4yRywgLi4uLCBldGMuICovCisgICAgUkNTX1RSSUdfQllfSVJfUkVESVJFQ1RJT04gPSA1LAorICAgIFJDU19UUklHX0JZX1BMTU5fTElTVF9BTkRfSVJfUkVESVJFQ1RJT04gPSA2LAorICAgIC8qIHJlZGlyZWN0aW9uIDJHLT4yRyAqLworICAgIFJDU19UUklHX0JZXzJHX1JFRElSRUNUSU9OID0gNywKKyAgICBSQ1NfVFJJR19CWV9QTE1OX0xJU1RfQU5EXzJHX1JFRElSRUNUSU9OID0gOCwKKyAgICAvKiBmYXN0IHJlY292ZXJ5ICovCisgICAgUkNTX1RSSUdfQllfRkFTVF9SRUNPVkVSWV9USU1FUl9FWFBJUkVEID0gOQorfSByY3NfdHJpZ19zb3VyY2VfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUkNTX1BMTU5fTElTVF9UUklHX05VTEwgPSAweDAwLAorICAgIFJDU19QTE1OX0xJU1RfVFJJR19CWV9OQVMgPSAweDAxLCAvKiBVc2VyIFBMTU4gbGlzdCBvciBNTSBsaXN0Ki8KKyAgICBSQ1NfUExNTl9MSVNUX1RSSUdfQllfQVMgPSAweDAyLCAvKiBDU0cgZmluZ2VycHJpbnQgY29sbGVjdGlvbiAqLworICAgIFJDU19QTE1OX0xJU1RfVFJJR19CWV9OQVNfQU5EX0FTID0gMHgwMworfSByY3NfcGxtbl9saXN0X3RyaWdfc291cmNlX2VudW07CisKKyNpZmRlZiBfX0dFTUlOSV9fCit0eXBlZGVmIGVudW0KK3sKKyAgICAvKiBhZnRlciByZXN1bWluZywgUlJNKFJDUykgc2hvdWxkIC4uLiAqLworICAgIFJDU19RVUVVRV9OVUxMX0VWRU5UID0gMCwgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8KKyAgICBSQ1NfUVVFVUVfUExNTl9TRUFSQ0hfRVZFTlQgPSAxLCAgICAvKiBkbyBQTE1OIHNlYXJjaCBpbiBjZWxsIHNlbGVjdGlvbiBzdGF0ZSAqLworICAgIFJDU19RVUVVRV9GR19QTE1OX0xJU1RfRVZFTlQgPSAyLCAgIC8qIGRvIFBMTU4gbGlzdCBpbiBjZWxsIHNlbGVjaXRvbiBzdGF0ZSAqLworICAgIFJDU19RVUVVRV9CR19QTE1OX0xJU1RfRVZFTlQgPSAzICAgIC8qIGRvIFBMTU4gbGlzdCBpbiBpbmFjdGl2ZSBzdGF0ZSAqLworfSByY3NfcXVldWVkX3BsbW5fZXZlbnRfZW51bTsKKworLyogX19HRU1JTklfSU1QUk9WRV9fICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBSQ1NfU0hBUkVfTk9fU0hBUklORyA9IDB4MDAwMCwKKyAgICBSQ1NfU0hBUkVfVVNJTkdfUEVFUl9TSU0xX1JFU1VMVCA9IDB4MDAwMSwgIC8qIHRoZSBiaXQgbWFwIG9mIHNoYXJpbmcgU0lNMSByZXN1bHQsIGkuZS4sIDB4IDAwMDAgMDAwMCAwMDAwIDAwMDEgKi8KKyAgICBSQ1NfU0hBUkVfVVNJTkdfUEVFUl9TSU0yX1JFU1VMVCA9IDB4MDAwMiwgIC8qIHRoZSBiaXQgbWFwIG9mIHNoYXJpbmcgU0lNMiByZXN1bHQsIGkuZS4sIDB4IDAwMDAgMDAwMCAwMDAwIDAwMTAgKi8KKyAgICBSQ1NfU0hBUkVfVVNJTkdfUEVFUl9TSU0zX1JFU1VMVCA9IDB4MDAwNCwgIC8qIHRoZSBiaXQgbWFwIG9mIHNoYXJpbmcgU0lNMyByZXN1bHQsIGkuZS4sIDB4IDAwMDAgMDAwMCAwMDAwIDAxMDAgKi8KKyAgICBSQ1NfU0hBUkVfVVNJTkdfUEVFUl9TSU00X1JFU1VMVCA9IDB4MDAwOCwgIC8qIHRoZSBiaXQgbWFwIG9mIHNoYXJpbmcgU0lNNCByZXN1bHQsIGkuZS4sIDB4IDAwMDAgMDAwMCAwMDAwIDEwMDAgKi8gICAgCisgICAgUkNTX1NIQVJFX1dJTExfU0hBUkVfVE9fUEVFUiA9IDB4ODAwMCAgICAgICAvKiB0aGUgYml0IG1hcCBmb3Igc2hhcmluZyB0byBwZWVyLCBpLmUuLCAweCAxMDAwIDAwMDAgMDAwMCAwMDAwICovCit9IHJjc19zaGFyZV9zY2FuX3N0YXR1c19lbnVtOworCisjaWZkZWYgX19VTVRTX1JBVF9fCit0eXBlZGVmIGVudW0KK3sKKyAgICBSQ1NfQ0VMTF9TUkNIX05VTEwgPSAwLCAgICAgICAgIC8qIHRoZXJlIGlzIG5vIFJDUyBwcm9jZWR1cmUgc2hhbGwgcHJvY2VzcyAqLworICAgIFJDU19DRUxMX1NSQ0hfUkVRVUVTVElORyA9IDEsICAgLyogc29tZSBSQ1MgcHJvY2VkdXJlIHNoYWxsIHByb2Nlc3MsIGFza2luZyBSU1ZBIGZvciByZXNlcnYgcmVzb3VyY2UgKi8KKyAgICBSQ1NfQ0VMTF9TUkNIX1dBSVRJTkcgPSAyLCAgICAgIC8qIHRoZSBSQ1MgcHJvY2VkdXJlIGNhbid0IHByb2Nlc3MsIGl0IG11c3Qgd2FpdCB0aGUgTDEgcmVzb3VyY2UgKi8KKyAgICBSQ1NfQ0VMTF9TUkNIX1JVTk5JTkcgPSAzLCAgICAgIC8qIHRoZSBSQ1MgcHJvY2VkdXJlIGlzIHByb2Nlc3NpbmcgKi8KKyAgICBSQ1NfQ0VMTF9TUkNIX1NUT1BQSU5HID0gNCAgICAgIC8qIHRoZSBSQ1MgcHJvY2VkdXJlIGlzIHN0b3BwaW5nIGZvciByZWxlYXNlIHRoZSBMMSByZXNvdXJjZSAqLworfSByY3NfcnN2YV9jZWxsX3NyY2hfc3RhdHVzX2VudW07CisjZW5kaWYgLyogX19VTVRTX1JBVF9fICovIAorCisjZW5kaWYgLyogX19HRU1JTklfXyAqLyAKKwordHlwZWRlZiBlbnVtCit7CisgICAgUkNTX1dBSVRfTlVMTCA9IDAsCisgICAgUkNTX1dBSVRfU0VUX1JBVF9TRVJWSUNFX0NORiA9IDEsICAgLyogZm9yIERFQUNUSVZBVEVfUkVRIGFuZCBQTE1OX0xpc3Rfc3RvcCBhY3Rpb24gISEhICovCisgICAgUkNTX1dBSVRfQ0VMTF9TRUxFQ1RJT05fSU5JVF9DTkYgPSAyLAorICAgIFJDU19XQUlUX1NFQVJDSF9SRl9DTkYgPSAzLCAgICAgICAgIC8qIHBlbmRpbmcgdG8gd2FpdCBTRUFSQ0hfUkZfQ05GICovCisgICAgUkNTX1dBSVRfQlNJQ19TWU5DX0NORiA9IDQsICAgICAgICAgLyogcGVuZGluZyB0byB3YWl0IEJTSUNfU1lOQ19DTkYgKi8KKworLyogZm9yIFJTVkEgKi8KKyAgICBSQ1NfV0FJVF9GU19TVEFSVF9DTkYgPSA1LCAgICAgICAgICAvKiBwZW5kaW5nIHRvIHdhaXQgRlJFUV9TQ0FOX1NUQVJUX0NORiAqLworICAgIFJDU19XQUlUX0ZTX0FDQ0VQVF9JTkQgPSA2LCAgICAgICAgIC8qIHBlbmRpbmcgdG8gd2FpdCBGUkVRX1NDQU5fQUNDRVBUX0lORCAqLworICAgIAorICAgIFJDU19XQUlUX09USEVSUyA9IDcgICAgICAgICAgICAgICAgIC8qIHJlc2VydmUgZm9yIGZlYXR1cmUgdXNlICovCit9IHJjc193YWl0X2NuZl90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFJDU19QTE1OX0xJU1RfTk9ORSAgICAgID0gMCwKKyAgICBSQ1NfUExNTl9MSVNUX1NUT1JFRCAgICA9IDEsCisgICAgUkNTX1BMTU5fTElTVF9OT1JNQUwgICAgPSAyCit9IHJjc19saXN0X3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUkNTX0ZVTExfQkFORF9TQ0FOX0lOVkFMSUQsCisgICAgUkNTX0ZVTExfQkFORF9TQ0FOX0lOX1BST0dSRVNTLAorICAgIFJDU19GVUxMX0JBTkRfU0NBTl9TVVNQRU5ERUQsCisgICAgUkNTX0ZVTExfQkFORF9TQ0FOX0ZJTklTSEVELAorfSByY3NfZnVsbF9iYW5kX3NjYW5fc3RhdHVzX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIEFQUF9VUExJTktfU0VORElOR19OT1RfQUxMT1dFRCA9IDAsIC8qIGluaXRpYWwgdmFsdWUgb3IgUlIgY29ubmVjdGlvbiBpcyByZWxlYXNlZCAqLworICAgIEFQUF9VUExJTktfU0VORElOR19BTExPV0VEID0gMSwgICAgIC8qIHdoZW4gcmVjZWl2aW5nIGZpcnN0IERMIGFwcCBkYXRhICovCisgICAgQVBQX1VQTElOS19TRU5ESU5HX1NVU1BFTkQgPSAyICAgICAgLyogd2hlbiByZWNlaXZpbmcgUlIgbWFuYWdlLiBtZXNnICovCit9IGFwcF91cGxpbmtfc2VuZGluZ19zdGF0dXNfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgR1NNX01PREUsCisgICAgR1BSU19DQ0NIX01PREUsCisgICAgR1BSU19QTU9fQ0NDSF9NT0RFLAorICAgIEdQUlNfUENDQ0hfTU9ERQorfSBtZWFzX21vZGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgR1BSU19OQ19NRUFTLAorICAgIEdQUlNfRVhUX01FQVMsCisgICAgR1BSU19FTkhfTUVBUworfSBtZWFzX3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgRU5IX01SLAorICAgIE5PUk1BTF9NUgorfSBtZWFzX3JwX2VudW07CisKKyNkZWZpbmUgX0VOSF9QQVJBTVNfU1JDX0VOVU0KK3R5cGVkZWYgZW51bQoreworICAgIFNSQ19JTlZBTElELAorICAgIFNSQ19TSSwKKyAgICBTUkNfTUksCisgICAgU1JDX1BTSSwKKyAgICBTUkNfUE1PLAorICAgIFNSQ19ERUZBVUxUCit9IGVuaF9wYXJhbXNfc3JjX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIExBWUVSX0RFRkFVTFQsCisgICAgTEFZRVJfQlJPQURDQVNULAorICAgIExBWUVSX0lORElWSURVQUwKK30gbWVhc19wYXJhbXNfbGF5ZXJfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQ1NfQ09OVEVYVCA9IDAsCisgICAgUFNfQ09OVEVYVCwKKyAgICBDU19BTkRfUFNfQ09OVEVYVAorfSBERVNfQ09OVEVYVDsgIC8qIGRlc3RpbmF0aW9uIGNvbnRleHQgKi8KKwordHlwZWRlZiBlbnVtIE5DX01PREUKK3sKKyAgICBOQzAgPSAwLAorICAgIE5DMSwKKyAgICBOQzIsCisgICAgTkNfUkVTRVQsCisgICAgCisgICAgLyogU3RhbmxleUhZOiB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBTSTJRIChvbmx5IHVzZWQgYnkgU0kyUSkgKi8KKyAgICBOQ19OVUxMIAorfSBOQ19NT0RFOworCit0eXBlZGVmIGVudW0gTkNfUEFSQU1fU1JDCit7CisgICAgTkNfREFGQVVMVF9WQUxVRSA9IDAsCisgICAgTkNfU0kyUSwKKyAgICBOQ19TSTEzLAorICAgIE5DX1BTSTUsCisgICAgTkNfUE1PX1BDQ08KK30gTkNfUEFSQU1fU1JDOworCit0eXBlZGVmIGVudW0gRU1fTU9ERQoreworICAgIEVNMCA9IDAsCisgICAgRU0xLAorICAgIEVNX1JFU0VSViwKKyAgICBFTV9SRVNFVAorfSBFTV9NT0RFOworCit0eXBlZGVmIGVudW0gQlNJQ19NT0RFICAvKiAwMy0yOS0yMDAzLCBhZGQgKi8KK3sKKyAgICBQUklPUklUWV9NT0RFID0gMCwKKyAgICBSRUFTU0VSVF9NT0RFLAorICAgIFNFQ09ORF9QUklPUklUWV9NT0RFCit9IEJTSUNfTU9ERTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgU09SVF9QVVJQT1NFX0JTSUNfR0VORVJBTCA9IDAsCisgICAgU09SVF9QVVJQT1NFX01FQVNfUkVQLAorICAgIFNPUlRfUFVSUE9TRV9FTkhfTUVBU19SRVAsCisgICAgU09SVF9QVVJQT1NFX0JTSUNfREVESV9SRUNPTkZJUk0KKyAgICAvKlFKWkg6W0RdWzIwMTAuMDUuMjJdIHJlZHVuZGFudCBjb2RlKi8KKyAgICAvL1NPUlRfUFVSUE9TRV9BVFRFTVBfQ09VTlRFUgorfSBTT1JUX1BVUlBPU0U7CisKK3R5cGVkZWYgZW51bSBSTUNfSU5ESVZfUEFSQV9TUkMKK3sKKyAgICBSTUNfSU5ESVZfUEFSQV9TUkNfUE1PLAorICAgIFJNQ19JTkRJVl9QQVJBX1NSQ19QQ0NPCit9IFJNQ19JTkRJVl9QQVJBX1NSQzsKKwordHlwZWRlZiBlbnVtIElORElWX1BBUkFfSERMX1NUQVRVUworeworICAgIElORElWX1BBUkFfSERMX05PVF9ERUNPREUgPSAwLAorICAgIElORElWX1BBUkFfSERMX05PVF9BUFBMSUVELAorICAgIElORElWX1BBUkFfSERMX1BBUlRJQUxfQVBQTElFRF9XT19TSTJULAorICAgIElORElWX1BBUkFfSERMX1BBUlRJQUxfQVBQTElFRF9XSVRIX1NJMlQsCisgICAgSU5ESVZfUEFSQV9IRExfQUxMX0FQUExJRUQKK30gSU5ESVZfUEFSQV9IRExfU1RBVFVTOworCit0eXBlZGVmIGVudW0gUk1QQ19NRUFTX1RSQU5TX0lECit7CisgICAgUk1QQ19UUkFOU0FDVElPTl9JRF8wID0gMCwKKyAgICBSTVBDX1RSQU5TQUNUSU9OX0lEXzEKK30gUk1QQ19NRUFTX1RSQU5TX0lEOworCit0eXBlZGVmIGVudW0gRVhUX1JFUE9SVElOR19UWVBFCit7CisgICAgRVhUX1JFUE9SVElOR19UWVBFMSA9IDAsCisgICAgRVhUX1JFUE9SVElOR19UWVBFMiwKKyAgICBFWFRfUkVQT1JUSU5HX1RZUEUzLAorICAgIEVYVF9SRVBPUlRJTkdfVFlQRV9SRVNFUlYKK30gRVhUX1JFUE9SVElOR19UWVBFOworCit0eXBlZGVmIGVudW0gUk1QQ19JU19IT1BQSU5HCit7CisgICAgUk1QQ19OT1RfSE9QUElORyA9IDAsCisgICAgUk1QQ19IT1BQSU5HCit9IFJNUENfSVNfSE9QUElORzsKKwordHlwZWRlZiBlbnVtIEJBX1VQREFURV9UWVBFCit7CisgICAgUkVTRUxfU1RBUlQsCisgICAgUkVTRUxfRU5ELAorICAgIE5PUk1fQkFfVVBEQVRFCit9IEJBX1VQREFURV9UWVBFOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBVTVRTX1BBUkFfRlJPTV9TSTJUID0gMCwKKyAgICBVTVRTX1BBUkFfRlJPTV9TSTJRID0gMSwKKyAgICBVTVRTX1BBUkFfRlJPTV9QU0kzUSA9IDIsCisgICAgVU1UU19QQVJBX0ZST01fUFNJNSA9IDMsCisgICAgVU1UU19QQVJBX0ZST01fTUkgPSA0LAorICAgIFVNVFNfUEFSQV9GUk9NX1BNTyA9IDUsCisgICAgVU1UU19QQVJBX0ZST01fUENDTyA9IDYKK30gdW10c19wYXJhX3NyY19lbnVtOworCisjaWYgZGVmaW5lZChfX0xURV9SQVRfXykgfHwgZGVmaW5lZChfXzIzR19QUklfUkVTRUxfU1VQUE9SVF9fKQordHlwZWRlZiBlbnVtCit7CisgICBQUklPX0NPTVBBUklTT05fSU5WQUxJRCwKKyAgIFBSSU9fQ09NUEFSSVNPTl9MT1dFUiwKKyAgIFBSSU9fQ09NUEFSSVNPTl9ISUdIRVIKK30gcHJpb19jb21wYXJpc29uX2VudW07CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9fTFRFX1JBVF9fKSB8fCBkZWZpbmVkKF9fMjNHX1BSSV9SRVNFTF9TVVBQT1JUX18pICovCisKK3R5cGVkZWYgZW51bQoreworICAgIEVNUl9DQVVTRV9OVUxMLAorICAgIEVNUl9DQVVTRV9OT19CU0lDX0lORk8sCisgICAgRU1SX0NBVVNFX0JTSUNfSU5GT19OT1RfQ09NUExFVEUsCisgICAgRU1SX0NBVVNFX0JBX05PVF9GVUxMLAorICAgIEVNUl9DQVVTRV9CQV9JTkRfTk9UX01BVENICit9IGVtcl9ub3RfYWxsb3dfY2F1c2VfZW51bTsKKwordHlwZWRlZiBlbnVtIE5CUl9SRVNFVF9DQVVTRQoreworICAgIEJTSUNfQ0hBTkdFLAorICAgIEJTSUNfREVDT0RFX0ZBSUxVUkUsCisgICAgQlNJQ19FWENFRURJTkdfQVRURU1QVF9DT1VOVEVSLAorICAgIE5CQ0NIX0RFQ09ERV9GQUlMVVJFCit9IE5CUl9SRVNFVF9DQVVTRTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgTkNFTExfU1JDX0lOVkFMSUQsCisgICAgTkNFTExfU1JDX1NJMiwgICAgICAvKiBTRUxfUEFSQU06IDAgKi8KKyAgICBOQ0VMTF9TUkNfU0k1LCAgICAgIC8qIFNFTF9QQVJBTTogMCAqLworICAgIE5DRUxMX1NSQ19TSTJOLCAgICAgLyogU0VMX1BBUkFNOiAxICovCisgICAgTkNFTExfU1JDX1BTSSwgICAgICAvKiBTRUxfUEFSQU06IDEgKi8KKyAgICBOQ0VMTF9TUkNfUE1PX1BDQ08gIC8qIFNFTF9QQVJBTTogMSAqLworfSBOQ0VMTF9QQVJBTV9TUkM7CisKKyNpZiBkZWZpbmVkKF9fR0FTX0lOVEVSTkFMX0lUX18pIHx8IChkZWZpbmVkKF9fTU9ERU1fRU1fTU9ERV9fKSAmJiBkZWZpbmVkKF9fQ0hBTk5FTF9MT0NLX18pKQordHlwZWRlZiBlbnVtCit7CisgICAgUlJfUkVESVJFQ1RJT05fT0ZGLAorICAgIFJSX1JFRElSRUNUSU9OX0dTTSwKKyAgICBSUl9SRURJUkVDVElPTl9GREQsCisgICAgUlJfUkVESVJFQ1RJT05fVERELCAvKiBUREQgY3VycmVudCBpcyBub3Qgc3VwcG9ydGVkICovCisgICAgUlJfUkVESVJFQ1RJT05fTFRFCit9IHJlZGlyZWN0aW9uX2l0X3Rlc3RfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUlJfQ0NPX09GRiAgICAgICAgICAgICAgICA9IDAsCisgICAgUlJfQ0NPX0dTTV9XSVRIX0lNX1JFTCAgICA9IDEsCisgICAgUlJfQ0NPX0dTTV9XT19JTV9SRUwgICAgICA9IDIsCisgICAgUlJfQ0NPX0ZERF9XSVRIX0lNX1JFTCAgICA9IDMsCisgICAgUlJfQ0NPX0ZERF9XT19JTV9SRUwgICAgICA9IDQsCisgICAgUlJfQ0NPX1RERF9XSVRIX0lNX1JFTCAgICA9IDUsICAgLyogVEREIGN1cnJlbnQgaXMgbm90IHN1cHBvcnRlZCAqLworICAgIFJSX0NDT19URERfV09fSU1fUkVMICAgICAgPSA2LCAgLyogVEREIGN1cnJlbnQgaXMgbm90IHN1cHBvcnRlZCAqLworICAgIFJSX0NDT19MVEVfV0lUSF9JTV9SRUwgICAgPSA3LCAgICAKKyAgICBSUl9DQ09fTFRFX1dPX0lNX1JFTCAgICAgID0gOAorfSBjY29faXRfdGVzdF9lbnVtOworI2VuZGlmIC8qIGRlZmluZWQoX19HQVNfSU5URVJOQUxfSVRfXykgfHwgKGRlZmluZWQoX19NT0RFTV9FTV9NT0RFX18pICYmIGRlZmluZWQoX19DSEFOTkVMX0xPQ0tfXykpICovCisKK3R5cGVkZWYgZW51bQoreworICAgIFJFUE9SVF9UWVBFX1ZBTElEX0JTSUNfR1NNX0NFTEwKKyAgICAsIFJFUE9SVF9UWVBFX0lOVkFMSURfQlNJQ19HU01fQ0VMTAorI2lmZGVmIF9fVU1UU19SQVRfXyAgICAKKyAgICAsIFJFUE9SVF9UWVBFX1VNVFNfQ0VMTAorICAgICwgUkVQT1JUX1RZUEVfVU1UU19GUkVRCisjZW5kaWYgLyogX19VTVRTX1JBVF9fICovCisjaWZkZWYgX19MVEVfUkFUX18KKyAgICAsIFJFUE9SVF9UWVBFX0xURV9DRUxMCisjZW5kaWYgLyogX19MVEVfUkFUX18gKi8KK30gcmVwb3J0X2NhbmRpZGF0ZV90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIE1FQVNfUkVQT1JUX0lORk9fVFlQRV9JTlZBTElECisgICAgLCBNRUFTX1JFUE9SVF9JTkZPX1RZUEVfTVIKKyAgICAsIE1FQVNfUkVQT1JUX0lORk9fVFlQRV9FTVIKKyNpZmRlZiBfX1BTX1NFUlZJQ0VfXworICAgICwgTUVBU19SRVBPUlRfSU5GT19UWVBFX1BNUgorICAgICwgTUVBU19SRVBPUlRfSU5GT19UWVBFX1BFTVIKKyAgICAsIE1FQVNfUkVQT1JUX0lORk9fVFlQRV9QQ0NOCisjZW5kaWYgLyogIF9fUFNfU0VSVklDRV9fICovCit9IG1lYXNfcmVwb3J0X2luZm9fdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBQQ0NOX1RBUkdFVF9DRUxMX0lOVkFMSUQKKyAgICAsIFBDQ05fR1NNX1RBUkdFVF9DRUxMCisjaWZkZWYgX19VTVRTX1JBVF9fCisgICAgLCBQQ0NOX1VNVFNfTk9STUFMX1RBUkdFVF9DRUxMCisjZW5kaWYgLyogX19VTVRTX1JBVF9fICovCisjaWZkZWYgX19MVEVfUkFUX18KKyAgICAsIFBDQ05fTFRFX05PUk1BTF9UQVJHRVRfQ0VMTAorI2VuZGlmIC8qIF9fTFRFX1JBVF9fICovCit9IHBjY25fdGFyZ2V0X2NlbGxfdHlwZV9lbnVtOworCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmIC8qIDAgKi8gCisKK3R5cGVkZWYgZW51bQoreworICAgIFJNQ19UQkZfVVBMSU5LX0FTU0lHTiwKKyAgICBSTUNfVEJGX0RPV05MSU5LX0FTU0lHTgorfQorcm1jX2Fzc2lnbl90eXBlOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSTUNfSU5WQUxJRF9DSEFOTkVMLAorICAgIFJNQ19GSVJTVF9IUl9DSEFOTkVMLAorICAgIFJNQ19TRUNfSFJfQ0hBTk5FTAorfQorcm1jX3BhcnRpYWxfcmVsX2NoYW5fZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQ1NfQ09OTl9OT05FLAorICAgIENTX0NPTk5fTDJfUkVMX0lORCwKKyAgICBDU19DT05OX1JSX1JFTF9SRVEsCisgICAgQ1NfQ09OTl9UMzExMF9FWFAsCisgICAgQ1NfQ09OTl9MMl9FUlJPUl9SRUVTVCwKKyAgICBDU19DT05OX05XX1JFTCwKKyAgICAvKiBaWSwgcmV2aXNlIFJSIHJlbC9hYm9ydCBzY2hlbWUgaW4gYWNjZXNzIHN0YXRlICovCisgICAgQ1NfQ09OTl9BQk9SVF9SRVEsCisgICAgLyogQWRlbGluZSAyMDA5LjQuMjQ6IGZvciBQQ0NPIHByb2NlZHVyZSAqLworICAgIFQzMTc0X1RJTUVSX0VYUElSWSwKKyAgICBDQ09fVElNRVJfRVhQSVJZLAorICAgIERFQUNUSVZBVEVfUkVRLAorICAgIFBMTU5fU0VBUkNIX1JFUSwKKyAgICBQRUVSX0FTX0FCT1JUX1JFUQorfSBjc19jb25uX2Rpc2NfY2F1c2VfZW51bTsKKworI2lmIGRlZmluZWQoX19DU19TRVJWSUNFX18pICYmIGRlZmluZWQoX19QU19TRVJWSUNFX18pCit0eXBlZGVmIGVudW0KK3sKKyAgICBSTUNfRU1FUkdFTkNZX0NBTEwgPSAwLAorICAgIFJNQ19NT19DQUxMID0gMCwKKyAgICBSTUNfQ0FMTF9SRV9FU1RBQkxJU0hNRU5UID0gMCwKKyAgICBSTUNfTE9DQVRJT05fQVJFQV9VUERBVEUsCisgICAgUk1DX01PX1NNUywKKyAgICBSTUNfT1RIRVJfUFJPQ0VEVVJFX09OX1NEQ0NILAorICAgIFJNQ19NT19WT0lDRV9CUk9BRENBU1RfT1JfR1JPVVBfQ0FMTCwKKyAgICBSTUNfTVRfQ1NfQ09OTkVDVElPTiwKKyAgICBSTUNfRFRNX05PX1NVUFBPUlRFRAorfSBncHJzX3N1c3BlbnNpb25fY2F1c2VfZW51bTsKKyNlbmRpZiAvKiBkZWZpbmVkKF9fQ1NfU0VSVklDRV9fKSAmJiBkZWZpbmVkKF9fUFNfU0VSVklDRV9fKSAqLyAKKwordHlwZWRlZiBlbnVtCit7CisgICAgUk1DX0RMLAorICAgIFJNQ19CSQorfQorRElSRUNUSU9OOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTX1JNQ19DSVBIRVJJTkdfT0ZGID0gMCwKKyAgICBTX1JNQ19DSVBIRVJfQUxHT181XzEsCisgICAgU19STUNfQ0lQSEVSX0FMR09fNV8yLAorICAgIFNfUk1DX0NJUEhFUl9BTEdPXzVfMywKKyAgICBTX1JNQ19DSVBIRVJfQUxHT181XzQsCisgICAgU19STUNfQ0lQSEVSX0FMR09fNV81LAorICAgIFNfUk1DX0NJUEhFUl9BTEdPXzVfNiwKKyAgICBTX1JNQ19DSVBIRVJfQUxHT181XzcKK30KK0NJUEhFUl9BTEdPX1RZUEU7CisKK3R5cGVkZWYgZW51bQoreworICAgIFJNQ19OT1RfQ0lQSEVSRURfTU9ERSA9IDAsCisgICAgUk1DX0NJUEhFUkVEX01PREUKK30KK01TX0NJUEhFUl9NT0RFX0VOVU07CisKKy8qIFVzZSBjaGFubmVsX21vZGVfZW51bSBpbiBtcGFsX2NvbW1vbl9pbnRlcmZhY2UuaCAqLworI2lmIDAgICAvKiBDbGFpcmUgZGVsICovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLyogMCAqLyAKKwordHlwZWRlZiBlbnVtCit7CisgICAgUk1DX0ZJUlNUX0NIQU5ORUwsCisgICAgUk1DX1NFQ09ORF9DSEFOTkVMLAorICAgIFJNQ19CT1RIX0NIQU5ORUxTCit9CitDSEFOX05VTUJFUl9FTlVNOworCisvKiBFbmQgQ2xhaXJlIGFkZCAqLworCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2lmbmRlZiBfX0dFUkFOX1I1X18gICAgICAgIAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmIC8qIF9fR0VSQU5fUjVfXyAqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2lmZGVmIF9fVU1UU19SQVRfXworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2lmZGVmIF9fMjNHX1BSSV9SRVNFTF9TVVBQT1JUX18KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAvKiBfXzIzR19QUklfUkVTRUxfU1VQUE9SVF9fICovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLyogX19VTVRTX1JBVF9fICovIAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2lmZGVmIF9fM0dfQ1NHX1NVUFBPUlRfXworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmIC8qIF9fM0dfQ1NHX1NVUFBPUlRfXyAqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2lmZGVmIF9fR0VSQU5fUjZfXworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmIC8qIF9fR0VSQU5fUjZfXyAqLyAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNpZmRlZiBfX0FHUFNfQ09OVFJPTF9QTEFORV9fCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLyogX19BR1BTX0NPTlRST0xfUExBTkVfXyAqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2lmZGVmIF9fRVRXU19TVVBQT1JUX18KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAvKiBfX0VUV1NfU1VQUE9SVF9fICovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjaWZkZWYgX19HRVJBTl9SNF9fCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLyogX19HRVJBTl9SNF9fICovIAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKKy8qIEFkZWxpbmUgMjAwOC4xMi4zMCAqLwordHlwZWRlZiBlbnVtCit7CisgICAgQ0NfTlVMTCwKKyAgICBDQ19OT1JNQUxfQkVHSU4gPSBDQ19OVUxMLAorICAgIENDX05PUk1BTF9DMV9CQVNFRCwKKyAgICBDQ19OT1JNQUxfQzJfQkFTRUQsCisgICAgQ0NfTk9STUFMX0MzMl9CQVNFRCwKKyAgICBDQ19OT1JNQUxfUkxDX1RSSUdHRVIsCisgICAgQ0NfTk9STUFMX0VORCwKKyAgICBDQ19BQk5PUk1BTF9CRUdJTiA9IENDX05PUk1BTF9FTkQsCisgICAgQ0NfQUJOT1JNQUxfRFNGX1RSSUdHRVIsCisgICAgQ0NfQUJOT1JNQUxfQ0JBX1RSSUdHRVIsCisgICAgQ0NfQUJOT1JNQUxfU0lfVFJJR0dFUiwKKyAgICBDQ19BQk5PUk1BTF9fVDMxMjZfVFJJR0dFUiwKKyAgICBDQ19BQk5PUk1BTF9STENfVFJJR0dFUiwKKyAgICBDQ19BQk5PUk1BTF9FTkQsCisgICAgQ0NfTldfQ1RSTF9CRUdJTiA9IENDX0FCTk9STUFMX0VORCwKKyAgICBDQ19OV19DVFJMX1BDQ08sCisgICAgQ0NfTldfQ1RSTF9QU19ITywKKyAgICBDQ19OV19DVFJMX0VORCwKKyAgICBDQ19DQUxMX1JFX0VTVF9UUklHR0VSCisgICAgLyogWlkgOiBSNiByZWRpcmVjdGlvbiAqLworI2lmIGRlZmluZWQoX19GRERfUkVESVJFQ1RJT05fXykgfHwgZGVmaW5lZChfX1VNVFNfUjZfXykKKyAgICAsIENDX05XX0NUUkxfUkVESVJFQ1RJT04KKyNlbmRpZiAvKiBkZWZpbmVkKF9fRkREX1JFRElSRUNUSU9OX18pIHx8IGRlZmluZWQoX19VTVRTX1I2X18pICovCisjaWYgZGVmaW5lZChfX1VNVFNfUkFUX18pJiYgZGVmaW5lZChfX0NNQ0NfU1REX0ZSX18pCisJICAsQ0NfTldfQ1RSTF9TVERfRlIKKyNlbmRpZgorI2lmZGVmIF9fTFRFX1JBVF9fCisgICAgLCBDQ19NU19DVFJMX0xURV9BVVRPX0ZBU1RfUkVUVVJOCisgICAgLCBDQ19OV19DVFJMX1JFRElSRUNUSU9OX0FGVEVSX0NTRkIKKyAgICAsIENDX01TX0NUUkxfTFRFX0JHX1NSQ0gKKyAgICAsIENDX0lSX0hTUl9DUgorI2VuZGlmIC8qIF9fTFRFX1JBVF9fICovCisjaWYgZGVmaW5lZChfX1VNVFNfUkFUX18pICYmIGRlZmluZWQoX19UQzdfX0NTX19TVVBQT1JUX18pCisgICAgLCBDQ19NU19DVFJMX1VNVFNfRkFTVF9SRVRVUk4KKyNlbmRpZgorI2lmZGVmIF9fTlJfUkFUX18KKyAgICAsIENDX01TX0NUUkxfTlJfQkdfU1JDSAorICAgICwgQ0NfTVNfQ1RSTF9OUl9BVVRPX0ZBU1RfUkVUVVJOCisjZW5kaWYgLyogX19OUl9SQVRfXyAqLworCit9IENFTExfQ0hBTkdFX1RZUEVfRU5VTTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgQ0VMTF9DSEFOR0VfTlVMTF9QSEFTRSA9IDAsCisgICAgQ0VMTF9DSEFOR0VfU0VSVl9CU0lDX1JFUV9QSEFTRSwKKyAgICBDRUxMX0NIQU5HRV9BQk9SVElOR19QSEFTRSwKKyAgICBDRUxMX0NIQU5HRV9ORUlHSEJPVVJfQlNJQ19SRVFfUEhBU0UsCisgICAgQ0VMTF9DSEFOR0VfTkVJR0hCT1VSX1NJX0NPTExFQ1RJT05fUEhBU0UsCisgICAgLyogZm9yIFBDQ08gb25seSAqLworICAgIENFTExfQ0hBTkdFX1NFUlZfU0lfQ09MTEVDVElPTl9QSEFTRSwKKyAgICBDRUxMX0NIQU5HRV9XQUlUX0ZPUl9DT05URU5USU9OX1BIQVNFCit9IENFTExfQ0hBTkdFX1BIQVNFX0VOVU07CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKworI2lmZGVmIF9fQ0JfXworCisvKiAwNDAxMTYgLCB3ZSBuZWVkIHRvIGlzb2xhdGUgdGhlIGVudW0gdmFsdWUgZnJvbQorICAgUlIgdG8gTVBBTCBmb3IgYnVnIGZpeDogZXJyb3IgbWVtb3J5IHdyaXRlICggQ0IgZGF0YSAKKyAgIGZvciBDQkNIX01PREVfTk9STUFMIGFuZCBDQkNIX01PREVfRVhURU5ERUQgKi8KK2VudW0KK3sKKyAgICBDQkNIX01PREVfTk9STUFMID0gMCwKKyAgICBDQkNIX01PREVfRVhURU5ERUQsCisgICAgQ0JDSF9NT0RFX0lOVkFMSUQKK307ICAvKiBDQkNoIG1vZGUgKi8KKworZW51bQoreworICAgIENCQ0hfTU9ERV9JTlZBTElEX1RPX01QQUwgPSAwLAorICAgIENCQ0hfTU9ERV9OT1JNQUxfVE9fTVBBTCwKKyAgICBDQkNIX01PREVfRVhURU5ERURfVE9fTVBBTAorfTsgIC8qIENCQ2ggbW9kZSAqLworCitlbnVtCit7CisgICAgQ0JDSF9TVEFSVCA9IDAsCisgICAgQ0JDSF9TVE9QCit9OyAgLyogVGhlIGRlZmluaXRpb24gb2YgY2IgYWN0aW9uICovCisKK2VudW0KK3sKKyAgICBDQkNIX0FDQ0VQVCA9IDAsCisgICAgQ0JDSF9JR05PUkUKK307CisKK2VudW0KK3sKKyAgICBDQl9TVEFURV9PRkYgPSAwLAorICAgIENCX1NUQVRFX09OCit9OyAgLyogVGhlIGRlZmluaXRpb24gb2YgY2JjaFN0YXRlICovCisKK2VudW0KK3sKKyAgICBDQl9OT19EUlhfTU9ERSA9IDAsCisgICAgQ0JfRFJYX01PREUsCisgICAgLyogUGV0ZXI6W0NCXSBUaGUgZm9sbG93aW5nIHR3byBlbnVtIGlzIG5vdCB1c2VkID8/ICovCisgICAgQ0JfRklSU1RfRFJYX01PREUsCisgICAgQ0JfU0VDT05EX0RSWF9NT0RFCit9OyAgLyogVGhlIGRlZmluaXRpb24gb2Ygc2NoZWR1bGVNb2RlICovCisKK2VudW0KK3sKKyAgICBDQl8xQ0IgPSAwLAorICAgIENCXzJCLAorICAgIENCXzNCLAorICAgIENCXzRCLAorICAgIENCXzFTQiA9IDgsCisgICAgQ0JfTkIgPSAxNQorfTsgIC8qIFRoZSBkZWZpbml0aW9uIG9mIHNlcXVlbmNlIG51bWJlciBjb2RpbmcgKi8KKworZW51bQoreworICAgIENCX0NCX01FU1NBR0UgPSAwLAorICAgIENCX1NDSEVEVUxFX01FU1NBR0UKK307ICAvKiBDQlMgTWVzc2FnZSBUeXBlMSAqLworCitlbnVtCit7CisgICAgQ0JfRFdOTEQgPSAwLAorICAgIENCX0RJU1BMQVkKK307ICAvKiBDQlMgTWVzc2FnZSBUeXBlMiAqLworCisvKiBCeXJvbjogMjAwNS8xMi8xNDogRm9yIHNjaGVkdWxlIENCIG1lc3NhZ2UgaGFuZGxpbmcgKi8KK3R5cGVkZWYgZW51bQoreworICAgIENCX05PX1NDQl9SRUNFSVZFRCA9IDAsCisgICAgQ0JfRklSU1RfU0NCX1JFQ0VJVkVELAorICAgIENCX1NDQl9DQU5fQkVfVVNFRAorfSBzY2JfZW51bTsgLyogQ0JTIE1lc3NhZ2UgVHlwZTIgKi8KKworI2VuZGlmIC8qIF9fQ0JfXyAqLyAKKworLyogWlk6IGFkZCBmb3IgQU1SLVdCICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBBTVJfTk9OID0gMCwgICAgICAgICAgICAvKiBmb3Igbm9uLUFNUiBjaGFubmVsIG1vZGUgKi8KKyAgICBBTVJfTkIgICAgICAgICAgICAgICAgICAvKiBmb3IgQU1SIG5hcnJvdyBiYW5kIGNoYW5uZWwgbW9kZSAqLworI2lmZGVmIF9fQU1SV0JfTElOS19TVVBQT1JUX18KKyAgICAgICAgLCBBTVJfV0IgICAgICAgICAgICAvKiBmb3IgQU1SIHdpZGUgYmFuZCBjaGFubmVsIG1vZGUgKi8KKyNlbmRpZiAKK30gY2hhbm5lbF9tb2RlX3N0YXR1c19lbnVtOyAvKiBpdCBpcyB1c2VkIGZvciBjaGVja2luZyBtdWx0aXJhdGUgY29uZmlndXJhdGlvbiAqLworCisvKiBaWSA6IFI2IHJlZGlyZWN0aW9uICovCisjaWYgZGVmaW5lZChfX0dFUkFOX1I2X18pIHx8IGRlZmluZWQoX19VTVRTX1I2X18pIHx8IGRlZmluZWQgKF9fRkREX1JFRElSRUNUSU9OX18pIHx8IGRlZmluZWQoX19MVEVfUkFUX18pCit0eXBlZGVmIGVudW0KK3sKKyAgICBSRURJUkVDVF9UT19HU00gPSAwLAorICAgIFJFRElSRUNUX1RPX1VUUkFOX0ZERCA9IDEsCisgICAgUkVESVJFQ1RfVE9fVVRSQU5fVEREID0gMiwKKyAgICBSRURJUkVDVF9UT19MVEUgPSAzCit9IHJlZGlyZWN0aW9uX2VudW07CisjZW5kaWYgLyogZGVmaW5lZChfX0dFUkFOX1I2X18pIHx8IGRlZmluZWQoX19VTVRTX1I2X18pIHx8IGRlZmluZWQgKF9fRkREX1JFRElSRUNUSU9OX18pIHx8IGRlZmluZWQoX19MVEVfUkFUX18pICovCisKK3R5cGVkZWYgZW51bQoreworICAgIElNTV9BU0dOX1ZBTElEX1NVQ0NFU1MsCisgICAgSU1NX0FTR05fVkFMSURfRkFJTCwKKyAgICBJTU1fQVNHTl9WQUxJRF9JR05PUkUKK30gaW1tX2FzZ25fdmFsaWRfZW51bTsKKworLyogQUNTIHJlZmFjdG9yaW5nOiB0cmFjZSB3aXRoIGVudW0gKi8KK3R5cGVkZWYgZW51bQoreworICAgIC8qIElnbm9yZSBNZXNzYWdlICovCisgICAgQUNTX0lHTk9SRV9NU0dfRk9SX1NVQlNUQVRFX05PVF9NQVRDSCwKKyAgICBBQ1NfSUdOT1JFX0lBX0ZPUl9UQkZfREVESV9OT1RfTUFUQ0gsCisgICAgQUNTX0lHTk9SRV9JQV9GT1JfQUxMT0NfVFlQRV9OT1RfTUFUQ0gsCisgICAgQUNTX0lHTk9SRV9JQV9GT1JfTUVBU19NT0RFX05PVF9NQVRDSCwKKyAgICBBQ1NfSUdOT1JFX0lBX0ZPUl9SRVFfUkVGX05PVF9NQVRDSCwKKyAgICBBQ1NfSUdOT1JFX0lBX0ZPUl9FWFRfUkFfTk9UX01BVENILAorICAgIEFDU19JR05PUkVfSUFfRk9SX1BLVF9DSEFOTkVMX0RFU0NfTk9UX1ZBTElELAorICAgIEFDU19JR05PUkVfSUFfRk9SX01BX05PVF9WQUxJRCwKKyAgICBBQ1NfSUdOT1JFX0lBX0ZPUl8xU1RfVE1BX05PVF9WQUxJRCwKKyAgICBBQ1NfSUdOT1JFX0lBX0ZPUl8yTkRfVE1BX05PVF9WQUxJRCwKKyAgICBBQ1NfSUdOT1JFX0lBX0ZPUl9GUkVRX1BBUk1fTk9UX1ZBTElELAorICAgIEFDU19JR05PUkVfSUFfRk9SX0VTU0VOVElBTF9TSV9BQ1FVSVJJTkcsCisgICAgQUNTX0lHTk9SRV9QQVJfRk9SX1BVQVNfUkVDRUlWRUQsCisgICAgQUNTX0lHTk9SRV9QVUFTX0ZPUl9QRVJTSVNUQU5DRV9MRVZFTF9OT1RfVkFMSUQsCisgICAgQUNTX0lHTk9SRV9QVUFTX0ZPUl9NU0dfTEVOX05PVF9WQUxJRCwKKyAgICAKKyAgICAvKiBBYm9ydCBBY2Nlc3MgUHJvYyAqLworICAgIEFDU19BQk9SVF9BQ1NfUFJPQ19GT1JfRlJFUVVFTkNZX05PVF9WQUxJRCwgICAKKworICAgIC8qIERlbnkgQWNjZXNzIFJlcXVlc3QgKi8KKyAgICBBQ1NfREVOWV9BQ1NfUkVRX0ZPUl9XQUlUX0lORF9USU1FUl9JU19SVU5OSU5HLAorICAgIEFDU19ERU5ZX0FDU19SRVFfRk9SX1JQX09SX0NUUkxfQ0xBU1NfTk9UX0FMTE9XLAorICAgIAorICAgIC8qIEVycm9yICovCisgICAgQUNTX0VSUk9SX1JBQ0hfTUFYX1JFVFJBTlMsICAgIAorICAgIAorICAgIC8qIE90aGVyIEluZm8gKi8KKyAgICBBQ1NfQ01QX0VYVF9SQV9NQVRDSCwKKyAgICBBQ1NfQ01QX0VYVF9SQV9OT1RfTUFUQ0gsCisgICAgQUNTX1NUT1JFXzFTVF9UTUEsCisgICAgQUNTX1JFQ0VJVkVfRExfSUEsCisgICAgQUNTX1JFQ0VJVkVfRUdQUlNfUFVBUworfSBhY3NfdHJhY2VfY2F1c2VfZW51bTsKKworI2lmZGVmIF9fRVRXU19TVVBQT1JUX18KK3R5cGVkZWYgZW51bQoreworICAgIEVUV1NfRUFSVEhRVUFLRSA9IDAsCisgICAgRVRXU19UU1VOQU1JID0gMSwKKyAgICBFVFdTX0JPVEggPSAyLAorICAgIEVUV1NfVEVTVCA9IDMsCisgICAgRVRXU19PVEhFUlMgPSA0LAorICAgIEVUV1NfUkVTRVJWRUQKK30gd2FybmluZ190eXBlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIEVUV1NfU1RPUCA9IDAsCisgICAgRVRXU19TVEFSVAorfSBldHdzX3JlY3Zfc3RhdHVzX2VudW07CisKKyNlbmRpZiAvKiBfX0VUV1NfU1VQUE9SVF9fICovCisKK3R5cGVkZWYgZW51bQoreworICAgIFJNQ19OT1JNQUxfTUVBU1VSRU1FTlQsCisgICAgUk1DX0VYVF9NRUFTVVJFTUVOVAorfQorcm1jX21lYXN1cmVtZW50X3R5cGU7CisKK3R5cGVkZWYgZW51bQoreworICAgIFJNQ19SUl9OT1JNQUxfRVZFTlQsCisgICAgUk1DX0FCTk9STV9SRUxfVU5TUEVDSUZJRUQsCisgICAgUk1DX0FCTk9STV9SRUxfQ0hMX1VOQUNDRVBUQUJMRSwKKyAgICBSTUNfQUJOT1JNX1JFTF9USU1FUl9FWFBJUkVELAorICAgIFJNQ19BQk5PUk1fUkVMX05PX0FDVElWSVRZX09OX1JBRElPX1BBVEgsCisgICAgUk1DX1BSRUVNUFRWRV9SRUwsCisgICAgUk1DX1VUUkFOX1BSRUNPTkZfVU5LTk9XTiwKKyAgICBSTUNfSE9fSU1QT1NfVElNX0FEVl9PVVRfT0ZfUkFOR0UgPSAweDA4LAorICAgIFJNQ19DSF9NT0RFX1VOQUNDRVAsCisgICAgUk1DX0ZSRVFfTk9UX0lNUExFTUVOVEVELAorICAgIFJNQ19MT1dFUl9MQVlFUl9GQUlMVVJFID0gMHgwYywKKyAgICBSTUNfQ0FMTF9BTFJFQURZX0NMRUFSRUQgPSAweDQxLAorICAgIFJNQ19TRU1BTlRJQ19JTkNPUlJfTVNHID0gMHg1ZiwKKyAgICBSTUNfSU5WQUxJRF9NQU5EX0lORiA9IDB4NjAsCisgICAgUk1DX01UX05PTl9FWElTX09SX05PVF9JTVAsCisgICAgUk1DX01UX05PVF9DT01QQVRfV0lUSF9QUk9UX1NUQVRFLAorICAgIFJNQ19DT05EX0lFX0VSUk9SID0gMHg2NCwKKyAgICBSTUNfTk9fQ0VMTF9BTExPQ19BVkFJTEFCTEUsCisgICAgUk1DX1BST1RPQ09MX0VSUk9SX1VOU1BFQ0lGSUVEID0gMHg2ZgorfSBybWNfcnJfY2F1c2U7CisKK3R5cGVkZWYgZW51bQoreworICAgIFJNQ19BU0dOX0NNRCwKKyAgICBSTUNfUERDSF9BU0dOLAorICAgIFJNQ19JTU1fQVNHTiwKKyAgICBSTUNfSU1NX0FTR05fRVhULAorICAgIFJNQ19BRERUTkxfQVNHTiwKKyAgICAvL1JNQ19QUlRMX1JFTCwKKyAgICBSTUNfSE9fQ01ELAorICAgIFJNQ19GUkVRX1JFREVGLAorICAgIFJNQ19DSE1PREVfQ0hORywKKyAgICBSTUNfQ0lQSEVSX01PREUsCisgICAgUk1DX0hPX0NNRF9GUk9NX1VUUkFOLAorICAgIFJNQ19IT19DTURfVE9fVVRSQU4sCisgICAgUk1DX0hPX0NNRF9GUk9NX0VVVFJBTgorfSBybWNfZGVkX2FzZ25fdHlwZTsKKworI2lmIChkZWZpbmVkKF9fTU9ERU1fRU1fTU9ERV9fKSB8fCBkZWZpbmVkKF9fU0xJTV9NT0RFTV9FTV9NT0RFX18pKQordHlwZWRlZiBlbnVtCit7CisgICAgRU1fQVNTR05fQ01EX01TR19UWVBFLAorICAgIEVNX0NIQU5ORUxfUkVMRUFTRV9NU0dfVFlQRSwKKyAgICBFTV9BRERUTkxfQVNTR05fTVNHX1RZUEUsCisgICAgRU1fQ0xBU1NNQVJLX0VOUVVJUllfTVNHX1RZUEUsCisgICAgRU1fQ0lQSEVSX01PREVfQ01EX01TR19UWVBFLAorICAgIEVNX0NPTkZJR19DSEFOR0VfTVNHX1RZUEUsCisgICAgRU1fSEFORE9WRVJfQ01EX01TR19UWVBFLAorICAgIEVNX0ZSRVFfUkVERUZfTVNHX1RZUEUsCisgICAgRU1fQ0hBTl9NT0RFX01PRF9NU0dfVFlQRSwKKyAgICBFTV9DRUxMX1NFTEVDVElPTgorfQorcnJfZW1fZGVkX2FzZ25fdHlwZTsKKyNlbmRpZiAvKiAoZGVmaW5lZChfX01PREVNX0VNX01PREVfXykgfHwgZGVmaW5lZChfX1NMSU1fTU9ERU1fRU1fTU9ERV9fKSkgKi8KKworLyogaW5mbyB0eXBlIDUgY29kZXMgdXNlZCBpbiBzY2hlZHVsaW5nIGluZm8gb2YgU0kgOSAqLwordHlwZWRlZiBlbnVtCit7CisgICAgU0lfMV9TQ0hFRFVMRSwKKyAgICBTSV8yX1NDSEVEVUxFLAorICAgIFNJXzJfQklTX1NDSEVEVUxFLAorICAgIFNJXzJfVEVSX1NDSEVEVUxFLAorICAgIFNJXzNfU0NIRURVTEUsCisgICAgU0lfNF9TQ0hFRFVMRSwKKyAgICBTSV83X1NDSEVEVUxFLAorICAgIFNJXzhfU0NIRURVTEUsCisgICAgU0lfOV9TQ0hFRFVMRSwKKyAgICBTSV8xM19TQ0hFRFVMRQorfQorcnJfaW5mb190eXBlXzVfc2NoZF90eXBlOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBSUl9NRUFTX0lORk9fTVNHX1RZUEUgPSAweDA1LAorICAgIFJSX0VOSF9NRUFTX1JFUF9NU0dfVFlQRSA9IDB4MDQKK30gcnJfc2hvcnRfcGVlcl9tc2dfdHlwZTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVEVTVF9DTE9TRV9UQ0hfTE9PUF9NU0dfVFlQRSA9IDB4MCwKKyAgICBURVNUX0NMT1NFX1RDSF9MT09QX0FDS19NU0dfVFlQRSA9IDB4MDEsCisgICAgVEVTVF9DTE9TRV9NVUxUSV9MT09QX01TR19UWVBFID0gMHgyMCwKKyAgICBURVNUX0NMT1NFX01VTFRJX0xPT1BfQUNLX01TR19UWVBFID0gMHgyMSwKKyAgICBURVNUX09QRU5fTE9PUF9NU0dfVFlQRSA9IDB4MDYsCisgICAgVEVTVF9PUEVOX01VTFRJX0xPT1BfTVNHX1RZUEUgPSAweDIyLAorICAgIFRFU1RfT1BFTl9NVUxUSV9MT09QX0FDS19NU0dfVFlQRSA9IDB4MjMsCisgICAgVEVTVF9EQUlfVEVTVF9NU0dfVFlQRSA9IDB4MTQsCisgICAgVEVTVF9SRVNFVF9NU19QT1NJVElPTklOR19TVE9SRURfSU5GT19NU0dfVFlQRSA9IDB4MjYsCisgICAgVEVTVF9SRVNFVF9VRV9QT1NJVElPTklOR19TVE9SRURfSU5GT19NU0dfVFlQRSA9IDB4NDggICAgCit9Citycl90ZXN0X3BlZXJfbXNnX3R5cGU7CisKK3R5cGVkZWYgZW51bQoreworICAgIHJyX3NpbmdsZV9zbG90X2NtZCwKKyAgICBycl9tdWx0aV9zbG90X2NtZAorfQorcnJfbG9vcF9jbWRfdHlwZTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUlJfUEFHRV9SRVNQT05TRV9MRU4gPSAxNiwKKyAgICBSUl9DTEFTU01BUktfQ0hBTkdFX0xFTiA9IDEwLAorICAgIFJSX0dQUlNfU1VTUEVORF9SRVFVRVNUX0xFTiA9IDEzLAorICAgIFJSX0NMQVNTTUFSS19JRV9MRU4gPSA1Cit9Citycl9wZWVyX2llX2xlbl90eXBlOworCit0eXBlZGVmIGVudW0KK3sKKyAgICAvKiBNUy0+TlcgKi8KKyAgICBSUl9fQ0lQSEVSX01PREVfQ09NUExFVEUsCisgICAgUlJfX0FTU0lHTk1FTlRfQ09NUExFVEUsCisgICAgUlJfX0FTU0lHTk1FTlRfRkFJTFVSRSwKKyAgICBSUl9fSEFORE9WRVJfQ09NUExFVEUsCisgICAgUlJfX0hBTkRPVkVSX0ZBSUxVUkUsCisgICAgUlJfX0VYVEVOREVEX01FQVNVUkVNRU5UX1JFUE9SVCwKKyAgICBSUl9fTUVBU1VSRU1FTlRfUkVQT1JULAorICAgIFJSX19FTkhBTkNFRF9NRUFTVVJFTUVOVF9SRVBPUlQsCisgICAgUlJfX0NIQU5ORUxfTU9ERV9NT0RJRllfQUNLTk9XTEVER0UsCisgICAgUlJfX0NIQU5ORUxfUkVRVUVTVCwKKyAgICBSUl9fQ0xBU1NNQVJLX0NIQU5HRSwKKyAgICBSUl9fVVRSQU5fQ0xBU1NNQVJLX0NIQU5HRSwKKyAgICBSUl9fUlJfU1RBVFVTLAorICAgIFJSX19HUFJTX1NVU1BFTkRfUkVRVUVTVCwKKyAgICBSUl9fUEFHSU5HX1JFU1BPTlNFLAorCisgICAgLyogTlctPk1TICovCisgICAgUlJfX0FERElUSU9OQUxfQVNTSUdOTUVOVCwKKyAgICBSUl9fSU1NRURJQVRFX0FTU0lHTk1FTlQsCisgICAgUlJfX0lNTUVESUFURV9BU1NJR05NRU5UX0VYVEVOREVELAorICAgIFJSX19JTU1FRElBVEVfQVNTSUdOTUVOVF9SRUosCisgICAgUlJfX0NJUEhFUl9NT0RFX0NPTU1BTkQsCisgICAgUlJfX0FTU0lHTk1FTlRfQ09NTUFORCwKKyAgICBSUl9fUERDSF9BU1NJR05NRU5UX0NPTU1BTkQsCisgICAgUlJfX0hBTkRPVkVSX0NPTU1BTkQsCisgICAgUlJfX1BIWVNJQ0FMX0lORk9STUFUSU9OLAorICAgIFJSX19DSEFOTkVMX1JFTEVBU0UsCisgICAgUlJfX1BBR0lOR19SRVFVRVNUX1RZUEVfMSwKKyAgICBSUl9fUEFHSU5HX1JFUVVFU1RfVFlQRV8yLAorICAgIFJSX19QQUdJTkdfUkVRVUVTVF9UWVBFXzMsCisgICAgUlJfX0VYVEVOREVEX01FQVNVUkVNRU5UX09SREVSLAorICAgIFJSX19NRUFTVVJFTUVOVF9JTkZPUk1BVElPTiwKKyAgICBSUl9fQ0hBTk5FTF9NT0RFX01PRElGWSwKKyAgICBSUl9fQ0xBU1NNQVJLX0VOUVVJUlksCisgICAgUlJfX0ZSRVFVRU5DWV9SRURFRklOSVRJT04sCisgICAgUlJfX0lOVEVSX1NZU1RFTV9UT19VVFJBTl9IQU5ET1ZFUl9DT01NQU5ELAorICAgIC8qIE5XLT5NUywgc3lzdGVtIGluZm9ybWF0aW9uICovCisgICAgUlJfX1NJXzEsCisgICAgUlJfX1NJXzIsCisgICAgUlJfX1NJXzJCSVMsCisgICAgUlJfX1NJXzJURVIsCisgICAgUlJfX1NJXzJRVUFURVIsCisgICAgUlJfX1NJXzJOLAorICAgIFJSX19TSV8zLAorICAgIFJSX19TSV80LAorICAgIFJSX19TSV81LAorICAgIFJSX19TSV81QklTLAorICAgIFJSX19TSV81VEVSLAorICAgIFJSX19TSV82LAorICAgIFJSX19TSV83LAorICAgIFJSX19TSV84LAorICAgIFJSX19TSV85LAorICAgIFJSX19TSV8xMywKKworICAgIC8qIEJvdGggRGlyZWN0aW9uICovCisgICAgUlJfX0FQUExJQ0FUSU9OX0lORk8KK30gcnJfcGVlcl9tc2dfbmFtZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgTk9fVkFMLAorICBTSV9OT19NU0csCisgIFNJX0lOVkFMSURfTEVOLAorICBTSV9DRUxMX0FMTE9DLAorICBTSV9SQUNIX0NUUkxfUEFSQU1TLAorICBTSV9ORUlHSEJPUl9DRUxMX0xJU1QsCisgIFNJX05DQ19QRVJNSVRURUQsCisgIFNJX0VYVF9ORUlHSEJPUl9DRUxMX0xJU1QsCisgIFNJX0NFTExfSUQsCisgIFNJX0xBX0lELAorICBTSV9DVFJMX0NIQU5fUEFSQU1TLAorICBTSV9CQ0NIX0NFTExfT1BUSU9OUywKKyAgU0lfQ0VMTF9TRUxfUEFSQU1TLAorICBTSV8zX1JFU1RfT0NURVRTLAorICBTSV9DQkNIX1BBUkFNUywKKyAgU0lfNF9SRVNUX09DVEVUUywKKyAgU0lfU0FDQ0hfQ0VMTF9PUFRJT05TLAorICBTSV9TS0lQX0lORCwKKyAgU0lfUFJPVE9DT0xfRElTQ1JJTUlOQVRPUiwKKyAgU0lfR1BSU19NQV9JRSwKKyAgU0lfTkNfTUVBU19PUkRFUiwKKyAgU0lfR1BSU19DRUxMX09QVElPTlMsCisgIFNJX0dQUlNfUFdSX0NUUkxfUEFSQU1TLAorICBTSV9QQkNDSF9ERVNDUiwKKyAgU0lfRkxEX1pFUk9fTEVOLAorICBTSV9TQ0hFRF9JTkZPLAorICBTSV85X1JFU1RfT0NURVRTCit9CitzaV9tc2dfZmxkX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICBNU0dfQUxSRUFEWV9ERUNPREVELAorICBNU0dfREVDT0RFRF9TVUNDRVNTCit9CitzaV9tc2dfZGVjb2RlX3N0YXR1c19lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgUk1DX1RNQV9OT19NRUFOSU5HID0gMCwKKyAgUk1DX1RNQV9GSVJTVF9NRVNTQUdFCit9CitybWNfdG1hX3ZhbHVlOworCit0eXBlZGVmIGVudW0KK3sKKyAgUk1DX0lBUl9OT05FID0gMCwKKyAgUk1DX0lBUl9FR1BSU19VTF9BU0dOLAorICBSTUNfSUFSX0JFRl9USU1FX0ZSRVFfUFJFU0VOVCwKKyAgUk1DX0lBUl9VTF9BU0dOCit9CitybWNfaWFyX2ZpcnN0X3R3b19iaXRfdmFsdWU7CisKK3R5cGVkZWYgZW51bQoreworICBSTUNfSUFSX1BLVF9VTF9BU0dOID0gMHhjLAorICBSTUNfSUFSX1BLVF9ETF9BU0dOLAorCisgIC8qIExhbnNsbyAyMDA2MDQxMzogZml4IFBoeDI5IFI5OSBwaG9uZSBmYWlsIGluIDQxLjIuMy4xIGFuZCA0MS4yLjMuMiAoMm5kIHBhcnQgd2lsbCBiZSBkcm9wcGVkKSAqLworI2lmZGVmIF9fRUdQUlNfTU9ERV9fCisgIFJNQ19JQVJfU0VDX1BBUlRfUEtUX0FTR04yID0weGYsCisgIFJNQ19JQVJfUEtUX0VHUFJTX1VMX0FTR04gPSAweDQsCisjZWxzZSAvKiBfX0VHUFJTX01PREVfXyAqLworICBSTUNfSUFSX1NFQ19QQVJUX1BLVF9BU0dOMiA9MHhmLAorI2VuZGlmIC8qIF9fRUdQUlNfTU9ERV9fICovCisKKyAgUk1DX0lBUl9TRUNfUEFSVF9QS1RfQVNHTiA9MHhlCisKKyNpZiAwCisjaWZkZWYgX19FR1BSU19NT0RFX18KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbHNlIC8qIF9fRUdQUlNfTU9ERV9fICovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLyogX19FR1BSU19NT0RFX18gKi8gICAKKyNlbmRpZiAvKiAwICovICAgCisgIC8qIGVvIExhbnNsbyAyMDA2MDQxMyAqLworfQorcm1jX2lhcl9wa3RfYXNnbl90eXBlOworCit0eXBlZGVmIGVudW0KK3sKKyAgIC8qIE9ubHkgcmVzZXQgdGhlIHNlcnZpbmcgY2VsbCBwYXJhbWV0ZXJzLiBOZWlnaGJvciBjZWxsIG1lYXMgaW5mbyBhbmQgUENDTyByYXcgZGF0YSBhcmUgbm90IHJlc2V0ICovCisgICBNRUFTX1JFU0VUX1NFUlZfUEFSQU0sCisgICAKKyAgIC8qIFJlc2V0IGFsbCBtZWFzIHBhcmFtZXRlcnMgaW5jbHVkaW5nIHRoZSBzZXJ2aW5nIGNlbGwgcGFyYW1ldGVycywgbmVpZ2hib3IgY2VsbCBtZWFzIGluZm8sIGFuZCBQQ0NPIHJhdyBkYXRhICovCisgICBNRUFTX1JFU0VUX0FMTF9QQVJBTSwKKworICAgLyogVXNlZCBmb3IgVVQgdG8gcmVzZXQgcGFyYW1ldGVycyBidXQgbm90IHNlbmQgTVNHX0lEX1JSX01QQUxfU0VUX0dJU0VfQ09OVEVYVF9SRVEgdG8gTVBBTC4gKi8KKyAgIE1FQVNfVU5JVF9URVNUX1JFU0VUCit9IG1lYXNfcmVzZXRfc2NvcGVfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgR0FTX0FHUFNfUkVTRVQsCisgICAgR0FTX0FHTlNTX1JFU0VUCit9CitnYXNfcmVzZXRfbXNfcG9zaXRpb25pbmdfdGVjaDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUlJfVElNRVJfTk9UX1JVTk5JTkcsCisgICAgUlJfVElNRVJfVElNRV9PVVQKK31USU1FUl9TVEFURTsKKworI2lmZGVmIF9fQ01DQ18yM0dfUElOR1BPTkdfUkVTVFJBSU5fXwordHlwZWRlZiBlbnVtCit7CisJUlJNX1BJTkdfUE9OR19JTklULAorCVJSTV9QSU5HX1BPTkdfU1RBR0VfMSwKKwlSUk1fUElOR19QT05HX1NUQUdFXzIKK31waW5nX3Bvbmdfc3RhZ2VfZW51bTsKKworLyp2aXJ0dWFsIHBwIGV4aXQqLwordHlwZWRlZiBlbnVtCit7CisJSVJfVklSVFVBTF9JTklULAorCUlSX1ZJUlRVQUxfRlJPTV8yR19UT18zRywKKwlJUl9WSVJUVUFMX0ZST01fM0dfVE9fMkcKK312aXJ0dWFsX2lyX3N0YXR1c19lbnVtOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTVRLX1RBUkdFVF9fKSAmJiBkZWZpbmVkKCBfX01EOTdfXykKK3R5cGVkZWYgZW51bQoreworICAgIFJSTV9TRVRfUkFUX01PREUsCisgICAgUlJNX1BMTU5fU0VBUkNILAorICAgIFJSTV9TVEFOREJZX01FQVMsCisgICAgUlJNX05PTkUKK31ycm1fZWZ1c2VfZW51bTsKKyNlbmRpZiAvKiBkZWZpbmVkKF9fTVRLX1RBUkdFVF9fKSAmJiBkZWZpbmVkKCBfX01EOTdfXykgKi8KKworI2VuZGlmIC8qIF9SUk1fRU5VTVNfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JzdmFrX3B1YmxpY19lbnVtLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvcnN2YWtfcHVibGljX2VudW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDcyNTU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JzdmFrX3B1YmxpY19lbnVtLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQQVJUUyBPRiBUSElTIEZJTEUgQVJFIEFVVE9HRU5FUkFURUQKKyAqIERPIE5PVCBFRElUIEVYQ0VQVCBCRVRXRUVOIExJTkVTIE1BUktFRCAhQkVHSU4gTUFOVUFMIENPREUgYW5kICFFTkQgTUFOVUFMIENPREUKKyAqICAgICAgICAgICAgICAgQXNzaWdubWVudCA6CisgKiAgICAgICAgICAgICAgIENPTkZJREVOVElBTAorICogICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSwgVWJpTmV0aWNzIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgQ2FtYnJpZGdlIFRlY2hub2xvZ3kgQ2VudHJlCisgKiAgICAgICAgICAgICAgIE1lbGJvdXJuIFJveXN0b24KKyAqICAgICAgICAgICAgICAgSGVydHMgU0c4IDZEUCBVSworICogICAgICAgICAgICAgICBUZWw6ICs0NCAxNzYzIDI2MjIyMgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAhQkVHSU4gTUFOVUFMIENPREUhIChIRUFERVJTKQorICoKKyAqIENPTVBPTkVOVDogICAgKEluc2VydCBDb21wb25lbnQgTmFtZSkKKyAqIE1PRFVMRTogICAgICAgJFJDU2ZpbGU6IHJzdmFrX3B1YmxpY19lbnVtLmgsdiAkCisgKiBWRVJTSU9OOiAgICAgICRSZXZpc2lvbjogMS4wICQKKyAqIERBVEVEOiAgICAgICAgJERhdGU6IDIwMTkvMDEvMjggMTQ6MjI6MjkgJAorICogQVVUSE9SOgorICogREVTQ1JJUFRJT046ICBDaGVjayBIZWFkZXIgZm9yIGZ1bGwgZGVzY3JpcHRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICFFTkQgTUFOVUFMIENPREUhIChIRUFERVJTKSAqLworCisKKyNpZiAhZGVmaW5lZChfUlNWQUtfUFVCTElDX0VOVU1fSCkKKyNkZWZpbmUgX1JTVkFLX1BVQkxJQ19FTlVNX0gKKwordHlwZWRlZiBlbnVtIAoreworICAgIFJTVkFLX01TUE1fUkZEQl9DT05GSUcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzAsICBNU1BNIHNwZWNpZmljCisgICAgUlNWQUtfUExNTl9TRUFSQ0hfU1RPUkVEX0RDSF9JRExFX0xJU1RfSU5fQ09OTkVDVEVELCAgICAgIC8vNTAsIFVBUyBzcGVjaWZpYworICAgIFJTVkFLX1VTRVJfUExNTl9MSVNUX0lOX05PX1NFUlZJQ0VfSU5fQ09OTkVDVEVELCAgICAgICAgICAvLzIwMCwgVUFTIHNwZWNpZmljCisgICAgUlNWQUtfVVNFUl9QTE1OX1NFQVJDSF9JTl9DT05ORUNURUQsICAgICAgICAgICAgICAgICAgICAgIC8vMjAwLCBVQVMgc3BlY2lmaWMKKyAgICBSU1ZBS19VU0VSX1BMTU5fU0VBUkNIX0VNRVJHRU5DWV9DQUxMX0lOX0NPTk5FQ1RFRCwgICAgICAgLy8yMDAsIFVBUyBzcGVjaWZpYworICAgIFJTVkFLX1VTRVJfUExNTl9MSVNUX0lOX05PX1NFUlZJQ0VfRlVMTF9CQU5EX0lOX0NPTk5FQ1RFRCwvLzI1MCwgVUFTIHNwZWNpZmljCisgICAgUlNWQUtfVVNFUl9QTE1OX1NFQVJDSF9GVUxMX0JBTkRfSU5fQ09OTkVDVEVELCAgICAgICAgICAgIC8vMjUwLCBVQVMgc3BlY2lmaWMKKyAgICBSU1ZBS19VU0VSX1BMTU5fU0VBUkNIX0VNRVJHRU5DWV9DQUxMX0ZVTExfQkFORF9JTl9DT05ORUNURUQsIC8vMjUwLCBVQVMgc3BlY2lmaWMKKyAgICBSU1ZBS19VU0VSX1BMTU5fTElTVF9TVE9SRURfTElTVF9JTl9DT05ORUNURUQsICAgICAgICAgICAgLy80MDAsIFVBUyBzcGVjaWZpYworICAgIFJTVkFLX1VTRVJfUExNTl9MSVNUX1NUT1JFRF9MSVNUX0ZVTExfQkFORF9JTl9DT05ORUNURUQsICAvLzQ1MCwgVUFTIHNwZWNpZmljCisgICAgUlNWQUtfTU1fUExNTl9TRUFSQ0hfUE9XRVJPTl9JTl9DT05ORUNURUQsICAgICAgICAgICAgICAgIC8vNTIwLCBVQVMgc3BlY2lmaWMKKyAgICBSU1ZBS19NTV9QTE1OX1NFQVJDSF9QT1dFUk9OX0ZVTExfQkFORF9JTl9DT05ORUNURUQsICAgICAgLy81NjAsIFVBUyBzcGVjaWZpYworICAgIFJTVkFLX01NX1BMTU5fU0VBUkNIX0lOX0NPTk5FQ1RFRCwgICAgICAgICAgICAgICAgICAgICAgICAvLzYwMCwgVUFTIHNwZWNpZmljCisgICAgUlNWQUtfQVNfQ0VMTF9TRUxFQ1RJT05fSU5fQ09OTkVDVEVELCAgICAgICAgICAgICAgICAgICAgIC8vNjAwLCBVQVMgc3BlY2lmaWMKKyAgICBSU1ZBS19FVkFMVUFURV9DU0dfQ0VMTF9JTl9DT05ORUNURUQsICAgICAgICAgICAgICAgICAgICAgLy82MDAsIFVBUyBzcGVjaWZpYworICAgIFJTVkFLX01NX1BMTU5fU0VBUkNIX0ZVTExfQkFORF9JTl9DT05ORUNURUQsICAgICAgICAgICAgICAvLzY1MCwgVUFTIHNwZWNpZmljCisgICAgUlNWQUtfQVNfQ0VMTF9TRUxFQ1RJT05fRlVMTF9CQU5EX0lOX0NPTk5FQ1RFRCwgICAgICAgICAgIC8vNjUwLCBVQVMgc3BlY2lmaWMKKyAgICBSU1ZBS19FVkFMVUFURV9DU0dfQ0VMTF9GVUxMX0JBTkRfSU5fQ09OTkVDVEVELCAgICAgICAgICAgLy82NTAsIFVBUyBzcGVjaWZpYworICAgIFJTVkFLX01NX1BMTU5fTElTVF9JTl9DT05ORUNURUQsICAgICAgICAgICAgICAgICAgICAgICAgICAvLzgwMCwgVUFTIHNwZWNpZmljCisgICAgUlNWQUtfTU1fUExNTl9MSVNUX0ZVTExfQkFORF9DT05ORUNURUQsICAgICAgICAgICAgICAgICAgIC8vODUwLCBVQVMgc3BlY2lmaWMKKyAgICBSU1ZBS19TSU1fUFJPVEVDVElPTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yMDAwLCBFQVMgc3BlY2lmaWMKKyAgICBSU1ZBS19TSU1fUFJPVEVDVElPTl9GVUxMX0JBTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yMDUwLCBFQVMgc3BlY2lmaWMKKyAgICBSU1ZBS19NTV9QTE1OX1NFQVJDSF9TVE9SRURfRENIX0lETEVfTElTVCwgICAgICAgICAgICAgICAgLy8yMDUwLCBVQVMgc3BlY2lmaWMKKyAgICBSU1ZBS19BU19BRlIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yMTAwCisgICAgUlNWQUtfQVVUT19HQVAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMjEwMAorICAgIFJTVkFLX0dFTUlOSV9SRVNVTUUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzIxNTAKKyAgICBSU1ZBS19HRU1JTklfQUJPUlRfU0VBUkNILCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yMTUwLCBOQVMgc3BlY2lmaWMKKyAgICBSU1ZBS19FTUNfU0VTU0lPTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yMjAwCisgICAgUlNWQUtfVVNFUl9QTE1OX1NFQVJDSCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMjIwMAorICAgIFJTVkFLX1VTRVJfUExNTl9MSVNUX0lOX05PX1NFUlZJQ0UsICAgICAgICAgICAgICAgICAgICAgICAvLzIyMDAKKyAgICBSU1ZBS19HQVNfUlNJTV9WQ19SRVNVTUUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yMjAwCisgICAgUlNWQUtfRU1DX1NFU1NJT05fRlVMTF9CQU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMjI1MAorICAgIFJTVkFLX1VTRVJfUExNTl9TRUFSQ0hfRlVMTF9CQU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAvLzIyNTAKKyAgICBSU1ZBS19VU0VSX1BMTU5fTElTVF9JTl9OT19TRVJWSUNFX0ZVTExfQkFORCwgICAgICAgICAgICAgLy8yMjUwCisgICAgUlNWQUtfR0FTX1JTSU1fVkNfUkVTVU1FX0ZVTExfQkFORCwgICAgICAgICAgICAgICAgICAgICAgIC8vMjI1MAorICAgIFJTVkFLX1VTRVJfUExNTl9MSVNUX0lOX1NFUlZJQ0UsICAgICAgICAgICAgICAgICAgICAgICAgICAvLzI0MDAKKyAgICBSU1ZBS19VU0VSX1BMTU5fTElTVF9JTl9TRVJWSUNFX0ZVTExfQkFORCwgICAgICAgICAgICAgICAgLy8yNDUwCisgICAgUlNWQUtfTU1fUExNTl9TRUFSQ0hfSU5fUE9XRVJfT04sICAgICAgICAgICAgICAgICAgICAgICAgIC8vMjUyMAorICAgIFJTVkFLX0FTX0FGUl9GVUxMX0JBTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzI1NTAKKyAgICBSU1ZBS19NTV9QTE1OX1NFQVJDSF9JTl9QT1dFUl9PTl9GVUxMX0JBTkQsICAgICAgICAgICAgICAgLy8yNTYwCisgICAgUlNWQUtfQVNfQ0VMTF9TRUxFQ1RJT05fQ0FMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMjU5MCwgRUFTL05BUyBzcGVjaWZpYywgdXNlZCB3aGVuIHRoZXJlIGlzIGNhbGwgb25nb2luZworICAgIFJTVkFLX01NX1BMTU5fU0VBUkNILCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzI2MDAKKyAgICBSU1ZBS19BU19DRUxMX1NFTEVDVElPTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yNjAwCisgICAgUlNWQUtfQVNfQ1NHX0NFTExfRVZBTFVBVElPTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMjYwMAorICAgIFJTVkFLX0FTX0NFTExfU0VMRUNUSU9OX0NBTExfRlVMTF9CQU5ELCAgICAgICAgICAgICAgICAgICAvLzI2NDAsIEVBUy9OQVMgc3BlY2lmaWMsIHVzZWQgd2hlbiB0aGVyZSBpcyBjYWxsIG9uZ29pbmcKKyAgICBSU1ZBS19NTV9QTE1OX1NFQVJDSF9GVUxMX0JBTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yNjUwCisgICAgUlNWQUtfQVNfQ0VMTF9TRUxFQ1RJT05fRlVMTF9CQU5ELCAgICAgICAgICAgICAgICAgICAgICAgIC8vMjY1MAorICAgIFJTVkFLX0FTX0NTR19DRUxMX0VWQUxVQVRJT05fRlVMTF9CQU5ELCAgICAgICAgICAgICAgICAgICAvLzI2NTAKKyAgICBSU1ZBS19HRU1JTklfUkVTVU1FX0ZVTExfQkFORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yNjUwLCBFQVMgc3BlY2lmaWMKKyAgICBSU1ZBS19BU19CQUNLR1JPVU5EX1NFQVJDSCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yNzAwCisgICAgUlNWQUtfQVNfQkFDS0dST1VORF9TRUFSQ0hfRlVMTF9CQU5ELCAgICAgICAgICAgICAgICAgICAgIC8vMjc1MAorICAgIFJTVkFLX0FTX1JFUE9SVF9DR0ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzI4MDAKKyAgICBSU1ZBS19NTV9QTE1OX0xJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yODAwCisgICAgUlNWQUtfQVNfQ1NHX0FVVE9OT01PVVNfU0VBUkNILCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMjgwMAorICAgIFJTVkFLX0FTX1JFUE9SVF9DR0lfRlVMTF9CQU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzI4NTAKKyAgICBSU1ZBS19NTV9QTE1OX0xJU1RfRlVMTF9CQU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yODUwCisgICAgUlNWQUtfQVNfQ1NHX0FVVE9OT01PVVNfU0VBUkNIX0ZVTExfQkFORCwgICAgICAgICAgICAgICAgIC8vMjg1MAorICAgIFJTVkFLX0FTX0ZJTkdFUlBSSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzMwMDAKKyAgICBSU1ZBS19BU19GSU5HRVJQUklOVF9GVUxMX0JBTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8zMDUwCisgICAgUlNWQUtfQVNfTUNDX0xFQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMzQwMAorICAgIFJTVkFLX0FTX01DQ19MRUFSTklOR19GVUxMX0JBTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAvLzM0NTAKKyAgICBSU1ZBS19GQVNUX1JFQ09WRVJZLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy85MDAwLCBHQVMgc3BlY2lmaWMKKyAgICBSU1ZBS19GQVNUX1JFQ09WRVJZX0ZVTExCQU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy85MDUwLCBHQVMgc3BlY2lmaWMKKyAgICBSU1ZBS19GUkVRX1NDQU5fVFlQRV9FTlVNX05VTQorfWZyZXFfc2Nhbl90eXBlX2VudW07CisKKyNlbmRpZiAvKiBfUlNWQUtfUFVCTElDX0VOVU1fSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JzdmFzX2VudW0uaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yc3Zhc19lbnVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk1ZDhlMgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yc3Zhc19lbnVtLmgKQEAgLTAsMCArMSwzMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQQVJUUyBPRiBUSElTIEZJTEUgQVJFIEFVVE9HRU5FUkFURUQKKyAqIERPIE5PVCBFRElUIEVYQ0VQVCBCRVRXRUVOIExJTkVTIE1BUktFRCAhQkVHSU4gTUFOVUFMIENPREUgYW5kICFFTkQgTUFOVUFMIENPREUKKyAqICAgICAgICAgICAgICAgQXNzaWdubWVudCA6CisgKiAgICAgICAgICAgICAgIENPTkZJREVOVElBTAorICogICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSwgVWJpTmV0aWNzIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgQ2FtYnJpZGdlIFRlY2hub2xvZ3kgQ2VudHJlCisgKiAgICAgICAgICAgICAgIE1lbGJvdXJuIFJveXN0b24KKyAqICAgICAgICAgICAgICAgSGVydHMgU0c4IDZEUCBVSworICogICAgICAgICAgICAgICBUZWw6ICs0NCAxNzYzIDI2MjIyMgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAhQkVHSU4gTUFOVUFMIENPREUhIChIRUFERVJTKQorICoKKyAqIENPTVBPTkVOVDogICAgKEluc2VydCBDb21wb25lbnQgTmFtZSkKKyAqIE1PRFVMRTogICAgICAgJFJDU2ZpbGU6IHJzdmFzX2VudW0uaCx2ICQKKyAqIFZFUlNJT046ICAgICAgJFJldmlzaW9uOiAxLjAgJAorICogREFURUQ6ICAgICAgICAkRGF0ZTogMjAwOS8wNi8xMiAxNDoyMjoyOSAkCisgKiBBVVRIT1I6CisgKiBERVNDUklQVElPTjogIENoZWNrIEhlYWRlciBmb3IgZnVsbCBkZXNjcmlwdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIUVORCBNQU5VQUwgQ09ERSEgKEhFQURFUlMpICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoX1JTVkFTX0VOVU1fSCkKKyNkZWZpbmUgX1JTVkFTX0VOVU1fSAorCisjaW5jbHVkZSA8YzJrX3JzdmFfZW51bXMuaD4KKworI2RlZmluZSBSU1ZBU19HRVRfQllURTFfRlJPTV9FTlVNKHgpICgoKChrYWxfdWludDMyKSh4KSk+PjI0KSAmIDB4MDAwMDAwRkYpCisjZGVmaW5lIFJTVkFTX0dFVF9CWVRFMl9GUk9NX0VOVU0oeCkgKCgoKGthbF91aW50MzIpKHgpKT4+MTYpICYgMHgwMDAwMDBGRikKKyNkZWZpbmUgUlNWQVNfR0VUX0JZVEUzX0ZST01fRU5VTSh4KSAoKCgoa2FsX3VpbnQzMikoeCkpPj4gOCkgJiAweDAwMDAwMEZGKQorI2RlZmluZSBSU1ZBU19HRVRfQllURTRfRlJPTV9FTlVNKHgpICgoKGthbF91aW50MzIpKHgpKSAmIDB4MDAwMDAwRkYpCisKKworI2RlZmluZSBSU1ZBU19JTlZBTElEX1NJTV9JTkRFWCAweDAwMDAwMEZGCisjZGVmaW5lIFJTVkFTX0lOVkFMSURfUkFUX0lOREVYIDB4MDAwMDAwRkYKKworLyogRGVubmlzIFdlbmcgMjAxMC8wMi8yNjogW1NJTV9BRERfSEVSRV0gaWYgc3VwcG9ydCB0cmktU0lNIGluIHRoZSBmdXR1cmUsIGp1c3QgYWRkIGFzIGZvbGxvd2luZyBjb2RlLiAqLworLyogRGVubmlzIFdlbmcgMjAxMC8wMi8yNjogW1JBVF9BRERfSEVSRV0gaWYgc3VwcG9ydCBhbm90aGVyIFJBVCBpbiB0aGUgZnV0dXJlLCBqdXN0IGFkZCBhcyBmb2xsb3dpbmcgY29kZS4gKi8KKy8qIERlbm5pcyBXZW5nIDIwMTAvMDMvMDU6IGZvciBlZmZlY3RpdmUsIHJzdmFzX2lkX2VudW0gaXMgZGVzaWduZWQgYXMgYSBiaXQgc3RydWN0dXJlCisgICAgICAgIDFzdCBieXRlIGlzIHVuaXF1ZSBpbiB0aGlzIGVudW0sIHN0YXJ0IGZyb20gMCwKKyAgICAgICAgMm5kIGJ5dGUgaXMgU0lNIGluZGV4LCBzdGFydCBmcm9tIDAsIG90aGVyd2lzZSBmaWxsIDB4RkYuCisgICAgICAgIDNyZCBieXRlIGlzIFJBVCBpbmRleCwgc3RhcnQgZnJvbSAwLCBvdGhlcndpc2UgZmlsbCAweEZGLgorICAgICAgICA0dGggYnl0ZSBpcyBGT1JDRSBQUkVFTVBUIGluZGV4LCBzdGFydCBmcm9tIDAsIG90aGVyd2lzZSBmaWxsIDB4RkYuCisgICAgICAgICAgICBGT1JDRSBQUkVFTVAgaW5kZXggaXMgdGhlIGluZGV4IG9mIG1vZHVsZXMgd2hpY2ggbWF5IHNlbmQgUkVTT1VSQ0VfUkVTX09DQ1VQWV9SRVEgd2l0aCBPQ0NVUFlfRk9SQ0VfUFJFRU1QVC4gKi8KKyNkZWZpbmUgUlNWQVNfR0VUX1NJTV9JTkRFWF9GUk9NX0VOVU0oeCkgUlNWQVNfR0VUX0JZVEUyX0ZST01fRU5VTSh4KQorI2RlZmluZSBSU1ZBU19HRVRfUkFUX0lOREVYX0ZST01fRU5VTSh4KSBSU1ZBU19HRVRfQllURTNfRlJPTV9FTlVNKHgpCisKKy8qIERlbm5pcyBXZW5nIDIwMTAvMTAvMTU6IG1hcHBpbmcgU0lNIGluZGV4IGFuZCBSQVQgaW5kZXggdG8gcnN2YXNfaWRfZW51bSAKKyAgIG9ubHkgZm9yIEFTCisgICBQUy4gY2Fubm90IG5vdCBpbnB1dCBSU1ZBU19JTlZBTElEX1NJTV9JTkRFWCBvciBSU1ZBU19JTlZBTElEX1JBVF9JTkRFWCAqLworI2RlZmluZSBSU1ZBU19HRVRfUlNWQVNfSURfRU5VTV9GUk9NX0lOREVYKHNpbV9pbmRleCwgcmF0X2luZGV4KSAoKHJzdmFzX2lkX2VudW0pKCgoKCgoKCgoc2ltX2luZGV4KSo3KSsocmF0X2luZGV4KzEpKSA8PCA4KStzaW1faW5kZXgpIDw8IDgpICsgcmF0X2luZGV4KSA8PCA4KSArIDB4RkYpKQorCisvKiBEZW5uaXMgV2VuZyAyMDEwLzEwLzE1OiBzaGlmdCByc3Zhc19pZF9lbnVtIGJ5IFNJTSBpbmRleCAqLworI2RlZmluZSBSU1ZBU19TSElGVF9SU1ZBU19JRF9FTlVNKHgsIHNpbV9pbmRleCkgKChyc3Zhc19pZF9lbnVtKSgoeCkrKCgoKChzaW1faW5kZXgpKjcpIDw8IDgpKyhzaW1faW5kZXgpKSA8PCAxNikpKQorCisvKiBGcm9tIEdlbjkzLCBFTDIgaXMgZGV2aWRlZCBpbnRvIDMgdGFzayBhbmQgZWFjaCB0YXNrIG5lZWQgdG8gc2VuZCBzdXNwZW5kX3JlcSBpbmRpdmlkdWFsbHkKKyAgICBJbiBvcmRlciB0byBzZW5kIHN1c3BlbmRfcmVxIGluIGNvcnJlY3Qgc2VxdWVuY2UsIFJTVkFTIGFzayBFTDIgdG8gc2V0IHNlbmRpbmcgc2VxdWVuY2UgZmlyc3RseSBieSBjYWxsaW5nIHJzdmFzX3VwZGF0ZV9lbDJfc3VzcGVuZF9zZXF1ZW5jZQorICAgIFRoZSBMU0IgMiBiaXQgcmVwcmVzZW50IGZpcnN0IG1vZHVsZSB0byBzZW5kIHN1c3BlbmRfcmVxLCBhbmQgc28gb24gIDogICovCisjZGVmaW5lIGVsMl9maXJzdF9tb2R1bGUoeCkgKCh4KSAmIDB4MDMpCisjZGVmaW5lIGVsMl9zZWNvbmRfbW9kdWxlKHgpICgoeD4+MikgJiAweDAzKQorI2RlZmluZSBlbDJfdGhpcmRfbW9kdWxlKHgpICgoeD4+NCkgJiAweDAzKQorCit0eXBlZGVmIGVudW0KK3sKKyAgICBSU1ZBU19NT0RFX1NXSVRDSF9JTklUID0gMCwKKyAgICBSU1ZBU19NT0RFX1NXSVRDSF9TVEFSVCA9IDEsCisgICAgUlNWQVNfTU9ERV9TV0lUQ0hfQ05GX1NFTkQgPSAyLAorfSByc3Zhc19tb2RlX3N3aXRjaF9zdGF0dXM7CisKK3R5cGVkZWYgZW51bQoreworICAgIFJTVkFTX0dFTUlOSV9DT05GSUdfTkVFREVEID0gMCwKKyAgICBSU1ZBU19HRU1JTklfQ09ORklHX1NUQVJUID0gMSwKKyAgICBSU1ZBU19HRU1JTklfQ09ORklHX0VORCA9IDIsCit9IHJzdmFzX2dlbWluaV9jb25maWdfc3RhdHVzOworCisKK3R5cGVkZWYgZW51bSB7CisgICAgUlNWQVNfU0lNX0NPTk5FQ1RFRCAgICAgICAgID0gMCwKKyAgICBSU1ZBU19TSU1fTElNSVRFRF9DT05ORUNURUQgPSAxLCAgICAKKyAgICBSU1ZBU19TSU1fVklSVFVBTF9DT05ORUNURUQgPSAyLAorICAgIFJTVkFTX1NJTV9JRExFX1dJVEhfU0VSVklDRSA9IDMsCisgICAgUlNWQVNfU0lNX0lETEUgICAgICAgICAgICAgID0gNCwgCisgICAgUlNWQVNfU0lNX1ZJUlRVQUwgICAgICAgICAgID0gNSwKKyAgICBSU1ZBU19TSU1fTElNSVRFRF9WSVJUVUFMICAgPSA2LCAKKyAgICBSU1ZBU19TSU1fU1VTUEVOREVEICAgICAgICAgPSA3LAorICAgIFJTVkFTX1NJTV9TVEFUVVNfTlVNICAgICAgICA9IDgKK30gcnN2YXNfc2ltX3N0YXR1czsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBSU1ZBU19TSU1fSU5WQUxJRF9UUkFOU0lUSU9OICAgICAgID0gMCwKKworICAgIFJTVkFTX1NJTV9TVEVBRFlfQ09OTkVDVEVEICAgICAgICAgPSAxLAorICAgIFJTVkFTX1NJTV9DT05ORUNURUQySURMRSAgICAgICAgICAgPSAyLAorCisgICAgUlNWQVNfU0lNX1NURUFEWV9JRExFX1dJVEhfU0VSVklDRSA9IDMsCisKKyAgICBSU1ZBU19TSU1fU1RFQURZX0lETEUgICAgICAgICAgICAgID0gNCwKKyAgICBSU1ZBU19TSU1fSURMRTJDT05ORUNURUQgICAgICAgICAgID0gNSwKKyAgICBSU1ZBU19TSU1fSURMRTJWSVJUVUFMICAgICAgICAgICAgID0gNiwKKyAgICBSU1ZBU19TSU1fSURMRTJTVVNQRU5ERUQgICAgICAgICAgID0gNywKKworICAgIFJTVkFTX1NJTV9TVEVBRFlfVklSVFVBTCAgICAgICAgICAgPSA4LAorICAgIFJTVkFTX1NJTV9WSVJUVUFMMkNPTk5FQ1RFRCAgICAgICAgPSA5LAorICAgIFJTVkFTX1NJTV9WSVJUVUFMMlNVU1BFTkRFRCAgICAgICAgPSAxMCwKKworICAgIFJTVkFTX1NJTV9TVEVBRFlfU1VTUEVOREVEICAgICAgICAgPSAxMSwKKyAgICAKKyAgICBSU1ZBU19TSU1fU1RFQURZX1ZJUlRVQUxfQ09OTkVDVEVEID0gMTIsCisgICAgUlNWQVNfU0lNX1ZJUlRVQUxDT05ORUNURUQyQ09OTkVDVEVEID0gMTMsCisgICAgUlNWQVNfU0lNX0NPTk5FQ1RFRDJWSVJUVUFMQ09OTkVDVEVEID0gMTQsCisgICAgUlNWQVNfU0lNX1ZJUlRVQUxDT05ORUNURUQyU1VTUEVORUQgPSAxNSwKKyAgICBSU1ZBU19TSU1fVklSVFVBTENPTk5FQ1RFRDJWSVJUVUFMICA9IDE2LAorICAgIFJTVkFTX1NJTV9TVVNQRU5ERUQyQ09OTkVDVEVEICAgICAgICA9IDE3LAorICAgIFJTVkFTX1NJTV9TVVNQRU5ERUQySURMRSAgICAgICAgICAgICA9IDE4LAorICAgIFJTVkFTX1NJTV9WSVJUVUFMMklETEUgICAgICAgICAgICAgICA9IDE5LAorICAgIFJTVkFTX1NJTV9TVVNQRU5ERUQyVklSVFVBTCAgICAgICAgICA9IDIwLAorICAgIAorICAgIFJTVkFTX1NJTV9TVEVBRFlfTElNSVRFRF9DT05ORUNURUQgICA9IDIxLAorICAgIFJTVkFTX1NJTV9MSU1JVEVEQ09OTkVDVEVEMkNPTk5FQ1RFRCA9IDIyLAorICAgIFJTVkFTX1NJTV9DT05ORUNURUQyTElNSVRFRENPTk5FQ1RFRCA9IDIzLAorICAgIFJTVkFTX1NJTV9MSU1JVEVEQ09OTkVDVEVEMlZJUlRVQUxDT05ORUNURUQgPSAyNCwKKyAgICBSU1ZBU19TSU1fVklSVFVBTENPTk5FQ1RFRDJMSU1JVEVEQ09OTkVDVEVEID0gMjUsCisgICAgUlNWQVNfU0lNX0xJTUlURURDT05ORUNURUQySURMRSA9IDI2LAorICAgIFJTVkFTX1NJTV9MSU1JVEVEQ09OTkVDVEVEMlNVU1BFTkRFRCA9IDI3LAorICAgIFJTVkFTX1NJTV9MSU1JVEVEQ09OTkVDVEVEMlZJUlRVQUwgPSAyOCwKKyAgICBSU1ZBU19TSU1fTElNSVRFRENPTk5FQ1RFRDJMSU1JVEVEVklSVFVBTCA9IDI5LAorCisgICAgUlNWQVNfU0lNX1NURUFEWV9MSU1JVEVEX1ZJUlRVQUwgICA9IDMwLAorICAgIFJTVkFTX1NJTV9MSU1JVEVEVklSVFVBTDJMSU1JVEVEQ09OTkVDVEVEICAgPSAzMSwKKyAgICBSU1ZBU19TSU1fTElNSVRFRFZJUlRVQUwyQ09OTkVDVEVEICAgPSAzMiwKKyAgICBSU1ZBU19TSU1fTElNSVRFRFZJUlRVQUwySURMRSAgICAgID0gMzMsCisgICAgUlNWQVNfU0lNX0xJTUlURURWSVJUVUFMMlZJUlRVQUwgICA9IDM0LAorICAgIFJTVkFTX1NJTV9MSU1JVEVEVklSVFVBTDJTVVNQRU5ERUQgICA9IDM1LAorICAgIFJTVkFTX1NJTV9DT05ORUNURUQyTElNSVRFRFZJUlRVQUwgICA9IDM2LAorICAgIFJTVkFTX1NJTV9WSVJUVUFMQ09OTkVDVEVEMkxJTUlURURWSVJUVUFMID0gMzcsICAgCisgICAgUlNWQVNfU0lNX0lETEUyTElNSVRFRFZJUlRVQUwgICAgICA9IDM4LAorICAgIFJTVkFTX1NJTV9WSVJUVUFMMkxJTUlURURWSVJUVUFMICAgPSAzOSwKKyAgICBSU1ZBU19TSU1fU1VTUEVOREVEMkxJTUlURURWSVJUVUFMICAgPSA0MCwKKyAgIAorICAgIFJTVkFTX1NJTV9UUkFOU0lUSU9OX05VTSAgICAgICAgICAgPSA0MQorfSByc3Zhc19zaW1fdHJhbnNpdGlvbjsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUlNWQVNfUkVRVUVTVF9TT1VSQ0VfUlNJTV9BQ0NFU1MgICAgICAgICAgICAgICAgPSAwCisgICAgLFJTVkFTX1JFUVVFU1RfU09VUkNFX1NSTFRFX0VOSEFOQ0VNRU5UICAgICAgICAgPSAxCisgICAgLFJTVkFTX1JFUVVFU1RfU09VUkNFX1NSTFRFX0VOSEFOQ0VNRU5UX1RPTEVSRU5UID0gMgorfSByc3Zhc192aXJ0dWFsX2Nvbm5lY3RfcmVxdWVzdF90eXBlX2VudW07CisKKy8qKgorICogRm9yIEdFTjk3CisgKi8KK3R5cGVkZWYgIGVudW0geworICAgUlNWQVNfQ09OTkVDVEVEX0FGVEVSX1ZDX1JFU1VNRSwKKyAgIFJTVkFTX1NVU1BFTkRfQUZURVJfVkNfUkVTVU1FLCAvL2ZvciByYWNlIGNvbmRpdGlvbiwgQVMgcmVsZWFzZSBzZXJ2aWNlIGJlZm9yZSByZXR1cm4gVkNfc3VzcGVuZF9jbmYKKyAgIFJTVkFTX1ZJUlRVQUxfSURMRV9BRlRFUl9WQ19SRVNVTUUsIC8vZm9yIHJhY2UgY29uZGl0aW9uLCBBUyByZWxlYXNlIHNlcnZpY2UgYmVmb3JlIHJldHVybiBWQ19zdXNwZW5kX2NuZgorICAgUlNWQVNfQUJPUlRfU1VTUEVORF9BRlRFUl9WQ19SRVNVTUUsIC8vQVMgcmVsZWFzZSBjb25uZWN0aW9uIGluIFZDCisgICBSU1ZBU19BQk9SVF9WSVJUVUFMX0lETEVfQUZURVJfVkNfUkVTVU1FLCAvL0FTIHJlbGVhc2UgY29ubmVjdGlvbiBpbiBWQworICAgUlNWQVNfQUJPUlRfSURMRV9BRlRFUl9WQ19SRVNVTUUsIC8vQVMgcmVsZWFzZSBjb25uZWN0aW9uIGluIFZDCit9IHJzdmFzX3ZpcnR1YWxfY29ubmVjdGVkX3Jlc3VtZV9hY3Rpb25fZW51bTsKKworCisvKioKKyAqIEZvciBEUi1EU0RTL0RTREEKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBSU1ZBU19HRU1JTklfR0FQX0FMTE9XRUQgPSAwCisgICAgLFJTVkFTX0dFTUlOSV9HQVBfTk9UX0FMTE9XRUQgPSAxCit9IHJzdmFzX2dlbWluaV9nYXBfc3RhdHVzX2VudW07CisKKyNlbmRpZiAvKiBfUlNWQVNfRU5VTV9IICovCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yc3Zhc19zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yc3Zhc19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2UwNjc5Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JzdmFzX3N0cnVjdC5oCkBAIC0wLDAgKzEsNTMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDcKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUEFSVFMgT0YgVEhJUyBGSUxFIEFSRSBBVVRPR0VORVJBVEVECisgKiBETyBOT1QgRURJVCBFWENFUFQgQkVUV0VFTiBMSU5FUyBNQVJLRUQgIUJFR0lOIE1BTlVBTCBDT0RFIGFuZCAhRU5EIE1BTlVBTCBDT0RFCisgKiAgICAgICAgICAgICAgIEFzc2lnbm1lbnQgOgorICogICAgICAgICAgICAgICBDT05GSURFTlRJQUwKKyAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUsIFViaU5ldGljcyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIENhbWJyaWRnZSBUZWNobm9sb2d5IENlbnRyZQorICogICAgICAgICAgICAgICBNZWxib3VybiBSb3lzdG9uCisgKiAgICAgICAgICAgICAgIEhlcnRzIFNHOCA2RFAgVUsKKyAqICAgICAgICAgICAgICAgVGVsOiArNDQgMTc2MyAyNjIyMjIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIUJFR0lOIE1BTlVBTCBDT0RFISAoSEVBREVSUykKKyAqCisgKiBDT01QT05FTlQ6ICAgIChJbnNlcnQgQ29tcG9uZW50IE5hbWUpCisgKiBNT0RVTEU6ICAgICAgICRSQ1NmaWxlOiByc3Zhc19zdHJ1Y3QuaCx2ICQKKyAqIFZFUlNJT046ICAgICAgJFJldmlzaW9uOiAxLjAgJAorICogREFURUQ6ICAgICAgICAkRGF0ZTogMjAwOS8wNi8xMiAxNDoyMjoyOSAkCisgKiBBVVRIT1I6CisgKiBERVNDUklQVElPTjogIENoZWNrIEhlYWRlciBmb3IgZnVsbCBkZXNjcmlwdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIUVORCBNQU5VQUwgQ09ERSEgKEhFQURFUlMpICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmICFkZWZpbmVkKF9SU1ZBU19TVFJVQ1RfSCkKKyNkZWZpbmUgX1JTVkFTX1NUUlVDVF9ICisKKyNpbmNsdWRlICJyc3Zhc19lbnVtLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorI2luY2x1ZGUgImMya19yc3ZhX3N0cnVjdC5oIgorCisjZGVmaW5lIFJTVkFfTUFYX1VTRVJfQ0FMTEVSICAgMzIKKworZXh0ZXJuIGthbF91aW50MzIgcnN2YV9hY2tfYml0bWFzazsKK2V4dGVybiBrYWxfZXZlbnRncnBpZCByc3ZhX2V2ZzsKKworZXh0ZXJuIGthbF91aW50MzIgcnN2YV9ldmdfZ2V0X2F2YWlsYWJsZV9hY2tfc2xvdCh2b2lkKTsKK2V4dGVybiB2b2lkIHJzdmFfZXZnX2Fja19zbG90KGthbF91aW50MzIgYWNrKTsKK2V4dGVybiB2b2lkIHJzdmFfZXZnX2ZyZWVfc2xvdChrYWxfdWludDMyIGFjayk7CisKKworCisjaWZkZWYgVU5JVF9URVNUCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUiAgIAorICAga2FsX2Jvb2wgcmVzdWx0OworfSByc3Zhc191dF9yZXN1bHRfaW5kX3N0cnVjdDsKKworI2lmIGRlZmluZWQoX19FVFdTX1NVUFBPUlRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICBrYWxfYm9vbCBzdWNjZXNzOworfSByc3Zhc19hc191cGRhdGVfZXR3c19wcmlvcml0eV9jbmZfc3RydWN0OworI2VuZGlmIC8qIF9fRVRXU19TVVBQT1JUX18gfHwgX19MVEVfUkFUX18gKi8KKyNlbmRpZiAvKiBVTklUX1RFU1QgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIHJzdmFzX2lkX2VudW0gaWQ7CisgICBrYWxfdWludDMyIGV2ZW50X2FjazsgIC8qIGJpdG1hcCBmb3IgZXZlbnQgZ3JvdXAqLworfSByc3Zhc19zZXJ2aWNlX2NvbW1vbl9zdHJ1Y3Q7CisKKyNpZiBkZWZpbmVkKF9fR1NNX1JBVF9fKQordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgIHBlZXJfc2VydmljZV9wcmlvcml0eTsKK30gcnN2YXNfZ2FzX3N1c3BlbmRfc2VydmljZV9yZXFfc3RydWN0OworI2VuZGlmIC8qIF9fR1NNX1JBVF9fICovCisKKyNpZiBkZWZpbmVkKF9fVU1UU19SQVRfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICBrYWxfdWludDggICAgICAgICAgICAgICBwZWVyX3NlcnZpY2VfcHJpb3JpdHk7Cit9IHJzdmFzX3Vhc19zdXNwZW5kX3NlcnZpY2VfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgIHBlZXJfc2VydmljZV9wcmlvcml0eTsKK30gcnN2YXNfdWwyX3N1c3BlbmRfc2VydmljZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUiAgIAorICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcGVlcl9zZXJ2aWNlX3ByaW9yaXR5OworfSByc3Zhc191bDJkX3N1c3BlbmRfc2VydmljZV9yZXFfc3RydWN0OworI2VuZGlmIC8qIF9fVU1UU19SQVRfXyAqLworCisjaWYgZGVmaW5lZChfX0xURV9SQVRfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICBrYWxfdWludDggICAgICAgICAgICAgICBwZWVyX3NlcnZpY2VfcHJpb3JpdHk7Cit9IHJzdmFzX2Vhc19zdXNwZW5kX3NlcnZpY2VfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIHJzdmFzX3NpbV9lbnVtIHRhcmdldF9zaW07CisgICBrYWxfdWludDggICAgICAgICAgICAgICBwZWVyX3NlcnZpY2VfcHJpb3JpdHk7Cit9IHJzdmFzX2VsMmhwb3J0YWxfc3VzcGVuZF9zZXJ2aWNlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICByc3Zhc19zaW1fZW51bSB0YXJnZXRfc2ltOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcGVlcl9zZXJ2aWNlX3ByaW9yaXR5OworfSByc3Zhc19lbWFjZGxwb3J0YWxfc3VzcGVuZF9zZXJ2aWNlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICByc3Zhc19zaW1fZW51bSB0YXJnZXRfc2ltOworICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcGVlcl9zZXJ2aWNlX3ByaW9yaXR5OworfSByc3Zhc19lbDJwb3J0YWxfc3VzcGVuZF9zZXJ2aWNlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICBrYWxfYm9vbCBlbnRlcl9tZXRhX21vZGU7Cit9IHJzdmFzX2VsMV9zdXNwZW5kX3JlcV9zdHJ1Y3Q7CisKKworI2VuZGlmIC8qIF9fTFRFX1JBVF9fICovCisKKyNpZiBkZWZpbmVkKF9fTlJfUkFUX18pCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUiAgIAorICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcGVlcl9zZXJ2aWNlX3ByaW9yaXR5OworfSByc3Zhc19ucnJjX3N1c3BlbmRfc2VydmljZV9yZXFfc3RydWN0OworI2VuZGlmIC8qIF9fTlJfUkFUX18gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgIHBlZXJfc2VydmljZV9wcmlvcml0eTsKKyAgIHJzdmFzX3NpbV9lbnVtIHRhcmdldF9zaW07Cit9IHJzdmFzX2xhc19zdXNwZW5kX3NlcnZpY2VfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIHJzdmFzX3NpbV9lbnVtIHRhcmdldF9zaW07Cit9IHJzdmFzX2xhc19zdXNwZW5kX3NlcnZpY2VfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIHJzdmFzX3NpbV9lbnVtIHRhcmdldF9zaW07Cit9IHJzdmFzX2xhc19yZXN1bWVfc2VydmljZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUiAgIAorICAgcnN2YXNfc2ltX2VudW0gdGFyZ2V0X3NpbTsKK30gcnN2YXNfbGFzX3Jlc3VtZV9zZXJ2aWNlX2NuZl9zdHJ1Y3Q7CisKKyNpZiBkZWZpbmVkKF9fTFRFX1JBVF9fKQordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIHJzdmFzX2dlbWluaV9nYXBfc3RhdHVzX2VudW0gZ2VtaW5pX2dhcF9zdGF0dXM7Cit9IHJzdmFzX2Vhc19yZXN1bWVfc2VydmljZV9yZXFfc3RydWN0OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTlJfUkFUX18pCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUiAgIAorICAgcnN2YXNfZ2VtaW5pX2dhcF9zdGF0dXNfZW51bSBnZW1pbmlfZ2FwX3N0YXR1czsKK30gcnN2YXNfbnJyY19yZXN1bWVfc2VydmljZV9yZXFfc3RydWN0OworI2VuZGlmCisKKworI2lmIGRlZmluZWQoX19HU01fUkFUX18pCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUiAgIAorICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcGVlcl9zZXJ2aWNlX3ByaW9yaXR5OworICAgcnN2YXNfYWJvcnRfYWN0aW9uX2VudW0gYWN0aW9uOworfSByc3Zhc19nYXNfYWJvcnRfc2VydmljZV9yZXFfc3RydWN0OworI2VuZGlmIC8qIF9fR1NNX1JBVF9fICovCisKKyNpZiBkZWZpbmVkKF9fVU1UU19SQVRfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICBrYWxfdWludDggICAgICAgICAgICAgICBwZWVyX3NlcnZpY2VfcHJpb3JpdHk7CisgICByc3Zhc19hYm9ydF9hY3Rpb25fZW51bSBhY3Rpb247Cit9IHJzdmFzX3Vhc19hYm9ydF9zZXJ2aWNlX3JlcV9zdHJ1Y3Q7CisjZW5kaWYgLyogX19VTVRTX1JBVF9fICovCisKKyNpZiBkZWZpbmVkKF9fTFRFX1JBVF9fKQordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgIHBlZXJfc2VydmljZV9wcmlvcml0eTsKKyAgIHJzdmFzX2Fib3J0X2FjdGlvbl9lbnVtIGFjdGlvbjsKK30gcnN2YXNfZWFzX2Fib3J0X3NlcnZpY2VfcmVxX3N0cnVjdDsKKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworCisjaWYgZGVmaW5lZChfX05SX1JBVF9fKQordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgIHBlZXJfc2VydmljZV9wcmlvcml0eTsKKyAgIHJzdmFzX2Fib3J0X2FjdGlvbl9lbnVtIGFjdGlvbjsKK30gcnN2YXNfbnJyY19hYm9ydF9zZXJ2aWNlX3JlcV9zdHJ1Y3Q7CisjZW5kaWYgLyogX19OUl9SQVRfXyAqLworCisjaWYgZGVmaW5lZChfX0dTTV9SQVRfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICBrYWxfdWludDggICAgICAgICAgICAgICBwZWVyX3NlcnZpY2VfcHJpb3JpdHk7CisgICByc3Zhc19zaW1fZW51bSBzaW1faW5fdHJhbnNmZXI7Cit9IHJzdmFzX2dhc192aXJ0dWFsX3N1c3BlbmRfc2VydmljZV9yZXFfc3RydWN0OworI2VuZGlmIC8qIF9fR1NNX1JBVF9fICovCisKKyNpZiBkZWZpbmVkKF9fVU1UU19SQVRfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICBrYWxfdWludDggICAgICAgICAgICAgICBwZWVyX3NlcnZpY2VfcHJpb3JpdHk7Cit9IHJzdmFzX3Vhc192aXJ0dWFsX3N1c3BlbmRfc2VydmljZV9yZXFfc3RydWN0OworI2VuZGlmIC8qIF9fVU1UU19SQVRfXyAqLworCisjaWYgZGVmaW5lZChfX0xURV9SQVRfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICBrYWxfdWludDggICAgICAgICAgICAgICBwZWVyX3NlcnZpY2VfcHJpb3JpdHk7Cit9IHJzdmFzX2Vhc192aXJ0dWFsX3N1c3BlbmRfc2VydmljZV9yZXFfc3RydWN0OworI2VuZGlmIC8qIF9fTFRFX1JBVF9fICovCisKKyNpZiBkZWZpbmVkKF9fTlJfUkFUX18pCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUiAgIAorICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcGVlcl9zZXJ2aWNlX3ByaW9yaXR5OworfSByc3Zhc19ucnJjX3ZpcnR1YWxfc3VzcGVuZF9zZXJ2aWNlX3JlcV9zdHJ1Y3Q7CisjZW5kaWYgLyogX19OUl9SQVRfXyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUiAgIAorICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcGVlcl9zZXJ2aWNlX3ByaW9yaXR5OworICAgcnN2YXNfc2ltX2VudW0gdGFyZ2V0X3NpbTsKK30gcnN2YXNfbGFzX3ZpcnR1YWxfc3VzcGVuZF9zZXJ2aWNlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICByc3Zhc19zaW1fZW51bSB0YXJnZXRfc2ltOworfSByc3Zhc19sYXNfdmlydHVhbF9zdXNwZW5kX3NlcnZpY2VfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIHJzdmFzX3NpbV9lbnVtIHRhcmdldF9zaW07Cit9IHJzdmFzX2xhc192aXJ0dWFsX3Jlc3VtZV9zZXJ2aWNlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICByc3Zhc19pZF9lbnVtIGlkOworICAga2FsX2Jvb2wgaXNfY2FsbF9wcmVmZXI7Cit9IHJzdmFzX2FzX3ByZWZlcmVuY2VfbW9kZV9yZXFfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICByc3Zhc19zaW1fZW51bSB0YXJnZXRfc2ltOworfSByc3Zhc19sYXNfdmlydHVhbF9yZXN1bWVfc2VydmljZV9jbmZfc3RydWN0OworCisjaWYgZGVmaW5lZChfX0xURV9SQVRfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICByc3Zhc19nZW1pbmlfZ2FwX3N0YXR1c19lbnVtIGdlbWluaV9nYXBfc3RhdHVzOworfSByc3Zhc19lYXNfdmlydHVhbF9yZXN1bWVfc2VydmljZV9yZXFfc3RydWN0OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTlJfUkFUX18pCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUiAgIAorICAgcnN2YXNfZ2VtaW5pX2dhcF9zdGF0dXNfZW51bSBnZW1pbmlfZ2FwX3N0YXR1czsKK30gcnN2YXNfbnJyY192aXJ0dWFsX3Jlc3VtZV9zZXJ2aWNlX3JlcV9zdHJ1Y3Q7CisjZW5kaWYKKworCisvKiBEZW5uaXMgV2VuZyAyMDExLzA1LzI2OiBtb3ZlIHRvIGFzMmw0Y19zdHJ1Y3QuaCAqLworLy90eXBlZGVmIHN0cnVjdCB7CisvLyAgIExPQ0FMX1BBUkFfSERSICAgCisvLyAgIGthbF9ib29sIGlzX3R1cm5fb247CisvL30gcnN2YXNfbW9uaXRvcl9wZWVyX3BjaF9zd2l0Y2hfcmVxX3N0cnVjdDsKKworI2lmIGRlZmluZWQoX19FVFdTX1NVUFBPUlRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUiAKKyAgICByc3Zhc19pZF9lbnVtIGlkOworICAgIGthbF91aW50MzIgZXZlbnRfYWNrOyAgLyogYml0bWFwIGZvciBldmVudCBncm91cCovICAgIAorICAgIGthbF9ib29sIGlzX3Byb3RlY3RfcmVxOworfSByc3Zhc19hc191cGRhdGVfZXR3c19wcmlvcml0eV9yZXFfc3RydWN0OworI2VuZGlmIC8qIF9fRVRXU19TVVBQT1JUX18gfHwgX19MVEVfUkFUX18gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSIAorICAgIHJhdF9lbnVtIHJhdF9tb2RlOworfSByYWNfcnN2YXNfc2V0X3JhdF9tb2RlX3JlcV9zdHJ1Y3Q7CisKKworI2lmIGRlZmluZWQoX19HU01fUkFUX18pCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUiAgIAorICAgcnN2YXNfc2ltX2VudW0gc2ltX2luX3RyYW5zZmVyOworICAgcnN2YXNfdmlydHVhbF9jb25uZWN0X3JlcXVlc3RfdHlwZV9lbnVtIHJlcXVlc3Rfc291cmNlOworfSByc3Zhc19nYXNfdmlydHVhbF9jb25uZWN0ZWRfc3VzcGVuZF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUiAgIAorICAga2FsX2Jvb2wgaXNfYWJvcnQ7CisgICByc3Zhc192aXJ0dWFsX2Nvbm5lY3RlZF9yZXN1bWVfYWN0aW9uX2VudW0gcmVzdW1lX2FjdGlvbjsKK30gcnN2YXNfZ2FzX3ZpcnR1YWxfY29ubmVjdGVkX3Jlc3VtZV9yZXFfc3RydWN0OworI2VuZGlmIC8qIF9fR1NNX1JBVF9fICovCisKKyNpZiBkZWZpbmVkKF9fVU1UU19SQVRfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICByc3Zhc19zaW1fZW51bSBzaW1faW5fdHJhbnNmZXI7CisgICByc3Zhc192aXJ0dWFsX2Nvbm5lY3RfcmVxdWVzdF90eXBlX2VudW0gcmVxdWVzdF9zb3VyY2U7Cit9IHJzdmFzX3Vhc192aXJ0dWFsX2Nvbm5lY3RlZF9zdXNwZW5kX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICBrYWxfYm9vbCBpc19hYm9ydDsKKyAgIHJzdmFzX3ZpcnR1YWxfY29ubmVjdGVkX3Jlc3VtZV9hY3Rpb25fZW51bSByZXN1bWVfYWN0aW9uOworfSByc3Zhc191YXNfdmlydHVhbF9jb25uZWN0ZWRfcmVzdW1lX3JlcV9zdHJ1Y3Q7CisjZW5kaWYgLyogX19VTVRTX1JBVF9fICovCisKKyNpZiBkZWZpbmVkKF9fTFRFX1JBVF9fKQordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIHJzdmFzX3NpbV9lbnVtIHNpbV9pbl90cmFuc2ZlcjsKKyAgIHJzdmFzX3ZpcnR1YWxfY29ubmVjdF9yZXF1ZXN0X3R5cGVfZW51bSByZXF1ZXN0X3NvdXJjZTsKK30gcnN2YXNfZWFzX3ZpcnR1YWxfY29ubmVjdGVkX3N1c3BlbmRfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIGthbF9ib29sIGlzX2Fib3J0OworICAgcnN2YXNfdmlydHVhbF9jb25uZWN0ZWRfcmVzdW1lX2FjdGlvbl9lbnVtIHJlc3VtZV9hY3Rpb247Cit9IHJzdmFzX2Vhc192aXJ0dWFsX2Nvbm5lY3RlZF9yZXN1bWVfcmVxX3N0cnVjdDsKKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworCisjaWYgZGVmaW5lZChfX05SX1JBVF9fKQordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIHJzdmFzX3NpbV9lbnVtIHNpbV9pbl90cmFuc2ZlcjsKKyAgIHJzdmFzX3ZpcnR1YWxfY29ubmVjdF9yZXF1ZXN0X3R5cGVfZW51bSByZXF1ZXN0X3NvdXJjZTsKK30gcnN2YXNfbnJyY192aXJ0dWFsX2Nvbm5lY3RlZF9zdXNwZW5kX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSICAgCisgICBrYWxfYm9vbCBpc19hYm9ydDsKKyAgIHJzdmFzX3ZpcnR1YWxfY29ubmVjdGVkX3Jlc3VtZV9hY3Rpb25fZW51bSByZXN1bWVfYWN0aW9uOworfSByc3Zhc19ucnJjX3ZpcnR1YWxfY29ubmVjdGVkX3Jlc3VtZV9yZXFfc3RydWN0OworI2VuZGlmIC8qIF9fTlJfUkFUX18gKi8KKworI2lmIGRlZmluZWQoX19MVEVfUkFUX18pCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUiAgIAorICAgcnN2YXNfZ2VtaW5pX2dhcF9zdGF0dXNfZW51bSBnZW1pbmlfZ2FwX3N0YXR1czsKK30gcnN2YXNfZWFzX3ZpcnR1YWxfbW9kZV91cGRhdGVfcmVxX3N0cnVjdDsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX05SX1JBVF9fKQordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIgICAKKyAgIHJzdmFzX2dlbWluaV9nYXBfc3RhdHVzX2VudW0gZ2VtaW5pX2dhcF9zdGF0dXM7Cit9IHJzdmFzX25ycmNfdmlydHVhbF9tb2RlX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAga2FsX2Jvb2wgaXNfZW50ZXJfZHNkYTsKK30gcnN2YXNfbnJyY19nZW1pbmlfbW9kZV91cGRhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKK30gcnN2YXNfbnJyY19nZW1pbmlfbW9kZV91cGRhdGVfY25mX3N0cnVjdDsKKyNlbmRpZgorCisjZW5kaWYgLyogX1JTVkFTX1NUUlVDVF9IICovCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yc3Zhc191dGlscy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3JzdmFzX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3NThhMgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9yc3Zhc191dGlscy5oCkBAIC0wLDAgKzEsMTg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDcKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUEFSVFMgT0YgVEhJUyBGSUxFIEFSRSBBVVRPR0VORVJBVEVECisgKiBETyBOT1QgRURJVCBFWENFUFQgQkVUV0VFTiBMSU5FUyBNQVJLRUQgIUJFR0lOIE1BTlVBTCBDT0RFIGFuZCAhRU5EIE1BTlVBTCBDT0RFCisgKiAgICAgICAgICAgICAgIEFzc2lnbm1lbnQgOgorICogICAgICAgICAgICAgICBDT05GSURFTlRJQUwKKyAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUsIFViaU5ldGljcyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIENhbWJyaWRnZSBUZWNobm9sb2d5IENlbnRyZQorICogICAgICAgICAgICAgICBNZWxib3VybiBSb3lzdG9uCisgKiAgICAgICAgICAgICAgIEhlcnRzIFNHOCA2RFAgVUsKKyAqICAgICAgICAgICAgICAgVGVsOiArNDQgMTc2MyAyNjIyMjIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIUJFR0lOIE1BTlVBTCBDT0RFISAoSEVBREVSUykKKyAqCisgKiBDT01QT05FTlQ6ICAgIChJbnNlcnQgQ29tcG9uZW50IE5hbWUpCisgKiBNT0RVTEU6ICAgICAgICRSQ1NmaWxlOiByc3Zhc191dGlscy5oLHYgJAorICogVkVSU0lPTjogICAgICAkUmV2aXNpb246IDEuMCAkCisgKiBEQVRFRDogICAgICAgICREYXRlOiAyMDA5LzA2LzEyIDE0OjIyOjI5ICQKKyAqIEFVVEhPUjoKKyAqIERFU0NSSVBUSU9OOiAgQ2hlY2sgSGVhZGVyIGZvciBmdWxsIGRlc2NyaXB0aW9uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAhRU5EIE1BTlVBTCBDT0RFISAoSEVBREVSUykgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJExvZzokCisgKgorICogMTAgMzEgMjAxOCB5dWhod2FuZy55dQorICogW01PTFkwMDM2MTQ3OF0gW0dlbjk3XSBHZW1pbmkgQ29tcGlsZSBPcHRpb24gQ2xlYW4gVXAKKyAqIC4KKyAqCisgKiAwNSAxNSAyMDE4IGNoZXN0ZXItemQuaHVhbmcKKyAqIFtNT0xZMDAzMjYwMTRdIFtHZW45NV1bTVNQTV0gU1cgY2hhbmdlcyBjaGVjayBpbiBVTU9MWUUKKyAqICBSU1ZBUyBNYWluIENvZGUuCisgKgorICogMDggMTggMjAxNyB5dWhod2FuZy55dQorICogW01PTFkwMDI3MTkyNV0gW1NSTFRFIEVuaGFuY2VtZW50XVtVTU9MWUFdIFJTVkEgY29kZSBzeW5jCisgKiAuCisgKgorICogMDIgMjQgMjAxNyBmYXJtaW5nLnRzZW5nCisgKiBbTU9MWTAwMjI4NDE0XSBSU1ZBUyBkaXNwYXRjaCBzdXNwZW5kX3JlcSB0byBFTDIgaW4gc2VxdWVuY2UuCisgKgorICogMTEgMTkgMjAxNSB5dWhod2FuZy55dQorICogW01PTFkwMDE0ODU4NF0gW1JTVkFTXSBhZGQgZGVidWcgaW5mbyBmb3IgdHJhY2UgY29uZmlybSBwcmltaXRpdmUgYml0bWFzaworICogLiBhZGQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdHJhY2UgY25mIGJpdG1hc2sKKyAqCisgKiAwMSAyMiAyMDE0IG5pY2t5LmNob3UKKyAqIFtNT0xZMDAwNTI5MTNdIFtSU1ZBXVtDU0VdIExURSBHZW1pbmkgbW9kaWZpY2F0aW9uCisgKiAuCisgKgorICogMTEgMjEgMjAxMyBuaWNreS5jaG91CisgKiBbTU9MWTAwMDQ1ODU0XSBbUFMxMjY3IEhHK1dHXSBDaGVjay1pbiBHZW1pbmkgSEcrV0cgbW9kaWZpY2F0aW9uCisgKiAuCisgKgorICogMDYgMTMgMjAxMiBqdXN0aW4ubGkKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDUgMjUgMjAxMiBqdXN0aW4ubGkKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDQgMjQgMjAxMiB3Y3B1c2VyX2ludGVncmF0b3IKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTEgMDYgMjAxMSBqdXN0aW4ubGkKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTAgMDYgMjAxMSBqdXN0aW4ubGkKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTAgMDUgMjAxMSBqdXN0aW4ubGkKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDYgMjQgMjAxMSBkZW5uaXMud2VuZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwNCAyNSAyMDExIGRlbm5pcy53ZW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDAzIDE2IDIwMTEgZGVubmlzLndlbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDIgMjIgMjAxMSBkZW5uaXMud2VuZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwMSAyNiAyMDExIGRlbm5pcy53ZW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDEyIDE0IDIwMTAgZGVubmlzLndlbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAhZGVmaW5lZChfUlNWQVNfVVRJTFNfSCkKKyNkZWZpbmUgX1JTVkFTX1VUSUxTX0gKKworI2luY2x1ZGUgInJzdmFzX2VudW0uaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIiAvL01TQkIgY2hhbmdlICNpbmNsdWRlICJzdGFja19jb25maWcuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIgLy9NU0JCIGNoYW5nZSAjaW5jbHVkZSAic3RhY2tfbXNncy5oIgorCisvKiBOaWNreSBDaG91IDIwMTIvMTAvMTk6IFJlcXVlc3QgYnkgR0FTIHNvIHRoYXQgdGhleSBjYW4gcXVlcnkgd2hldGhlciBvdGhlciBTSU1zIGlzIGluIFZpcnR1YWwgTW9kZS4gKi8KK2V4dGVybiBrYWxfYm9vbCBpc19yc3Zhc192aXJ0dWFsX21vZGVfcXVlcnlfYnlfc2ltKGNvbnN0IHJzdmFzX3NpbV9lbnVtIHNpbV9pbmRleCk7CisKK2V4dGVybiB2b2lkIHJzdmFzX2NoZWNrX2NuZl9iaXRtYXNrKHZvaWQpOworCisjaWYgZGVmaW5lZChfX0VUV1NfU1VQUE9SVF9fKSB8fCBkZWZpbmVkKF9fTFRFX1JBVF9fKQorZXh0ZXJuIGthbF9ib29sIHJzdmFzX3VwZGF0ZV9ldHdzX2NoYW5uZWxfcHJpb3JpdHkoY29uc3QgbW9kdWxlX3R5cGUgbW9kX3NyYywgY29uc3QgcnN2YXNfaWRfZW51bSBpZCwgY29uc3Qga2FsX2Jvb2wgaXNfcHJvdGVjdF9yZXEpOworCitleHRlcm4gcnN2YXNfaWRfZW51bSByc3Zhc19ldHdzX293bmVyX3F1ZXJ5KHZvaWQpOworI2VuZGlmIC8qIF9fRVRXU19TVVBQT1JUX18gfHwgX19MVEVfUkFUX18gKi8KKworZXh0ZXJuIHZvaWQgcnN2YXNfdXBkYXRlX2VsMl9zdXNwZW5kX3NlcXVlbmNlKGNvbnN0IGthbF91aW50MzIgcnN2YXNfc2VuZF9lbDJfc3VzcGVuZF9zZXF1ZW5jZSk7CisKKy8qIERlbm5pcyBXZW5nIDIwMTAvMDMvMDg6IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBSU1ZBUyBpbnRlcm5lbC4KKyAgICAgICAgb3RoZXIgbW9kdWxlIHNob3VsZCBub3QgdXNlIGl0LiAqLworIC8qIERlbm5pcyBXZW5nIDIwMTAvMDYvMzA6IGl0IHNob3VsZCB1c2UgQUxMT0NfU0VORF9JTE0gcHJvcG9zZWQgYnkgc3lzdGVtIHNlcnZpY2UgKi8KK2V4dGVybiB2b2lkIHJzdmFzX2FsbG9jX3NlbmRfaWxtKGNvbnN0IG1vZHVsZV90eXBlIG1vZF9zcmMsIGNvbnN0IG1vZHVsZV90eXBlIG1vZF9kZXN0LCBjb25zdCBzYXBfdHlwZSBzYXAsIGNvbnN0IG1zZ190eXBlIG1zZywgdm9pZCBjb25zdCAqIGxvY2FsX3BhcmFfcHRyKTsKKworI2VuZGlmIC8qIF9SU1ZBU19VVElMU19IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvc2NzaS5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3Njc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmY3NDA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3Njc2kuaApAQCAtMCwwICsxLDEwMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIHNjc2kuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICBNT05aQQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgSW1wbGVtZW50YXRpb24gb2YgU2NzaSBjbGFzcy4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAkTG9nJAorICoKKyAqIDEwIDIyIDIwMjEgcGV0ZXIuY2hpYW5nCisgKiBbTU9MWTAwNjI0MDQ4XSBbQVQmVF0gQ0RSLUZWRy0zOTAwIEZpcnN0TmV0LTVHIERldmljZSBSYWRpbyBSZXF1aXJlbWVudHMgLSBQaGFzZSAxYgorICogCQorICogCVtTQ1NJXSBkaXNhYmxlIE41CisgKgorICogMDkgMjggMjAyMCBlc2tvLm9pa2FyaW5lbgorICogW01PTFkwMDU1NzI0Nl0gW1AyMDA4MDMtMDA4NDVdIFtNVEtdWzVHXVtBMzI2Ql0gQVQrRVBCU0VIID+L7T8/tO0/IHVlIGNhcGEgaW5mbyA/PyBucjQxLDc5ID+s65286rA/Pz8gP4TsPworICoKKyAqIDA2IDE0IDIwMTkgaGFyaXNoLnJlZGR5CisgKiBbTU9MWTAwNDEzMjk0XSBbQ09ERSBTWU5DXSA/VE9QPz9OTC1CRDIzNj8/RlQ/P1QtTW9iaWxlPz9GcmVlX3Rlc3Q/TWFudWFsIHNlYXJjaCBhbmQgcmVnaXN0ZXIgIEtQTiA0Rz9hcHBlYXIgbW9kZW1DcmFzaD8zLzU/CisgKgorICogMDUgMjIgMjAxOSB2aW5heWFrLmJhbmRhZ2kKKyAqIFtNT0xZMDA0MDA5MTNdIFtDT0RFIFNZTkNdW01INEFUVF9QXVtQcm90b2NvbF1bMTA3NzZdIGNhbm5vdCBmaW5kIDM0OC0zMDAtM0coMTkwMCkgZHVyaW5nIExURS1CVFItMS0xMTUwCisgKgorICogMDMgMDcgMjAxOSBzaHJleWEucmFpemFkYQorICogW01PTFkwMDM2NzQ5N10gW0NPREUgU1lOQ10gW01UMzk2N11bRWlnZXJdW08xXVtNRCBTdGF0aWMgVGVzdF1bQ01XIENhcmRzXVtDaGluYV1bQXV0b10gSW5jb3JyZWN0IFVUUkFOIEZERCBiYW5kcyBhcmUgZmlsbGVkIGluIHRoZSB1dHJhIFVFLUNhcGFiaWxpdHlSQVQtQ29udGFpbmVyCisgKiAuCisgKgorICogMTEgMjkgMjAxOCBwZXRlci5jaGlhbmcKKyAqIFtNT0xZMDAzNjY4MzVdIFtHZW45N10gRGVkaWNhdGVkIFByaW9yaXR5IGFuZCBEZXByaW9yaXRpemF0aW9uIFNDU0kgSW50ZXJmYWNlIENoYW5nZQorICogU0NTSSBpbnRlcmZhY2UgY2hhbmdlcyBmb3IgTlIKKyAqCisgKiAxMCAzMSAyMDE4IHZlbmRfbXRiX2FyaXRoYTAwMgorICogW01PTFkwMDM2MTQ3OF0gW0dlbjk3XSBHZW1pbmkgQ29tcGlsZSBPcHRpb24gQ2xlYW4gVXAKKyAqIAkKKyAqIAlDb21waWxlIE9wdGlvbiBjaGFuZ2UgZm9yICBfX0dFTUlOSV9NT05JVE9SX1BBR0VfRFVSSU5HX1RSQU5TRkVSX18gLCBfX0dFTUlOSV9QUkVFTVBUX1BFRVJfU0VSVklDRV9fICwgIF9fUkVNT1RFX1NJTV9fIGFuZCBfX1BMTU5fTElTVF9JTl9WSVJUVUFMX01PREVfXworICoKKyAqIDA4IDI5IDIwMTggcGV0ZXIuY2hpYW5nCisgKiBbTU9MWTAwMzQ4NzU2XSBbVk1PTFldU0NTSSBQYXRjaGJhY2sKKyAqIC4KKyAqCisgKiAwOCAyOCAyMDE4IHBldGVyLmNoaWFuZworICogW01PTFkwMDM0ODc1Nl0gW1ZNT0xZXVNDU0kgUGF0Y2hiYWNrCisgKiBbU0NTSV0gcGF0Y2hiYWNrIGZvciBOUiBzdXBwb3J0YmFuZCBCaXRtYXNrCisgKgorICogMTIgMTQgMjAxNyB2ZW5kX210Yl9hcml0aGEwMDEKKyAqIFtNT0xZMDAyOTYwODFdIFtPUFBPX0ZUXVsxMTUxNjMwXSBEVVQgZmFpbCB0byBzaG93IG93biAoIFZvZGFmb25lIDNHKSBSQVQgZHVyaW5nIE1QTE1OIHNlYXJjaCBmb3IgVm9kYWZvbmUgb3BlcmF0b3IuCisgKiBBTFBTMDM2MjIyOTAgW1sxMTU1ODAwXT8xNzMxMC1JTj8/RlQtRnJlZV9UZXN0PyBPYnNlcnZlZCBEVVQgZmFpbHMgdG8gc2hvdyBJREVBKDNHKSBSQVQgd2hpbGUgcGVyZm9ybWluZyBQTE1OIG9uIEFpcnRlbCBvcGVyYXRvciB3aGVuIG1vZGUgc2V0IGFzIExXRyhBdXRvKS5dCisgKgorICogMDQgMTIgMjAxNyByYWphc2VraGFyLmdhZGUKKyAqIFtNT0xZMDAyNDAyNzBdIFs2MjkzXVtHZW1pbmldW1QrV10gUGhhc2UgMTogQ29tbW9uIEludGVyZmFjZSBDaGFuZ2VzIENoZWNrIGluCisgKiAJCisgKiAJLgorICoKKyAqIDAxIDA2IDIwMTcgcmFqYXNla2hhci5nYWRlCisgKiBbTU9MWTAwMjE1NTk5XSBbQjE2MDkxNi0xNjRdPzE/Pys/Mj8/Pz8xPz8/Pz8/Pz8/Pz8/PzE/Pz8/Mj8/Pz8sPz8yPz8/MkcKKyAqIAkKKyAqIAkuCisgKgorICogMTAgMjQgMjAxNiB2ZW5kX210Yl9tb2JpdmVpbDAwMworICogW01PTFkwMDIwOTI5M10gQmFuZCA2NiBzdXBwb3J0CisgKiBCYW5kIDY2IHN1cHBvcnQKKyAqCisgKiAwNyAwOSAyMDE1IHBldGVyLmNoaWFuZworICogW01PTFkwMDEyNTg1MV0gU0NTSSBjb21waWxlIHdhcm5pbmcgcmVtb3ZlIGFuZCBpbmRleCBidWcgZml4CisgKiByZW1vdmUgY29tcGlsZSB3YXJuaW5nIGFuZCBmaXggaW5kZXggZXJyb3Igb2YgU0NTSQorICoKKyAqIDA2IDAxIDIwMTUgaGVucnkubGFpCisgKiBbTU9MWTAwMDkyNTA4XSBbTVQ2MjkxXVtMVEUtQzJLXSBBUyBJbnRlciBSQVQgZmVhdHVyZQorICogLgorICoKKyAqIDA1IDIwIDIwMTUgbmlja3kuY2hvdQorICogW01PTFkwMDA4OTEzMV0gW01UNjI5MSBHZW1pbmldIEwrVytXK1cgY29kZSByZXZpc2lvbiBjaGVjayBpbgorICogLgorICoKKyAqIDA0IDE0IDIwMTUgbmlja3kuY2hvdQorICogW01PTFkwMDEwNjg4OF0gW1VTSU1FXUZERC9UREQgc2V0IGJhbmQgcHJvYmxlbSB3aGVuIGluaXQKKyAqIC4KKyAqCisgKiAxMiAxMSAyMDE0IG5pY2t5LmNob3UKKyAqIFtNT0xZMDAwODQ5MzVdIFtTQ1NJXVtMQ1NDRV0gc3luYyB0byBVTU9MWSBmcm9tIE1UNjI5MV9ERVYKKyAqIC4KKyAqCisgKiAxMSAxOSAyMDE0IG5pY2t5LmNob3UKKyAqIFtNT0xZMDAwODQ5MzVdIFtTQ1NJXVtMQ1NDRV0gc3luYyB0byBVTU9MWSBmcm9tIE1UNjI5MV9ERVYKKyAqIC4KKyAqCisgKiAwNiAwNCAyMDE0IG5pY2t5LmNob3UKKyAqIFtNT0xZMDAwNjc2MDBdIFtDTUNDXVtDU0ZCXSA1LjIuMSBIWiBGVCB3b3JrYW91cm5kIC0gYWRkIHNjc2kgR1NNTGF0ZXN0U2VydmluZ0NlbGwgZm9yIDRHIG1lYXN1cmVtZW50CisgKiAuCisgKgorICogMTIgMjAgMjAxMyBuaWNreS5jaG91CisgKiBbTU9MWTAwMDUwNTg3XSBbU0NTSV1bR2VtaW5pXSByZW1vdmUgQVBJcyB3aXRob3V0IHNpbV9pbmRleAorICogLgorICoKKyAqIDExIDIxIDIwMTMgbmlja3kuY2hvdQorICogW01PTFkwMDA0NTg1NF0gW1BTMTI2NyBIRytXR10gQ2hlY2staW4gR2VtaW5pIEhHK1dHIG1vZGlmaWNhdGlvbgorICogLgorICoKKyAqIDA0IDA5IDIwMTMgbmlja3kuY2hvdQorICogW01PTFkwMDAxMTY4NV0gW0NTRV1bU0NTSV1bVVNJTUVdIFVNVFMgQmFuZCBQcmlvcml0eSBTZWFyY2gKKyAqIC4KKyAqCisgKiAwMyAxNCAyMDEzIG5pY2t5LmNob3UKKyAqIFtNT0xZMDAwMDkyMjldIFtDU0VdW1NDU0ldIE1lcmdlIE11bHRpbW9kZSBtb2RpZmljYXRpb24gYmFjayB0byBNT0xZCisgKiAuCisgKgorICogMDEgMjMgMjAxMyBuaWNreS5jaG91CisgKiBbTU9MWTAwMDA5MjI5XSBbQ1NFXVtTQ1NJXSBNZXJnZSBNdWx0aW1vZGUgbW9kaWZpY2F0aW9uIGJhY2sgdG8gTU9MWQorICogLgorICogCisgKiAwOSAyNiAyMDEyIHllLnl1YW4KKyAqIFtNT0xZMDAwMDQxNzNdIFszRyBURERdW0NJU0VdUjkgY29kZSBtZXJnZSBiYWNrIHRvIE1PTFkKKyAqIENTQ0UgQ09ERSBJbnRlcmZhY2UgcGFydCAuCisgKgorICogMDcgMDIgMjAxMiBuaWNreS5jaG91CisgKiBbTU9MWTAwMDAwMTQ5XSBbU0NTSV1bQ1NFXVtVU0lNRV1bTUVNRV0gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGZvciBBdXRvLUJhbmQgJiBTdG9yZWQgSW5mbyBGcmVxIExpc3QKKyAqIC4KKyAqCisgKiAwNCAxNiAyMDEyIG5pY2t5LmNob3UKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDEgMTUgMjAxMiBuaWNreS5jaG91CisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDExIDA4IDIwMTEgbmlja3kuY2hvdQorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwNSAzMSAyMDExIG5pY2t5LmNob3UKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTIgMTQgMjAxMCBuaWNreS5jaG91CisgKiByZW1vdmVkIQorICogLgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIFVBUkZDTiB2YWxpZGF0aW9uIGZ1bmN0aW9uIHJlZmFjdG9yIChmcm9tIFVSUiB0byBTQ1NJKQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIGFkZCB0byBzb3VyY2UgY29udHJvbCByZWN1cnNlbHkKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIEFkZCBjb3B5cmlnaHQgaGVhZGVyLgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogYWRkIHRvIHNvdXJjZSBjb250cm9sIHJlY3Vyc2VseQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBzY3NpLmgKKyAqIAorICogIyBAQ09QWUxFRlQgMjAwNSBKZXRocm8gRS4gTGVlCisgKiBBTEwgV1JPTkdTIFJFU0VSVkVECisgKiAKKyAqIFtVc2VhZ2VdCisgKiAKKyAqIFtTWU5PUFNJU10KKyAqIAorICogW0V4YW1wbGVdCisgKi8KKworI2lmbmRlZiBfX1NDU0lfSF9fCS8qIF8oIUAkIGBzY3NpLmgnICRAISlfICovCisjZGVmaW5lIF9fU0NTSV9IX18KKworLyogTmlja3kgMjAxMDEwMDg6IGluY2x1ZGUgaGVhZGVyIGZpbGVzIGZvciByZWR1bmRhbnQgaGVhZGVyIGZpbGUgcmVtb3ZhbCAqLworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAic2NzaV9hc24uaCIgICAgCisjaW5jbHVkZSAiY3NpX2Fzbi5oIiAgICAgCisjaW5jbHVkZSAibWNkX2wzX2luY19zdHJ1Y3QuaCIKKyNpZmRlZiBfX0dTTV9SQVRfXworI2luY2x1ZGUgImNzaV9nc21fYXNuLmgiIAorI2VuZGlmCisjaWZkZWYgX19VTVRTX1JBVF9fCisjaW5jbHVkZSAiY3NpX3VtdHNfYXNuLmgiCisjZW5kaWYKKyNpZmRlZiBfX0xURV9SQVRfXworI2luY2x1ZGUgImNzaV9sdGVfYXNuLmgiCisjZW5kaWYKKworCisjZGVmaW5lIFNDU0lfU0lNX0VGX0xPQ0lfTEVOICAgICAgICAgICAgICAgICAgICAoMTEpCisjZGVmaW5lIFNDU0lfVVNJTV9FRl9MT0NJX0xFTiAgICAgICAgICAgICAgICAgICAoMTEpCisjZGVmaW5lIFNDU0lfVVNJTV9FRl9QU0xPQ0lfTEVOICAgICAgICAgICAgICAgICAoMTQpCisKKy8qKiAKKyAqIFVUUkFOIEFic29sdXRlIFJhZGlvIEZyZXF1ZW5jeSBDaGFubmVsIE51bWJlciAKKyAqICAKKyAqIFVUUkFGREQgaXMgZGVzaWduZWQgdG8gb3BlcmF0ZWluIGVpdGhlciBvZiB0aGUgIAorICogZm9sbG93aW5nIHBhaXJlZCBiYW5kczogCisgKiAgICAgICAgICAgIDE5MjAtMTk4MCBNSHogVXBsaW5rIAorICogICAgICAgICAgICAyMTEwLTIxNzAgTUh6IERvd25saW5rIAorICogIAorICogVUFSRkNOIFVwbGluazogICAgICAgICAgIDk2MTItIDk4ODggCisgKiBVQVJGQ04gRG93bmxpbms6ICAgICAgICAgMTA1NjItMTA4MzggCisgKi8KKyNpZmRlZiBfX0xURV9SQVRfXworI2RlZmluZSBTQ1NJX01BWF9FQVJGQ04gICAgICAgICAgICAgICAgICAgICAgICAgKDI2MjE0MykKKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworI2RlZmluZSBTQ1NJX01BWF9VQVJGQ04gICAgICAgICAgICAgICAgICAgICAgICAgKDE2MzgzKQorI2RlZmluZSBTQ1NJX1BSSU1BUllfU0NSQU1CTElOR19DT0RFX01BWCAgICAgICAgKDUxMSkgLy9VTVRTIEZERAorI2RlZmluZSBTQ1NJX0NFTExfUEFSQU1FVEVSU19JRF9NQVggICAgICAgICAgICAgKDEyNykgLy9VTVRTIFRERAorCisvKiBDbGF1c2UgMiBvZiBTUEVDIDA1LjA1ICovCisjZGVmaW5lIFNDU0lfTUFYX0dTTV9BUkZDTiAgICAgICAgICAgICAgICAgICAgICAoMTAyNCkKKworI2RlZmluZSBTQ1NJX0dTTV9DRUxMX0lORk9STUFUSU9OX1RBRyAgICAgICAgICAgKDB4QTApCisjZGVmaW5lIFNDU0lfRkREX0NFTExfSU5GT1JNQVRJT05fVEFHICAgICAgICAgICAoMHhBMSkKKyNkZWZpbmUgU0NTSV9URERfQ0VMTF9JTkZPUk1BVElPTl9UQUcgICAgICAgICAgICgweEEyKQorI2RlZmluZSBTQ1NJX0dTTV9DQU1QRURfQkNDSF9GUkVRVUVOQ1lfVEFHICAgICAgICAgICAgICAoMHg4MCkKKyNkZWZpbmUgU0NTSV9HU01fTkVJR0hCT1VSX0JDQ0hfRlJFUVVFTkNZX1RBRyAgICAgICAgICAgKDB4ODEpCisjZGVmaW5lIFNDU0lfSU5UUkFfRlJFUVVFTkNZX0lORk9STUFUSU9OX1RBRyAgICAgICAgKDB4ODApCisjZGVmaW5lIFNDU0lfSU5URVJfRlJFUVVFTkNZX0lORk9STUFUSU9OX1RBRyAgICAgICAgKDB4ODEpCisjZGVmaW5lIFNDU0lfVU5JVElBTElaRURfVVNJTV9EQVRBICAgICAgICAgICAgICAgICAgICAgICgweEZGKQorCit0eXBlZGVmIGVudW0geworICAgIFNDU0lfU0lNMSA9IDAsCisgICAgU0NTSV9TSU0yLAorICAgIFNDU0lfU0lNMywKKyAgICBTQ1NJX1NJTTQsCisgICAgU0NTSV9TSU1fSU5WQUxJRAorfVNDU0lfU0lNX0lOREVYOworCisjaWZkZWYgX19VTVRTX1JBVF9fCisKKy8qKgorICogIEx1Y2llbiBIdWFuZyAyMDA4MTIxODoKKyAqICAgIFBsZWFzZSBiZSBzdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIHNoYWxsIGJlIG1hdGNoZWQgd2l0aAorICogICAgdGhvc2UgaW4gcnJjX3V0aWxzLmggKHNhbWUgZGVmaW5pdGlvbiBjb3VsZCBiZSBzZWVuIHRoZXJlKQorICoqLworCisjZGVmaW5lIFNDU0lfVE9UQUxfTlVNQkVSX09GX1VNVFNfRkREX0JBTkRfREVGSU5FRCAgICAgICgyNikKKyNkZWZpbmUgU0NTSV9UT1RBTF9OVU1CRVJfT0ZfVU1UU19URERfQkFORF9ERUZJTkVEICAgICAgKDYpCisjZGVmaW5lIFNDU0lfVE9UQUxfTlVNQkVSX09GX1VNVFNfQkFORF9ERUZJTkVEICgoU0NTSV9UT1RBTF9OVU1CRVJfT0ZfVU1UU19GRERfQkFORF9ERUZJTkVEPlNDU0lfVE9UQUxfTlVNQkVSX09GX1VNVFNfVEREX0JBTkRfREVGSU5FRCk/IFNDU0lfVE9UQUxfTlVNQkVSX09GX1VNVFNfRkREX0JBTkRfREVGSU5FRDogU0NTSV9UT1RBTF9OVU1CRVJfT0ZfVU1UU19URERfQkFORF9ERUZJTkVEKQorCisjZGVmaW5lIFNDU0lfTUFYX05VTV9PRl9VTVRTX0JBTkRfU1VQUE9SVEVEICAgICAgICAgKDI2KQorI2RlZmluZSBTQ1NJX01BWF9OVU1fT0ZfVU1UU19CQU5EX0FERElUSU9OX0lORk8gICAgICgxMSkgLyogRm9yIFVNVFMgRkREIEJBTkQgVihOdW06NikgYW5kIFhYVkkoTnVtOjExKSAqLworCitlbnVtIFNDU0lfVU1UU19CQU5EX1VBUkZDTl9JREVOVElGSUVSX1RBRworeworICAgIFNDU0lfVU1UU19GRERfVUFSRkNOX0JBTkRfSV9JZGVudGlmaWVyID0gMCwKKyAgICBTQ1NJX1VNVFNfRkREX1VBUkZDTl9CQU5EX0lJX0lkZW50aWZpZXIsCisgICAgU0NTSV9VTVRTX0ZERF9VQVJGQ05fQkFORF9JSUlfSWRlbnRpZmllciwKKyAgICBTQ1NJX1VNVFNfRkREX1VBUkZDTl9CQU5EX0lWX0lkZW50aWZpZXIsCisgICAgU0NTSV9VTVRTX0ZERF9VQVJGQ05fQkFORF9WX0lkZW50aWZpZXIsCisgICAgU0NTSV9VTVRTX0ZERF9VQVJGQ05fQkFORF9WSV9JZGVudGlmaWVyLAorICAgIFNDU0lfVU1UU19GRERfVUFSRkNOX0JBTkRfVklJX0lkZW50aWZpZXIsCisgICAgU0NTSV9VTVRTX0ZERF9VQVJGQ05fQkFORF9WSUlJX0lkZW50aWZpZXIsCisgICAgU0NTSV9VTVRTX0ZERF9VQVJGQ05fQkFORF9JWF9JZGVudGlmaWVyLAorICAgIFNDU0lfVU1UU19GRERfVUFSRkNOX0JBTkRfWF9JZGVudGlmaWVyLAorICAgIFNDU0lfVU1UU19GRERfVUFSRkNOX0JBTkRfWElfSWRlbnRpZmllciwKKyAgICBTQ1NJX1VNVFNfRkREX1VBUkZDTl9CQU5EX1hJSV9JZGVudGlmaWVyLAorICAgIFNDU0lfVU1UU19GRERfVUFSRkNOX0JBTkRfWElJSV9JZGVudGlmaWVyLAorICAgIFNDU0lfVU1UU19GRERfVUFSRkNOX0JBTkRfWElWX0lkZW50aWZpZXIsCisgICAgU0NTSV9VTVRTX0ZERF9VQVJGQ05fQkFORF9YVl9JZGVudGlmaWVyLAorICAgIFNDU0lfVU1UU19GRERfVUFSRkNOX0JBTkRfWFZJX0lkZW50aWZpZXIsCisgICAgU0NTSV9VTVRTX0ZERF9VQVJGQ05fQkFORF9YVklJX0lkZW50aWZpZXIsCisgICAgU0NTSV9VTVRTX0ZERF9VQVJGQ05fQkFORF9YVklJSV9JZGVudGlmaWVyLAorICAgIFNDU0lfVU1UU19GRERfVUFSRkNOX0JBTkRfWElYX0lkZW50aWZpZXIsCisgICAgU0NTSV9VTVRTX0ZERF9VQVJGQ05fQkFORF9YWF9JZGVudGlmaWVyLAorICAgIFNDU0lfVU1UU19GRERfVUFSRkNOX0JBTkRfWFhJX0lkZW50aWZpZXIsCisgICAgU0NTSV9VTVRTX0ZERF9VQVJGQ05fQkFORF9YWElJX0lkZW50aWZpZXIsCisgICAgU0NTSV9VTVRTX0ZERF9VQVJGQ05fQkFORF9YWElJSV9JZGVudGlmaWVyLAorICAgIFNDU0lfVU1UU19GRERfVUFSRkNOX0JBTkRfWFhJVl9JZGVudGlmaWVyLAorICAgIFNDU0lfVU1UU19GRERfVUFSRkNOX0JBTkRfWFhWX0lkZW50aWZpZXIsCisgICAgU0NTSV9VTVRTX0ZERF9VQVJGQ05fQkFORF9YWFZJX0lkZW50aWZpZXIsCisgICAgU0NTSV9VTVRTX0ZERF9VQVJGQ05fQkFORF9JTlZBTElELAorICAgIFNDU0lfVU1UU19URERfVUFSRkNOX0JBTkRfQV9JZGVudGlmaWVyID0gMCwKKyAgICBTQ1NJX1VNVFNfVEREX1VBUkZDTl9CQU5EX0JfSWRlbnRpZmllciA9IDEsCisgICAgU0NTSV9VTVRTX1RERF9VQVJGQ05fQkFORF9DX0lkZW50aWZpZXIgPSAyLAorICAgIFNDU0lfVU1UU19URERfVUFSRkNOX0JBTkRfRF9JZGVudGlmaWVyID0gMywKKyAgICBTQ1NJX1VNVFNfVEREX1VBUkZDTl9CQU5EX0VfSWRlbnRpZmllciA9IDQsCisgICAgU0NTSV9VTVRTX1RERF9VQVJGQ05fQkFORF9GX0lkZW50aWZpZXIgPSA1LAorICAgIFNDU0lfVU1UU19URERfVUFSRkNOX0JBTkRfSU5WQUxJRCA9IDYKK307CisKK3R5cGVkZWYgZW51bSBTQ1NJX1VNVFNfQkFORF9VQVJGQ05fSURFTlRJRklFUl9UQUcgU0NTSV9VTVRTX0JhbmRfVUFSRkNOX0lkZW50aWZpZXI7CisKKyNkZWZpbmUgU0NTSV9NQVhfT1ZFUkxBUFBJTkdfQkFORFMgICAgICAgICAgICAgICAgICAoNCkKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCBudW1VYXJmY247CisgICAgQ3NpVWFyZmNuIG92ZXJsYXBwaW5nVWFyZmNuW1NDU0lfTUFYX09WRVJMQVBQSU5HX0JBTkRTXTsKKyAgICBTQ1NJX1VNVFNfQmFuZF9VQVJGQ05fSWRlbnRpZmllciBvdmVybGFwcGluZ0JhbmRbU0NTSV9NQVhfT1ZFUkxBUFBJTkdfQkFORFNdOworfSBTQ1NJX1VNVFNfb3ZlcmxhcHBpbmdfYmFuZF9pbmZvX3N0cnVjdDsKKwordHlwZWRlZiBlbnVtCit7CisgICBTQ1NJX1JSQ19VRV9Qb3dlckNsYXNzRXh0X2NsYXNzMSwKKyAgIFNDU0lfUlJDX1VFX1Bvd2VyQ2xhc3NFeHRfY2xhc3MyLAorICAgU0NTSV9SUkNfVUVfUG93ZXJDbGFzc0V4dF9jbGFzczMsCisgICBTQ1NJX1JSQ19VRV9Qb3dlckNsYXNzRXh0X2NsYXNzNCwKKyAgIFNDU0lfUlJDX1VFX1Bvd2VyQ2xhc3NFeHRfc3BhcmU0LAorICAgU0NTSV9SUkNfVUVfUG93ZXJDbGFzc0V4dF9zcGFyZTMsCisgICBTQ1NJX1JSQ19VRV9Qb3dlckNsYXNzRXh0X3NwYXJlMiwKKyAgIFNDU0lfUlJDX1VFX1Bvd2VyQ2xhc3NFeHRfc3BhcmUxCit9CitTQ1NJX1JSQ19VRV9Qb3dlckNsYXNzRXh0OworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTQ1NJX1VNVFNfVUFSRkNOX0RMLAorICAgIFNDU0lfVU1UU19VQVJGQ05fVUwKK31TQ1NJX1VNVFNfVWFyZmNuRGlyZWN0aW9uVHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgU0NTSV9VTVRTX0JBTkRfVUFSRkNOX0FERElUSU9OX1NQRUNJQUxfSU5GT19UQUcgU0NTSV9VTVRTX0JhbmRfVUFSRkNOX0FkZGl0aW9uX1NwZWNpYWw7CisKK3N0cnVjdCBTQ1NJX1VNVFNfQkFORF9VQVJGQ05fQURESVRJT05fU1BFQ0lBTF9JTkZPX1RBRworeworICAgIGthbF91aW50OCAgICAgYWRkaXRpb25fbnVtYmVyOworICAgIGthbF91aW50MTYgICAgdWFyZmNuW1NDU0lfTUFYX05VTV9PRl9VTVRTX0JBTkRfQURESVRJT05fSU5GT107Cit9OworCit0eXBlZGVmIHN0cnVjdCBTQ1NJX1VNVFNfQkFORF9VQVJGQ05fQURESVRJT05fR0VORVJBTF9JTkZPX1RBRyBTQ1NJX1VNVFNfQmFuZF9VQVJGQ05fQWRkaXRpb25fR2VuZXJhbDsKKworc3RydWN0IFNDU0lfVU1UU19CQU5EX1VBUkZDTl9BRERJVElPTl9HRU5FUkFMX0lORk9fVEFHCit7CisgICAga2FsX3VpbnQxNiAgICBhZGRpdGlvbl9zdGFydDsKKyAgICBrYWxfdWludDggICAgIGFkZGl0aW9uX251bWJlcjsKK307CisKK2VudW0gU0NTSV9VTVRTX0JBTkRfVUFSRkNOX0FERElUSU9OX1RZUEVfVEFHCit7CisgICAgU0NTSV9VTVRTX0JBTkRfVUFSRkNOX0FERElUSU9OX05vbmVfU2VsZWN0b3IsCisgICAgU0NTSV9VTVRTX0JBTkRfVUFSRkNOX0FERElUSU9OX0dFTkVSQUxfU2VsZWN0b3IsCisgICAgU0NTSV9VTVRTX0JBTkRfVUFSRkNOX0FERElUSU9OX1NQRUNJQUxfU2VsZWN0b3IKK307CisKK3R5cGVkZWYgZW51bSBTQ1NJX1VNVFNfQkFORF9VQVJGQ05fQURESVRJT05fVFlQRV9UQUcgU0NTSV9VTVRTX0JhbmRfVUFSRkNOX0FkZGl0aW9uVHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgU0NTSV9VTVRTX0JBTkRfVUFSRkNOX0NIRUNLX0lORk9fVEFHIFNDU0lfVU1UU19CYW5kQ2hlY2tJbmZvOworCisjaWYgMCAvKl9fM0dQUF8yNTEwMl9ERUZJTklUSU9OX18qLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKK3N0cnVjdCBTQ1NJX1VNVFNfQkFORF9VQVJGQ05fQ0hFQ0tfSU5GT19UQUcKK3sKKyNpZiAwIC8qX18zR1BQXzI1MTAyX0RFRklOSVRJT05fXyovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKworICAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93X2JvdW5kOworICAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQ7CisgICAgU0NTSV9VTVRTX0JhbmRfVUFSRkNOX0FkZGl0aW9uVHlwZSAgICBzZWxlY3Rpb247CisgICAgdW5pb24KKyAgICB7CisgICAgICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25lOworICAgICAgICBTQ1NJX1VNVFNfQmFuZF9VQVJGQ05fQWRkaXRpb25fR2VuZXJhbCAgZ2VuZXJhbDsKKyAgICAgICAgU0NTSV9VTVRTX0JhbmRfVUFSRkNOX0FkZGl0aW9uX1NwZWNpYWwgIHNwZWNpYWw7CisgICAgfWNob2ljZTsKK307CisKK3N0cnVjdCBTQ1NJX1VNVFNfQkFORF9JTkZPX1RBRworeworICAgIFNDU0lfVU1UU19CYW5kX1VBUkZDTl9JZGVudGlmaWVyICByYWRpb0ZyZXF1ZW5jeUJhbmQ7CisgICAgU0NTSV9SUkNfVUVfUG93ZXJDbGFzc0V4dCAgICAgICAgICAgIHVlX1Bvd2VyQ2xhc3M7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4UnhGcmVxdWVuY3lTZXBhcmF0aW9uOyAvKiBpbiBVQVJGQ04gKi8KKyAgICBTQ1NJX1VNVFNfQmFuZENoZWNrSW5mbyAgICAgICAgICAgdWFyZmNuX2NoZWNrX2luZm87Cit9OworCit0eXBlZGVmIHN0cnVjdCBTQ1NJX1VNVFNfQkFORF9JTkZPX1RBRyBTQ1NJX1VNVFNfQmFuZEluZm87CisKK3R5cGVkZWYgc3RydWN0IFNDU0lfVU1UU19CQU5EX0lORk9fTElTVF9UQUcgU0NTSV9VTVRTX0JhbmRJbmZvTGlzdDsKKworc3RydWN0IFNDU0lfVU1UU19CQU5EX0lORk9fTElTVF9UQUcKK3sKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgICAgYmFuZF9udW1iZXI7IC8qIG51bWJlciBvZiBVTVRTIEZERCB3b3JraW5nIGJhbmQgKi8KKyAgICBTQ1NJX1VNVFNfQmFuZF9VQVJGQ05fSWRlbnRpZmllciAgYmFuZF9pbmRleFtTQ1NJX1RPVEFMX05VTUJFUl9PRl9VTVRTX0JBTkRfREVGSU5FRF07IC8qIGxpc3Qgb2YgZW51bSBvZiBVTVRTIEZERCB3b3JraW5nIGJhbmQgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IFNDU0lfVU1UU19CQU5EX0lORk9fREVGSU5FRF9UQUcgU0NTSV9VTVRTX0JhbmRJbmZvRGVmaW5lZExpc3Q7CisKK3N0cnVjdCBTQ1NJX1VNVFNfQkFORF9JTkZPX0RFRklORURfVEFHCit7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgYmFuZF9udW1iZXI7CisgICAgU0NTSV9VTVRTX0JhbmRJbmZvICAgICAgICAgYmFuZF9pbmZvW1NDU0lfVE9UQUxfTlVNQkVSX09GX1VNVFNfQkFORF9ERUZJTkVEXTsKK307CisKKworLyoKKyAqIENoaS1DaHVuZyAyMDA5MDcxNToKKyAqICAgIENvZGUgcmV2aXNlZCBmb3IgZnJlcXVlbmN5UmVwb3NpdG9yeS4gIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSBmb3IgdXNlciB0byBnZXQgdGhlIHVhcmZjbiBpbiBhIE1DQworICovCisjZGVmaW5lIE1BWF9VQVJGQ05fUEVSX01DQyAzMgorICAgIAorLyogdGhlIHVhcmZjbiBpbiBhIE1jYyovCit0eXBlZGVmIHN0cnVjdCBTQ1NJX1VNVFNfVWFyZmNuUGVyTWNjCit7CisgICAgU2NzaU1jY1ZhbHVlIG1jYzsKKyAgICBrYWxfdWludDggY291bnQ7CisgICAgQ3NpVWFyZmNuIHVhcmZjbltNQVhfVUFSRkNOX1BFUl9NQ0NdOworfQorU0NTSV9VTVRTX1VhcmZjblBlck1jYzsKKworI2lmZGVmIF9fTlJfUkFUX18KKworI2RlZmluZSBTQ1NJX0dFTUlOSV9TVEFUVVNfTlVNIDMKKwordHlwZWRlZiBlbnVtIHsKKyAgICBTQ1NJX0dFTUlOSV9TVEFUVVNfRlVMTF9DQVAgPSAwLAorICAgIFNDU0lfR0VNSU5JX1NUQVRVU19EQVRBX1NJTSwKKyAgICBTQ1NJX0dFTUlOSV9TVEFUVVNfTk9OX0RBVEFfU0lNLAorICAgIFNDU0lfR0VNSU5JX1NUQVRVU19JTlZBTElECit9IFNDU0lfR0VNSU5JX1NUQVRVUzsKKyNlbmRpZiAvKiBfX05SX1JBVF9fICovCisKK2V4dGVybiB2b2lkIFNjc2lfQ29tcG9zZVVtdHNCYW5kRGVmaW5pdGlvbkluZm8odm9pZCk7CisKK2V4dGVybiB2b2lkIFNjc2lfU0VfcmV0cmlldmVVbXRzQmFuZExpc3RJbmZvKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwgU0NTSV9VTVRTX0JhbmRJbmZvTGlzdCAqKnBwU2NzaV9TdG9yZWRVbXRzRmRkQmFuZExpc3RJbmZvKTsKKworZXh0ZXJuIHZvaWQgU2NzaV9TRV9yZXRyaWV2ZUZkZFVtdHNCYW5kTGlzdEluZm8oU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBTQ1NJX1VNVFNfQmFuZEluZm9MaXN0ICoqcHBTY3NpX1N0b3JlZFVtdHNGZGRCYW5kTGlzdEluZm8pOworCitleHRlcm4gdm9pZCBTY3NpX3JldHJpZXZlVW10c0ZkZEFuZFRkZEJhbmREZWZpbmVkSW5mbyhTQ1NJX1VNVFNfQmFuZEluZm9EZWZpbmVkTGlzdCAqKnBwU2NzaV9TdG9yZVVtdHNGZGRCYW5kRGVmaW5lZEluZm8sIFNDU0lfVU1UU19CYW5kSW5mb0RlZmluZWRMaXN0ICoqcHBTY3NpX1N0b3JlVW10c1RkZEJhbmREZWZpbmVkSW5mbyk7CisKK2V4dGVybiBrYWxfYm9vbCBTY3NpX1NFX2Vuc3VyZVVhcmZjblZhbGlkKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQxNiB1YXJmY24pOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgRnVuY3Rpb246ICAgIFNjc2lfVWFyZmNuVmFsaWRhdGVJbkFsbFVtdHNCYW5kCisgKgorICogICAgcGFyYW1ldGVyOiAKKyAqICAgICAgYS4gdWFyZmNuIC0gdWFyZmNuIHdoaWNoIHdlIHdhbnQgdG8gY2hlY2sgdGhlIHZhbGlkYXRpb24KKyAqICAgICAgYi4gdHlwZSAtIGluZGljYXRlIHRvIHBlcmZvcm0gREwgb3IgVUwgVUFSRkNOIHZhbGlkYXRpb24KKyAqICAgICAgYy4gYmFuZF9pZCAtIHN0b3JlIHdoaWNoIGJhbmQgdGhlIGlucHV0IHVhcmZjbiBsb2NhdGVzIGlmIHJldHVybiBLQUxfVFJVRQorICogICAgICAgICAgICAgICAgICAgbWVhbmluZ2xlc3MgaWYgcmV0dXJuIEtBTF9GQUxTRSBvciBpbnB1dCBiYW5kX2lkIGlzIE5VTEwgcG9pbnRlcgorICogICAgUmV0dXJuczoKKyAqICAgICAgYS4gcmV0dXJuIEtBTF9UUlVFIG1lYW5zIGlucHV0IHVhcmZjbiBpcyBpbiB2YWxpZCByYW5nZQorICogICAgICBiLiAqYmFuZF9pZCB3aWxsIHN0b3JlIHRoZSBiYW5kIG51bWJlciB3aGljaCB0aGlzIHVhcmZjbiBsb2NhdGVzIGlmIGJhbmRfaWQgaXMgbm90IE5VTEwgcG9pbnRlcgorICoKKyAqICAgIERlc2NyaXB0aW9uOgorICogICAgICBFbnZva2VkIGZvciBjaGVjayB3aGV0aGVyIHRoZSBpbnB1dCB1YXJmY24gaXMgaW4gdGhlIHZhbGlkIHZhbHVlIHJhbmdlIHdoaWNoIDNHUFAgZGVmaW5lcyBmb3IKKyAqICAgICAgd2hvbGUgVU1UUyBGREQgYmFuZHMuIEN1cnJlbnRseSBpdCB3aWxsIGNoZWNrIEJhbmQgSSAtIFguCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitleHRlcm4ga2FsX2Jvb2wgU2NzaV9VYXJmY25WYWxpZGF0ZUluQWxsVW10c0JhbmQoU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDE2IHVhcmZjbiwgU0NTSV9VTVRTX1VhcmZjbkRpcmVjdGlvblR5cGUgdHlwZSwgU0NTSV9VTVRTX0JhbmRfVUFSRkNOX0lkZW50aWZpZXIgKmJhbmRfaWQpOworCitleHRlcm4ga2FsX2Jvb2wgU2NzaV9TRV9VYXJmY25WYWxpZGF0ZUluQWxsU3VwcG9ydFVtdHNCYW5kKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQxNiB1YXJmY24sIFNDU0lfVU1UU19VYXJmY25EaXJlY3Rpb25UeXBlIHR5cGUsIFNDU0lfVU1UU19CYW5kX1VBUkZDTl9JZGVudGlmaWVyICpiYW5kX2lkKTsKKworZXh0ZXJuIGthbF9ib29sIFNjc2lfVWFyZmNuVmFsaWRhdGVJbk9uZVN1cHBvcnRVbXRzQmFuZChTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MTYgdWFyZmNuLCBTQ1NJX1VNVFNfVWFyZmNuRGlyZWN0aW9uVHlwZSB0eXBlLCBTQ1NJX1VNVFNfQmFuZF9VQVJGQ05fSWRlbnRpZmllciBiYW5kX2lkKTsKKworZXh0ZXJuIGthbF9ib29sIFNjc2lfU0VfVWFyZmNuVmFsaWRhdGVJbkFsbFN1cHBvcnRVbXRzQmFuZEV4dChTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MTYgdWFyZmNuLCBTQ1NJX1VNVFNfVWFyZmNuRGlyZWN0aW9uVHlwZSB0eXBlLCBTQ1NJX1VNVFNfQmFuZF9VQVJGQ05fSWRlbnRpZmllciAqYmFuZF9pZCwga2FsX3VpbnQ4ICppbmRleEluQmFuZEZERExpc3QpOworCitleHRlcm4ga2FsX3VpbnQ4IFNjc2lfU0VfR2V0TnVtT2ZVbXRzU3VwcG9ydEJhbmQoU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4KTsKKworZXh0ZXJuIHZvaWQgU2NzaV9TRV9HZXRVbXRzU3VwcG9ydEJhbmRJbmZvKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwgU0NTSV9VTVRTX0JhbmRJbmZvTGlzdCBjb25zdCAqKndvcmtCYW5kSW5mbyk7CisKK2V4dGVybiB2b2lkIFNjc2lfU0VfR2V0VW10c0ZkZEFuZFRkZFN1cHBvcnRCYW5kSW5mbyhTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIFNDU0lfVU1UU19CYW5kSW5mb0xpc3QgKipmZGRXb3JrQmFuZEluZm8sIFNDU0lfVU1UU19CYW5kSW5mb0xpc3QgICoqdGRkV29ya0JhbmRJbmZvKTsKKworZXh0ZXJuIHZvaWQgU2NzaV9TRV9SZXF1aXJlZFVtdHNCYW5kTGlzdFF1ZXJ5KFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQ4ICpxdWVyeV9hcnJheSk7CisKK2V4dGVybiBrYWxfYm9vbCBTY3NpX1NFX0lzVW10c1N1cHBvcnRCYW5kKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwgU0NTSV9VTVRTX0JhbmRfVUFSRkNOX0lkZW50aWZpZXIgYmFuZF9pZCk7CisKKyNlbmRpZiAvKiBfX1VNVFNfUkFUX18gKi8KKworI2RlZmluZSBTQ1NJX1NFVF9CTVAoX2JpdG1hcCwgX29mc3QsIF90eXBlKSAoKF9iaXRtYXApIHw9IChfdHlwZSkoKF90eXBlKTEgPDwgKF9vZnN0KSkpCisjZGVmaW5lIFNDU0lfQ0xSX0JNUChfYml0bWFwLCBfb2ZzdCwgX3R5cGUpICgoX2JpdG1hcCkgJj0gKF90eXBlKSh+KChfdHlwZSkxIDw8IChfb2ZzdCkpKSkKKyNkZWZpbmUgU0NTSV9DSEtfQk1QKF9iaXRtYXAsIF9vZnN0LCBfdHlwZSkgKChfYml0bWFwKSAmIChfdHlwZSkoKF90eXBlKTEgPDwgKF9vZnN0KSkpCisjZGVmaW5lIFNDU0lfQllURV9CSVRNQVNLIDcKKy8qIEJlY2F1c2UgTFNCIGlzIGZvciBCYW5kIDEsIHNvIGlmIHdlIHdhbnQgdG8gYWNjZXNzIEJhbmQgeCAsIHdlIHNob3VsZCBhY2Nlc3MgYml0bWFza1t4LTFdICovCisjZGVmaW5lIFNDU0lfQkFORF9CSVRfTUFTS19HRVRfQllURV9PRkZTRVQoX2JhbmQpICgoX2JhbmQgLSAoMSkpID4+ICgzKSkKKyNkZWZpbmUgU0NTSV9CQU5EX0JJVF9NQVNLX0dFVF9CSVRfT0ZGU0VUKF9iYW5kKSAoKF9iYW5kIC0gKDEpKSAmIChTQ1NJX0JZVEVfQklUTUFTSykpCisKKyNpZmRlZiBfX0xURV9SQVRfXworI2RlZmluZSBNQVhfQllURV9MVEVfQkFORF9CSVRNQVNLIDgKKwordHlwZWRlZiBzdHJ1Y3QgU0NTSV9MVEVfQmFuZF9CaXRtYXNrCit7CisgICAga2FsX3VpbnQ4IG9uZUJ5dGVCYW5kQml0bWFza1tNQVhfQllURV9MVEVfQkFORF9CSVRNQVNLXTsKK30KK1NDU0lfTFRFX0JhbmRfQml0bWFzazsKKworLyogRXh0ZW5kZWQgc3VwcG9ydGVkIExURSBiaXRtYXNrIHNpemUgaW4gYml0cyAoMjU2KSAvIGJpdHMgaW4gb25lIGJ5dGUgKDgpCisgKi8KKyNkZWZpbmUgTUFYX0JZVEVfTFRFX0JBTkRfQklUTUFTS19FWFRFTkRFRCAoIDI1NiAvIDggKQorCit0eXBlZGVmIHN0cnVjdCBTQ1NJX0xURV9CYW5kX0JpdG1hc2tfRXh0ZW5kZWQKK3sKKyAgICBrYWxfdWludDggb25lQnl0ZUJhbmRCaXRtYXNrW01BWF9CWVRFX0xURV9CQU5EX0JJVE1BU0tfRVhURU5ERURdOworfQorU0NTSV9MVEVfQmFuZF9CaXRtYXNrX0V4dGVuZGVkOworCisjZW5kaWYgLyogX19MVEVfUkFUX18gKi8KKworI2lmZGVmIF9fTlJfUkFUX18KKworI2RlZmluZSBNQVhfQllURV9OUl9CQU5EX0JJVE1BU0sgMTI4CisKK3R5cGVkZWYgc3RydWN0IFNDU0lfTlJfQmFuZF9CaXRtYXNrCit7CisgICAga2FsX3VpbnQ4IG9uZUJ5dGVCYW5kQml0bWFza1tNQVhfQllURV9OUl9CQU5EX0JJVE1BU0tdOworfQorU0NTSV9OUl9CYW5kX0JpdG1hc2s7CisKKyNlbmRpZiAvKiBfX05SX1JBVF9fICovCisKKyNpZiAoZGVmaW5lZChfXzIzR19QUklfUkVTRUxfU1VQUE9SVF9fKSB8fCBkZWZpbmVkKF9fM0dfQ1NHX1NVUFBPUlRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykgfHwgZGVmaW5lZChfX0NETUEyMDAwX1JBVF9fKSB8fCBkZWZpbmVkKF9fTlJfUkFUX18pKQorI2RlZmluZSBTQ1NJX01BWF9USUNLUyAweEZGRkZGRkZGCisKK3R5cGVkZWYgZW51bSB7CisgICAgU0NTSV9HU01fUkFULAorICAgIFNDU0lfVU1UU0ZERF9SQVQsCisgICAgU0NTSV9VTVRTVEREX1JBVCwKKyAgICBTQ1NJX0xURV9SQVQsCisgICAgU0NTSV9DMktfUkFULAorICAgIFNDU0lfTlJfUkFUCit9U0NTSV9SQVRfTU9ERV9UWVBFOworI2VuZGlmIC8qIGRlZmluZWQoX18yM0dfUFJJX1JFU0VMX1NVUFBPUlRfXykgfHwgZGVmaW5lZChfXzNHX0NTR19TVVBQT1JUX18pIHx8IGRlZmluZWQoX19MVEVfUkFUX18pIHx8IGRlZmluZWQoX19DRE1BMjAwMF9SQVRfXykgfHwgZGVmaW5lZChfX05SX1JBVF9fKSAqLworCisjaWYgKGRlZmluZWQoX18yM0dfUFJJX1JFU0VMX1NVUFBPUlRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykgfHwgZGVmaW5lZChfX0NETUEyMDAwX1JBVF9fKSB8fCBkZWZpbmVkKF9fTlJfUkFUX18pKQorLy9EZWRpY2F0ZWQgUHJpb3JpdHkgSW5mbworI2RlZmluZSBTQ1NJX01BWF9OVU1fT0ZfUFJJT19JTkZPIDQwCisjZGVmaW5lIFNDU0lfTUFYX0JZVEVfT0ZfR1NNX1BSSU9fQVJGQ04gIDEyOCAgICAvLyBiaXRtYXNrLCB0b3RhbCAxMjggYnl0ZXMuCisjZGVmaW5lIFNDU0lfTUFYX05VTV9PRl9VTVRTRkREX1BSSU9fVUFSRkNOICAzMiAvLyAzMiBmcmVxdWVuY3kuCisjZGVmaW5lIFNDU0lfTUFYX05VTV9PRl9VTVRTVEREX1BSSU9fVUFSRkNOICAzMiAvLyAzMiBmcmVxdWVuY3kuCisjZGVmaW5lIFNDU0lfTUFYX05VTV9PRl9MVEVfUFJJT19FQVJGQ04gIDMyIC8vIDMyIGZyZXF1ZW5jeQorI2RlZmluZSBTQ1NJX01BWF9OVU1fT0ZfQzJLX1BSSU9fQkFORCAgMzIgLy8gMzIgYmFuZAorI2RlZmluZSBTQ1NJX01BWF9OVU1fT0ZfTlJfUFJJT19OQVJGQ04gOCAvLzMyIGZyZXF1ZW5jeQorCit0eXBlZGVmIHN0cnVjdHsKKyAga2FsX2ludDggICAgICAgcHJpb3JpdHk7CisgIGthbF9pbnQ4ICAgICAgIHN1Yl9wcmlvcml0eTsgIC8vIHBsZWFzZSBjaGVjayB0aGlzIGVxdWFsIHRvIDAsIDIsIDQsIDYgb3IgOAorICBTQ1NJX1JBVF9NT0RFX1RZUEUgIHJhdF9jaG9pY2U7CisgIGthbF91aW50OCAgICAgIGZyZXFfY291bnQ7ICAgICAgICAgLy8gb25seSB1c2VkIGluIDNHIG9yIExURSB0eXBlLCBpdCBrZWVwcyB0aGUgZnJlcXVlbmN5IGNvdW50CisgIGthbF91aW50OCAgICAgIGdzbV9iYW5kX2luZGljYXRvcjsgLy9yZWZlciB0byB0ZV9nc21fYmFuZF9pbmRpY2F0b3IgaW4gdWFzX2dhc19lbnVtcy5oCisgIC8qKgorICAgKiBmb3IgR1NNIFJBVCwgZXZlcnkgYml0IHJlcHJlc2VuZXQgYSBBUkZDTiAoZnJvbSAwfjEwMjMpOyBMU0Igb2Ygb2N0ZXQgMSByZXByZXNlbnQgYXJmY24gPSAwLCBNU0Igb2Ygb2N0ZXQgMSByZXByZXNlbnQgYXJmY24gPSA3CisgICAqIGZvciBVTVRTRkRELCBldmVyeSBVMTYgZWxlbWVudCByZXByZXNlbnQgYW4gVUFSRkNOLgorICAgKiBmb3IgTFRFLCAgICAgZXZlcnkgVTMyIGVsZW1lbnQgcmVwcmVzZW50IGFuIEVBUkZDTi4KKyAgICogZm9yIEMySywgICAgIGV2ZXJ5IFU4ICBlbGVtZW50IHJlcHJlc2VudCBhbiBCYW5kLgorICAgKiBmb3IgTlIsICAgICAgZXZlcnkgVTMyIGVsZW1lbnQgcmVwcmVzZW50IGFuIE5BUkZDTi4KKyAgICoqLworICB1bmlvbnsKKyAgICBrYWxfdWludDggICpBUkZDTl9iaXRtYXA7IC8vIFNDU0lfTUFYX0JZVEVfT0ZfR1NNX1BSSU9fQVJGQ04KKyAgICBrYWxfdWludDE2ICpVQVJGQ05fbGlzdDsgIC8vIFNDU0lfTUFYX05VTV9PRl9VTVRTRkREX1BSSU9fVUFSRkNOIDw9PSBlYWNoIG9mIHRoZW0gaXMgdHdvIGJ5dGVzLgorICAgIGthbF91aW50MzIgKkVBUkZDTl9saXN0OyAvLyBTQ1NJX01BWF9OVU1fT0ZfTFRFX1BSSU9fRUFSRkNOIDw9PSBlYWNoIG9mIHRoZW0gaXMgZm91ciBieXRlcy4KKyAgICBrYWxfdWludDggICpDMktfQmFuZF9saXN0OyAvLyBTQ1NJX01BWF9OVU1fT0ZfQzJLX1BSSU9fQkFORCA8PT0gZWFjaCBvZiB0aGVtIGlzIG9uZSBieXRlCisgICAga2FsX3VpbnQzMiAqTkFSRkNOX2xpc3Q7IC8vIFNDU0lfTUFYX05VTV9PRl9OUl9QUklPX05BUkZDTiA8PT0gZWFjaCBvZiB0aGVtIGlzIGZvdXIgYnl0ZXMuCisgIH1jaG9pY2U7Cit9IFNDU0lfbGF5ZXJfcHJpb19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICBwbG1uX2lkX3N0cnVjdCAgICAgICAgICAgIHJwbG1uOworICBTQ1NJX1JBVF9NT0RFX1RZUEUgICAgICAgIGRlZGlfcHJpb19pbmZvX3NyYzsKKyAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICBsYXllcl9wcmlvX2NvdW50OworICBTQ1NJX2xheWVyX3ByaW9fc3RydWN0ICAgIGxheWVyX3ByaW9fbGlzdFtTQ1NJX01BWF9OVU1fT0ZfUFJJT19JTkZPXTsKKworICBrYWxfdWludDMyICAgICAgICAgICAgICAgIHRpY2tfcHJldmlvdXM7IC8vIFNDU0kgaW50ZXJuYWwgdXNlCisgIGthbF91aW50MzIgICAgICAgICAgICAgICAgdGlja19sZWZ0OyAgICAgLy8gU0NTSSBpbnRlcm5hbCB1c2UKK30gU0NTSV9kZWRpX3ByaW9faW5mbzsKKworI2RlZmluZSBTQ1NJX01BWF9OVU1fT0ZfREVQUklPUklUSVpBVElPTl9JTkZPIDgKKyNkZWZpbmUgU0NTSV9NQVhfREVQUklPUklUSVpBVElPTl9QTE1OX05VTSA4CisKK3R5cGVkZWYgc3RydWN0eworICBwbG1uX2lkX3N0cnVjdCAgICAgICAgICAgIHJwbG1uOworICBrYWxfdWludDggICAgICAgICAgICAgICAgIGVhcmZjbl9pbmZvX251bTsKKyAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICBlYXJmY25faW5mb19saXN0W1NDU0lfTUFYX05VTV9PRl9ERVBSSU9SSVRJWkFUSU9OX0lORk9dOyAvLyBmcmVxdWVuY3kgbGlzdCwgaWYgZWFyZmNuID09IDB4ZmZmZmZmZmYgPT4gYWxsIExURSBSQVQKKworICBrYWxfdWludDggICAgICAgICAgICAgICAgIG5hcmZjbl9pbmZvX251bTsKKyAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICBuYXJmY25faW5mb19saXN0W1NDU0lfTUFYX05VTV9PRl9ERVBSSU9SSVRJWkFUSU9OX0lORk9dOyAvLyBmcmVxdWVuY3kgbGlzdCwgaWYgbmFyZmNuID09IDB4ZmZmZmZmZmYgPT4gYWxsIE5SIFJBVAorCisgIGthbF91aW50MzIgICAgICAgICAgICAgICAgdGlja19wcmV2aW91czsgLy8gU0NTSSBpbnRlcm5hbCB1c2UKKyAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICB0aWNrX2xlZnQ7ICAgICAvLyBTQ1NJIGludGVybmFsIHVzZQorfSBTQ1NJX2RlcHJpb3JpdGl6YXRpb25faW5mb19zdHJ1Y3Q7CisKKy8vIGZvciBWelcgcmVxdWVzdAordHlwZWRlZiBzdHJ1Y3R7CisgIGthbF91aW50OCAgICAgICAgICAgICAgICAgcGxtbl9udW07CisgIFNDU0lfZGVwcmlvcml0aXphdGlvbl9pbmZvX3N0cnVjdCAgICAqZGVwcmlvcml0aXphdGlvbl9pbmZvX2xpc3RbU0NTSV9NQVhfREVQUklPUklUSVpBVElPTl9QTE1OX05VTV07Cit9IFNDU0lfZGVwcmlvcml0aXphdGlvbl9pbmZvX3RibF9zdHJ1Y3Q7CisjZW5kaWYgLyogX18yM0dfUFJJX1JFU0VMX1NVUFBPUlRfXyB8fCBfX0xURV9SQVRfXyB8fCBfX0NETUEyMDAwX1JBVF9fIHx8IF9fTlJfUkFUX18gKi8KKworCisjaWYgKGRlZmluZWQoX18zR19DU0dfU1VQUE9SVF9fKSB8fCBkZWZpbmVkKF9fTFRFX1JBVF9fKSkKKy8vQ1NHIFNwbGl0IEluZm8KKyNkZWZpbmUgU0NTSV9NQVhfTlVNX09GX0NTR19TUExJVF9JTkZPICAzICAgLy90aGUgdmFsdWUgY2Fubm90IGJlIGVxdWFsIHRvIHplcm8gd2hpY2ggJ3dyYXAgYXJvdW5kJyB3aWxsIGhhcHBlbiBpbiBTQ1NJX25ld0NTR1NwbGl0SW5mbygpLgorI2RlZmluZSBTQ1NJX01BWF9CWVRFX09GX1BIWV9DRUxMX0lEICAgICAgIDY0ICAgIC8vIGJpdG1hc2ssIHRvdGFsIDY0IGJ5dGVzLgorI2RlZmluZSBTQ1NJX01BWF9OVU1fT0ZfTVVMVElfUExNTiAgIDYKKworI2lmZGVmIF9fM0dfQ1NHX1NVUFBPUlRfXwordHlwZWRlZiBzdHJ1Y3R7CisgIGthbF91aW50OCAgICAgIHBsbW5fY291bnQ7CisgIHBsbW5faWRfc3RydWN0IHBsbW5bU0NTSV9NQVhfTlVNX09GX01VTFRJX1BMTU5dOworICBDc2lVYXJmY24gICAgICB1YXJmY247CisgIGthbF91aW50OCAgICAgIHBoeUNlbGxJZF9iaXRtYXBbU0NTSV9NQVhfQllURV9PRl9QSFlfQ0VMTF9JRF07IC8vZXZlcnkgYml0IHJlcHJlc2VuZXQgYSBQU0MgKGZyb20gMH41MTIpOyBMU0Igb2Ygb2N0ZXQgMSByZXByZXNlbnQgcHNjID0gMCwgTVNCIG9mIG9jdGV0IDEgcmVwcmVzZW50IHBzYyA9IDcKKworICBrYWxfdWludDMyICAgICB0aWNrX3ByZXZpb3VzOyAvLyBTQ1NJIGludGVybmFsIHVzZQorICBrYWxfdWludDMyICAgICB0aWNrX2xlZnQ7ICAgICAvLyBTQ1NJIGludGVybmFsIHVzZQorfSBTQ1NJX3VtdHNfY3NnX3NwbGl0X2luZm87CisjZW5kaWYgLyogX18zR19DU0dfU1VQUE9SVF9fICovCisKKyNpZmRlZiBfX0xURV9SQVRfXwordHlwZWRlZiBzdHJ1Y3R7CisgIGthbF91aW50OCAgICAgIHBsbW5fY291bnQ7CisgIHBsbW5faWRfc3RydWN0IHBsbW5bU0NTSV9NQVhfTlVNX09GX01VTFRJX1BMTU5dOworICBDc2lFYXJmY24gICAgICBlYXJmY247CisgIGthbF91aW50OCAgICAgIHBoeUNlbGxJZF9iaXRtYXBbU0NTSV9NQVhfQllURV9PRl9QSFlfQ0VMTF9JRF07IC8vZXZlcnkgYml0IHJlcHJlc2VuZXQgYSBQU0MgKGZyb20gMH41MTIpOyBMU0Igb2Ygb2N0ZXQgMSByZXByZXNlbnQgcHNjID0gMCwgTVNCIG9mIG9jdGV0IDEgcmVwcmVzZW50IHBzYyA9IDcKKworICBrYWxfdWludDMyICAgICB0aWNrX3ByZXZpb3VzOyAvLyBTQ1NJIGludGVybmFsIHVzZQorICBrYWxfdWludDMyICAgICB0aWNrX2xlZnQ7ICAgICAvLyBTQ1NJIGludGVybmFsIHVzZQorfSBTQ1NJX2x0ZV9jc2dfc3BsaXRfaW5mbzsKKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworCisjaWZkZWYgX18zR19DU0dfU1VQUE9SVF9fCit0eXBlZGVmIHN0cnVjdHsKKyAga2FsX3VpbnQ4ICAgICAgICAgICBsaXN0X2NvdW50OworICBTQ1NJX3VtdHNfY3NnX3NwbGl0X2luZm8gc3BsaXRfaW5mb19saXN0W1NDU0lfTUFYX05VTV9PRl9DU0dfU1BMSVRfSU5GT107Cit9U0NTSV91bXRzX2NzZ19zcGxpdF9pbmZvX2xpc3Q7CisjZW5kaWYgLyogX18zR19DU0dfU1VQUE9SVF9fICovCisKKyNpZmRlZiBfX0xURV9SQVRfXwordHlwZWRlZiBzdHJ1Y3R7CisgIGthbF91aW50OCAgICAgICAgICAgbGlzdF9jb3VudDsKKyAgU0NTSV9sdGVfY3NnX3NwbGl0X2luZm8gc3BsaXRfaW5mb19saXN0W1NDU0lfTUFYX05VTV9PRl9DU0dfU1BMSVRfSU5GT107Cit9U0NTSV9sdGVfY3NnX3NwbGl0X2luZm9fbGlzdDsKKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworCisjZW5kaWYgLyogX18zR19DU0dfU1VQUE9SVF9fIHx8IF9fTFRFX1JBVF9fICovCisKKworLy8gQ29uc3RydWN0b3IKK2V4dGVybiB2b2lkIFNjc2lfU2NzaSh2b2lkKTsKK2V4dGVybiB2b2lkIFNjc2lfcmVzZXQodm9pZCk7CisKKworLy8gSW5pdGlhbGl6ZXIKK2V4dGVybiB2b2lkIFNjc2lfaW5pdEZyb21OVlJBTShrYWxfdWludDgqIG52cmFtRWZOZXRwYXJCdWZQdHIsIGthbF91aW50MTYgY29uc3QgbnZyYW1FZk5ldHBhckJ1Zkxlbik7CisKK2V4dGVybiBrYWxfYm9vbCBTY3NpX2lzTnZyYW1Jbml0aWFsaXplZCh2b2lkKTsKKworI2lmZGVmIF9fR1NNX1JBVF9fCisvKiBKZXRocm86IFN1cHBvc2UgU0lNIGlzIGFibGUgdG8gYmUgaGFuZGxlZCBpbiBhbGwgY2FzZXMsIHJlZ2FyZGxlc3MgdGhlIGxvYWQgaXMgZHVhbCBtb2RlIG9yIHNpbmdsZSBtb2RlLiAqLworZXh0ZXJuIHZvaWQgU2NzaV9pbml0RnJvbVNJTShwbG1uX2lkX3N0cnVjdCBjb25zdCogY29uc3QgclBsbW5JZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENzaUdzbUNlbGxMaXN0IGNvbnN0KiBjb25zdCBnc21DZWxsTGlzdCk7CisjZW5kaWYgLyogX19HU01fUkFUX18gKi8KKworI2lmZGVmIF9fVU1UU19SQVRfXyAgICAgIC8qIDNHIGlzIHRvIGJlIGJ1aWx0LWluICovCitleHRlcm4gdm9pZCBTY3NpX2luaXRGcm9tVVNJTShTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG1uX2lkX3N0cnVjdCBjb25zdCogY29uc3QgclBsbW5JZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDc2lVbXRzQ2VsbExpc3QqIGNvbnN0IHVtdHNDZWxsTGlzdAorI2lmZGVmIF9fR1NNX1JBVF9fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3NpR3NtQ2VsbExpc3QgY29uc3QqIGNvbnN0IGdzbUNlbGxMaXN0CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKK2V4dGVybiB2b2lkIFNjc2lfRnJlcVJlcG9zaXRvcnlJbml0RnJvbU5WUkFNKGthbF91aW50OCogbnZyYW1FZk5ldHBhckJ1ZlB0ciwga2FsX3VpbnQxNiBjb25zdCBudnJhbUVmTmV0cGFyQnVmTGVuKTsKK2V4dGVybiBrYWxfdWludDE2IFNjc2lfZ2V0TnZyYW1FRlVtdHNGcmVxKGthbF91aW50OCogY29uc3QgbnZyYW1FZk5ldHBhckJ1ZlB0ciwga2FsX3VpbnQxNiBjb25zdCBudnJhbUVmTmV0cGFyQnVmTGVuKTsKK2V4dGVybiB2b2lkIFNjc2lfZnJlcVB1cmdlKHZvaWQpOworZXh0ZXJuIHZvaWQgU2NzaV9mcmVxUHVyZ2UzR1RERE9ubHkodm9pZCk7CisjZW5kaWYgICAgICAvKiAjaWZkZWYgX19VTVRTX1JBVF9fICovCisKK2V4dGVybiB2b2lkIFNjc2lfcHVyZ2Uodm9pZCk7CitleHRlcm4gdm9pZCBTY3NpX3B1cmdlM0dURERPbmx5KHZvaWQpOworCisvLyBEZXN0cnVjdG9yCitleHRlcm4gdm9pZCBTY3NpX2Rlc3RydWN0KHZvaWQpOworCisKKyNpZmRlZiBfX0dTTV9SQVRfXyAgICAgIC8qIDJHIGlzIHRvIGJlIGJ1aWx0LWluICovCisvLyBHU00KKy8vIFNldHRlcgorZXh0ZXJuIHZvaWQgU2NzaV9uZXdHc21GcmVxUmFuZ2UocGxtbl9pZF9zdHJ1Y3QgY29uc3QqIGNvbnN0IHBsbW5JRCwgQ3NpR3NtQmFSYW5nZUFuZEJhbmQqIGNvbnN0IEJBUmFuZ2VMaXN0KTsKK2V4dGVybiB2b2lkIFNjc2lfbmV3R3NtTmVpZ2hib3JDZWxscyhwbG1uX2lkX3N0cnVjdCBjb25zdCogY29uc3QgcGxtbklELCBDc2lHc21DZWxsTGlzdCogY29uc3QgY2VsbExpc3QpOworI2lmZGVmIF9fTFRFX1JBVF9fCitleHRlcm4gdm9pZCBTY3NpX25ld0dzbUxhdGVzdFNlcnZpbmdDZWxsKHBsbW5faWRfc3RydWN0IGNvbnN0KiBjb25zdCBwbG1uSUQsIENzaUdzbUNlbGwgY29uc3QqIGNvbnN0IGNlbGwpOworCisvL0p1c3QgZm9yIFVUIGN1cnJlbnRseSwgbm90IHJlbGVhc2UgcHVibGljbHkKKyNpZmRlZiBVTklUX1RFU1QKK2V4dGVybiB2b2lkIFNjc2lfZGVsR3NtTGF0ZXN0U2VydmluZ0NlbGwocGxtbl9pZF9zdHJ1Y3QgY29uc3QqIGNvbnN0IHBsbW5JRCk7CisjZW5kaWYgLyogVU5JVF9URVNUICovCisjZW5kaWYgLyogX19MVEVfUkFUX18gKi8KKworLy8gR2V0dGVyCitleHRlcm4gdm9pZCBTY3NpX2dldEdzbUZyZXFSYW5nZShwbG1uX2lkX3N0cnVjdCBjb25zdCogY29uc3QgcGxtbklELCBDc2lHc21CYVJhbmdlQW5kQmFuZCogY29uc3QgQkFSYW5nZUxpc3QpOworZXh0ZXJuIHZvaWQgU2NzaV9nZXRHc21OZWlnaGJvckNlbGxzKHBsbW5faWRfc3RydWN0IGNvbnN0KiBjb25zdCBwbG1uSUQsIENzaUdzbUNlbGxMaXN0KiBjb25zdCBjZWxsTGlzdCk7CisjaWZkZWYgX19MVEVfUkFUX18KK2V4dGVybiBrYWxfYm9vbCBTY3NpX2dldEdzbUxhdGVzdFNlcnZpbmdDZWxsKHBsbW5faWRfc3RydWN0IGNvbnN0KiBjb25zdCBwbG1uSUQsIENzaUdzbUNlbGwqIGNvbnN0IGNlbGwpOworI2VuZGlmIC8qIF9fTFRFX1JBVF9fICovCisjZW5kaWYgICAgICAvKiAjaWZkZWYgX19HU01fUkFUX18gKi8KKworCisjaWZkZWYgX19VTVRTX1JBVF9fICAgICAgLyogM0cgaXMgdG8gYmUgYnVpbHQtaW4gKi8KKy8vIFVNVFMKKy8qIERhdmlkIDIwMDgxMTA3OgorICogQWRkZWQgZm9yIGF1dG8gYmFuZCBtZWNoYW5pc20uCisgKi8KKyNpZmRlZiBfXzNHX0FVVE9fQkFORF9NRUNIQU5JU01fXworZXh0ZXJuIHZvaWQgU2NzaV9uZXdVbXRzV29ya2luZ0JhbmQoU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBwbG1uX2lkX3N0cnVjdCBjb25zdCogY29uc3QgcGxtbklELCBTQ1NJX1VNVFNfQmFuZF9VQVJGQ05fSWRlbnRpZmllciBiYW5kSUQpOworZXh0ZXJuIHZvaWQgU2NzaV9kZWxVbXRzV29ya2luZ0JhbmQoU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBwbG1uX2lkX3N0cnVjdCBjb25zdCogY29uc3QgcGxtbklELCBTQ1NJX1VNVFNfQmFuZF9VQVJGQ05fSWRlbnRpZmllciBiYW5kSUQpOworI2VuZGlmCisvLyBTZXR0ZXIKK2V4dGVybiB2b2lkIFNjc2lfbmV3VW10c0ZyZXFSYW5nZShTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIHBsbW5faWRfc3RydWN0IGNvbnN0KiBjb25zdCBwbG1uSUQsIENzaVVtdHNGcmVxdW5lY3lMaXN0KiBjb25zdCBmcmVxUmFuZ2UpOworCitleHRlcm4gdm9pZCBTY3NpX25ld1VtdHNGcmVxTGlzdChTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIHBsbW5faWRfc3RydWN0IGNvbnN0KiBjb25zdCBwbG1uSUQsIENzaVVtdHNGcmVxdW5lY3lMaXN0KiBjb25zdCBmcmVxTGlzdCwga2FsX2Jvb2wgY29ycmVjdE92ZXJsYXBwaW5nVWFyZmNuKTsKKworZXh0ZXJuIHZvaWQgU2NzaV9uZXdVbXRzTmVpZ2hib3JDZWxscyhTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIHBsbW5faWRfc3RydWN0IGNvbnN0KiBjb25zdCBwbG1uSUQsIENzaVVtdHNDZWxsTGlzdCogY29uc3QgY2VsbExpc3QpOworI2lmZGVmIF9fTFRFX1JBVF9fCitleHRlcm4gdm9pZCBTY3NpX25ld1VtdHNMYXRlc3RTZXJ2aW5nQ2VsbChTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIHBsbW5faWRfc3RydWN0IGNvbnN0KiBjb25zdCBwbG1uSUQsIENzaVVtdHNDZWxsV2l0aFVhcmZjbiBjb25zdCogY29uc3QgY2VsbCk7CisKKy8vSnVzdCBmb3IgVVQgY3VycmVudGx5LCBub3QgcmVsZWFzZSBwdWJsaWNseQorI2lmZGVmIFVOSVRfVEVTVAorZXh0ZXJuIHZvaWQgU2NzaV9kZWxVbXRzTGF0ZXN0U2VydmluZ0NlbGwoU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBwbG1uX2lkX3N0cnVjdCBjb25zdCogY29uc3QgcGxtbklEKTsKKyNlbmRpZiAvKiBVTklUX1RFU1QgKi8KKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworCitleHRlcm4gdm9pZCBTY3NpX25ld1VtdHNVYXJmY25MaXN0KFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwgcGxtbl9pZF9zdHJ1Y3QgY29uc3QqIGNvbnN0IHBsbW5JRCAsIENzaVVtdHNVYXJmY25MaXN0ICp1YXJmY25MaXN0KTsKKworLy8gR2V0dGVyCitleHRlcm4gdm9pZCBTY3NpX2dldFVtdHNGcmVxUmFuZ2UoU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBwbG1uX2lkX3N0cnVjdCBjb25zdCogY29uc3QgcGxtbklELCBDc2lVbXRzRnJlcXVuZWN5TGlzdCogY29uc3QgZnJlcVJhbmdlKTsKK2V4dGVybiB2b2lkIFNjc2lfZ2V0VW10c0ZyZXFMaXN0KFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwgcGxtbl9pZF9zdHJ1Y3QgY29uc3QqIGNvbnN0IHBsbW5JRCwgQ3NpVW10c0ZyZXF1bmVjeUxpc3QqIGNvbnN0IGZyZXFMaXN0KTsKKy8qIE5pY2t5IDIwMTQxMDA3OiBTdG9yZWQgM0cgQ2VsbCBMaXN0IGlzIG5vdCB1c2VkLiBSZW1vdmUgdGhlIGdldCBmdW5jdGlvbi4gKi8KKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKyNpZmRlZiBfX0xURV9SQVRfXworZXh0ZXJuIGthbF9ib29sIFNjc2lfZ2V0VW10c0xhdGVzdFNlcnZpbmdDZWxsKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwgcGxtbl9pZF9zdHJ1Y3QgY29uc3QqIGNvbnN0IHBsbW5JRCwgQ3NpVW10c0NlbGxXaXRoVWFyZmNuKiBjb25zdCBjZWxsKTsKKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworZXh0ZXJuIHZvaWQgU2NzaV9nZXRVbXRzVWFyY25MaXN0KFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwgcGxtbl9pZF9zdHJ1Y3QgY29uc3QqIGNvbnN0IHBsbW5JRCwgQ3NpVW10c1VhcmZjbkxpc3QgKnVhcmZjbkxpc3QpOworZXh0ZXJuIHZvaWQgU2NzaV9nZXRVbXRzVWFyZmNuQnlNY2MoU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDMyIGNvbnN0IGNvdW50T2ZNY2NzICwgU0NTSV9VTVRTX1VhcmZjblBlck1jYyogdWFyZmNuQnlNY2NzKTsKK2V4dGVybiBrYWxfYm9vbCBTY3NpX2lzVWFyZmNuU2hhcmVkSW5DdXJyZW50UGxtbihTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIHBsbW5faWRfc3RydWN0IGNvbnN0KiBjb25zdCBwbG1uX2ZvdW5kICxrYWxfdWludDE2ICB1YXJmbl90b19iZV9jaGVja2VkICk7CisKKy8qIE5pY2t5IDIwMTEwMTAzOiBBZGRlZCBmb3IgR2VtaW5pIDIuMCAqLworI2lmZGVmIF9fR0VNSU5JX18KK2V4dGVybiBrYWxfdWludDE2IFNjc2lfZ2V0VW10c1VhcmZjblVwcGVyQm91bmQoU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBTQ1NJX1VNVFNfQmFuZF9VQVJGQ05fSWRlbnRpZmllciBiYW5kSUQpOworZXh0ZXJuIGthbF91aW50MTYgU2NzaV9nZXRVbXRzVWFyZmNuTG93ZXJCb3VuZChTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIFNDU0lfVU1UU19CYW5kX1VBUkZDTl9JZGVudGlmaWVyIGJhbmRJRCk7CitleHRlcm4ga2FsX3VpbnQ4IFNjc2lfZ2V0VW10c0FkZGl0aW9uYWxGcmVxTGlzdChTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIFNDU0lfVU1UU19CYW5kX1VBUkZDTl9JZGVudGlmaWVyIGJhbmRJRCwga2FsX3VpbnQ4IGNvbnN0IHNpemVPZkxpc3QsIGthbF91aW50MTYgKiBjb25zdCBhZGRpdGlvbmFsRnJlcUxpc3QpOworI2VuZGlmICAgICAgLyogI2lmZGVmIF9fR0VNSU5JX18gKi8KKworLyogTmlja3kgMjAxMTEwMjg6IEFkZGVkIGZvciBVTVRTIEJhbmQgRXh0ZW5zaW9uLCB3aGljaCB3aWxsIGJlIHVzZWQgYnkgUlJDRSBtb2R1bGUuICovCitleHRlcm4ga2FsX3VpbnQxNiBTY3NpX2dldEJhbmRUeFJ4RnJlcVNlcGFyYXRpb24oU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBTQ1NJX1VNVFNfQmFuZF9VQVJGQ05fSWRlbnRpZmllciBiYW5kSUQpOworCitleHRlcm4ga2FsX2Jvb2wgU2NzaV9jb252ZXJ0VWFyZmNuRm9yT3ZlcmxhcHBlZEZyZXFCYW5kcyhTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MTYgdWFyZmNuLCBTQ1NJX1VNVFNfQmFuZF9VQVJGQ05fSWRlbnRpZmllciBiYW5kSWQsIFNDU0lfVU1UU19CYW5kX1VBUkZDTl9JZGVudGlmaWVyIG90aGVyQmFuZElkLCBrYWxfdWludDE2ICpjb252ZXJ0ZWRVYXJmY24pOworI2VuZGlmICAgICAgLyogI2lmZGVmIF9fVU1UU19SQVRfXyAqLworCitleHRlcm4ga2FsX3VpbnQ4IFNjc2lfZ2V0UGxtbnMocGxtbl9pZF9zdHJ1Y3QqIHBsbW5zKTsKKworLy8gUmV0cmlldmUgZW5jb2RlZCBkYXRhIGZvciBzYXZpbmcgdG8gbm9uLXZvbGF0aWxlIHN0b3JhZ2VzLCBpLmUuLCBOVlJBTSBhbmQgVVNJTS9TSU0uCitleHRlcm4ga2FsX3VpbnQxNiBTY3NpX2dldE52cmFtRUZOZXRwYXIoa2FsX3VpbnQ4KiBjb25zdCBudnJhbUVmTmV0cGFyQnVmUHRyLCBrYWxfdWludDE2IGNvbnN0IG52cmFtRWZOZXRwYXJCdWZMZW4pOworCisjaWYgKGRlZmluZWQoX18yM0dfUFJJX1JFU0VMX1NVUFBPUlRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykpCisvLyBTQ1NJIG5lZWQgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKworLy8gQmVmb3JlIHVzZSBhbnkgQVBJIG9mIERlZGlQcmlvSW5mbywgcGxlYXNlIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBhY3F1aXJlIG11dGV4dC4KK2V4dGVybiB2b2lkIFNDU0lfYWNxdWlyZVByaW9NdXRleChTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgpOworCisvLyByZXR1cm4gdGhlIHBvaW50ZXIgb2YgcERlZGlQcmlvSW5mby4KKy8vIHVzZXIgY2FuIG9wZXJhdGUgb24gU0NTSV9kZWRpX3ByaW9faW5mbywgYnV0IHVzZXIgc2hhbGwgbm90IG9wZXJhdGUgb24gdGlja19wcmV2aW91cy4gdGlja19wcmV2aW91cyB3b3VsZCBiZSB1cGRhdGVkIGJ5IFNDU0kuCitleHRlcm4gU0NTSV9kZWRpX3ByaW9faW5mbyAqU0NTSV9nZXREZWRpUHJpb0luZm8oU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4KTsKKworLy8gZnJlZSB0aGUgbWVtb3J5IG9mIHBEZWRpUHJpb0luZm8sIGFmdGVyIHVzZXIgY2FsbCB0aGlzIGZ1bmN0aW9uLCBwbGVhc2UgbmV2ZXIgdXNlIHRoZSBwcmV2aW91cy1nb3QgbWVtb3J5Li4uU28gcGxlYXNlIGJlIGNhcmVmdWwuCitleHRlcm4gdm9pZCBTQ1NJX2ZyZWVEZWRpUHJpb0luZm8oU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4KTsKKworLy8gY2FsbCBTQ1NJX0ZyZWVEZWRpUHJpb0luZm8gdG8gZnJlZSBwcmV2aW91cy1wdXQgbWVtb3J5IGluIHBEZWRpUHJpb0luZm8sIGFuZCB0aGVuIHB1dCB0aGUgcG9pbnQgYWRkcmVzcyBpbiBwRGVkaVByaW9JbmZvLgorLy8gcGxlYXNlIG5ldmVyIHVzZSB0aGUgcHJldmlvdXMtZ290IG1lbW9yeS4uLlNvIHBsZWFzZSBjYXJlZnVsLgorLy8gQmVzaWRlcywgdXBkYXRlIHRoZSB0aWNrX3ByZXZpb3VzIGJ5IFNDU0kuIFVzZXIgd291bGQgbm90IHVwZGF0ZSBpdC4KK2V4dGVybiB2b2lkIFNDU0lfc2V0RGVkaVByaW9JbmZvKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQzMiB0aWNrX2xlZnQsIFNDU0lfZGVkaV9wcmlvX2luZm8gKnBEZWRpUHJpbyk7CisKKy8vIEluIHRoaXMgZnVuY3Rpb24sIHBsZWFzZSBjaGVjayB0aGUgbGVmdF90aWNrIGFuZCBkbyBjb3JyZWN0IGNvbXB1dGluZy4gSWYgZXhwaXJlZCwgcGxlYXNlIGZyZWUgdGhlIHBEZWRpUHJpb0luZm8gYW5kIHNldCBpdCBOVUxMLgorZXh0ZXJuIHZvaWQgU0NTSV9yZWxlYXNlUHJpb011dGV4KFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKKworLy8gQmVmb3JlIHVzZSBhbnkgQVBJIG9mIERlcHJpb3JpdGl6YXRpb25JbmZvLCBwbGVhc2UgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGFjcXVpcmUgbXV0ZXh0LgorZXh0ZXJuIHZvaWQgU0NTSV9hY3F1aXJlRGVwcmlvcml0aXphdGlvbk11dGV4KFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCk7CisKKy8vIHJldHVybiB0aGUgcG9pbnRlciBvZiBwRGVwcmlvcml0aXphdGlvbkluZm8uCisvLyB1c2VyIGNhbiBvcGVyYXRlIG9uIFNDU0lfZGVwcmlvcml0aXphdGlvbl9pbmZvX3N0cnVjdCwgYnV0IHVzZXIgc2hhbGwgbm90IG9wZXJhdGUgb24gdGlja19wcmV2aW91cy4gdGlja19wcmV2aW91cyB3b3VsZCBiZSB1cGRhdGVkIGJ5IFNDU0kuCitleHRlcm4gU0NTSV9kZXByaW9yaXRpemF0aW9uX2luZm9fc3RydWN0ICpTQ1NJX2dldERlcHJpb3JpdGl6YXRpb25JbmZvKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwgcGxtbl9pZF9zdHJ1Y3QgY29uc3QqIGNvbnN0IHJwbG1uKTsKKworLy8gZnJlZSB0aGUgbWVtb3J5IG9mIHNwZWNpZmljIFBMTU4gb2YgcERlcHJpb3JpdGl6YXRpb25JbmZvLgorZXh0ZXJuIHZvaWQgU0NTSV9mcmVlRGVwcmlvcml0aXphdGlvbkluZm8oU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBwbG1uX2lkX3N0cnVjdCBjb25zdCogY29uc3QgcnBsbW4pOworCisvLyBjYWxsIFNDU0lfZnJlZURlcHJpb3JpdGl6YXRpb25JbmZvIHRvIGZyZWUgcHJldmlvdXMtcHV0IG1lbW9yeSBvZiBwRGVwcmlvcml0aXphdGlvbkluZm8sIGFuZCB0aGVuIHB1dCB0aGUgcG9pbnQgYWRkcmVzcyB0byBwRGVwcmlvcml0aXphdGlvbkluZm8uCisvLyBwbGVhc2UgbmV2ZXIgdXNlIHRoZSBwcmV2aW91cy1nb3QgbWVtb3J5Li4uU28gcGxlYXNlIGNhcmVmdWwuCisvLyBCZXNpZGVzLCB1cGRhdGUgdGhlIHRpY2tfcHJldmlvdXMgYnkgU0NTSS4gVXNlciB3b3VsZCBub3QgdXBkYXRlIGl0LgorZXh0ZXJuIHZvaWQgU0NTSV9zZXREZXByaW9yaXRpemF0aW9uSW5mbyhTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MzIgdGlja19sZWZ0LCBTQ1NJX2RlcHJpb3JpdGl6YXRpb25faW5mb19zdHJ1Y3QgKnBEZXByaW9yaXRpemF0aW9uSW5mbyk7CisKKy8vIEluIHRoaXMgZnVuY3Rpb24sIHBsZWFzZSBjaGVjayB0aGUgbGVmdF90aWNrIGFuZCBkbyBjb3JyZWN0IGNvbXB1dGluZy4gSWYgZXhwaXJlZCwgcGxlYXNlIGZyZWUgdGhlIHBEZXByaW9yaXRpemF0aW9uSW5mbyBhbmQgc2V0IGl0IE5VTEwuCitleHRlcm4gdm9pZCBTQ1NJX3JlbGVhc2VEZXByaW9yaXRpemF0aW9uTXV0ZXgoU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4KTsKKyNlbmRpZiAvKiBfXzIzR19QUklfUkVTRUxfU1VQUE9SVF9fIHx8IF9fTFRFX1JBVF9fICovCisKKyNpZiAoZGVmaW5lZChfXzNHX0NTR19TVVBQT1JUX18pIHx8IGRlZmluZWQoX19MVEVfUkFUX18pKQorLy8gcHV0IHRoZSBwU2xpdEluZm8gd2hpY2ggY29udGFpbiB0aGlzIGFyZmNuIGluIHBTcGxpdEluZm8gYWNjb3JkaW5nIHRvIHJhdF90eXBlLCBpZiBub3QgZm91bmQsIHNldCBjb250ZW50IG9mIHBTcGxpdEluZm8gYWxsIHplcm8uCisvLyBiZXNpZGVzLCBhY2NvcmRpbmcgdG8gdGlja19sZWZ0IHRpY2tfcHJldmlvdXMgdG8gZGVsZXRlIHRoZSBleHBpcmVkIHNwbGl0IGluZm8uCisjaWZkZWYgX18zR19DU0dfU1VQUE9SVF9fCitleHRlcm4gdm9pZCBTQ1NJX2dldFVtdHNDU0dTcGxpdEluZm8oU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBDc2lVYXJmY24gdWFyZmNuLCBwbG1uX2lkX3N0cnVjdCBjb25zdCogY29uc3QgcGxtbklELCBTQ1NJX3VtdHNfY3NnX3NwbGl0X2luZm8gKiBjb25zdCBwU3BsaXRJbmZvKTsKKyNlbmRpZiAvKiBfXzNHX0NTR19TVVBQT1JUX18gKi8KKworI2lmZGVmIF9fTFRFX1JBVF9fCitleHRlcm4gdm9pZCBTQ1NJX2dldEx0ZUNTR1NwbGl0SW5mbyhTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIENzaUVhcmZjbiBlYXJmY24sIHBsbW5faWRfc3RydWN0IGNvbnN0KiBjb25zdCBwbG1uSUQsIFNDU0lfbHRlX2NzZ19zcGxpdF9pbmZvICogY29uc3QgcFNwbGl0SW5mbyk7CisjZW5kaWYgLyogX19MVEVfUkFUX18gKi8KKworLy8gcHV0IHRoZSBjb250ZW50IG9mIHBDU0dTcGxpdEluZm9MaXN0IGluIFNDU0kgdG8gcFNwbGl0SW5mb0xpc3QgYWNjb3JkaW5nIHRvIHJhdF90eXBlLCBpZiBwQ1NHU3BsaXRJbmZvTGlzdCBpcyBudWxsLCBzZXQgY29udGVudCBvZiBwU3BsaXRJbmZvTGlzdCBhbGwgemVyby4KKy8vIGJlc2lkZXMsIGFjY29yZGluZyB0byB0aWNrX2xlZnQgdGlja19wcmV2aW91cyB0byBkZWxldGUgdGhlIGV4cGlyZWQgc3BsaXQgaW5mby4KKyNpZmRlZiBfXzNHX0NTR19TVVBQT1JUX18KK2V4dGVybiB2b2lkIFNDU0lfZ2V0VW10c0NTR1NwbGl0SW5mb0xpc3QoU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBTQ1NJX3VtdHNfY3NnX3NwbGl0X2luZm9fbGlzdCAqIGNvbnN0IHBTcGxpdEluZm9MaXN0KTsKKyNlbmRpZiAvKiBfXzNHX0NTR19TVVBQT1JUX18gKi8KKworI2lmZGVmIF9fTFRFX1JBVF9fCitleHRlcm4gdm9pZCBTQ1NJX2dldEx0ZUNTR1NwbGl0SW5mb0xpc3QoU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBTQ1NJX2x0ZV9jc2dfc3BsaXRfaW5mb19saXN0ICogY29uc3QgcFNwbGl0SW5mb0xpc3QpOworI2VuZGlmIC8qIF9fTFRFX1JBVF9fICovCisKKy8vIElmIGZvdW5kIHRoZSBzYW1lIGZyZXF1ZWNueSByZXBsYWNlIGl0LCBlbHNlIGFsbG9jYXRlIG9uZSBtZW1vcnkgYW5kIHB1dCB0aGUgU0NTSV9jc2dfc3BsaXRfaW5mbyBpbiB0aGUgQ1NHU3BsaXRJbmZvIGFjY29yZGluZyB0byByYXRfdHlwZS4KKy8vIGJlc2lkZXMsIGFjY29yZGluZyB0byB0aWNrX2xlZnQgdGlja19wcmV2aW91cyB0byBkZWxldGUgdGhlIGV4cGlyZWQgc3BsaXQgaW5mby4KKyNpZmRlZiBfXzNHX0NTR19TVVBQT1JUX18KK2V4dGVybiB2b2lkIFNDU0lfbmV3VW10c0NTR1NwbGl0SW5mbyhTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MzIgdGlja19sZWZ0LCBTQ1NJX3VtdHNfY3NnX3NwbGl0X2luZm8gY29uc3QgKiBjb25zdCBwU3BsaXRJbmZvKTsKKyNlbmRpZiAvKiBfXzNHX0NTR19TVVBQT1JUX18gKi8KKworI2lmZGVmIF9fTFRFX1JBVF9fCitleHRlcm4gdm9pZCBTQ1NJX25ld0x0ZUNTR1NwbGl0SW5mbyhTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MzIgdGlja19sZWZ0LCBTQ1NJX2x0ZV9jc2dfc3BsaXRfaW5mbyBjb25zdCAqIGNvbnN0IHBTcGxpdEluZm8pOworI2VuZGlmIC8qIF9fTFRFX1JBVF9fICovCisKKyNlbmRpZiAvKiBfXzNHX0NTR19TVVBQT1JUX18gfHwgX19MVEVfUkFUX18gKi8KKworLypNdWx0aS1Nb2RlKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIF9fR1NNX1JBVF9fCitleHRlcm4gdm9pZCBTY3NpX1NFX0NvbXBvc2VHc21CYW5kQml0bWFzayhTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50OCBHQmFuZEJpdG1hc2spOworCitleHRlcm4gdm9pZCBTY3NpX1NFX3JldHJpZXZlR3NtQmFuZEJpdG1hc2soU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDggKnBHQmFuZEJpdG1hc2spOworI2VuZGlmIC8qIF9fR1NNX1JBVF9fICovCisjaWZkZWYgX19VTVRTX1JBVF9fCitleHRlcm4gdm9pZCBTY3NpX1NFX0NvbXBvc2VVbXRzQmFuZEJpdG1hc2soU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDMyIFVCYW5kQml0bWFzayk7CisKK2V4dGVybiB2b2lkIFNjc2lfU0VfcmV0cmlldmVVbXRzQmFuZEJpdG1hc2soU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDMyICpwVUJhbmRCaXRtYXNrKTsKKworZXh0ZXJuIHZvaWQgU2NzaV9TRV9yZXRyaWV2ZVVtdHNGZGRCYW5kQml0bWFzayhTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIGthbF91aW50MzIgKnBVRmRkQmFuZEJpdG1hc2spOworCitleHRlcm4gdm9pZCBTY3NpX1NFX0NvbXBvc2VVbXRzRmRkQW5kVGRkQmFuZEJpdG1hc2soU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBrYWxfdWludDMyIFVGZGRCYW5kQml0bWFzaywga2FsX3VpbnQzMiBVVGRkQmFuZEJpdG1hc2spOworCitleHRlcm4gdm9pZCBTY3NpX1NFX3JldHJpZXZlVW10c0ZkZEFuZFRkZEJhbmRCaXRtYXNrKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwga2FsX3VpbnQzMiAqcFVGZGRCYW5kQml0bWFzaywga2FsX3VpbnQzMiAqcFVUZGRCYW5kQml0bWFzayk7CisjZW5kaWYgLyogX19VVE1TX1JBVF9fICovCisjaWZkZWYgX19MVEVfUkFUX18KK2V4dGVybiB2b2lkIFNjc2lfU0VfQ29tcG9zZUx0ZUJhbmRCaXRtYXNrKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwgU0NTSV9MVEVfQmFuZF9CaXRtYXNrIExCYW5kQml0bWFzayk7CisKK2V4dGVybiB2b2lkIFNjc2lfU0VfcmV0cmlldmVMdGVCYW5kQml0bWFzayhTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIFNDU0lfTFRFX0JhbmRfQml0bWFzayAqcExCYW5kQml0bWFzayk7CisKK2V4dGVybiB2b2lkIFNjc2lfU0VfQ29tcG9zZUx0ZUJhbmRCaXRtYXNrX2V4dGVuZGVkKCBTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsIGNvbnN0IFNDU0lfTFRFX0JhbmRfQml0bWFza19FeHRlbmRlZCogTEJhbmRCaXRtYXNrICk7CisKK2V4dGVybiB2b2lkIFNjc2lfU0VfcmV0cmlldmVMdGVCYW5kQml0bWFza19leHRlbmRlZCggU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4LCBTQ1NJX0xURV9CYW5kX0JpdG1hc2tfRXh0ZW5kZWQqIHBMQmFuZEJpdG1hc2sgKTsKKyNlbmRpZiAvKiBfX0xURV9SQVRfXyAqLworCisjaWZkZWYgX19OUl9SQVRfXworCitleHRlcm4gdm9pZCBTY3NpX1NFX0NvbXBvc2VOUkJhbmRCaXRtYXNrKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwgY29uc3QgU0NTSV9OUl9CYW5kX0JpdG1hc2sqIHBOUkJhbmRCaXRtYXNrKTsKK2V4dGVybiB2b2lkIFNjc2lfU0VfcmV0cmlldmVOUkJhbmRCaXRtYXNrKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCwgU0NTSV9OUl9CYW5kX0JpdG1hc2sqIHBOUkJhbmRCaXRtYXNrKTsKK2V4dGVybiB2b2lkIFNjc2lfU0VfQ29tcG9zZU5SX0VORENCYW5kQml0bWFzayhTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgU0NTSV9HRU1JTklfU1RBVFVTIGdlbWluaV9zdGF0dXMsCisgICAgY29uc3QgU0NTSV9OUl9CYW5kX0JpdG1hc2sqIHBOUl9FTkRDQmFuZEJpdG1hc2spOworZXh0ZXJuIHZvaWQgU2NzaV9TRV9yZXRyaWV2ZU5SX0VORENCYW5kQml0bWFzayhTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgsCisgICAgU0NTSV9HRU1JTklfU1RBVFVTIGdlbWluaV9zdGF0dXMsCisgICAgU0NTSV9OUl9CYW5kX0JpdG1hc2sqIHBOUl9FTkRDQmFuZEJpdG1hc2spOworI2VuZGlmIC8qIF9fTlJfUkFUX18gKi8KKworI2lmZGVmIF9fTFRFX1JBVF9fCitleHRlcm4gdm9pZCBTY3NpX25ld0x0ZUZyZXFMaXN0KHBsbW5faWRfc3RydWN0IGNvbnN0KiBjb25zdCBwbG1uSUQsIENzaUx0ZUZyZXF1ZW5jeUxpc3QqIGNvbnN0IGZyZXFMaXN0KTsKKworZXh0ZXJuIHZvaWQgU2NzaV9nZXRMdGVGcmVxTGlzdChwbG1uX2lkX3N0cnVjdCBjb25zdCogY29uc3QgcGxtbklELCBDc2lMdGVGcmVxdWVuY3lMaXN0KiBjb25zdCBmcmVxTGlzdCk7CisjZW5kaWYgLyogX19MVEVfUkFUX18gKi8KKworI2lmIChkZWZpbmVkKF9fM0dfQ1NHX1NVUFBPUlRfXykgfHwgZGVmaW5lZChfX0xURV9SQVRfXykpCitleHRlcm4gdm9pZCBTY3NpX3ByZXZWaXNpdGVkQ2VsbEluaXRGcm9tTlZSQU0oa2FsX3VpbnQ4KiBudnJhbUVmUHJldlZpc2l0ZWRDZWxsQnVmUHRyLCBrYWxfdWludDE2IGNvbnN0IG52cmFtRWZQcmV2VmlzaXRlZENlbGxCdWZMZW4pOworCitleHRlcm4ga2FsX3VpbnQxNiBTY3NpX2dldE52cmFtRUZQcmV2VmlzaXRlZENlbGwoa2FsX3VpbnQ4KiBjb25zdCBudnJhbUVmUHJldlZpc2l0ZWRDZWxsQnVmUHRyLCBrYWxfdWludDE2IGNvbnN0IG52cmFtRWZQcmV2VmlzaXRlZENlbGxCdWZMZW4pOworCitleHRlcm4gdm9pZCBTY3NpX3ByZXZWaXNpdGVkQ2VsbFB1cmdlKHZvaWQpOworCitleHRlcm4gdm9pZCBTY3NpX25ld1ByZXZWaXNpdGVkQ2VsbChTQ1NJX1NJTV9JTkRFWCBjb25zdCBzaW1JZHgsIHBsbW5faWRfc3RydWN0IGNvbnN0KiBjb25zdCBwbG1uSUQsIFNjc2lQcmV2VmlzaXRlZENlbGwgKiBwcmV2VmlzaXRlZENlbGwpOworCitleHRlcm4gdm9pZCBTY3NpX2RlbFByZXZWaXNpdGVkQ2VsbEdpdmVuUGxtbkFuZENzZyhTQ1NJX1NJTV9JTkRFWCBjb25zdCBzaW1JZHgsIHBsbW5faWRfc3RydWN0IGNvbnN0KiBjb25zdCBwbG1uSUQsIENzaUNzZ0lkIGNvbnN0IGNzZ0lEKTsKKworZXh0ZXJuIHZvaWQgU2NzaV9nZXRQcmV2VmlzaXRlZENlbGxMaXN0QnlQbG1uKFNDU0lfU0lNX0lOREVYIGNvbnN0IHNpbUlkeCwgcGxtbl9pZF9zdHJ1Y3QgY29uc3QqIGNvbnN0IHBsbW5JRCwgU2NzaVByZXZWaXNpdGVkQ2VsbExpc3QgKiBjb25zdCBwcmV2VmlzaXRlZENlbGxMaXN0KTsKKworZXh0ZXJuIGthbF9ib29sIFNjc2lfaXNQcmV2VmlzaXRlZENlbGxFeGlzdGVkR2l2ZW5QbG1uQW5kQ3NnKFNDU0lfU0lNX0lOREVYIGNvbnN0IHNpbUlkeCwgcGxtbl9pZF9zdHJ1Y3QgY29uc3QqIGNvbnN0IHBsbW5JRCwgQ3NpQ3NnSWQgY29uc3QgY3NnSUQpOworCisjZW5kaWYgLyogX18zR19DU0dfU1VQUE9SVF9fIHx8IF9fTFRFX1JBVF9fICovCisvKk11bHRpLU1vZGUqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBVTklUX1RFU1QKK2V4dGVybiB2b2lkIFNjc2lfaW5pdEZyb21OdnJhbVVuaXRUZXN0aW5nKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCk7CitleHRlcm4gdm9pZCBTY3NpX2luaXRGcm9tTnZyYW1Vbml0VGVzdGluZzEoU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4KTsKK2V4dGVybiB2b2lkIFNjc2lfaW5pdEZyb21OdnJhbVVuaXRUZXN0aW5nMihTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgpOworZXh0ZXJuIHZvaWQgU2NzaV9pbml0RnJvbU52cmFtVW5pdFRlc3RpbmczKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCk7CitleHRlcm4gdm9pZCBTY3NpX2luaXRGcm9tTnZyYW1Vbml0VGVzdGluZzQoU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4KTsKK2V4dGVybiB2b2lkIFNjc2lfaW5pdEZyb21OdnJhbVVuaXRUZXN0aW5nRm9yUnBsbW5JbmZvKFNDU0lfU0lNX0lOREVYIHNpbV9pbmRleCk7CisvLyNpZmRlZiBfX0JBTkRfUFJJT1JJVFlfU0VBUkNIX18KK2V4dGVybiB2b2lkIFNjc2lfaW5pdEZyb21OdnJhbVVuaXRUZXN0aW5nRm9yQmFuZFByaW9TZWFyY2goU0NTSV9TSU1fSU5ERVggc2ltX2luZGV4KTsKKy8vI2VuZGlmIC8qIF9fQkFORF9QUklPUklUWV9TRUFSQ0hfXyAqLworZXh0ZXJuIHZvaWQgU2NzaV90ZShTQ1NJX1NJTV9JTkRFWCBzaW1faW5kZXgpOworI2VuZGlmCisKKworI2VuZGlmIAkJCQkvKiBfKCFAJCBgc2NzaS5oJyAkQCEpXyAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NkbV9leHRlcm5hbF9saWIuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9zZG1fZXh0ZXJuYWxfbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5N2RmOQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9zZG1fZXh0ZXJuYWxfbGliLmgKQEAgLTAsMCArMSw4NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE0CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgc2RtX2V4dGVybmFsX2xpYi5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tLS0tLQorICogICBNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGRlZmluZXMgZnVuY3Rpb25zIGZvciBleHRlcm5hbCBtb2R1bGUgdXNhZ2UuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAkTG9nJAorICoKKyAqIDAxIDAzIDIwMTkgaHN1YW5jaGFuZy5jaGVuCisgKiBbTU9MWTAwMzc2NDI2XSBbVnpXXVtHZW45M11bR2VuOTVdIFNNUyB0byA5MTEgYW5kIFNDQk0gZmVhdHVyZSAtIFNETSBwYXJ0CisgKiAuIFQ5MTEgU0RNIGNvZGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1NETV9FWFRFUk5BTF9MSUJfSF8KKyNkZWZpbmUgX1NETV9FWFRFUk5BTF9MSUJfSF8KKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAibDNfaW5jX2VudW1zLmgiCisjaW5jbHVkZSAiaW1zX252cmFtX2RlZi5oIgorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAYnJpZWYgYXNrIHNkbSB0byBsZWF2ZSBzY2JtIG1vZGUKKyAqICAgICAgICAKKyAqIEBwYXJhbVtpbl0gdm9pZAorICoKKyAqIEByZXR1cm4gdm9pZAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgc2RtX2V4dGVybmFsX2V4aXRfc2NibV9tb2RlIChleGl0X3NjYm1fcmVhc29uX2VudW0gZXhpdF9yZWFzb24sIHByb3RvY29sX2lkX2VudW0gcHNfaWQpOworCisjZW5kaWYgLy8gX1NETV9FWFRFUk5BTF9MSUJfSF8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9zZWN1cml0eV9rZXlzX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvc2VjdXJpdHlfa2V5c19lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxY2RmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvc2VjdXJpdHlfa2V5c19lbnVtcy5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqCXNlY3VyaXR5X2tleXNfZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGlzIGludGVuZHMgZm9yIGVudW0gZGVmaW5pdGlvbiBhYm91dCBzZWN1cml0eSBrZXkuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAJCQkJSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAKKyNpZm5kZWYgX1NFQ1VSSVRZX0tFWVNfRU5VTVNfSAorI2RlZmluZSBfU0VDVVJJVFlfS0VZU19FTlVNU19ICisKK3R5cGVkZWYgZW51bSB7CisgICAgR1NNX0NLX1BSRVNFTlQsCisgICAgR1BSU19DS19QUkVTRU5ULAorICAgIFVNVFNfQ0tfUFJFU0VOVCwKKyAgICBVTVRTX0lLX1BSRVNFTlQsCisgICAgVU1UU19QU19JS19QUkVTRU5ULAorICAgIFVNVFNfUFNfQ0tfUFJFU0VOVAorfWlzX2tleV9wcmVzZW50X2VudW07CisKK3R5cGVkZWYgZW51bSB7CisgICAgU1JFU19QUkVTRU5ULAorICAgIFJFU19QUkVTRU5UCit9cmVzdWx0X3ByZXNlbnRfZW51bTsKKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NlY3VyaXR5X2tleXNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvc2VjdXJpdHlfa2V5c19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmQ1Y2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NlY3VyaXR5X2tleXNfc3RydWN0LmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqCXNlY3VyaXR5X2tleXNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBpcyBpbnRlbmRzIGZvciBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBhYm91dCBzZWN1cml0eSBrZXkuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAJCQkJSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDIKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBGSUxFTkFNRSA6IHNlY3VyaXR5X2tleXNfc3RydWN0LmgKKyAqICBTWU5PUFNJUyA6IEZ1bmN0aW9ucyBmb3IgZW5jb2RpbmcvZGVjb2RpbmcuCisgKgorICogICAgICAgICAgICAgICAgICAgICAgUiBFIFYgSSBTIEkgTyBOICAgIEggSSBTIFQgTyBSIFkKKyAqCisgKi8KKyNpZm5kZWYgX1NFQ1VSSVRZX0tFWVNfU1RSVUNUX0gKKyNkZWZpbmUgX1NFQ1VSSVRZX0tFWVNfU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAic2VjdXJpdHlfa2V5c19lbnVtcy5oIgorI2luY2x1ZGUgImlyYXRfY29tbW9uX2VudW1zLmgiCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCBpc19nc21fY2lwaGVyX2tleV9pbmZvX3ByZXNlbnQ7IC8qIGlmIEdTTSBjaXBoZXIga2V5IHByZXNlbnQgKi8KKyAgICBrYWxfdWludDggZ3NtX2NpcGhlcl9rZXlfaW5mb1tLQ19MRU5dOyAvKiBHU00gY2lwaGVyIGtleSAoS2MpICovCisgICAga2FsX3VpbnQ4IGlzX2dwcnNfY2lwaGVyX2tleV9pbmZvX3ByZXNlbnQ7IC8qIGlmIEdQUlMgY2lwaGVyIGtleSBwcmVzZW50ICovCisgICAga2FsX3VpbnQ4IGdwcnNfY2lwaGVyX2tleV9pbmZvW0tDX0xFTl07IC8qIEdQUlMgY2lwaGVyIGtleSAoS2MpICovCisgICAga2FsX3VpbnQ4IGlzX2dwcnNfY2lwaGVyX2tleTEyOF9pbmZvX3ByZXNlbnQ7IC8qIGlmIEdQUlMgY2lwaGVyIGtleTEyOCBwcmVzZW50ICovCisgICAga2FsX3VpbnQ4IGdwcnNfY2lwaGVyX2tleTEyOF9pbmZvW0tDMTI4X0xFTl07IC8qIEdQUlMgY2lwaGVyIGtleTEyOCAoS2MpICovCit9IGtleV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDMyIHJlczsgLyogaWYgcmVzdWx0IGlzIG9mIDQgYnl0ZXMqLworICAgIGthbF91aW50OCByZXNfZXh0X2xlbjsgLyogaWYgcmVzdWx0IGlzID4gNCBieXRlcyovCisgICAga2FsX3VpbnQ4IHJlc19leHRQOworICAgIGthbF91aW50OCByZXNfZXh0WzEyXTsKK30gcmVzdWx0X2V4dF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICByZXN1bHRfcHJlc2VudF9lbnVtIHJlc3VsdF90eXBlX3RhZzsKKyAgICB1bmlvbiB7CisgICAgICAgIGthbF91aW50MzIgc3JlczsKKyAgICAgICAgcmVzdWx0X2V4dF9zdHJ1Y3QgcmVzOworICAgIH0gcmVzdWx0X3R5cGVfdmFsdWU7Cit9IHJlc3VsdF9zdHJ1Y3Q7CisjZW5kaWYgCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NtMmRhdGFfcGxhbmVfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvc20yZGF0YV9wbGFuZV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODI2MzkxCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NtMmRhdGFfcGxhbmVfc3RydWN0LmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICBzbTJkYXRhX3BsYW5lX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgY29tbW9uIHN0cnVjdHVyZSBvZiBTTSBhbmQgZGF0YSBwbGFuZS4gCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfU00yREFUQV9QTEFORV9TVFJVQ1RfSAorI2RlZmluZSBfU00yREFUQV9QTEFORV9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBuc2FwaTsKKyAgICBxb3Nfc3RydWN0IHFvc19uZWdvdGlhdGVkOworICAgIGthbF91aW50OCBwX2NvbXBfYWxnbzsKKyAgICBrYWxfdWludDggZF9jb21wX2FsZ287CisgICAga2FsX3VpbnQ4IHBkcF9hZGRyX3R5cGU7CisgICAga2FsX3VpbnQ4IGxsY19zYXBpOworICAgIGthbF91aW50OCBtbWlfaWQ7CisgICAga2FsX3VpbnQ4IHJhZGlvX3ByaW9yaXR5OworICAgIGthbF91aW50OCBwa3RfZmxvd19pZDsKKyAgICBrYWxfdWludDE2IHJlcV9uMjAxdTsgLy9lcmljYSAyMDA3MDExMgorICAgIGthbF91aW50OCBkbF9wb29sX2lkOyAvKiBmbGMyX3Bvb2xfaWRfZW51bSAqLyAvL210azAwNzE0IDIwMDgwOTEwIGZvciBfX01VTFRJUExFX1BQUF9ESUFMVVBfU1VQUE9SVF9fCit9IHNuc21fYWN0aXZhdGVfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG5zYXBpOworICAgIHFvc19zdHJ1Y3QgcW9zX25lZ290aWF0ZWQ7CisgICAga2FsX3VpbnQ4IGxsY19zYXBpOworICAgIGthbF91aW50OCByYWRpb19wcmlvcml0eTsKKyAgICBrYWxfdWludDggcGt0X2Zsb3dfaWQ7Cit9IHNuc21fbW9kaWZ5X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBub19vZl92YWxpZF9lbnRyaWVzOworICAgIGthbF91aW50OCBuc2FwaV9saXN0WzExXTsKKyAgICBrYWxfdWludDggY2F1c2U7Cit9IHNuc21fZGVhY3RpdmF0ZV9pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggbm9fb2ZfdmFsaWRfZW50cmllczsKKyAgICBrYWxfdWludDggbnNhcGlfbGlzdFsxMV07CisgICAga2FsX3VpbnQ4IHNlcXVlbmNlX2xpc3RbMTFdOworfSBzbnNtX3NlcXVlbmNlX2luZF9zdHJ1Y3Q7CisKKy8qIGVyaWNhIDIwMDUxMjI5OiBmb3IgZWdwcnMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBjZWxsX3N1cHBvcnRfZWdwcnM7Cit9IHNuc21fY2VsbF9pbmZvX3VwZGF0ZV9pbmRfc3RydWN0OworCisjZW5kaWYgCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NtMm1tX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NtMm1tX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZDRjZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvc20ybW1fc3RydWN0LmgKQEAgLTAsMCArMSwyOTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICBzbTJtbV9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGNvbW1vbiBzdHJ1Y3R1cmUgb2YgU00gYW5kIE1NLiAKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1NNMk1NX1NUUlVDVF9ICisjZGVmaW5lIF9TTTJNTV9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX2dwcnNfc3RydWN0LmgiCisjaW5jbHVkZSAiYXMybmFzX3N0cnVjdC5oIgorI2luY2x1ZGUgImlyYXRfY29tbW9uX3N0cnVjdC5oIgorI2luY2x1ZGUgInNtbW1fZW51bXMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcW9zX3N0cnVjdCBxb3M7CisgICAga2FsX3VpbnQzMiB0bGxpOworICAgIHJwX2VudW0gcmFkaW9fcHJpb3JpdHk7CisgICAgZXN0X2NhdXNlX2VudW0gY2F1c2U7CisgICAga2FsX3VpbnQ4IHBrdF9mbG93X2lkZW50aWZpZXI7CisgICAgcGVlcl9tc2dfaWRfc3RydWN0IHBlZXJfbXNnX2lkOworfSBnbW1zbV91bml0ZGF0YV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDE2IG5zYXBpX3N0YXR1czsKKyAgICB0cmFmZmljX2NsYXNzX2VudW0gIG1heF90cmFmZmljX2NsYXNzOyAvLyB0aGUgaGlnaGVzdCBxdWFsaXR5IHRyYWZmaWMgY2xhc3MgYW1vbmcgYWxsIGFjdGl2ZSBQRFAgY29udGV4dAorfSBnbW1zbV9uc2FwaV9zdGF0dXNfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qKiBJTE0gc3BlY2lmaWMgaGVhZGVyLiAqLworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICAvKiogdXNlZCB0byBpbmRpY2F0ZSBuYXMgcHJpb3JpdHkgY29uZmlnLCB1c2VkIGlmIF9fTVRDX1NVUFBPUlRfXyAqLworICAgIG5hc19wcmlvcml0eV9jb25maWdfZW51bSBuYXNfcHJpb3JpdHlfY29uZmlnIDsgIAorCisgICAgLyoqIHVzZWQgdG8gaW5kaWNhdGUgZWFiIG92ZXJyaWRlLCB1c2VkIGlmIF9fTVRDX1NVUFBPUlRfXyAqLworICAgIGVhYl9vdmVycmlkZV9jb25maWdfZW51bSBlYWJfb3ZlcnJpZGVfY29uZmlnIDsKK30gZ21tc21fZHVhbF9wcmlvcml0eV9jb25maWdfcmVxX3N0cnVjdDsKKworI2lmZGVmIF9fR0VNSU5JX18KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCByZXRyeV9jb3VudDsKKwlnbW1zbV9wZHBfc2Vzc2lvbl9wcm9jZWR1cmVfdHlwZV9lbnVtIHNlc3Npb25fcHJvY190eXBlOworfSBnbW1zbV9zZXNzaW9uX2JlZ2luX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGdtbXNtX3BkcF9zZXNzaW9uX3Byb2NlZHVyZV90eXBlX2VudW0gc2Vzc2lvbl9wcm9jX3R5cGU7Cit9IGdtbXNtX3Nlc3Npb25fZW5kX3JlcV9zdHJ1Y3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgZXN0X2NhdXNlX2VudW0gY2F1c2U7Cit9IGdtbXNtX2F0dGFjaF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBlc3RfY2F1c2VfZW51bSBjYXVzZTsKK30gZ21tc21fZXN0X3JlcV9zdHJ1Y3Q7CisKKyNpZmRlZiBfX1NNX1VUX18KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzbV9jYWxjdWxhdGVfbXRfcHJvY2VkdXJlX3BkcF9udW1iZXJfcmVzdWx0OworICAgIGthbF91aW50OCBzbV9jYWxjdWxhdGVfbW9fcHJvY2VkdXJlX3BkcF9udW1iZXJfcmVzdWx0OworICAgIGthbF91aW50MzIgc21fY2FsY3VsYXRlX2hvd19tYW55X3BkcF9hcmVfdXNlZF9yZXN1bHQ7Cit9IHNtX3Rlc3Rfc21fY2FsY3VsYXRlX2hvd19tYW55X3BkcF9hcmVfdXNlZF9zdHJ1Y3Q7CisKKyNlbmRpZiAvLyB+ICNpZmRlZiBfX1NNX1VUX18KKworLyoqIAorICAqIEFjY29yZGluZyB0byBNdWx0aW1vZGUgaW50ZXJSQVQgbWVzc2FnZSBwcm9jZXNzaW5nIHJ1bGVzLCAKKyAgKiB0aGUgcmVjZWl2aW5nIG1vZHVsZSwgc2FpZC4uLiB0aGUgTU9EX0EsIG5lZWQgdG8gcHJvY2VzcyB0aGlzIG1lc3NhZ2UgaW4gdGhlIGZvbGxvd2luZyB3YXkgIAorICAqIC0gKDEpIFJlbGF5IHRoaXMgaW50ZXJSQVQgbWVzc2FnZSB0byBuZXh0IG1vZHVsZSwgc2FpZC4uLiB0aGUgTU9EX0IsIGZpcnN0CisgICogLSAoMikgdGhlbiBNT0RfQSBjYW4gc3RhcnQgdG8gZG8gcHJvY2Vzc2luZyBvZiB0aGlzIG1lc3NhZ2UKKyAgKiBiZWNhdXNlIHdoZW4gYSBSRCBkZXNpZ25zIGEgbmV3IE1NIGlSQVQgZmVhdHVyZSwgaGUvc2hlIHdpbGwgYXNzdW1lIG90aGVycyBwcm9jZXNzIHRoZXNlIG1lc3NhZ2VzIGluIHRoaXMgd2F5CisgICogdGhpcyBydWxlcyBtYWtlIHN1cmVzIHRoZSBpbnRlclJBVCBtZXNzYWdlIGZsb3cgaXMgYXMgZXhwZWN0ZWQKKyAgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGlyYXRfdHlwZV9lbnVtICAgICAgaXJhdF90eXBlOyAgICAgIC8vSW5kaWNhdGVzIHRoZSBpbnRlci1SQVQgdHlwZQorICAgIHJhdF90eXBlX2VudW0gICAgICAgc291cmNlX3JhdDsgICAgIC8vU291cmNlIFJBVAorICAgIHJhdF90eXBlX2VudW0gICAgICAgdGFyZ2V0X3JhdDsgICAgIC8vVGFyZ2V0IFJBVAorICAgIGlyYXRfcmVzdWx0X2VudW0gICAgaXJhdF9yZXN1bHQ7ICAgIC8vVGhlIHJlc3VsdCBvZiBpbnRlci1SQVQgY2hhbmdlCisgICAgdm9pZCogICAgICAgICAgICAgICBhc19pbmZvX3B0cjsgICAgLy9UaGUgcG9pbnRlciBvZiBBUyBjb250YWluZXIgaW5mb3JtYXRpb24KK30gZ21tc21fcmF0X2NoYW5nZV9yc3Bfc3RydWN0OyAvLyAoMjNHNCBmaW5pc2gpCisKKy8qKiAKKyAgKiBBY2NvcmRpbmcgdG8gTXVsdGltb2RlIGludGVyUkFUIG1lc3NhZ2UgcHJvY2Vzc2luZyBydWxlcywgCisgICogdGhlIHJlY2VpdmluZyBtb2R1bGUsIHNhaWQuLi4gdGhlIE1PRF9BLCBuZWVkIHRvIHByb2Nlc3MgdGhpcyBtZXNzYWdlIGluIHRoZSBmb2xsb3dpbmcgd2F5ICAKKyAgKiAtICgxKSBSZWxheSB0aGlzIGludGVyUkFUIG1lc3NhZ2UgdG8gbmV4dCBtb2R1bGUsIHNhaWQuLi4gdGhlIE1PRF9CLCBmaXJzdAorICAqIC0gKDIpIHRoZW4gTU9EX0EgY2FuIHN0YXJ0IHRvIGRvIHByb2Nlc3Npbmcgb2YgdGhpcyBtZXNzYWdlCisgICogYmVjYXVzZSB3aGVuIGEgUkQgZGVzaWducyBhIG5ldyBNTSBpUkFUIGZlYXR1cmUsIGhlL3NoZSB3aWxsIGFzc3VtZSBvdGhlcnMgcHJvY2VzcyB0aGVzZSBtZXNzYWdlcyBpbiB0aGlzIHdheQorICAqIHRoaXMgcnVsZXMgbWFrZSBzdXJlcyB0aGUgaW50ZXJSQVQgbWVzc2FnZSBmbG93IGlzIGFzIGV4cGVjdGVkCisgICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBpcmF0X3R5cGVfZW51bSAgaXJhdF90eXBlOyAgICAgIC8vSW5kaWNhdGVzIHRoZSBpbnRlci1SQVQgdHlwZQorICAgIHJhdF90eXBlX2VudW0gICBzb3VyY2VfcmF0OyAgICAgLy9Tb3VyY2UgUkFUIChHQVMgb3IgVUFTKQorICAgIHJhdF90eXBlX2VudW0gICB0YXJnZXRfcmF0OyAgICAgLy9UYXJnZXQgUkFUIChTaG91bGQgYmUgRUFTKQorICAgIGthbF9ib29sICAgICAgICBlc21fZGVhY3RpdmF0ZV9pc3I7IC8vRVNNIHNldHMgdGhpcyBmbGFnIGlmIEVTTSBiZWFyZXIgaGFzIGJlZW4gYWRkZWQgb3IgbW9kaWZpZWQgYWZ0ZXIgSVNSIHdhcyBhY3RpdmF0ZWQKKyAgICBrYWxfdWludDE2ICAgICAgbnNhcGlfc3RhdHVzOyAgIC8vUERQIGNvbnRleHQgc3RhdHVzCisKKyAgICAvKiogQml0LWFycmF5IG9mIG5hcy1wcmlvcml0eSBmb3IgYWxsIG5zYXBpLiAKKyAgICAgKiAgLSBCaXQgc2VxdWVuY2U6IChoaWdoKW5zYXBpLTE1IC0gKGxvdyluc2FwaS0wCisgICAgICogIC0gMDogQWxyZWFkeSBvciByZWFkeS10byB1c2UgImxvdyBwcmlvcml0eSIKKyAgICAgKiAgLSAxOiBBbHJlYWR5IG9yIHJlYWR5LXRvIHVzZSAibm9ybWFsIHByaW9yaXR5IgorICAgICAqICAtIElmIG5vdCBzcGVjaWZpZWQgYnkgdXNlcjogVXNlIDEgKG5vcm1hbCBwcmlvcml0eSkgYnkgZGVmYXVsdCAKKyAgICAgKi8KKyAgICBrYWxfdWludDE2IG5hc19wcmlvcml0eV9zdGF0dXM7CisKKyAgICAvKiogQml0LWFycmF5IG9mIGVhYi1vdmVycmlkZSBmb3IgYWxsIG5zYXBpLiAKKyAgICAgKiAgLSBCaXQgc2VxdWVuY2U6IChoaWdoKW5zYXBpLTE1IC0gKGxvdyluc2FwaS0wCisgICAgICogIC0gMDogQWxyZWFkeSBvciByZWFkeS10byB1c2UgIm5vdCBvdmVycmlkZSIgCisgICAgICogIC0gMTogQWxyZWFkeSBvciByZWFkeS10byB1c2UgImNhbiBvdmVycmlkZSIgCisgICAgICogIC0gSWYgbm90IHNwZWNpZmllZCBieSB1c2VyOiBVc2UgMCAobm90IG92ZXJyaWRlKSBieSBkZWZhdWx0IAorICAgICAqLworICAgIGthbF91aW50MTYgZWFiX292ZXJyaWRlX3N0YXR1czsKKyAgICAKKyAgICB0cmFmZmljX2NsYXNzX2VudW0gICAgICAgbWF4X3RyYWZmaWNfY2xhc3M7IC8vIHRoZSBoaWdoZXN0IHF1YWxpdHkgdHJhZmZpYyBjbGFzcyBhbW9uZyBhbGwgYWN0aXZlIFBEUCBjb250ZXh0CisKKyAgICBlbW0ybW1faXJhdF9pbmZvX3N0cnVjdCBlbW1faW5mbzsKKworICAgIHZvaWQqICAgICAgICAgICBhc19pbmZvX3B0cjsgICAgLy9JbmRpY2F0ZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGFjdGl2YXRpb24gcmVxdWVzdCBmb3IgUkFUIGNoYW5nZSB0byBMVEUsIHRoZSBpbmZvcm1hdGlvbiBpcyBkZWRpY2F0ZWQgZm9yIEFTLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1RoZSBidWZmZXIgd2lsbCBiZSBmcmVlZCBieSBzb3VyZSBvciB0YXJnZXQgQVMKK30gZ21tc21fcmF0X2NoYW5nZV9yZXFfc3RydWN0OyAvLyAoNEcyMyBzdGFydCkKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgLy8gY2hlY2sgTDRfTkFTX1JBVF9DSEFOR0VfU0FQLmRvY3ggZm9yIGRldGFpbAorfSBnbW1zbV9pc3JfZGVhY3RpdmF0ZV9yZXFfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGdtbXNtX2V2ZW50X3JlcG9ydF90eXBlX2VudW0gZXZlbnQ7Cit9IGdtbXNtX2V2ZW50X3JlcG9ydF9yZXFfc3RydWN0OworCisjZW5kaWYgCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NtX2VzbV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9zbV9lc21fc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjMDMyZQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9zbV9lc21fc3RydWN0LmgKQEAgLTAsMCArMSwyMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICBzbV9lbW1fc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICBNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBjb21tb24gc3RydWN0dXJlIG9mIFNNIGFuZCBlU00KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhIAorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfU01fRVNNX1NUUlVDVF9ICisjZGVmaW5lIF9TTV9FU01fU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAiaXJhdF9jb21tb25fc3RydWN0LmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisKKy8qKiAKKyAqIDNHUFAgc3BlYyB2ZXJzaW9uOiB4LnkuegorICogeCA9PiBOQVNfTUFKT1JfVkVSU0lPTgorICogeSA9PiBOQVNfTUlOT1JfVkVSU0lPTgorICogeiA9PiBOQVNfUkVMRUFTRV9WRVJTSU9OCisqLworCit0eXBlZGVmIGVudW17CisgICAgTkFTX01BSk9SX1ZFUlNJT04gPSAxNQorfU5BU19NQUpPUl9WRVJTSU9OX0lORk87CisKK3R5cGVkZWYgZW51bXsKKyAgICBOQVNfTUlOT1JfVkVSU0lPTiA9IDUKK31OQVNfTUlOT1JfVkVSU0lPTl9JTkZPOworCit0eXBlZGVmIGVudW17CisgICAgTkFTX1JFTEVBU0VfVkVSU0lPTiA9IDAKK30gTkFTX1JFTEVBU0VfVkVSU0lPTl9JTkZPOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4IGJlYXJlcl9pZDsKKyAgICBiZWFyZXJfbWFwcGluZ19yZXN1bHRfZW51bSBtYXBwaW5nX3Jlc3VsdDsKK31zbV9lc21fdHJhbnNmZXJyZWRfY29udGV4dF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggdG90YWxfbnVtYmVyOyAvLyBUb3RhbCBudW1iZXIgb2YgUERQIGNvbnRleHQvRVBTIGJlYXJlciB3aGljaCB0cmFuc2ZlcmVkIHRvIHRhcmdldCBSQVQKKyAgICBzbV9lc21fdHJhbnNmZXJyZWRfY29udGV4dF9zdHJ1Y3QgYmVhcmVyc1tNQVhfVFJBTlNGRVJSRURfQkVBUkVSX05VTV07Cit9c21fZXNtX2NvbnRleHRfc3RhdHVzX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgLy8gbm8gbmVlZCB0byBpbmNsdWRlIGlyYXRfdHlwZSwgc291cmNlX3JhdCwgdGFyZ2V0X3JhdCwgaXJhdF9yZXN1bHQuIGJlY2F1c2UgRVNNIHdpbGwgc2VuZCB0aGlzIG1zZyB0byBTTSBvbmx5IHdoZW4gNEcyMyBzdWNjZXNzCisgICAgLy9iZWFyZXJfY3R4dF90cmFuc2Zlcl9zdHJ1Y3QgZXBzYl9pbmZvOworICAgIGthbF91aW50OCB0b3RhbF9udW1iZXI7IC8vIFRvdGFsIG51bWJlciBvZiBQRFAgY29udGV4dC9FUFMgYmVhcmVyIHdoaWNoIHdpbGwgdHJhbnNmZXIgdG8gdGFyZ2V0IFJBVAorICAgIGJlYXJlcl9jdHh0X3N0cnVjdCBlcHNiX2NvbnRleHRbTUFYX1RSQU5TRkVSUkVEX0JFQVJFUl9OVU1dOyAvLyBiZWFyZXIgY29udGV4dCB3aGljaCB3aWxsIHRyYW5zZmVyIHRvIHRhcmdldCBSQVQKK30gc21fZXNtX2Vwc2JfY29udGV4dF90cmFuc2Zlcl9pbmRfc3RydWN0OyAvLyA0RzIzIHN1Y2Nlc3MgY29udGV4dCB0cmFuc2ZlcjogRVNNIC0tPiBTTQorCit0eXBlZGVmIHNtX2VzbV9lcHNiX2NvbnRleHRfdHJhbnNmZXJfaW5kX3N0cnVjdCBzbV9lc21fZXBzYl9jb250ZXh0X3RyYW5zZmVyX2luZF9mb3Jfc21fdXRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBzbV9lc21fY29udGV4dF9zdGF0dXNfc3RydWN0IHBkcF9jdHh0X3N0czsKK30gc21fZXNtX2Vwc2JfY29udGV4dF90cmFuc2Zlcl9yc3Bfc3RydWN0OyAvLyA0RzIzIHN1Y2Nlc3MgY29udGV4dCB0cmFuc2ZlcjogU00gLS0+IEVTTQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICAvLyBubyBuZWVkIHRvIGluY2x1ZGUgaXJhdF90eXBlLCBzb3VyY2VfcmF0LCB0YXJnZXRfcmF0LCBpcmF0X3Jlc3VsdC4gYmVjYXVzZSBFU00gd2lsbCBzZW5kIHRoaXMgbXNnIHRvIFNNIG9ubHkgd2hlbiA0RzIzIHN1Y2Nlc3MKKyAgICAvL2JlYXJlcl9jdHh0X3RyYW5zZmVyX3N0cnVjdCBwZHBfaW5mbzsKKyAgICBrYWxfdWludDggdG90YWxfbnVtYmVyOyAvLyBUb3RhbCBudW1iZXIgb2YgUERQIGNvbnRleHQvRVBTIGJlYXJlciB3aGljaCB3aWxsIHRyYW5zZmVyIHRvIHRhcmdldCBSQVQKKyAgICBiZWFyZXJfY3R4dF9zdHJ1Y3QgcGRwX2NvbnRleHRbTUFYX1RSQU5TRkVSUkVEX0JFQVJFUl9OVU1dOyAvLyBiZWFyZXIgY29udGV4dCB3aGljaCB3aWxsIHRyYW5zZmVyIHRvIHRhcmdldCBSQVQKK30gc21fcGRwX2NvbnRleHRfdHJhbnNmZXJfcmVxX3N0cnVjdDsgLy8gaVJBVCBzdWNjZXNzIGNvbnRleHQgdHJhbnNmZXI6IFNvdXJjZSBSQVQgIC0tPiBUYXJnZXQgUkFUCisKK3R5cGVkZWYgc21fcGRwX2NvbnRleHRfdHJhbnNmZXJfcmVxX3N0cnVjdCBzbV9lc21fcGRwX2NvbnRleHRfdHJhbnNmZXJfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgc21fZXNtX2NvbnRleHRfc3RhdHVzX3N0cnVjdCBlcHNiX2N0eHRfc3RzOworfSBzbV9lc21fcGRwX2NvbnRleHRfdHJhbnNmZXJfY25mX3N0cnVjdDsgLy8gMjNHNCBzdWNjZXNzIGNvbnRleHQgdHJhbnNmZXIgOiBFU00gLS0+IFNNCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHRvdGFsX251bWJlcjsgLy8gVG90YWwgbnVtYmVyIG9mIFBEUCBjb250ZXh0L0VQUyBiZWFyZXIgd2hpY2ggd2lsbCB0cmFuc2ZlciB0byB0YXJnZXQgUkFUCisgICAgYmVhcmVyX2N0eHRfc3RydWN0IGVwc2JfY29udGV4dFtNQVhfVFJBTlNGRVJSRURfQkVBUkVSX05VTV07IC8vIGJlYXJlciBjb250ZXh0IHdoaWNoIHdpbGwgdHJhbnNmZXIgdG8gdGFyZ2V0IFJBVAorICAgIGthbF9ib29sIGlzX2RlYWN0aXZhdGVfaXNyOyAvLyB3aGV0aGVyIElTUiBoYXMgdG8gYmUgZGVhY3RpdmF0ZWQgYWZ0ZXIgaVJBVAorfSBlc21fc21faXJhdF9pbmZvX3RyYW5zZmVyX3JlcV9zdHJ1Y3Q7IC8vIDRHMjMgY29udGV4dCB0cmFuc2ZlcjogRVNNIC0tPiBTTQorCit0eXBlZGVmIGVzbV9zbV9pcmF0X2luZm9fdHJhbnNmZXJfcmVxX3N0cnVjdCBlc21fc21faXJhdF9pbmZvX3RyYW5zZmVyX3JlcV9mb3Jfc21fdXRfc3RydWN0OwordHlwZWRlZiBzbV9lc21fZXBzYl9jb250ZXh0X3RyYW5zZmVyX3JzcF9zdHJ1Y3QgZXNtX3NtX2lyYXRfaW5mb190cmFuc2Zlcl9jbmZfc3RydWN0OyAvLyA0RzIzIGNvbnRleHQgdHJhbnNmZXI6IFNNIC0tPiBFU00KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHRvdGFsX251bWJlcjsgLy8gVG90YWwgbnVtYmVyIG9mIFBEUCBjb250ZXh0L0VQUyBiZWFyZXIgd2hpY2ggd2lsbCB0cmFuc2ZlciB0byB0YXJnZXQgUkFUCisgICAgYmVhcmVyX2N0eHRfc3RydWN0IHBkcF9jb250ZXh0W01BWF9UUkFOU0ZFUlJFRF9CRUFSRVJfTlVNXTsgLy8gYmVhcmVyIGNvbnRleHQgd2hpY2ggd2lsbCB0cmFuc2ZlciB0byB0YXJnZXQgUkFUCisgICAga2FsX2Jvb2wgaXNfZGVhY3RpdmF0ZV9pc3I7IC8vIHdoZXRoZXIgSVNSIGhhcyB0byBiZSBkZWFjdGl2YXRlZCBhZnRlciBpUkFUCit9IHNtX2VzbV9pcmF0X2luZm9fdHJhbnNmZXJfcmVxX3N0cnVjdDsgLy8gMjNHNCBjb250ZXh0IHRyYW5zZmVyOiBTTSAtLT4gRVNNCisKK3R5cGVkZWYgc21fZXNtX3BkcF9jb250ZXh0X3RyYW5zZmVyX2NuZl9zdHJ1Y3Qgc21fZXNtX2lyYXRfaW5mb190cmFuc2Zlcl9jbmZfc3RydWN0OyAvLyAyM0c0IGNvbnRleHQgdHJhbnNmZXI6IEVTTSAtLT4gU00KKworI2VuZGlmIC8vIH4gX1NNX0VTTV9TVFJVQ1RfSAorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9zbV9yYXRkbV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9zbV9yYXRkbV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGY1ZGM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NtX3JhdGRtX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgc21fcmF0ZG1fc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9OWkEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBTTV9SQVRETV9TVFJVQ1RfSAorI2RlZmluZSBTTV9SQVRETV9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX2dwcnNfc3RydWN0LmgiCisjaW5jbHVkZSAibDNfaW5jX2xvY2FsLmgiCisjaW5jbHVkZSAiZXNtX3JhdGRtX3N0cnVjdC5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUiAgCisgICAga2FsX3VpbnQ4IG5vX29mX25zYXBpczsKKyAgICBrYWxfdWludDggbnNhcGlfbGlzdFsxMV07CisgICAga2FsX2Jvb2wgIG5lZWRfc21fbW9kaWZ5OworfSBzbV9yYXRkbV9yYWJfYWN0aXZhdGVfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIE5TQVBJX1NUUlVDVF9IRFIgLy8gTE9DQUxfUEFSQV9IRFIgKyBrYWxfdWludDggbnNhcGkgKFNNIGNvZGUgYXNzdW1lIG5zYXBpIGlzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2Ygc29tZSBwcmltaXRpdmUpICAgIAorICAgIGthbF91aW50OCBpc19zdWNjZXNzZnVsOworfSBzbV9yYXRkbV9yYWJfYWN0aXZhdGVfcnNwX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIE5TQVBJX1NUUlVDVF9IRFIgLy8gTE9DQUxfUEFSQV9IRFIgKyBrYWxfdWludDggbnNhcGkgKFNNIGNvZGUgYXNzdW1lIG5zYXBpIGlzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2Ygc29tZSBwcmltaXRpdmUpCisgICAgLyogMjNHIHJhbGF0ZWQgcGFyYW1ldGVycyAqLyAKKyAgICBrYWxfdWludDggbGxjX3NhcGk7CisgICAgcW9zX3N0cnVjdCBxb3NfbmVnb3RpYXRlZDsKKyAgICBrYWxfdWludDggcmFkaW9fcHJpb3JpdHk7CisgICAga2FsX3VpbnQ4IHBmaTsKKworICAgIC8qIDRHIHJhbGF0ZWQgcGFyYW1ldGVycyAqLworICAgIGVzbV9xY2lfZW51bSBxY2k7Cit9IHNtX3JhdGRtX2FjdGl2YXRlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBOU0FQSV9TVFJVQ1RfSERSIC8vIExPQ0FMX1BBUkFfSERSICsga2FsX3VpbnQ4IG5zYXBpIChTTSBjb2RlIGFzc3VtZSBuc2FwaSBpcyB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIHNvbWUgcHJpbWl0aXZlKSAgICAKK30gc21fcmF0ZG1fYWN0aXZhdGVfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSICAKKyAgICBrYWxfdWludDggbm9fb2ZfbnNhcGlzOworICAgIGthbF91aW50OCBuc2FwaV9saXN0WzExXTsKKyAgICBrYWxfdWludDggY2F1c2U7CisgICAga2FsX2Jvb2wgeGlkX25lZ19pbmRpY2F0b3JbMTFdOworICAgIGthbF9ib29sIE1NaVJBVFsxMV07IC8vIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgYnkgU00gdG8gaW5mb3JtIFJBVERNIHRoZSByZWFzb24gdG8gZXN0YWJsaXNoIHRoaXMgY29udGV4dDogCisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgVFJVRSwgbWVhbnMgdGhpcyBjb250ZXh0IGlzIHRyYW5zZmVycmVkIGZyb20gNEcsIAorICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIEZBTFNFLCBtZWFucyB0aGlzIGNvbnRleHQgaXMgZXN0YWJsaXNoZWQgYnkgdXNlciB0cmlnZ2VyCit9IHNtX3JhdGRtX2RlYWN0aXZhdGVfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSICAKKyAgICBrYWxfdWludDggbm9fb2ZfbnNhcGlzOworICAgIGthbF91aW50OCBuc2FwaV9saXN0WzExXTsKKyNpZmRlZiBfX0RJQUxVUF9HUFJTX0NPVU5URVJfU1VQUE9SVF9fCisgICAga2FsX3VpbnQ2NCB0eF9kYXRhX2Ftb3VudFsxMV07IC8vIG5ldyBmaWVsZCBmb3IgZ3BycyBjYWxsIGhpc3RvcnkKKyAgICBrYWxfdWludDY0IHJ4X2RhdGFfYW1vdW50WzExXTsgLy8gbmV3IGZpZWxkIGZvciBncHJzIGNhbGwgaGlzdG9yeQorI2VuZGlmCQorfSBzbV9yYXRkbV9kZWFjdGl2YXRlX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUiAgCisgICAga2FsX3VpbnQ4IG5vX29mX25zYXBpczsKKyAgICBrYWxfdWludDggbnNhcGlfbGlzdFsxMV07Cit9IHNtX3JhdGRtX3JhYl9kZWFjdGl2YXRlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBOU0FQSV9TVFJVQ1RfSERSIC8vIExPQ0FMX1BBUkFfSERSICsga2FsX3VpbnQ4IG5zYXBpIChTTSBjb2RlIGFzc3VtZSBuc2FwaSBpcyB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIHNvbWUgcHJpbWl0aXZlKQorICAgIC8qIDIzRyByYWxhdGVkIHBhcmFtZXRlcnMgKi8KKyAgICBrYWxfYm9vbCBpc19yYWRpb19wcmlvcml0eV9wcmVzZW50OworICAgIGthbF91aW50OCByYWRpb19wcmlvcml0eTsKKworICAgIGthbF9ib29sIGlzX2xsY19zYXBpX3ByZXNlbnQ7CisgICAga2FsX3VpbnQ4IGxsY19zYXBpOworCisgICAga2FsX2Jvb2wgaXNfcW9zX25lZ290aWF0ZWRfcHJlc2VudDsKKyAgICBxb3Nfc3RydWN0IHFvc19uZWdvdGlhdGVkOworCisgICAga2FsX2Jvb2wgaXNfcGZpX3ByZXNlbnQ7CisgICAga2FsX3VpbnQ4IHBmaTsKKworICAgIC8qIDRHIHJhbGF0ZWQgcGFyYW1ldGVycyAqLworICAgIGVzbV9xY2lfZW51bSBxY2k7Cit9IHNtX3JhdGRtX21vZGlmeV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTlNBUElfU1RSVUNUX0hEUiAvLyBMT0NBTF9QQVJBX0hEUiArIGthbF91aW50OCBuc2FwaSAoU00gY29kZSBhc3N1bWUgbnNhcGkgaXMgdGhlIGZpcnN0IHBhcmFtZXRlciBvZiBzb21lIHByaW1pdGl2ZSkgICAgCit9IHNtX3JhdGRtX21vZGlmeV9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTlNBUElfU1RSVUNUX0hEUiAvLyBMT0NBTF9QQVJBX0hEUiArIGthbF91aW50OCBuc2FwaSAoU00gY29kZSBhc3N1bWUgbnNhcGkgaXMgdGhlIGZpcnN0IHBhcmFtZXRlciBvZiBzb21lIHByaW1pdGl2ZSkgICAgCisgICAga2FsX3VpbnQ4IGNhdXNlOworfSBzbV9yYXRkbV9zdGF0dXNfaW5kX3N0cnVjdDsKKworLy8gVGhlIHByaW1pdGl2ZSBpcyB1c2VkIHRvIGluZGljYXRlIFJBVERNIHRoYXQgdXBwZXIgbGF5ZXIgKFVQQ00sIElQQ29yZaFLZXRjKSBjb25maWd1cmF0aW9uIGlzIGRvbmUsIAorLy8gYW5kIGRvd25saW5rIHBhY2tldCBkYXRhIGNhbiBub3cgcm91dGUgdG8gdXBwZXIgbGF5ZXIgaWYgdGhleSB3ZXJlIHF1ZXVlZCBpbiBSQVRETSBvciBsb3dlciBsYXllci4gCisvLyBBbHRob3VnaCBjdXJyZW50IFJBVERNIGRvZXMgbm90IHF1ZXVlIGFueSBETCBkYXRhLCAKKy8vIHdlIGRlY2lkZSB0byBhbGlnbiA0RyBkZXNpZ24gYW5kIHN0aWxsIHNlbmQgdGhpcyBwcmltaXRpdmUgZm9yIGZ1dHVyZSBwb3NzaWJsZSB1c2FnZQordHlwZWRlZiBzdHJ1Y3QgeworICAgIE5TQVBJX1NUUlVDVF9IRFIgLy8gTE9DQUxfUEFSQV9IRFIgKyBrYWxfdWludDggbnNhcGkgKFNNIGNvZGUgYXNzdW1lIG5zYXBpIGlzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2Ygc29tZSBwcmltaXRpdmUpICAgIAorfSBzbV9yYXRkbV9hbGxvd19kbF9wYWNrZXRfaW5kX3N0cnVjdDsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZiAvLyB+ICNpZiAwCisKKworI2VuZGlmIC8qIFNNX1JBVERNX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvc21pY19yYXRkbV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9zbWljX3JhdGRtX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZTMwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvc21pY19yYXRkbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgc21pY19yYXRkbV9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICAKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogJExvZyQKKyAqCisgKgorICogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFNNSUNfUkFURE1fU1RSVUNUX0gKKyNkZWZpbmUgU01JQ19SQVRETV9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfd2l0aF9uMjZfc3VwcG9ydDsKK31zbWljX3JhdGRtX24yNl9jYXBhYmlsaXR5X3VwZGF0ZV9yZXFfc3RydWN0OworCisjZW5kaWYgLyogU01JQ19SQVRETV9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NtbW1fZW51bXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9zbW1tX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliNjFhZAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9zbW1tX2VudW1zLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogc21tbV9lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgY29udGFpbnMgZW51bSBkZWZpbml0aW9uIGJldHdlZW4gU00gYW5kIE1NLiAKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9TTU1NX0VOVU1TX0gKKyNkZWZpbmUgX1NNTU1fRU5VTVNfSAorCisvKiBQcm90b2NvbCBEaXNjcmltaW5hdG9yIFZhbHVlcyB0byBiZSB1c2VkICovCisjZGVmaW5lIFNNX01TRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQQorI2RlZmluZSBNQVhfTlBEVV9MSVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgUkVDRUlWRV9OUERVX0xJU1RfSUVJICAgICAgICAgICAgICAgICAweDI2CisKKy8vIENhcmxzb24gMjAxMy4wNy4yMiBwbGVhc2UgY2hlY2sgdGhlIGdtbXNtX2NhdXNlX2VudW0gYW5kIHRoZSBEQ19TdGF0dXMgdG9nZXRoZXIKKy8vIDEuIEZvciBzdXNwZW5kIGR1ZSB0byBDTS9NTS9HTU0gcHJvY2VkdXJlLCBHTU0gd2lsbCBzZW5kIEdNTVNNX1NVU1BFTkRfUkVRIHRvIFNNLCB1c2luZyBvbmx5IG9uZSBvZiB0aGUgMiBjYXVzZXM6IFBTX1NVU1BFTkRfTFIgLyBQU19TVVNQRU5EX0NNCisvLyAyLiBGb3IgR2VtaW5pIHN1c3BlbmQsIEdNTSB3aWxsIG5vdCByZWxheSBVTklUREFUQV9SRVEgaWYgb3RoZXIgU0lNIGlzIGJ1c3ksIGFuZCBHTU0gd2lsbCBzZW5kIFVOSVREQVRBX0NORi5EQ19TdGF0dXNfR2VtaW5pX1N1c3BlbmRfRGlzY2FyZCB0byBTTQorLy8gMy4gRm9yIGdtbXNtX2NhdXNlX2VudW06IEdNTVNNX0lOU1VGRklDSUVOVF9SRVNPVVJDRSwgaXQgaXMgb25seSB1c2VkIGluIEdNTVNNX0FUVEFDSF9SRUogZHVlIHRvIEdlbWluaQordHlwZWRlZiBlbnVtCit7CisgICAgTk9STV9ERVRBQ0gsCisgICAgUE9XRVJfT0ZGX0RFVEFDSCwKKyAgICBSRUFUVEFDSF9SRVEsCisgICAgU0lNX1JFTU9WQUwsCisgICAgUkFVX1NUQVJULAorICAgIFBTX1NFUlZJQ0VfU1VTUEVORCwKKyAgICBHTU1TTV9HTU1fSU5fSU5DT01QQVRJQkxFX1NUQVRFLAorICAgIFVOX1NQRUNJRklFRCwKKyAgICBERVRBQ0hfT05HT0lORywgLy9lcmljYSAyMDA3MDUyMgorICAgIFBTX1NVU1BFTkRfTFIsICAvKiBQUyBpcyBzdXNwZW5kZWQgYmVjYXVzZSBvZiBMVSwgSU1TSSBkZXRhY2ggKi8KKyAgICBQU19TVVNQRU5EX0NNLCAgLyogUFMgaXMgc3VzcGVuZGVkIGJlY2F1c2Ugb2YgQ00gY29ubmVjdGlvbihvdGhlciB0aGFuIENhbGwpICovCisgICAgUFNfU1VTUEVORF9DTV9DQUxMICAgIC8qIFBTIGlzIHN1c3BlbmRlZCBiZWNhdXNlIG9mIENNIGNvbm5lY3Rpb24gZHVlIHRvIENhbGwgaW4gR1NNICovCisjaWZkZWYgX19HRU1JTklfXworICAgICwgR01NU01fSU5TVUZGSUNJRU5UX1JFU09VUkNFICAvKiBtdGswMDcxNDogUlIgaW4gc3VzcGVuZCBtb2RlIG9yIHRoZSBvdGhlcnNpZGUgaXMgYXR0YWNoZWQgYWxyZWFkeSAqLworI2VuZGlmCisgICAgLFNFVFVQX1JBQl9TVEFSVCAgLypwcyBpcyBzdXNwZW5kIGJlY2F1c2Ugb2YgU0VUVVAgUkFCKi8KKyAgICAsR01NU01fVDMzNDZfUlVOTklORworICAgICxHRU1JTklfUlNWQSAgICAgCit9IGdtbXNtX2NhdXNlX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIE1TX0lETEUsCisgICAgTVNfQ09OTkVDVEVECit9IGdtbXNtX3N0YXRlX2VudW07CisgICAgCit0eXBlZGVmIGVudW0KK3sKKyAgICBOV19GT1BfSU5GT19JTlZBTElELCAgICAvKiBGaWVsZCBmb2xsb3dfb25fc3RhdHVzIGluIGdtbXNtX2F0dGFjaF9jbmYgc2hhbGwgbm90IGJlIHJlZmVyZW5jZWQgKi8KKyAgICBOV19GT1BfT0ZGLCAgICAgICAgICAgICAvKiBOVyBkaWQgbm90IHNwZWNpZmllZCBmb2xsb3ctb24tcHJvY2VlZCBpbiBhdHRhY2ggYWNjZXB0LCAzRyBQUyBzaWduYWxpbmcgY29ubmVjdGlvbiBzaGFsbCBub3QgYmUgcmV1c2VkICovCisgICAgTldfRk9QX09OICAgICAgICAgICAgICAgLyogTlcgc2VwY2lmaWVkIGZvbGxvdy1vbi1wcm9jZWVkIGluIGF0dGFjaCBhY2NlcHQsIDNHIFBTIHNpZ25hbGluZyBjb25uZWN0aW9uIGNhbiBiZSByZXVzZWQgKi8KK30gZ21tc21fZm9wX3N0YXR1c19lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTTV9FVkVOVF9OVUxMLAorICAgIFNNX0VWRU5UX1BEUF9BQ1RfUkVKX1JDVkRfRlJPTV9OVworfSBnbW1zbV9ldmVudF9yZXBvcnRfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTTV9QRFBfU0VTU0lPTl9OT05FX1BST0NFRFVSRSwKKyAgICBTTV9QRFBfU0VTU0lPTl9BQ1RJVkFUSU9OX1RPUF9QUk9DRURVUkUsCisgICAgU01fUERQX1NFU1NJT05fQUNUSVZBVElPTl9QUk9DRURVUkUsCisgICAgU01fUERQX1NFU1NJT05fQUNUSVZBVElPTl9SRVRSWV9QUk9DRURVUkUsCisgICAgU01fUERQX1NFU1NJT05fTU9ESUZJQ0FUSU9OX1BST0NFRFVSRSwKKyAgICBTTV9QRFBfU0VTU0lPTl9ERUFDVElWQVRJT05fUFJPQ0VEVVJFLAorICAgIFNNX1BEUF9TRVNTSU9OX0RFQUNUSVZBVElPTl9SRVRSWV9QUk9DRURVUkUKK30gZ21tc21fcGRwX3Nlc3Npb25fcHJvY2VkdXJlX3R5cGVfZW51bTsKKworI2VuZGlmCisKKy8qIEVuZCBvZiBmaWxlIHNtbW1faW50ZXJmYWNlLmggKi8KKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvc21zMm1tX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NtczJtbV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmFhYWFmCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NtczJtbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDExNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogIHNtczJtbV9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGNvbW1vbiBzdHJ1Y3R1cmUgb2YgU01TIGFuZCBNTS4gCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9TTVMyTU1fU1RSVUNUX0gKKyNkZWZpbmUgX1NNUzJNTV9TVFJVQ1RfSAorCisjaW5jbHVkZSAibWNkX2wzX2luY19ncHJzX3N0cnVjdC5oIgorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBpOworICAgIGNvbmNpc2VfcW9zX3N0cnVjdCBxb3M7CisgICAgcnBfZW51bSByYWRpb19wcmlvcml0eTsgICAgIAorfSBnbW1zbXNfdW5pdGRhdGFfcmVxX3N0cnVjdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvc21zYWxfYXNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvc21zYWxfYXNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1ZmY3ZAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9zbXNhbF9hc19zdHJ1Y3QuaApAQCAtMCwwICsxLDE2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHNtc2FsX2FzX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDAyCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgRklMRU5BTUUgOiBzbXNhbF9hc19zdHJ1Y3QuaAorICogIFNZTk9QU0lTIDogRnVuY3Rpb25zIGZvciBlbmNvZGluZy9kZWNvZGluZy4KKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICBSIEUgViBJIFMgSSBPIE4gICAgSCBJIFMgVCBPIFIgWQorICoKKyAqLworI2lmbmRlZiBfU01TQUxfQVNfU1RSVUNUX0gKKyNkZWZpbmUgX1NNU0FMX0FTX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggY2JjaF9yZXE7Cit9IHNtc2FsX2FzX2NiY2hfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQxNiBtaWRzWzYwXTsgICAgICAgICAgICAgICAgICAvLyA9IFtTTVNBTF9QU19DQk1JX01BWF9FTlRSWV0KKyAgICBrYWxfdWludDE2IG1pZGRbMzBdOyAgICAgICAgICAgICAgICAgIC8vID0gW1NNU0FMX0NCX01BWF9FTlRSWV0KKyAgICBrYWxfdWludDE2IG1pZHJbNjBdOyAgICAgICAgICAgICAgICAgIC8vID0gW1NNU0FMX0NCX01BWF9FTlRSWSoyXQorICAgIGthbF91aW50MTYgZGNzc1szMF07ICAgICAgICAgICAgICAgICAgLy8gPSBbU01TQUxfQ0JfTUFYX0VOVFJZXQorICAgIGthbF9ib29sIGlzX2FsbF9sYW5ndWFnZV9vbjsgICAgCit9IHNtc2FsX2FzX2NiX3VwZGF0ZV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDE2IHNuOworICAgIGthbF91aW50MTYgbWk7CisgICAga2FsX3VpbnQ4IGRjczsKKyAgICBrYWxfdWludDggcGFnZTsKKyAgICBrYWxfdWludDggcGFnZXM7CisgICAga2FsX3VpbnQ4IGlzX21pZHM7CisgICAga2FsX3VpbnQ4IG1pX2luZGV4OworICAgIGthbF91aW50OCBwYWdlX2RhdGFbODhdOworCisgICAga2FsX3VpbnQ4IHZhbGlkX2Jsa19udW07CisKK30gc21zYWxfYXNfY2JfcGFnZV9pbmRfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBnZW9ncmFwaHlfdHlwZTsKK30gc21zYWxfYXNfY2JfZ3NfY2hhbmdlX2luZF9zdHJ1Y3Q7CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9zbmQybGxjX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NuZDJsbGNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjNjk2NAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9zbmQybGxjX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgc25kMmxsY19zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogIFRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGNvbW1vbiBzdHJ1Y3R1cmUgb2YgU05EQ1AgYW5kIExMQy4gIAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhISAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIFBveWluZzogMjAxMDExMDUuIFJIUi4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN1Z2dlc3QgQWRkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIiAgICAKKyNpbmNsdWRlICJtY2RfbDNfaW5jX2dwcnNfc3RydWN0LmgiCisjaW5jbHVkZSAiZmxjMl9jb25maWcuaCIKKworI2lmbmRlZiBfU05EMkxMQ19TVFJVQ1RfSAorI2RlZmluZSBfU05EMkxMQ19TVFJVQ1RfSAorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc2FwaTsKKyAgICBrYWxfdWludDggbG9jYWw7IC8qIExPQ0FMKi8KKyAgICBrYWxfdWludDMyIHRsbGk7IC8qIFRMTEkqLworfSBsbF9yZWxlYXNlX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBpOworICAgIGthbF91aW50MzIgdGxsaTsgLyogVExMSSovCisgICAga2FsX3VpbnQxNiByZXFfbjIwMXU7ICAvL2VyaWNhIDIwMDcwMTEyCit9IGxsX3hpZF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc2FwaTsKKyAgICBrYWxfdWludDMyIHRsbGk7IC8qIFRMTEkqLworfSBsbF94aWRfcmVzX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHNhcGk7CisgICAga2FsX3VpbnQzMiB0bGxpOyAvKiBUTExJKi8KK30gbGxfZXN0YWJsaXNoX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBpOworICAgIGthbF91aW50MzIgdGxsaTsgLyogVExMSSovCit9IGxsX2VzdGFibGlzaF9yZXNfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc2FwaTsKKyAgICBrYWxfdWludDggcmFkaW9fcHJpb3JpdHk7IC8qIFJBRElPIFBSSU9SSVRZKi8KKyAgICBrYWxfdWludDE2IHJlZmVyZW5jZTsgLyogU05ETExDIFJFRkVSRU5DRSBUWVBFKi8KKyAgICBmbGMyX3Bvb2xfaWRfZW51bSBwc3BkdV91bF9wb29sX2lkIDsKKyAgICBrYWxfdWludDMyIHRsbGk7IC8qIFRMTEkqLworICAgIGthbF91aW50OCBwZmk7ICAvKiBQRkkgKi8KKyAgICBjb25jaXNlX3Fvc19zdHJ1Y3QgcW9zX3BhcmFtOyAvKiBRT1MgU1RSVUNUVVJFKi8KK30gbGxfZGF0YV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc2FwaTsKKyAgICBrYWxfdWludDggaXNfYWNrX21vZGU7Cit9IGxsX3NhcGlfYWN0X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzYXBpOworfSBsbF9zYXBpX2RlYWN0X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sIGlzX2FsbF9mbHVzaDsKKyAgICBrYWxfYm9vbCBhcmVfdHdvX3BkcF9zYW1lX3FvczsgICAgCisgICAga2FsX3VpbnQ4IHJhZGlvX3ByaW9yaXR5OyAvKiBMTEMgc2hhbGwgZGVjcmVtZW50IGJ5IG9udyB3aGVuIHNlbnQgdG8gUkxDLiAqLworICAgIGNvbmNpc2VfcW9zX3N0cnVjdCBxb3NfcGFyYW07ICAgIAorICAgIGthbF9ib29sIGlzX25lZWRfY25mOworfSBsbHNuZF9mbHVzaF9yZXFfc3RydWN0OworCit0eXBlZGVmIGxsX3JlbGVhc2VfcmVxX3N0cnVjdCBsbHNuZF9yZWxlYXNlX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIGxsX3hpZF9yZXFfc3RydWN0IGxsc25kX3hpZF9yZXFfc3RydWN0OwordHlwZWRlZiBsbF94aWRfcmVzX3N0cnVjdCBsbHNuZF94aWRfcmVzX3N0cnVjdDsKK3R5cGVkZWYgbGxfZXN0YWJsaXNoX3JlcV9zdHJ1Y3QgbGxzbmRfZXN0YWJsaXNoX3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIGxsX2VzdGFibGlzaF9yZXNfc3RydWN0IGxsc25kX2VzdGFibGlzaF9yZXNfc3RydWN0OwordHlwZWRlZiBsbF9kYXRhX3JlcV9zdHJ1Y3QgbGxzbmRfZGF0YV9yZXFfc3RydWN0OwordHlwZWRlZiBsbF9zYXBpX2FjdF9yZXFfc3RydWN0IGxsc25kX3NhcGlfYWN0X3JlcV9zdHJ1Y3Q7Cit0eXBlZGVmIGxsX3NhcGlfZGVhY3RfcmVxX3N0cnVjdCBsbHNuZF9zYXBpX2RlYWN0X3JlcV9zdHJ1Y3Q7CisKKyNlbmRpZiAKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvc25kMnRjbV9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC9zbmQydGNtX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NTM0MjYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvc25kMnRjbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDEwMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiBTTkQyVENNX1NUUlVDVC5ICisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBjb21tb24gZW51bXMgb2YgVENNIGFuZCBTTkRDUC4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9TTkQyVENNX1NUUlVDVF9ICisjZGVmaW5lIF9TTkQyVENNX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG5zYXBpOyAvKiBOU0FQSSBkYXRhIHBsYW5lIGluZGV4IHRvIHRoZSBQRFAgY29udGV4dCovCisgICAga2FsX3VpbnQ4IGZsY19wb29sX3R5cGU7IC8vRkxDMSBvbmx5CisgICAga2FsX3VpbnQ4IHBvb2xfaWQ7Cit9IHNuX2RhdGFfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG5zYXBpOyAvKiBOU0FQSSBkYXRhIHBsYW5lIGluZGV4IHRvIHRoZSBQRFAgY29udGV4dCovCisgICAga2FsX3VpbnQ4IGZsY19wb29sX3R5cGU7IC8vRkxDMSBvbmx5CisgICAga2FsX3VpbnQ4IHBvb2xfaWQ7Cit9IHNuX3VuaXRkYXRhX2luZF9zdHJ1Y3Q7CisjZW5kaWYgCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NuZGxsY19lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3NuZGxsY19lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3M2U1YzAKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvc25kbGxjX2VudW1zLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogIHNuZGxsY19lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIGVudW0gZGVmaW5pdGlvbiBiZXR3ZWVuIFNORENQIGFuZCBMTEMuIAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEgCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICBUaGlzIHByb2R1Y3QgaGFzIGJlZW4gZGV2ZWxvcGVkIHVzaW5nIGEgcHJvdG9jb2wgc3RhY2sKKyogIGRldmVsb3BlZCBieSBTYXNrZW4gQ29tbXVuaWNhdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworI2lmbmRlZiBfU05ETExDX0lOVEVSRkFDRV9ICisjZGVmaW5lIF9TTkRMTENfSU5URVJGQUNFX0gKKworLyogVmFsdWUgdXNlZCBpbiBMTF9EQVRBX1JFUSBhbmQgTExfREFUQV9DTkYgIGJldHdlZW4gU05EQ1AgYW5kIExMQyAgKi8KK3R5cGVkZWYga2FsX3VpbnQxNiBTTkRMTENfUkVGRVJFTkNFX1RZUEU7CisKKy8qIFNhcGkncyBkZWZpbmVkIGIvdyBTTkRDUCBhbmQgTExDICovCisKK3R5cGVkZWYgZW51bSB7CisgICAgICAgTExDX1NORENQXzNfU0FQPTMsCisgICAgICAgTExDX1NORENQXzVfU0FQPTUsCisgICAgICAgTExDX1NORENQXzlfU0FQPTksCisgICAgICAgTExDX1NORENQXzExX1NBUD0xMQorICAgICB9IExMQ19TTkRfU0FQX1RZUEUgOworCit0eXBlZGVmIGVudW0geworICBMTFNORF9OT1JNQUxfUkVMRUFTRSwKKyAgTExTTkRfUEVFUl9OT19SRVNQT05TRSwKKyAgTExTTkRfRE1fUkVDRUlWRUQsCisgIExMU05EX0lOVkFMSURfWElEX1JFUywKKyAgTExTTkRfTk9fTUVNT1JZX0ZPUl9BUlEsCisgIExMU05EX0xPQ0FMX1JFTEVBU0UsCisgIExMU05EX0NSRUFURV9SRUdJT05fRkFJTEVELAorICBMTFNORF9JTlNVRkZJQ0lFTlRfWElEX1JFU09VUkNFLAorICBMTFNORF9MT1dFUl9MQVlFUl9GQUlMVVJFCit9IGxsc25kX2NhdXNlX2VudW07IAorCisKKyNlbmRpZiAvKiBFbmQgb2Ygc25kMmxsY19pbnRlcmZhY2UuaCAqLworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdDMwMmZhX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3QzMDJmYV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDVjNzkzCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3QzMDJmYV9zdHJ1Y3QuaApAQCAtMCwwICsxLDIwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisgKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyAqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyAqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICoJdDMwMmZhX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIEZheCBPdmVyIEdTTQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBtZXNzYWdlcyBiZXR3ZWVuIEZBIGFuZCBUMzAKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIAkJCQlISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKKworI2lmbmRlZiBUMzAyRkFfU1RSVUNUX0gKKyNkZWZpbmUgVDMwMkZBX1NUUlVDVF9ICisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCisvKiBEQVRBIFJFUSBsb2NhbCBwYXJhbSBzdHJ1Y3QgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIExPQ0FMX1BBUkFfSERSCisJa2FsX2Jvb2wgICBpc19maW5hbDsKKwlrYWxfdWludDggIGxlbmd0aDsKKyAgIGthbF91aW50OCAgaXNfbmV4dF9mb2xsb3dlZDsKK310MzBfZmFfZGF0YV9yZXFfc3RydWN0OworCisKKworCisvL1JvYmVydAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgTE9DQUxfUEFSQV9IRFIKKwlrYWxfdWludDgJYWNjZXNzX3JhdGU7CisJa2FsX3VpbnQ4CWlzX0ZSIDsKK310MzBfZmFfYWN0aXZhdGVfcmVxX3N0cnVjdDsKKworLyogRkEgQ29tbWFuZCByZXF1ZXN0IGxvY2FsIHBhcmFtIHN0cnVjdCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgTE9DQUxfUEFSQV9IRFIKKwlrYWxfYm9vbCAgIGlzX2ZpbmFsOworCWthbF91aW50OCAgbGVuZ3RoOworfXQzMF9mYV9jbWRfcmVxX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICBMT0NBTF9QQVJBX0hEUgorCWthbF91aW50OCAgZmF4X3JhdGU7CisJa2FsX3VpbnQ4ICBkYXRhX3R5cGU7Cit9dDMwX2ZhX3R4X2RhdGFfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgTE9DQUxfUEFSQV9IRFIKKwlrYWxfdWludDggIGZheF9yYXRlOworCWthbF91aW50OCAgZGF0YV90eXBlOworfXQzMF9mYV9yeF9kYXRhX3JlcV9zdHJ1Y3Q7CisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCQkJCQkJCQkJVDMyIDwtIEZBCQkJCQkJCQkJCSAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBGQSBDb21tYW5kIGluZGljYXRpb24gbG9jYWwgcGFyYW0gc3RydWN0ICovCit0eXBlZGVmIHN0cnVjdAoreworICBMT0NBTF9QQVJBX0hEUgorCWthbF9ib29sICAgaXNfZmluYWw7CisJa2FsX3VpbnQ4ICBsZW5ndGg7Cit9ZmFfdDMwX2NtZF9pbmRfc3RydWN0OworCisvKiBGQSBEYXRhIGluZGljYXRpb24gbG9jYWwgcGFyYW0gc3RydWN0ICovCit0eXBlZGVmIHN0cnVjdAoreworICBMT0NBTF9QQVJBX0hEUgorCWthbF91aW50OCAgbGVuZ3RoOworCWthbF9ib29sICAgaXNfZmluYWw7Cit9ZmFfdDMwX2RhdGFfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgTE9DQUxfUEFSQV9IRFIKKwlrYWxfdWludDggIGdzbV9yYXRlOworCWthbF91aW50OCBpc19GUjsKKwlrYWxfdWludDE2IGJ5dGVfY250OworfWZhX3QzMF9yYXRlX2NoYW5nZV9zdHJ1Y3Q7CisKKworLyogRkEgQWN0aXZhdGUgQ29uZmlybSBtZXNzYWdlIGxvY2FsIHBhcmFtIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgTE9DQUxfUEFSQV9IRFIKKwlrYWxfYm9vbAlpc19zdWNjZXNzZnVsOworCWthbF91aW50OAlnc21fcmF0ZTsKKwlrYWxfdWludDgJaXNfRlI7CisJa2FsX3VpbnQxNglieXRlX2NudDsKK31mYV90MzBfYWN0aXZhdGVfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgTE9DQUxfUEFSQV9IRFIKKwlrYWxfYm9vbAlpc19zdWNjZXNzZnVsOworfWZhX3QzMF90eF9kYXRhX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIExPQ0FMX1BBUkFfSERSCisJa2FsX2Jvb2wJaXNfc3VjY2Vzc2Z1bDsKK31mYV90MzBfcnhfZGF0YV9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIGthbF91aW50OCBhbGxvd2VkX2ZyYW1lX251bTsKK30gZmFfdDMwX2dldF9kYXRhX2luZF9zdHJ1Y3Q7CisKKworCisjZW5kaWYgLyogVDMwMkZBX1NUUlVDVF9IICovCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3RjbTJzbmRfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdGNtMnNuZF9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWUyNTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3RjbTJzbmRfc3RydWN0LmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogVENNMlNORF9TVFJVQ1QuSAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNQVVJCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgY29tbW9uIGVudW1zIG9mIFRDTSBhbmQgU05EQ1AuCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKgorKiAgVGhpcyBwcm9kdWN0IGhhcyBiZWVuIGRldmVsb3BlZCB1c2luZyBhIHByb3RvY29sIHN0YWNrCisqICBkZXZlbG9wZWQgYnkgU2Fza2VuIENvbW11bmljYXRpb24gVGVjaG5vbG9naWVzIExpbWl0ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfVENNMlNORF9TVFJVQ1RfSAorI2RlZmluZSBfVENNMlNORF9TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBuc2FwaTsgLyogTlNBUEkqLworICAgIGthbF91aW50OCBucGR1X251bWJlcjsgLyogTlBEVSBOdW1iZXIqLworICAgIGthbF91aW50OCAgZGF0YV90eXBlOyAvL29ubHkgZm9yIEZMQzEKKyAgICBrYWxfdWludDggICBwb29sX2lkOworCit9IHNuX2RhdGFfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IG5zYXBpOyAvKiBOU0FQSSovCisgICAga2FsX3VpbnQ4ICBkYXRhX3R5cGU7IC8vb25seSBmb3IgRkxDMQorICAgIGthbF91aW50OCAgcG9vbF9pZDsKK30gc25fdW5pdGRhdGFfcmVxX3N0cnVjdDsKKyNlbmRpZiAKKworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdGNtX3NtaWNfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdGNtX3NtaWNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmOGFjOQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC90Y21fc21pY19zdHJ1Y3QuaApAQCAtMCwwICsxLDczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgdGNtX3NtaWNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgVk1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBUQ01fU01JQ19TVFJVQ1RfSAorI2RlZmluZSBUQ01fU01JQ19TVFJVQ1RfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKyNpbmNsdWRlICJwc19wdWJsaWNfZW51bS5oIgorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgIHBzaTsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIGlzX2Fsd2F5c19vbl9wZHVfc2Vzc2lvbl9yZXFfcHJlc2VudDsKKyAgICBhbHdheXNfb25fcGR1X3Nlc3Npb25fcmVxX2VudW0gIGFsd2F5c19vbl9wZHVfc2Vzc2lvbl9yZXE7CisgICAga2FsX2Jvb2wgICAgcnFvc19zdXBwb3J0OworICAgIGthbF9ib29sICAgIG1oNl9zdXBwb3J0OworICAgIAorfSB0Y21fc21pY181Z191ZV9pbmZvX2RlZmluZV9yZXFfc3RydWN0OworCisjZW5kaWYgLyogVENNX1NNSUNfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC90ZnRfcGZfc3RhdHMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC90ZnRfcGZfc3RhdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTlmMDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3RmdF9wZl9zdGF0cy5oCkBAIC0wLDAgKzEsMTAxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTIKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgdGZ0X3BmX3N0YXRzLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgVEZUIFBGIHN0YXRpc3RpY3MKKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICogICAKKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogJExvZyQKKyAqCisgKiAwNSAyNyAyMDEzIG1vamEuaHN1CisgKiBbTU9MWTAwMDA3NjI1XSBNYWludGFpbiBjb2RlCisgKiBhZGQgVVBDTSBFTSBzdGF0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiAgICAgICBGaWxlbmFtZTogIHRmdF9wZi5oCisgKgorICogICAgRGVzY3JpcHRpb246ICB0ZnQgaW50ZXJmYWNlLgorICoKKyAqICAgICAgICBDcmVhdGVkOiAgMjAxMy8wNS8yMSAgMDM6Mzk6MTAKKyAqICAgICAgICBBdXRob3I6ICBtdGswMTY0MSAobW9qYSkKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaWZuZGVmICBURlRfUEZfU1RBVFNfSU5DCisjZGVmaW5lICBURlRfUEZfU1RBVFNfSU5DCisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIGthbF91aW50MzIgcGt0X2ZpbHRlcl9hbGxvYzsKKyAgICBrYWxfdWludDMyIHBrdF9maWx0ZXJfcmVsZWFzZTsKKworICAgIGthbF91aW50MzIgcGt0X2ZpbHRlcl9hZGRfdjQ7CisgICAga2FsX3VpbnQzMiBwa3RfZmlsdGVyX2FkZF92NjsKKyAgICBrYWxfdWludDMyIHBrdF9maWx0ZXJfcmVtb3ZlX3Y0OworICAgIGthbF91aW50MzIgcGt0X2ZpbHRlcl9yZW1vdmVfdjY7CisKKyAgICBrYWxfdWludDMyIGVtcHR5X3Rja19hY2s7CisKKyAgICBrYWxfdWludDMyIGFjdHZfZXBzYjsKKyAgICBrYWxfdWludDMyIGFjdHZfZXBzYl9lcnI7CisKKyAgICBrYWxfdWludDMyIGRlYWN0dl9lcHNiOworICAgIGthbF91aW50MzIgZGVhY3R2X2Vwc2JfZXJyOworCisgICAga2FsX3VpbnQzMiBwa3RfZmlsdGVyX2FkZF9mYWlsOworICAgIGthbF91aW50MzIgcGt0X2ZpbHRlcl9yZXBsYWNlX2ZhaWw7CisgICAga2FsX3VpbnQzMiBwa3RfZmlsdGVyX2RlbF9mYWlsOworICAgIGthbF91aW50MzIgcGt0X2ZpbHRlcl9kZWxfYWxsX2ZhaWw7Cit9dGZ0X3BmX3N0YXRzX3Q7CisjZW5kaWYgICAvKiAtLS0tLSAjaWZuZGVmIFRGVF9QRl9TVEFUU19JTkMgIC0tLS0tICovCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC90ZnRsaWJfYXBpLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdGZ0bGliX2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNTk1NGYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdGZ0bGliX2FwaS5oCkBAIC0wLDAgKzEsNDMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTIKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgdGZ0bGliX2FwaS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBURlQgbGlicmFyeSBBUEkgaGVhZGVyIGZpbGUKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDggMTIgMjAyMCB0ZXJlbmNlLmt1bworICogW01PTFkwMDU1NzMxOF0gW01UNjg3NV1bTWFyZ2F1eF1bUTBdW1IzXVtNUDZdW1NRQ11bSW50ZXJuYWxdW1dXIEZUXVtDaGluYV1bUXV6aG91XVs1R01NXVtNRFNUXVtTV0lGVF1bU11bQ01DQytJbnZhbGlkXVtFcnJvciB0aW1lczoxXVN5c3RlbSBBUEkgRHVtcCwxMTY1LDI5LDk5LC9kYXRhL3ZlbmRvci9jb3JlLywxLCxtdGtyaWxkOkFUIGNvbW1hbmQgcGVuZGluZyB0b28gbG9uZy4gYXNzZXJ0ISEhIEFUIGNtZDogRUFQTkFDVC50aW1lcjogOTAwMDAwbXMKKyAqIC4gUHJvdmlkZSBhIG5ldyBBUEkgd2hpY2ggY29uc3RydWN0cyBjb250ZXh0IGZvciBkZWZhdWx0IGJlYXJlciB3aXRob3V0IHRmdCB0byBUQ00uCisgKgorICogMDMgMDkgMjAyMCB0ZXJlbmNlLmt1bworICogW01PTFkwMDUwMzkyM10gW01UNjg4NV1bUGV0cnVzXVtNUDJdW0VyaWNzc29uXVtJT0RUXVtTQSBGdWxsU3RhY2tdW0tpc3RhXVs1R10gVUUgY3Jhc2g6IFsxXVtjb3JlMSx2cGUwLHRjMCh2cGUzKV0gRmF0YWwgRXJyb3IgKDB4ODIzLCAweDEwMCwgMHhjY2NjY2NjYykgLSBVUlIKKyAqIAkKKyAqIC4gQ3JlYXRlIGEgdW5pZm9ybSBhcGkgdG8gZnJlZSBjb250cm9sIGJ1ZmZlcnMgYWxsb2NhdGVkIGZvciBwYWNrZXQgZmlsdGVyIGFjdGlvbiBsaXN0LgorICoKKyAqIDA5IDA0IDIwMTkgdGVyZW5jZS5rdW8KKyAqIFtNT0xZMDA0MzQ3NTRdIFVwZ3JhZGUgQ0dURlQgdG8gc3VwcG9ydCA1R0MKKyAqIAkKKyAqIC4gVXBkYXRlIENHVEZUIGJlaGF2aW9ycyBpbiB0ZnRsaWIuCisgKgorICogMDMgMjYgMjAxOSBqZWZmZXJ5LmNoZW4KKyAqIFtNT0xZMDAzOTM0NTZdIFtHZW45N11bVk1PTFldIDQ1RyBJbnRlclJBVCAmIGludGVyU3lzdGVtIGZlYXR1cmUKKyAqIAkKKyAqIAlbVEZUTElCXSBpbnRlcmZhY2UgcGFydC4KKyAqCisgKiAwMyAyNiAyMDE5IGplZmZlcnkuY2hlbgorICogW01PTFkwMDM5MzQ1Nl0gW0dlbjk3XVtWTU9MWV0gNDVHIEludGVyUkFUICYgaW50ZXJTeXN0ZW0gZmVhdHVyZQorICogCQorICogCVtURlRMSUJdIGludGVyZmFjZSBwYXJ0LgorICoKKyAqIDEyIDE0IDIwMTggamVmZmVyeS5jaGVuCisgKiBbTU9MWTAwMzcyNjM1XSBbVk1PTFldIEw0L1RDTS9URlRMSUIvVkdTTSBwaGFzZTIgY2hlY2staW4KKyAqIAkKKyAqIAlbVEZUTElCXSBwaGFzZTIgY2hlY2staW4uCisgKgorICogMDkgMTQgMjAxOCBqZWZmZXJ5LmNoZW4KKyAqIFtNT0xZMDAzMDYxNDhdIFtOQVNdIHBhbmd1IGdpYW50IENSCisgKiAJCisgKiAJW1RGVExJQl0gcGFzcyAxc3QgTkFTIE1vRElTIElULgorICoKKyAqIDA4IDE3IDIwMTggamVmZmVyeS5jaGVuCisgKiBbTU9MWTAwMzA2MTQ4XSBbTkFTXSBwYW5ndSBnaWFudCBDUgorICogW1RGVExJQl0gcmUtYXJjaGl0ZWN0dXJlLgorICoKKyAqIDA4IDE3IDIwMTggamVmZmVyeS5jaGVuCisgKiBbTU9MWTAwMzA2MTQ4XSBbTkFTXSBwYW5ndSBnaWFudCBDUgorICogCQorICogCVtURlRMSUJdIHJlLWFyY2hpdGVjdHVyZS4KKyAqCisgKiAxMCAxNyAyMDE2IHJlbmh1YW5nLmxpdQorICogW01PTFkwMDIwNTAzNV0gW1RGVExJQl0gTWVtb3J5IG1hbmFnZW1lbnQgaW4gVEZUIGludGVybmFsCisgKiBSZXNvbHZlIGJ1aWxkIGVycm9yCisgKiBwY29yZS9tb2RlbS9pbnRlcmZhY2UvZ2VuZXJhbC8uLi8uLi9sNC90Y20vdGZ0bGliLy4uL2NvbW1vbi90Y21fY29udGV4dC5oOjU1OToyOTogZmF0YWwgZXJyb3I6IHRjbV91Z3RjbV90aW1lci5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgKgorICogMTAgMTcgMjAxNiByZW5odWFuZy5saXUKKyAqIFtNT0xZMDAyMDUwMzVdIFtURlRMSUJdIE1lbW9yeSBtYW5hZ2VtZW50IGluIFRGVCBpbnRlcm5hbAorICogUmVzb2x2ZSB0aGUgYnVpbGQgZXJyb3I6CisgKiBwY29yZS9tb2RlbS9pbnRlcmZhY2UvZ2VuZXJhbC8uLi8uLi9sNC90Y20vdGZ0bGliLy4uL2NvbW1vbi90Y21fY29udGV4dC5oOjU1OToyOTogZmF0YWwgZXJyb3I6IHRjbV91Z3RjbV90aW1lci5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgKgorICogMTAgMTYgMjAxNiByZW5odWFuZy5saXUKKyAqIFtNT0xZMDAyMDUwMzVdIFtURlRMSUJdIE1lbW9yeSBtYW5hZ2VtZW50IGluIFRGVCBpbnRlcm5hbAorICogUmVzb2x2ZSB0aGUgZXJyb3I6CisgKiBwY29yZS9tb2RlbS9pbnRlcmZhY2UvZ2VuZXJhbC90ZnRsaWJfYXBpLmg6MTE4OjMzOiAKKyAqIGZhdGFsIGVycm9yOiB0ZnRsaWJfaW50ZXJuYWxfYXBpLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyAqCisgKiAxMCAxNiAyMDE2IHJlbmh1YW5nLmxpdQorICogW01PTFkwMDIwNTAzNV1bVEZUTElCXSBNZW1vcnkgbWFuYWdlbWVudCBpbiBURlQgaW50ZXJuYWwKKyAqCisgKiAwOSAyNiAyMDE2IHZlcmEueWVoCisgKiBbTU9MWTAwMjA1MTE2XSBbNjI5M11bRVNNXVtURlRMSUJdIG5ldyBmZWF0dXJlL3JlLWFyY2ggaXRlbSBwb3J0aW5nIHRvIFVNT0xZQSB0cnVuaworICogW1RGVExJQl1bT0FdIFBTLkRFViBwb3J0aW5nIHRvIFVNT0xZQS5UcnVuay4KKyAqIAkxLiBURlRMSUIgVVQgZW5oYW5jZW1lbnQKKyAqIAkyLiBVTF9QRl9DSEVDSworICoKKyAqIDExIDE3IDIwMTQgamVmZmVyeS5jaGVuCisgKiBbTU9MWTAwMDg0NjM0XSBbVU1PTFldW1IxMF1bUjExXSBOQVMgY2hlY2staW4gZnJvbSA2MjkxX0RFViB0byBVTU9MWQorICogW1IxMF1bUjExXSBOQVMgY2hlY2staW4gZnJvbSA2MjkxX0RFViB0byBVTU9MWQorICoKKyAqIDA5IDEwIDIwMTQgamVmZmVyeS5jaGVuCisgKiBbTU9MWTAwMDc4MjY0XSBbVU1PTFldW1IxMF1bUjExXSBOQVMgY2hlY2staW4gZnJvbSBDQnIgdG8gNjI5MV9ERVYKKyAqIFtSMTBdW1IxMV0gTkFTIGNoZWNrLWluIGZyb20gQ0JyIHRvIDYyOTFfREVWCisgKgorICogMDEgMjkgMjAxNCBqb2UuY2hhbmcKKyAqIFtNT0xZMDAwNTUzMzRdIFtNVDYyOTBdW1NHTFRFIERTRFNdIE5ldyBmZWF0dXJlIGNoZWNrLWluIE1PTFkKKyAqIFRGVExJQiBjaGVjay1pbiByZWxhdGVkIGludGVyZmFjZQorICoKKyAqIDAxIDIxIDIwMTQgd2NwdXNlcl9pbnRlZ3JhdG9yCisgKiBbTU9MWTAwMDU0NDc1XSBTR0xURSBvcHRpb24gcmVuYW1lCisgKiAuCisgKgorICogMTIgMjUgMjAxMyBqb2UuY2hhbmcKKyAqIFtNT0xZMDAwNTE0OTddIFtNT0xZXVtOUlNQQ0FdIE5SU1BDQSBwaGFzZSAyIGltcGxlbWVudGF0aW9uCisgKiBbVEZUTElCXSBDaGVjay1pbiByZWxhdGVkIGNoYW5nZXMKKyAqCisgKiAxMSAxOCAyMDEzIGpvZS5jaGFuZworICogW01PTFkwMDA0NTAzM10gW01PTFldW1NNXVtFU01dW1RDTV1bVEZUXVtDdXN0b21dIE5SU1BDQShOSVNQQ0EpIE5ldHdvcmsgUmVxdWVzdGVkL0luaXRpYXRlZCBTZWNvbmRhcnkgUERQIENvbnRleHQgQWN0aXZhdGlvbgorICogQ2hlY2staW4gVEZUTElCIHBhcnQKKyAqCisgKiAxMSAwNiAyMDEzIGpvZS5jaGFuZworICogW01PTFkwMDA0NTMwMl0gW01UNjI5MF1bTFRFXSBURlRMSUIgQVBJIHVwZGF0ZSBmb3IgbXVsdGktY29udGV4dCBwcm9qZWN0CisgKiAJQ2hlY2staW4gVEZUTElCIHBhcnQKKyAqCisgKiAxMCAzMSAyMDEzIGpvZS5jaGFuZworICogW01PTFkwMDA0NDQyM10gW01UNjI5MF0gTmV3IFRGVCBBVCBjb21tYW5kIGRldmVsb3BtZW50IG1lcmdlIGJhY2sgdG8gTU9MWQorICogY2hlY2sgaW4gVEZUTElCIHJlbGF0ZWQgY2hhbmdlCisgKgorICogMDcgMTkgMjAxMyBqb2UuY2hhbmcKKyAqIFtNT0xZMDAwMzA0OTZdIFtNVDYyOTBdW0xURSBNTV1bVEZUTElCXSBBU1NFUlQgcmV2aWV3IHRyYWNlICYgd29yayBhcm91bmQKKyAqIGFkZCB0cmFjZSBlcnJvci93YXJuaW5nICYgd29yayBhcm91bmQKKyAqCisgKiAwNiAxMCAyMDEzIGpvZS5jaGFuZworICogW01PTFkwMDAyNTI4Nl0gW01UNzIwOF1bTlctVUUgU0lNXSBbVEMgMTAuOC4xXSBBVCtDR0NNT0QgRXJyb3IgZHVlIHRvIFRGVCBjb21wb3NlIGlzc3VlCisgKiBURlRMSUIgbW9kaWZpY2F0aW9uIGZvciBBVCtDR1RGVCBpbnRlcnByZXRhdGlvbiAoc3VwcG9ydCBib3RoIGRpZmZlcmVuY2Ugc2V0ICYgZnVsbCBzZXQpCisgKgorICogMTEgMDcgMjAxMiBqb2UuY2hhbmcKKyAqIFtNT0xZMDAwMDUzMjJdIFRBVEFLQSBtZXJnZSB0byBNT0xZCisgKiBbSm9lXSBURlRMSUIgcGFydCBpcyBjaGVjayBpbiBkb25lLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgVEZUTElCX0FQSV9ICisjZGVmaW5lIFRGVExJQl9BUElfSAorCisjaW5jbHVkZSAibDNfaW5jX2VudW1zLmgiCisjaW5jbHVkZSAicHNfcHVibGljX3V0aWxpdHkuaCIJCS8vZm9yIFNCUCBfX1VMX1BGX0NIRUNLX18KKworI2luY2x1ZGUgInRmdGxpYl9jb21tb25fc3RydWN0LmgiCisjaW5jbHVkZSAidGZ0bGliX2NvbW1vbl9lbnVtLmgiCisKKworLyogVEZUIExpYnJhcnkgQVBJIGZvciBWR1NNICovCit0ZnRfdmFsaWRhdGVfcmVzdWx0X2VudW0gdGZ0bGliX3FyX2xlbmd0aF9kZWNvZGUoICAga2FsX3VpbnQzMiAgICAgIGFTaW1JbmR4X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X3BkdV9zdHJ1Y3QgICphcFRmdFJhd19yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MzIgICAgICAqcF9xb3NfcnVsZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICpwX3FmaSk7CisKK3RmdF92YWxpZGF0ZV9yZXN1bHRfZW51bSB0ZnRsaWJfcXJfZGVjb2RlKCAga2FsX3VpbnQzMiAgICAgICAgICAgICAgYVNpbUluZHhfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgYVBkdVNlc3Npb25JZF9yLCAgICAvKiA1Rz1QU0kgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgYVFvc1J1bGVJZF9yLCAgICAgICAvKiA1Rz1RUkkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X2luZm9fc3RydWN0ICAgICAgICAgKmFwVGZ0X3csICAgICAgICAgICAvKiBPVVQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X2ZhaWxfYWN0aW9uX2VudW0gICAgKmFwRmFpbEFjdGlvbl93LCAgICAvKiBPVVQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X3BkdV9zdHJ1Y3QgICAgICAgICAgKmFwVGZ0UmF3X3IsICAgICAgICAvKiBJTiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWFyZXJfdHlwZV9lbnVtICAgICAgICBhQmVhcmVyVHlwZV9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZnRfcHJvY19kaXJfZW51bSAgICAgICBhUHJvY0Rpcl9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZnRfYmVhcmVyX2FjdF9lbnVtICAgICBhQmVhcmVyQWN0X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0ZnRfZW51bSAgICAgICAgICAgICAgIGFFdGZ0X3IpOworCitrYWxfYm9vbCB0ZnRsaWJfc2V0X2FwcGxpZWRfcXIoIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgYVNpbUluZHhfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBhUGR1U2Vzc2lvbklkX3IsICAgICAgICAvKiA1Rz1QU0kgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBhUW9zRmxvd0lkX3IsICAgICAgICAgICAvKiA1Rz1RRkkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBhUW9zUnVsZUlkX3IsICAgICAgICAgICAvKiA1Rz1RUkkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X2luZm9fc3RydWN0ICAgICAgICAgICAgICAgICAqYXBRb3NSdWxlX3IsICAgICAgICAgICAvKiBJTiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWFyZXJfdHlwZV9lbnVtICAgICAgICAgICAgICAgIGFCZWFyZXJUeXBlX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmdF9wcm9jX2Rpcl9lbnVtICAgICAgICAgICAgICAgYVByb2NEaXJfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X2JlYXJlcl9hY3RfZW51bSAgICAgICAgICAgICBhQmVhcmVyQWN0X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9maWx0ZXJfYWN0X2xpc3Rfc3RydWN0ICAgICAgKmFwUGZBY3RMaXN0X3csICAgICAgICAgLyogT1VUICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmdF9kZWFjdF9xcl9saXN0X3N0cnVjdCAgICAgICAgKmFwRGVhY3RRckxpc3RfcncgICAgICAgLyogSU5PVVQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwordGZ0bGliX3FmX2hhc19ydWxlX2VudW0gdGZ0bGliX3FmX2hhc19hbnlfcnVsZSgga2FsX3VpbnQzMiAgYVNpbUluZHhfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAgIGFQZHVTZXNzaW9uSWRfciwgICAgLyogNUc9UFNJICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICBhUW9zRmxvd0lkX3IgICAgICAgIC8qIDVHPVFGSSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwordGZ0X3ZhbGlkYXRlX3Jlc3VsdF9lbnVtIHRmdGxpYl9xcnNfcHJlY2hlY2soICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgYVNpbUluZHhfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmdF9iZWFyZXJfYWN0X2VudW0gICAgIGFCZWFyZXJBY3RfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MTYgICAgICAgICAgICAgIG5vX2F1dGhfcW9zX3J1bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgKmF1dGhfcW9zX3J1bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X2ZhaWxfYWN0aW9uX2VudW0gICAgKmFwRmFpbEFjdGlvbl93ICAgIC8qIE9VVCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwora2FsX2Jvb2wgdGZ0bGliX3NldF9ycV90aW1lciggICBrYWxfdWludDMyICAgICAgYVNpbUluZHhfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgIGFQZHVTZXNzaW9uSWRfciwgICAgLyogNUc9UFNJICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50MzIgICAgICB0MzU4Myk7CisKK2thbF9ib29sIHRmdGxpYl9ycW9zX3NldF9hcHBsaWVkX3FyKGthbF91aW50MzIgIGFTaW1JbmR4X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICBwc2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElOICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICBxZmksICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElOICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICBydWxlX2lkeCwgICAgICAgICAgICAgICAgICAgICAgIC8qIElOICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa3RfZmlsdGVyX2FjdF9lbnVtIGFjdGlvbiwgICAgICAgICAgICAgICAgIC8qIElOICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa3RfZmlsdGVyX3N0cnVjdCogIHBfcGYsICAgICAgICAgICAgICAgICAgIC8qIElOICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa3RfZmlsdGVyX2FjdF9saXN0X3N0cnVjdCAqYXBQZkFjdExpc3RfdyAgIC8qIE9VVCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwora2FsX2Jvb2wgdGZ0bGliX3FyX2dldF9wZl9hY3RfbGlzdCgga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgIGFTaW1JbmR4X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgYVBkdVNlc3Npb25JZF9yLCAgICAvKiA1Rz1QU0kgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9maWx0ZXJfYWN0X2xpc3Rfc3RydWN0ICAqYXBQZkFjdExpc3RfdywgICAgIC8qIE9VVCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICpwTmV4dFFyaSAgICAgICAgICAgLyogSU5PVVQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKK2thbF9ib29sIHRmdGxpYl90ZnRfZ2V0X3BmX2FjdF9saXN0KGthbF91aW50MzIgICAgICAgICAgICAgICAgICBhU2ltSW5keF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIGFCZWFyZXJJZF9yLCAgICAgICAgLyogT1VUICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa3RfZmlsdGVyX2FjdF9saXN0X3N0cnVjdCAgKmFwUGZBY3RMaXN0X3cgICAgICAvKiBPVVQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKK2thbF9ib29sIHRmdGxpYl9zZXRfYXBwbGllZF90ZnRfYnlfZWJpKCBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIGFTaW1JbmR4X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBhQmVhcmVySWRfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZnRfaW5mb19zdHJ1Y3QgICAgICAgICAgICAgICAgICphcFRmdF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlYXJlcl90eXBlX2VudW0gICAgICAgICAgICAgICAgYUJlYXJlclR5cGVfciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X3Byb2NfZGlyX2VudW0gICAgICAgICAgICAgICBhUHJvY0Rpcl9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmdF9iZWFyZXJfYWN0X2VudW0gICAgICAgICAgICAgYUJlYXJlckFjdF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9maWx0ZXJfYWN0X2xpc3Rfc3RydWN0ICAgICAgKmFwUGZBY3RMaXN0X3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X2RlYWN0X2JlYXJlcl9saXN0X3N0cnVjdCAgICAqYXBEZWFjdEJlYXJlckxpc3RfdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRfaW5kX2VudW0gICAgICAgICAgICAgICAgICAgIGFSYXRfcik7CisKK2thbF9ib29sIHRmdGxpYl91cGRhdGVfZGVhY3RfcXJfbGlzdF90b19kZWxfcWYoIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgYVNpbUluZHhfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgYVBkdVNlc3Npb25JZF9yLCAgICAgICAgLyogNUc9UFNJICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGFRb3NGbG93SWRfciwgICAgICAgICAgIC8qIDVHPVFGSSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X2RlYWN0X3FyX2xpc3Rfc3RydWN0ICAgICAgICAqYXBEZWFjdFFyTGlzdF9ydyAgICAgICAvKiBJTk9VVCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworLyogVEZUIExpYnJhcnkgQVBJIGZvciBTTS9FU00gKi8KK3RmdF92YWxpZGF0ZV9yZXN1bHRfZW51bSAgICB0ZnRsaWJfdGZ0X2RlY29kZSggIGthbF91aW50MzIgICAgICAgICAgIGFTaW1JbmR4X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICAgICAgICAgICBhQmVhcmVySWRfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmdF9pbmZvX3N0cnVjdCAgICAgICphcFRmdF93LCAgICAvKmRzdCovIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X3BkdV9zdHJ1Y3QgICAgICAgKmFwVGZ0UmF3X3IsIC8qc3JjKi8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWFyZXJfdHlwZV9lbnVtICAgICBhQmVhcmVyVHlwZV9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X3Byb2NfZGlyX2VudW0gICAgYVByb2NEaXJfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmdF9iZWFyZXJfYWN0X2VudW0gIGFCZWFyZXJBY3RfciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiY21fZW51bSAgICAgICAgICAgICBhQmNtX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGZ0X2VudW0gICAgICAgICAgICBhRXRmdF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0X2luZF9lbnVtICAgICAgICAgYVJhdF9yKTsKKwora2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIHRmdGxpYl90ZnRfZW5jb2RlKCAga2FsX3VpbnQzMiAgICAgICBhU2ltSW5keF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X3BkdV9zdHJ1Y3QgICAqYXBUZnRSYXdfdywgLypkc3QqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X2luZm9fc3RydWN0ICAqYXBUZnRfciwgICAgLypzcmMqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRmdF9lbnVtICAgICAgICBhRXRmdF9yKTsKKwora2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIHRmdGxpYl90ZnRfdmFsaWRhdGUoa2FsX3VpbnQzMiAgICAgICAgIGFTaW1JbmR4X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICAgICAgICAgYUJlYXJlcklkX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWFyZXJfdHlwZV9lbnVtICAgYUJlYXJlclR5cGVfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJjbV9lbnVtICAgICAgICAgICBhQmNtX3IsIC8vIDIwMTMxMTA2X0pvZTogQWRkZWQgdG8gc3VwcG9ydCAyLzNHICdNUy9OVycgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRfaW5kX2VudW0gICAgICAgYVJhdF9yKTsKKwora2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIHRmdGxpYl90ZnRfZGlyX2V4dHJhY3QoIGthbF91aW50MzIgICAgICAgICAgYVNpbUluZHhfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZnRfaW5mb19zdHJ1Y3QgICAgICphcFNyY1RmdF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmdF9pbmZvX3N0cnVjdCAgICAgKmFwRHN0VGZ0X3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGZfZGlyZWN0aW9uX2VudW0gICBhUGZEaXJfcik7CisKK2thbF9ib29sICAgICAgICAgICAgICAgICAgICB0ZnRsaWJfdGZ0X293bl9lbnR5X2V4c3RfY2hrKCAgIGthbF91aW50MzIgICAgICAgICAgICBhU2ltSW5keF9yLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICAgICAgICAgICAgYUJlYXJlcklkX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZl9vd25fZW50aXR5X2VudW0gICAgYVBmT3duRW50aXR5X3IpOworCisKK2thbF9ib29sICAgICAgICAgICAgICAgICAgICB0ZnRsaWJfZGVsX2FwcGxpZWRfcXJfYnlfcHNpKCAgIGthbF91aW50MzIgIGFTaW1JbmR4X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICBhUGR1U2Vzc2lvbklkX3IgICAgLyogSU4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKy8qKgorICogT1VUUFVUOiAgKnFmaSA9IFFGSSB3aGljaCBRUkkgYmVsb25nIHRvLgorICogICAgICAgICAgICAgICA9IFFGSV9OT1RfRk9VTkQgd2hlbiBRUkkgaXMgYWxyZWFkeSBkZWxldGVkLgorICovCitrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgdGZ0bGliX2RlbF9hcHBsaWVkX3FyX2J5X3BzaV9xcmkoICAga2FsX3VpbnQzMiAgYVNpbUluZHhfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICBhUGR1U2Vzc2lvbklkX3IsICAgIC8qIElOICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgcXJpLCAgICAgICAgICAgICAgICAvKiBJTiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAgICpxZmkgICAgICAgICAgICAgICAgLyogT1VUICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworLyoqCisgKiBwTmV4dFFyaTogYXMgSU5QVVQsIFNNIHNldCBOVUxMX1FSSSB3aGVuIHN0YXJ0IHRvIGdldF9wZl9hY3RfbGlzdAorICogICAgICAgICAgIGFzIE9VVFBVVCwgVEZUTElCIHNldCBOVUxMX1FSSSB3aGVuIGZpbmlzaCBnZXRfcGZfYWN0X2xpc3QuCisgKi8KK2thbF9ib29sICAgICAgICAgICAgICAgICAgICB0ZnRsaWJfZGVsX2FwcGxpZWRfcXJfYnlfcHNpX3FmaSggICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgYVNpbUluZHhfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgYVBkdVNlc3Npb25JZF9yLCAgICAvKiBJTiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBxZmksICAgICAgICAgICAgICAgIC8qIElOICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2ZpbHRlcl9hY3RfbGlzdF9zdHJ1Y3QgICphcFBmQWN0TGlzdF93LCAgICAgLyogT1VUICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICpwTmV4dFFyaSAgICAgICAgICAgLyogSU5PVVQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCitrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgdGZ0bGliX2RlbF9hcHBsaWVkX3RmdF9ieV9lYmkoICBrYWxfdWludDMyICBhU2ltSW5keF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgYUJlYXJlcklkX3IgICAgIC8qIElOICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCit2b2lkIHRmdGxpYl9iYWNrdXBfYXBwbGllZF9xcihrYWxfdWludDMyICBhU2ltSW5keF9yKTsKKwordm9pZCB0ZnRsaWJfcmVzdG9yZV9hcHBsaWVkX3FyKGthbF91aW50MzIgIGFTaW1JbmR4X3IpOworCisKKy8qIFRGVCBMaWJyYXJ5IEFQSSBmb3IgVENNICovCitrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgdGZ0bGliX2NvbXBvc2VfYW5kX2VuY29kZV9xcnNfdG9fbncoICBrYWxfdWludDMyICAgICAgICAgICAgICAgIGFTaW1JbmR4X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICAgICAgICAgICAgICAgIGFQZHVTZXNzaW9uSWRfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgYVFvc0Zsb3dJZF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICBhQ2lkX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxcnNfcmF3X3N0cnVjdCAgICAgICAgICAgICphcFFyc1Jhd193LCAgICAvKiBPVVQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmdF9jb21wb3NlX3R5cGVfZW51bSAgICAgYVRmdENvbXBvc2VUeXBlX3IsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVhcmVyX3R5cGVfZW51bSAgICAgICAgICBhQmVhcmVyVHlwZV9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmdfYWN0X2VudW0gICAgICAgICAgICAgICB2Z0FjdGlvbik7CisKK2thbF9ib29sICAgICAgICAgICAgICAgICAgICB0ZnRsaWJfc2V0X2FwcGxpZWRfdGZ0KCBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIGFTaW1JbmR4X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBhQ2lkX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X2luZm9fc3RydWN0ICAgICAgICAgICAgICAgICAqYXBUZnRfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZnRfcHJvY19kaXJfZW51bSAgICAgICAgICAgICAgIGFQcm9jRGlyX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X2JlYXJlcl9hY3RfZW51bSAgICAgICAgICAgICBhQmVhcmVyQWN0X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGt0X2ZpbHRlcl9hY3RfbGlzdF9zdHJ1Y3QgICAgICAqYXBQZkFjdExpc3RfdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZnRfZGVhY3RfYmVhcmVyX2xpc3Rfc3RydWN0ICAgICphcERlYWN0QmVhcmVyTGlzdF93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdF9pbmRfZW51bSAgICAgICAgICAgICAgICAgICAgYVJhdF9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAora2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIHRmdGxpYl9jb21wb3NlX3RmdF90b19udyggICBrYWxfdWludDMyICAgICAgICAgICAgICAgIGFTaW1JbmR4X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgYUNpZF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZnRfaW5mb19zdHJ1Y3QgICAgICAgICAgICphcFRmdF93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZnRfY29tcG9zZV90eXBlX2VudW0gICAgIGFUZnRDb21wb3NlVHlwZV9yLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVhcmVyX3R5cGVfZW51bSAgICAgICAgICBhQmVhcmVyVHlwZV9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZnRfYmVhcmVyX2FjdF9lbnVtICAgICAgIGFCZWFyZXJBY3RfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmNtX2VudW0gICAgICAgICAgICAgICAgICBhQmNtX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdF9pbmRfZW51bSAgICAgICAgICAgICAgYVJhdF9yKTsKKwordm9pZCAgICAgICAgICAgICAgICAgICAgICAgIHRmdGxpYl9kZWxfdGZ0KCBrYWxfdWludDMyICAgICAgICAgIGFTaW1JbmR4X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAgICAgICAgICAgYUNpZF9yLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X2N0eHRfdHlwZV9lbnVtICBhVGZ0Q3R4dFR5cGVfcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgdGZ0bGliX2Noa19iZWFyZXJfcmV1c2FiaWxpdHkoa2FsX3VpbnQzMiAgICAgICAgYVNpbUluZHhfciwgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgY2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlYXJlcl90eXBlX2VudW0gIGJlYXJlcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdF9pbmRfZW51bSAgICAgIHJhdCk7CisKK2thbF9ib29sICAgICAgICAgICAgICAgICAgICB0ZnRsaWJfY29tcG9zZV9hbmRfZW5jb2RlX2RlYWN0X3FyX2xpc3RfdG9fbncoICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgYVNpbUluZHhfciwgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgYVBkdVNlc3Npb25JZF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmdF9kZWFjdF9xcl9saXN0X3N0cnVjdCAgICAqZGVhY3RfcXJfbGlzdCwgLyogSU4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxcnNfcmF3X3N0cnVjdCAgICAgICAgICAgICAgKmFwUXJzUmF3X3cgICAgIC8qIE9VVCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CitrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgdGZ0bGliX3NldF9jaWRfZm9yX2FwcGxpZWRfcXIoICBrYWxfdWludDMyICAgICAgICAgIGFTaW1JbmR4X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICAgICAgICAgIGFQZHVTZXNzaW9uSWRfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAgICAgICAgICAgYVFvc0Zsb3dJZF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICBhQ2lkX3IpOworCitrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgdGZ0bGliX3NldF9jaWRfZm9yX2FwcGxpZWRfdGZ0KCBrYWxfdWludDMyIHNpbV9pZHgsIGthbF91aW50OCBlYmksIGthbF91aW50OCBjaWQpOworCitrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgdGZ0bGliX2NvbnN0cnVjdF9jb250ZXh0X2Zvcl9kZWZhdWx0X2JlYXJlcl93b190ZnQoa2FsX3VpbnQzMiBzaW1faWR4LCBrYWxfdWludDggZWJpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisvKiBURlQgTGlicmFyeSBBUEkgZm9yIEw0QyAqLworCitrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgdGZ0bGliX3NldF91c2VyX2RlZmluZWRfdGZ0KGthbF91aW50MzIgICAgICAgICBhU2ltSW5keF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICAgICAgICAgYUNpZF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZnRfaW5mb19zdHJ1Y3QgICAgKmFwVGZ0X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdF9pbmRfZW51bSAgICAgICBhUmF0X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0ZnRfZW51bSAgICAgICAgICBhRXRmdF9yKTsgLy8gK0NHVEZUIChzZXQtbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgdGZ0bGliX2dldF91c2VyX2RlZmluZWRfdGZ0KGthbF91aW50MzIgICAgICAgICAgICAgYVNpbUluZHhfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICBhQ2lkX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmdF9pbmZvX2xpc3Rfc3RydWN0ICAgKnBfdGZ0X2xpc3QpOyAvLyArQ0dURlQgKHJlYWQtbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgdGZ0bGliX2dldF9hcHBsaWVkX3RmdChrYWxfdWludDMyICAgICAgICAgICBhU2ltSW5keF9yLCAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAgICAgICAgICAgIGFDaWRfciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRmdF9pbmZvX2xpc3Rfc3RydWN0ICpwX3RmdF9saXN0KTsgLy8gK0NHVEZUUkRQCisKK2thbF9ib29sICAgICAgICAgICAgICAgICAgICB0ZnRsaWJfZ2V0X2FwcGxpZWRfcXIgKGthbF91aW50MzIgICAgICAgICAgIGFTaW1JbmR4X3IsICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgICAgICAgYUNpZF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGZ0X2luZm9fbGlzdF9zdHJ1Y3QgKnBfdGZ0X2xpc3QpOyAvLyArQ0dURlRSRFAKKy8vIFRPRE86IE9QVElNSVpFIHN0YWNrIHNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2thbF9ib29sICAgICAgICAgICAgICAgICAgICB0ZnRsaWJfc2V0X3Vzcl9kZWxwZihrYWxfdWludDMyICAgIGFTaW1JbmR4X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICBhQ2lkX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX2Jvb2wgICAgICBxcmlfcHJlc2VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICAgIHFyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYWxfdWludDggICAgIGFQZklkX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0X2luZF9lbnVtICBhUmF0X3IpOyAvLyArRUdERUxQRiAoc2V0LW1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitrYWxfaW50MzIgICAgICAgICAgICAgICAgICAgdGZ0bGliX2dldF91c3JfZGVscGYoa2FsX3VpbnQzMiBhU2ltSW5keF9yLCAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICBhQ2lkX3IsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF9ib29sICAgcXJpX3ByZXNlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICBxcmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAqYXBQZkxzdF93KTsgLy8gK0VHREVMUEYgKHJlYWQtbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICB0ZnRsaWJfY2xlYXJfdXNyX2RlbHBmKGthbF91aW50MzIgICBhU2ltSW5keF9yLCAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAgICBhQ2lkX3IpOyAvLyArRUdERUxQRiAodW5kZWZpbmUtbW9kZSkKKwora2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIHRmdGxpYl9zZXRfdXNyX2xua3BmKGthbF91aW50MzIgICAgIGFTaW1JbmR4X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAgICAgYUNpZF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAgICAgIGFMbmtQZklkX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0X2luZF9lbnVtICAgYVJhdF9yKTsgLy8gK0VHTE5LUEYgKHNldC1tb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAora2FsX2ludDMyICAgICAgICAgICAgICAgICAgIHRmdGxpYl9nZXRfdXNyX2xua3BmKGthbF91aW50MzIgYVNpbUluZHhfciwgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICBhQ2lkX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FsX3VpbnQ4ICAqYXBMbmtQZkxzdF93KTsgLy8gK0VHTE5LUEYgKHJlYWQtbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK3ZvaWQgICAgICAgICAgICAgICAgICAgICAgICB0ZnRsaWJfY2xlYXJfdXNyX2xua3BmKGthbF91aW50MzIgICBhU2ltSW5keF9yLCAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthbF91aW50OCAgICBhQ2lkX3IpOyAvLyArRUdMTktQRiAodW5kZWZpbmUtbW9kZSkKKwordm9pZCAgICAgICAgICAgICAgICAgICAgICAgIHRmdGxpYl9mcmVlX3BmX2FjdF9saXN0X2N0cmxfYnVmZihwa3RfZmlsdGVyX2FjdF9saXN0X3N0cnVjdCAqYXBQZkFjdExpc3Rfdyk7CisKK2thbF9ib29sIHRmdGxpYl90ZnRfY29udGV4dF9pbml0KHZvaWQpOwora2FsX2Jvb2wgdGZ0bGliX3RmdF9jb250ZXh0X3Jlc2V0KHZvaWQpOworI2VuZGlmIC8qIFRGVExJQl9BUElfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3RmdGxpYl9jb21tb25fZW51bS5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3RmdGxpYl9jb21tb25fZW51bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOWEzY2QKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdGZ0bGliX2NvbW1vbl9lbnVtLmgKQEAgLTAsMCArMSw2MDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxMgorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICB0ZnRsaWJfY29tbW9uX2VudW0uaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgVEZUIGxpYnJhcnkgY29tbW9uIGVudW0gJiBkZWZpbmUgY29uc3RhbnRzCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAkTG9nJAorICoKKyAqIDA4IDEyIDIwMjAgdGVyZW5jZS5rdW8KKyAqIFtNT0xZMDA1NTczMThdIFtNVDY4NzVdW01hcmdhdXhdW1EwXVtSM11bTVA2XVtTUUNdW0ludGVybmFsXVtXVyBGVF1bQ2hpbmFdW1F1emhvdV1bNUdNTV1bTURTVF1bU1dJRlRdW1NdW0NNQ0MrSW52YWxpZF1bRXJyb3IgdGltZXM6MV1TeXN0ZW0gQVBJIER1bXAsMTE2NSwyOSw5OSwvZGF0YS92ZW5kb3IvY29yZS8sMSwsbXRrcmlsZDpBVCBjb21tYW5kIHBlbmRpbmcgdG9vIGxvbmcuIGFzc2VydCEhISBBVCBjbWQ6IEVBUE5BQ1QudGltZXI6IDkwMDAwMG1zCisgKiAuIFByb3ZpZGUgYSBuZXcgQVBJIHdoaWNoIGNvbnN0cnVjdHMgY29udGV4dCBmb3IgZGVmYXVsdCBiZWFyZXIgd2l0aG91dCB0ZnQgdG8gVENNLgorICoKKyAqIDA0IDE1IDIwMjAgdGVyZW5jZS5rdW8KKyAqIFtNT0xZMDA1MDgyNDFdIE1lbW9yeSByZWR1Y3Rpb24gLSBsNCBwcyBjaWQgcmVkdWN0aW9uIGFuZCByZWR1Y2UgbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydCBmbG93CisgKiAxLiBTdXBwb3J0IHNldHRpbmcgbnVsbCBmb3IgcGZfYWN0X2xpc3QgcGFyYW1ldGVyLgorICogMi4gU3VwcG9ydCBxb3MgZmxvdyBkZWFjdGl2YXRpb24uCisgKiAzLiBSZWNvcmQgcXIncyBwcmVjZWRlbmNlIGludG8gY29udGV4dCBpbiB0ZnRsaWJfc2V0X3VzZXJfZGVmaW5lZF90ZnQoKSBpZiByYXRlIGlzIDVnLgorICogNC4gQWRkIHByaW1pdGl2ZSB0cmFjZXMgdG8gcmVjb3JkIGN1cnJlbnQgYXBwbGllZCBxci8gdGZ0IHN0YXR1cyBmb3IgYW5hbHlzaXMuCisgKiA1LiB0cmFjZSBlbmhhbmNlbWVudAorICoKKyAqIDA0IDExIDIwMjAgdGVyZW5jZS5rdW8KKyAqIFtNT0xZMDA1MDgyNDFdIE1lbW9yeSByZWR1Y3Rpb24gLSBsNCBwcyBjaWQgcmVkdWN0aW9uIGFuZCByZWR1Y2UgbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydCBmbG93CisgKiAJCisgKiAuIHRyYWNlIGVuaGFuY2VtZW50CisgKgorICogMDQgMDYgMjAyMCB0ZXJlbmNlLmt1bworICogW01PTFkwMDUwODI0MV0gTWVtb3J5IHJlZHVjdGlvbiAtIGw0IHBzIGNpZCByZWR1Y3Rpb24gYW5kIHJlZHVjZSBtYXhpbXVtIG51bWJlciBvZiBzdXBwb3J0IGZsb3cKKyAqIC4gQWRkIHByaW1pdGl2ZSB0cmFjZXMgdG8gcmVjb3JkIGN1cnJlbnQgYXBwbGllZCBxci8gdGZ0IHN0YXR1cyBmb3IgYW5hbHlzaXMuCisgKgorICogMDkgMjMgMjAxOSB0ZXJlbmNlLmt1bworICogW01PTFkwMDQ0MjUwNV0gVXBkYXRlIGZvciBNYXJjaCBDUiBhbmQgdHJhY2UgZW5oYW5jZW1lbnRzLgorICogCQorICogLiBVcGRhdGUgZm9yIE1hcmNoIENSIGFuZCB0cmFjZSBlbmhhbmNlbWVudHMuCisgKgorICogMDkgMDQgMjAxOSB0ZXJlbmNlLmt1bworICogW01PTFkwMDQzNDc1NF0gVXBncmFkZSBDR1RGVCB0byBzdXBwb3J0IDVHQworICogCQorICogLiBVcGRhdGUgQ0dURlQgYmVoYXZpb3JzIGluIHRmdGxpYi4KKyAqCisgKiAwNiAyNiAyMDE5IHRlcmVuY2Uua3VvCisgKiBbTU9MWTAwNDE2MzE0XSBGaXggVVRNRCB0cmFjZSBBUEkgc2V0dGluZyBlcnJvcgorICogCQorICogCS4gRml4IFVUTUQgQVBJIHNldHRpbmcgZXJyb3IuCisgKgorICogMDQgMTkgMjAxOSBqZWZmZXJ5LmNoZW4KKyAqIFtNT0xZMDAzOTk5OTNdIFtHZW45N11bVk1PTFldIGludGVyd29ya2luZyB3aXRoTjI2IGZlYXR1cmVzCisgKiAJCisgKiAJW1RGVExJQl0gdHdvIHBhcmFtcyBkZXZlbG9wbWVudC4KKyAqCisgKiAwMyAyNiAyMDE5IGplZmZlcnkuY2hlbgorICogW01PTFkwMDM5MzQ1Nl0gW0dlbjk3XVtWTU9MWV0gNDVHIEludGVyUkFUICYgaW50ZXJTeXN0ZW0gZmVhdHVyZQorICogCQorICogCVtURlRMSUJdIGludGVyZmFjZSBwYXJ0LgorICoKKyAqIDAzIDI2IDIwMTkgamVmZmVyeS5jaGVuCisgKiBbTU9MWTAwMzkzNDU2XSBbR2VuOTddW1ZNT0xZXSA0NUcgSW50ZXJSQVQgJiBpbnRlclN5c3RlbSBmZWF0dXJlCisgKiAJCisgKiAJW1RGVExJQl0gaW50ZXJmYWNlIHBhcnQuCisgKgorICogMTIgMTQgMjAxOCBqZWZmZXJ5LmNoZW4KKyAqIFtNT0xZMDAzNzI2MzVdIFtWTU9MWV0gTDQvVENNL1RGVExJQi9WR1NNIHBoYXNlMiBjaGVjay1pbgorICogCQorICogCVtURlRMSUJdIHBoYXNlMiBjaGVjay1pbi4KKyAqCisgKiAwOSAxNCAyMDE4IGplZmZlcnkuY2hlbgorICogW01PTFkwMDMwNjE0OF0gW05BU10gcGFuZ3UgZ2lhbnQgQ1IKKyAqIAkKKyAqIAlbVEZUTElCXSBwYXNzIDFzdCBOQVMgTW9ESVMgSVQuCisgKgorICogMDggMjggMjAxOCBqZWZmZXJ5LmNoZW4KKyAqIFtNT0xZMDAzMDYxNDhdIFtOQVNdIHBhbmd1IGdpYW50IENSCisgKiBbVEZUTElCXSBmaXggbm9uLWdlbWluaSBidWlsZCBlcnJvci4KKyAqCisgKiAwOCAxNyAyMDE4IGplZmZlcnkuY2hlbgorICogW01PTFkwMDMwNjE0OF0gW05BU10gcGFuZ3UgZ2lhbnQgQ1IKKyAqIFtURlRMSUJdIHJlLWFyY2hpdGVjdHVyZS4KKyAqCisgKiAwOCAxNyAyMDE4IGplZmZlcnkuY2hlbgorICogW01PTFkwMDMwNjE0OF0gW05BU10gcGFuZ3UgZ2lhbnQgQ1IKKyAqIAkKKyAqIAlbVEZUTElCXSByZS1hcmNoaXRlY3R1cmUuCisgKgorICogMDYgMjcgMjAxOCB3aWxseS13ai5jaGVuCisgKiBbTU9MWTAwMzMwNjc2XVtTRTggSW50ZXJuYWwgVGVzdF1bTVQzOTY3XVtVTU9MWUVdW1ByZS1NVEJGXVsyMDE4LzA2LzAxLTA2LzA0XVtBU1NFUlRdIGZpbGU6bWN1L3Byb3RvY29sL25hc19tdWx0aW1vZGUvdGZ0X3BmL3RmdF9wZi5jIGxpbmU6MjA3OC4KKyAqCisgKiAxMCAxNiAyMDE2IHJlbmh1YW5nLmxpdQorICogW01PTFkwMDIwNTAzNV1bVEZUTElCXSBNZW1vcnkgbWFuYWdlbWVudCBpbiBURlQgaW50ZXJuYWwKKyAqCisgKiAxMSAxNyAyMDE0IGplZmZlcnkuY2hlbgorICogW01PTFkwMDA4NDYzNF0gW1VNT0xZXVtSMTBdW1IxMV0gTkFTIGNoZWNrLWluIGZyb20gNjI5MV9ERVYgdG8gVU1PTFkKKyAqIFtSMTBdW1IxMV0gTkFTIGNoZWNrLWluIGZyb20gNjI5MV9ERVYgdG8gVU1PTFkKKyAqCisgKiAwMyAwNiAyMDE0IGpvZS5jaGFuZworICogW01PTFkwMDA1ODQxMl0gW01PTFldIFRGVCB2YWxpZGF0ZSByZXZpc2lvbgorICogW0VTTS9URlRMSUJdIE1vZGlmaWNhdGlvbiBmb3QgIlRGVCB2YWxpZGF0ZSIgYW5kICJQUyBpbml0IGRlYWN0aXZhdGlvbiIKKyAqCisgKiAwMSAyOSAyMDE0IGpvZS5jaGFuZworICogW01PTFkwMDA1NTMzNF0gW01UNjI5MF1bU0dMVEUgRFNEU10gTmV3IGZlYXR1cmUgY2hlY2staW4gTU9MWQorICogW1RGVExJQl0gTW9kaWZ5IGNvbXBpbGUgb3B0aW9ucyBmb3IgR0VNSU5JICh0d2VhaykKKyAqCisgKiAwMSAyOSAyMDE0IGpvZS5jaGFuZworICogW01PTFkwMDA1NTMzNF0gW01UNjI5MF1bU0dMVEUgRFNEU10gTmV3IGZlYXR1cmUgY2hlY2staW4gTU9MWQorICogW1RGVExJQl0gTW9kaWZ5IGNvbXBpbGUgb3B0aW9ucyBmb3IgR0VNSU5JCisgKgorICogMDEgMjkgMjAxNCBqb2UuY2hhbmcKKyAqIFtNT0xZMDAwNTUzMzRdIFtNVDYyOTBdW1NHTFRFIERTRFNdIE5ldyBmZWF0dXJlIGNoZWNrLWluIE1PTFkKKyAqIFRGVExJQiBjaGVjay1pbiByZWxhdGVkIGludGVyZmFjZQorICoKKyAqIDAxIDIxIDIwMTQgd2NwdXNlcl9pbnRlZ3JhdG9yCisgKiBbTU9MWTAwMDU0NDc1XSBTR0xURSBvcHRpb24gcmVuYW1lCisgKiAuCisgKgorICogMTIgMzEgMjAxMyBqb2UuY2hhbmcKKyAqIFtNT0xZMDAwNTIxMzVdIFtNVDYyOTBdIFRGVCBwYWNrZXQgZmlsdGVyIG51bWJlciBoYW5kbGluZyBpbXByb3ZlbWVudAorICogW1RGVExJQl0gQ2hlY2staW4gcmVsYXRlZCBjaGFuZ2VzCisgKgorICogMTIgMjUgMjAxMyBqb2UuY2hhbmcKKyAqIFtNT0xZMDAwNTE0OTddIFtNT0xZXVtOUlNQQ0FdIE5SU1BDQSBwaGFzZSAyIGltcGxlbWVudGF0aW9uCisgKiBbVEZUTElCXSBDaGVjay1pbiByZWxhdGVkIGNoYW5nZXMKKyAqCisgKiAxMSAxOCAyMDEzIGpvZS5jaGFuZworICogW01PTFkwMDA0NTAzM10gW01PTFldW1NNXVtFU01dW1RDTV1bVEZUXVtDdXN0b21dIE5SU1BDQShOSVNQQ0EpIE5ldHdvcmsgUmVxdWVzdGVkL0luaXRpYXRlZCBTZWNvbmRhcnkgUERQIENvbnRleHQgQWN0aXZhdGlvbgorICogQ2hlY2staW4gVEZUTElCIHBhcnQKKyAqCisgKiAxMSAwNiAyMDEzIGpvZS5jaGFuZworICogW01PTFkwMDA0NTMwMl0gW01UNjI5MF1bTFRFXSBURlRMSUIgQVBJIHVwZGF0ZSBmb3IgbXVsdGktY29udGV4dCBwcm9qZWN0CisgKiAJQ2hlY2staW4gVEZUTElCIHBhcnQKKyAqCisgKiAxMCAzMSAyMDEzIGpvZS5jaGFuZworICogW01PTFkwMDA0NDQyM10gW01UNjI5MF0gTmV3IFRGVCBBVCBjb21tYW5kIGRldmVsb3BtZW50IG1lcmdlIGJhY2sgdG8gTU9MWQorICogY2hlY2sgaW4gVEZUTElCIHJlbGF0ZWQgY2hhbmdlCisgKgorICogMTAgMjMgMjAxMyBqb2UuY2hhbmcKKyAqIFtNT0xZMDAwNDIzMDddIFtrbG9jd29ya185NV1bTFRFXSBpbiB0ZnRsaWJfaW50ZXJuYWxfYXBpLmMsIGxpbmUgNDEzCisgKiBbVEZUTElCXSBjaGVja2luIG1pc3NpbmcgaGVhZGVyIGZpbGUKKyAqCisgKiAxMCAwMSAyMDEzIG1vamEuaHN1CisgKiBbTU9MWTAwMDM5Njg2XSBbTVQ2MjkwRTFdW0VyaWNzc29uXVtQcmUtSU9UXVtNTV0gVEMgNy4yLjMuNC4zMCBBc3NlcnQgYXQgdGZ0X3BmIzcxOQorICogZHJvcCBjb3JydXB0ZWQgZnJhZ21lbnQgdjYgcGFja2V0LgorICoKKyAqIDA3IDE5IDIwMTMgam9lLmNoYW5nCisgKiBbTU9MWTAwMDMwNDk2XSBbTVQ2MjkwXVtMVEUgTU1dW1RGVExJQl0gQVNTRVJUIHJldmlldyB0cmFjZSAmIHdvcmsgYXJvdW5kCisgKiBhZGQgdHJhY2UgZXJyb3Ivd2FybmluZyAmIHdvcmsgYXJvdW5kCisgKgorICogMDYgMTAgMjAxMyBqb2UuY2hhbmcKKyAqIFtNT0xZMDAwMjUyODZdIFtNVDcyMDhdW05XLVVFIFNJTV0gW1RDIDEwLjguMV0gQVQrQ0dDTU9EIEVycm9yIGR1ZSB0byBURlQgY29tcG9zZSBpc3N1ZQorICogVEZUTElCIG1vZGlmaWNhdGlvbiBmb3IgQVQrQ0dURlQgaW50ZXJwcmV0YXRpb24gKHN1cHBvcnQgYm90aCBkaWZmZXJlbmNlIHNldCAmIGZ1bGwgc2V0KQorICoKKyAqIDA1IDI3IDIwMTMgam9lLmNoYW5nCisgKiBbTU9MWTAwMDIzNzg5XSBbTVQ2MjkwXVtURlRMSUJdIE5ldyBhcmNoaXRlY3R1cmUgJiBFTSBzdXBwb3J0CisgKiBURlRMSUIgcGFydCBjaGVjay1pbgorICoKKyAqIDA1IDA2IDIwMTMgam9lLmNoYW5nCisgKiBbTU9MWTAwMDIxNTQyXSBUcmFjZSByZXZpc2lvbiBtZXJnZSBiYWNrIHRvIE1PTFkKKyAqIFtURlRMSUJdIHJldmlzZSB0cmFjZQorICoKKyAqIDA0IDEyIDIwMTMgam9lLmNoYW5nCisgKiBbTU9MWTAwMDE0MTk3XSBURlRMSUIgbmV3IGZlYXR1cmUKKyAqIFtNVDYyOTBdW1RGVExJQl0gdXBkYXRlIFRGVCBwYXJhbWV0ZXIgbGlzdCB3aXRoIG5ldyBzdHJ1Y3R1cmUKKyAqCisgKiAwMiAwNSAyMDEzIGJlbmphbWluLmt1bworICogW01PTFkwMDAwOTE2M10gTFRFIE11bHRpbW9kZSBtZXJnZSBiYWNrIHRvIE1PTFkKKyAqIFJlbmFtZSBNVDcyMDggdG8gTVQ2MjkwIGluIENSIHRpdGxlLgorICoKKyAqIDAxIDI0IDIwMTMgam9lLmNoYW5nCisgKiBbTU9MWTAwMDA5MTYzXSBMVEUgTXVsdGltb2RlIG1lcmdlIGJhY2sgdG8gTU9MWQorICogVEZUTElCIG1lcmdlIGZyb20gUHJlSVQgdG8gTU9MWSB0cnVuaworICoKKyAqIDEyIDA0IDIwMTIgam9lLmNoYW5nCisgKiBbTU9MWTAwMDA3MDUxXSBbTVQ2MjkwXVtMVEUgU2luZ2xlIE1vZGVdIGVudW0gcmVuYW1lICYgbWVtb3J5IGFsbG9jYXRpb24gbWVjaGFuc2ltIGNoYW5nZQorICoKKyAqIDExIDA3IDIwMTIgam9lLmNoYW5nCisgKiBbTU9MWTAwMDA1MzIyXSBUQVRBS0EgbWVyZ2UgdG8gTU9MWQorICogW0pvZV0gVEZUTElCIHBhcnQgaXMgY2hlY2sgaW4gZG9uZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFRGVExJQl9DT01NT05fRU5VTV9IXworI2RlZmluZSBURlRMSUJfQ09NTU9OX0VOVU1fSF8KKworI2luY2x1ZGUgInBzX3B1YmxpY19lbnVtX3B1YmxpYy5oIgorCisjZGVmaW5lIFRGVExJQl9NQVgoeCwgeSkJCQkJKCh4KSA+ICh5KSA/ICh4KSA6ICh5KSkKKworLyogVEZUIGdsb2JhbCBzZXR0aW5nICovCisjZGVmaW5lIFRGVExJQl9NQVhfRklDX05VTSAgICAgICAgICBNQVhfTlVNX09GX1NVUFBPUlRFRF9RT1NfRkxPVworI2RlZmluZSBURlRMSUJfTUFYX1FSX05VTV9QRVJfUERVUyAgTUFYX05VTV9PRl9TVVBQT1JURURfUU9TX1JVTEVfUEVSX1BEVVMKKyNkZWZpbmUgVEZUTElCX01BWF9RUl9OVU0gICAgICAgICAgIE1BWF9OVU1fT0ZfU1VQUE9SVEVEX1FPU19SVUxFCisjZGVmaW5lIFRGVExJQl9NQVhfUlFPU19OVU0gICAgICAgICBNQVhfTlVNX09GX1NVUFBPUlRFRF9SUU9TX1JVTEUKKy8vI2RlZmluZSBURlRMSUJfTUFYX0VQU0JfTlVNICAgICAgICAgTUFYX05VTV9PRl9TVVBQT1JURURfRVBTQgorCisvKiBDb21tb24gZGVmaW5lIGNvbnN0YW50ICovCisjZGVmaW5lIE1BWF9QQUNLRVRfRklMVEVSX05VTSAgICAgICAgICAgICAgICAgIDE2ICAgLy8gVGhpcyBudW1iZXIgaXMgZGVmaW5lZCBpbiAzR1BQLCBUUyAyNC4wMDgsIDEwLjUuNi4xMgorI2RlZmluZSBNQVhfUEFDS0VUX0ZJTFRFUl9OVU1fSU5fVFJBTlNBQ1RJT04gICAxNSAgIC8vIFRoaXMgbnVtYmVyIGlzIGRlZmluZWQgaW4gM0dQUCwgVFMgMjQuMDA4LCAxMC41LjYuMTIKKyNkZWZpbmUgTUFYX1BBQ0tFVF9GSUxURVJfTlVNX1NVUFBPUlRfQllfTlcgICAgMTYgICAvLyBUT0RPOiBNb2RpZnkgdGhpcyB0byBnbG9iYWwgdmFyaWFibGUsIHdoaWNoIGNhbiBiZSBydW4tdGltZSBhZGp1c3RlZAorI2RlZmluZSBNSU5fUEFDS0VUX0ZJTFRFUl9JRCAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNQVhfUEFDS0VUX0ZJTFRFUl9JRCAgICAgICAgICAgICAgICAgICAxNQorCisjZGVmaW5lIE1BWF9QQUNLRVRfRklMVEVSX1BSRUNFRF9OVU0gICAgICAgICAgMjU2CisjZGVmaW5lIE1JTl9QQUNLRVRfRklMVEVSX1BSRUNFRF9JRFggICAgICAgICAgICAwCisjZGVmaW5lIE1BWF9QQUNLRVRfRklMVEVSX1BSRUNFRF9JRFggICAgICAgICAgMjU1CisKKyNkZWZpbmUgUUZJX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAgICAgIDB4QkUKKyNkZWZpbmUgTlVMTF9FQkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTlVMTF9RUkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworI2RlZmluZSBUT1RBTF9RUklfTlVNICAgICAgICAgICAgICAgICAgICAgICAgIDI1NgorI2RlZmluZSBNSU5fUVJJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNQVhfUVJJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NQorCisjZGVmaW5lIE1BWF9SRU1PVEVfQUREUl9BTkRfTUFTS19MRU4gICAgICAgICAgIDMyCisjZGVmaW5lIE1BWF9MT0NBTF9BRERSX0FORF9NQVNLX0xFTiAgICAgICAgICAgIDMyCisjZGVmaW5lIE1BWF9MT0NBTF9BRERSX0FORF9QUkVGSVhfTEVOICAgICAgICAgIDE3CisjZGVmaW5lIE1BWF9URlRfTEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1CisjZGVmaW5lIFBBQ0tFVF9GSUxURVJfSURfTEVOICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgTUFYX1FPU19SVUxFU19MRU4gICAgICAgICAgICAgICAgICAgICAgIE1BWF9URlRfTEVOICogTUFYX05VTV9PRl9TVVBQT1JURURfUU9TX1JVTEVfUEVSX1BEVVMgICAgLy8gMjU1KjgKKworI2RlZmluZSBURlRMSUJfTUlOX0JFQVJFUl9JRCAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBURlRMSUJfTUFYX0JFQVJFUl9JRCAgICAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBURlRMSUJfTUFYX0JFQVJFUl9JRF9UT1RBTF9OVU0gICAgICAgICAxNgorI2RlZmluZSBURlRMSUJfTUFYX0JFQVJFUl9DVFhUX05VTSAgICAgICAgICAgICAxMQorCisjZGVmaW5lIFRGVExJQl9NQVhfREVBQ1RfTElTVF9OVU0gICAgICAgICAgICAgICBURlRMSUJfTUFYKFRGVExJQl9NQVhfQkVBUkVSX0NUWFRfTlVNLCBURlRMSUJfTUFYX1FSX05VTSkKKyNkZWZpbmUgVEZUTElCX0RFQUNUX0xJU1RfVE9UQUxfTlVNICAgICAgICAgICAgIFRGVExJQl9NQVgoVEZUTElCX01BWF9CRUFSRVJfSURfVE9UQUxfTlVNLCBUT1RBTF9RUklfTlVNKQorCisjZGVmaW5lIFRGVExJQl9TSU1fRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAweEZGCisKKyNkZWZpbmUgVEZUTElCX1NJTTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNpZiBkZWZpbmVkKF9fR0VNSU5JX18pCisjZGVmaW5lIFRGVExJQl9TSU0yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjaWYgKEdFTUlOSV9QTFVTID49IDMpCisjZGVmaW5lIFRGVExJQl9TSU0zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZW5kaWYgLyogR0VNSU5JX1BMVVMgPj0gMyAqLworI2lmIChHRU1JTklfUExVUyA+PSA0KQorI2RlZmluZSBURlRMSUJfU0lNNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMworI2VuZGlmIC8qIEdFTUlOSV9QTFVTID49IDQgKi8KKyNlbmRpZiAvKiBfX0dFTUlOSV9fICovCisKKyNkZWZpbmUgVEZUTElCX01BWF9QRl9OVU1fSU5fUE9PTCAgICAgICAgIDY0ICAvL21heCA4IGJlYXJlciBzaW11bHRhbmVvdXNseSBhbmQgYXNzdW1lIDggcGYgZm9yIGVhY2ggYmVhcmVyLgorI2RlZmluZSBURlRMSUJfTUFYX1BGX05VTSAgICAgICAgICAgICAgICAgMjU2IC8vbWF4IDggYmVhcmVyIHNpbXVsdGFuZW91c2x5IGFuZCBlYWNoIGJlYXJlciBoYXMgMiBURlQgKHVzZXIgZGVmaW5lZCBhbmQgYXBwbGllZCksIGVhY2ggVEZUIGhhcyAxNiBwZjsgOCoyKjE2PTI1NiBQRgorI2RlZmluZSBURlRMSUJfUkVTRVJWRURfUEZfTlVNICAgICAgICAgICAgMTYgIC8vaW4gdGZ0bGliX3NldF9hcHBsaWVkX3RmdCgpLCBhIG5ldyB0ZnRfaW5mb19zdHJ1Y3QgaXMgZHVwbGljYXRlZCwgYW5kIGV4dHJhIHBmIHNwYWNlIGlzIHJlcXVpcmVkLgorI2RlZmluZSBURlRMSUJfTUFYX1BGX0lOX0NUUkxfQlVGX05VTSAgICAgKFRGVExJQl9NQVhfUEZfTlVNIC0gVEZUTElCX01BWF9QRl9OVU1fSU5fUE9PTCArIFRGVExJQl9SRVNFUlZFRF9QRl9OVU0pIAorI2RlZmluZSBURlRMSUJfTUFYX05PTl9QRl9JTl9DVFJMX0JVRl9OVU0gMTYgIC8vYWxsb2NhdGUgbWVtb3J5IGZyb20gY3RybCBidWYgZm9yIG90aGVyIHB1cnBvc2UgKG5vdCBQRikKKworI2RlZmluZSBURlRMSUJfUEZfQklUTUFQX1VOSVQgICAgICAgICAgICAgMzIgIC8vYmVjYXVzZSB0eXBlIG9mIHBmX2lzX29jY3VwaWVkIGlzIGthbF91aW50MzIsIHdoaWNoIGlzIDMyIGJpdAorCisjZGVmaW5lIFRGVExJQl9RT1NfUlVMRV9QUkVDRURFTkNFX1JFU0VSVkVEICAgODAKKworI2RlZmluZSBURlRMSUJfUlFPU19UU1RBTVBfVUlOVCAgICAgMjAwIC8vbXMgKHRpbWUgc3RhbXAgdW5pdCkKKworLyogUGFja2V0IGZpbHRlciBjb21wb25lbnQgbGVuZ3RoIChvY3RldCkgZGVmaW5lICovCisjZGVmaW5lIElQVjRfUkVNT1RFX0FERFJfQU5EX01BU0tfTEVOICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgSVBWNF9MT0NBTF9BRERSX0FORF9NQVNLX0xFTiAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBJUFY2X1JFTU9URV9BRERSX0FORF9NQVNLX0xFTiAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIElQVjZfUkVNT1RFX0FERFJfQU5EX1BSRUZJWF9MRU4gICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgSVBWNl9MT0NBTF9BRERSX0FORF9NQVNLX0xFTiAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBJUFY2X0xPQ0FMX0FERFJfQU5EX1BSRUZJWF9MRU4gICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIElQVjZfTE9DQUxfQUREUl9MRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSVBWNl9MT0NBTF9NQVNLX0xFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBJUFY2X0xPQ0FMX1BSRUZJWF9MRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBST1RPQ09MX0lEX05FWFRfSEVBREVSX0xFTiAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU0lOR0xFX0xPQ0FMX1BPUlRfTEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBMT0NBTF9QT1JUX1JBTkdFX0xFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFNJTkdMRV9SRU1PVEVfUE9SVF9MRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgIAorI2RlZmluZSBSRU1PVEVfUE9SVF9SQU5HRV9MRU4gICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFNFQ1VSSVRZX1BBUkFNRVRFUl9JRF9MRU4gICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVFlQRV9PRl9TRVJWSUNFX1RSQUZGSUNfQ0xBU1NfQU5EX01BU0tfTEVOICAgICAgMgorI2RlZmluZSBGTE9XX0xBQkVMX0xFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIE1BVENIX0FMTF9MRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyogUGFyYW1ldGVyIGxpc3QgZGVmaW5lICovCisjZGVmaW5lIE1BWF9BVVRIVE9LRU5fRkxPV0lEX05VTSAgICAgICAgICAgICAgICA0ICAgICAgIC8vIHRlbXAgbWF4IG51bSAoVFMgMjQuMDA4IDEwLjUuMTYyIGRvZXMgbm90IHJlc3RyaWN0IGl0cyBtYXggbnVtYmVyLi4uKQorI2RlZmluZSBNQVhfUEFSQU1FVEVSX0xJU1RfTlVNICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBNQVhfUEFSQU1FVEVSX0xJU1RfU0laRSAgICAgICAgICAgICAgIDI1NQorI2RlZmluZSBNQVhfQVVUSE9SSVpBVElPTl9UT0tFTl9MRU4gICAgICAgICAgICAxNiAgICAgICAvLyB0ZW1wIG1heCBsZW5ndGggKGl0IGNvdWxkIGJlIHZlcnkgbG9uZy4uLikKKyNkZWZpbmUgTUFYX0ZMT1dfSURFTlRJRklFUl9OVU0gICAgICAgICAgICAgICAgIDQgICAgICAgLy8gdGVtcCBtYXggbnVtIChUUyAyNC4wMDggMTAuNS4xNjIgZG9lcyBub3QgcmVzdHJpY3QgaXRzIG1heCBudW1iZXIuLi4pCisjZGVmaW5lIEZMT1dfSURFTlRJRklFUl9MRU4gICAgICAgICAgICAgICAgICAgICA0CisKKy8qIFRlbXAgZGVmaW5lIGNvbnN0YW50ICovCisjZGVmaW5lIE1BWF9QRl9DT01QX1RZUEVfTlVNICAgICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIE1BWF9QQUNLRVRfRklMVEVSX0NPTlRFTlRfTEVOICAgICAgICAgIDQ3CisjZGVmaW5lIE1BWF9URlRfUERVX0VOQ09ERV9MRU4gICAgICAgICAgICAgICAgIDE1MDAKKworLyogZGVmaW5lIGNvbnN0YW50cyBmb3IgQklUTUFQICovCisjZGVmaW5lIEJNUF9OT05FICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBCTVBfVjRfQUREUiAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQk1QX1Y2X0FERFIgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEJNUF9QUk9UT0NPTCAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBCTVBfTE9DQUxfUE9SVF9TSU5HTEUgIDB4MDAwMDAwMDgKKyNkZWZpbmUgQk1QX0xPQ0FMX1BPUlRfUkFOR0UgICAweDAwMDAwMDEwCisjZGVmaW5lIEJNUF9SRU1PVEVfUE9SVF9TSU5HTEUgMHgwMDAwMDAyMAorI2RlZmluZSBCTVBfUkVNT1RFX1BPUlRfUkFOR0UgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQk1QX1NQSSAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEJNUF9UT1MgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBCTVBfRkxPV19MQUJFTCAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQk1QX1Y0X0xPQ0FMX0FERFIgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEJNUF9WNl9MT0NBTF9BRERSICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBCTVBfTUFUQ0hfQUxMICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQk1QX0VNUFRZX1RDUF9BQ0sgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIEJNUF9JUF9GUkFHTUVOVCAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBCTVBfSVBfRlJBR01FTlRfRklSU1QgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQk1QX0lQX0ZSQUdNRU5UX01JRCAgICAweDAyMDAwMDAwCisjZGVmaW5lIEJNUF9JUF9GUkFHTUVOVF9MQVNUICAgMHgwNDAwMDAwMCAKKyNkZWZpbmUgQk1QX0lQX0ZSQUdNRU5UX05PVCAgICAweDA4MDAwMDAwCisjZGVmaW5lIEJNUF9DT1JSVVBURUQgICAgICAgICAgMHgyMDAwMDAwMAorCisvKiBlbnVtIGRlY2xhcmF0aW9uICovCit0eXBlZGVmIGVudW0geworICAgIFRGVF9DVFhUX1RZUEVfREVGSU5FRF9URlQgPSAwLAorICAgIFRGVF9DVFhUX1RZUEVfQVBQTElFRF9URlQsCisgICAgVEZUX0NUWFRfVFlQRV9BUFBMSUVEX1FSLAorICAgIFRGVF9DVFhUX1RZUEVfQVBQTElFRF9SUU9TLAorICAgIFRGVF9DVFhUX1RZUEVfREVGSU5FRF9RUiwKKyAgICBURlRfQ1RYVF9UWVBFX0FMTAorfSB0ZnRfY3R4dF90eXBlX2VudW07CisKK3R5cGVkZWYgZW51bSB7CisgICAgVEZUX1BST0NfRElSX05PTkUgPSAwLCAgLy8gMHgwMAorICAgIFRGVF9QUk9DX0RJUl9NTywgICAgICAgIC8vIDB4MDEKKyAgICBURlRfUFJPQ19ESVJfTVQsICAgICAgICAvLyAweDAyCit9IHRmdF9wcm9jX2Rpcl9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIFRGVF9CRUFSRVJfTk9fQUNUSU9OID0gMCwgIC8vIDB4MDAKKyAgICBURlRfQkVBUkVSX0FDVElWQVRJT04sICAgICAvLyAweDAxCisgICAgVEZUX0JFQVJFUl9NT0RJRklDQVRJT04sICAgLy8gMHgwMgorICAgIFRGVF9CRUFSRVJfREVBQ1RJVkFUSU9OICAgIC8vIDB4MDMKK30gdGZ0X2JlYXJlcl9hY3RfZW51bTsKKworLy8gcGR1cyBtb2QKKy8vIGZsb3cgYWN0LyBkZWFjdAordHlwZWRlZiBlbnVtIHsKKyAgICBWR19BQ1RfTk9fQUNUSU9OID0gMCwKKyAgICBWR19BQ1RfUERVU19NT0QsCisgICAgVkdfQUNUX1FPU19GTE9XX0FDVElWQVRJT04sCisgICAgVkdfQUNUX1FPU19GTE9XX0RFQUNUSVZBVElPTiAgICAKK30gdmdfYWN0X2VudW07CisKK3R5cGVkZWYgZW51bSB7CisgICAgVEZUX0NIRUNLX1BBU1MgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgIC8vICgweDAxKSBWYWxpZGF0ZSBwYXNzCisgICAgVEZUX0NIRUNLX0ZBSUxFRF9TRU1BTlRJQ19FUlJPUl9JTl9URlQsICAgIC8vICgweDAyKSBWYWxpZGF0ZSBlcnJvciwgU00vRVNNIHNob3VsZCByZWplY3QgdGhlIHByb2NlZHVyZSB3aXRoIGNhdXNlICJTZW1hbnRpYyBlcnJvcnMgaW4gVEZUIG9wZXJhdGlvbnMgKCM0MSkiCisgICAgVEZUX0NIRUNLX0ZBSUxFRF9TWU5UQUNUSUNBTF9FUlJPUl9JTl9URlQsIC8vICgweDAzKSBWYWxpZGF0ZSBlcnJvciwgU00vRVNNIHNob3VsZCByZWplY3QgdGhlIHByb2NlZHVyZSB3aXRoIGNhdXNlICJTeW50YWN0aWNhbCBlcnJvcnMgaW4gVEZUIG9wZXJhdGlvbnMgKCM0MikiCisgICAgVEZUX0NIRUNLX0ZBSUxFRF9TRU1BTlRJQ19FUlJPUl9JTl9QRiwgICAgIC8vICgweDA0KSBWYWxpZGF0ZSBlcnJvciwgU00vRVNNIHNob3VsZCByZWplY3QgdGhlIHByb2NlZHVyZSB3aXRoIGNhdXNlICJTZW1hbnRpYyBlcnJvcnMgaW4gcGFja2V0IGZpbHRlcnMgKCM0NCkiCisgICAgVEZUX0NIRUNLX0ZBSUxFRF9TWU5UQUNUSUNBTF9FUlJPUl9JTl9QRiwgIC8vICgweDA1KSBWYWxpZGF0ZSBlcnJvciwgU00vRVNNIHNob3VsZCByZWplY3QgdGhlIHByb2NlZHVyZSB3aXRoIGNhdXNlICJTeW50YWN0aWNhbCBlcnJvcnMgaW4gcGFja2V0IGZpbHRlcnMgKCM0NSkiCisgICAgVEZUX0NIRUNLX0ZBSUxFRF9CQ01fVklPTEFUSU9OLCAgICAgICAgICAgICAvLyAoMHgwNikgVmFsaWRhdGUgZXJyb3IsIFNNIHNob3VsZCByZWplY3QgdGhlIHByb2NlZHVyZSB3aXRoIGNhdXNlICJCZWFyZXIgQ29udHJvbCBNb2RlIHZpb2xhdGlvbiAoIzQ4KSIKKyAgICAKKyAgICBURlRfQ0hFQ0tfRkFJTEVEX1NFTUFOVElDX0VSUk9SX0lOX1FPU19PUEVSQVRJT04sICAgICAgICAgICAgICAgLy8jODMKKyAgICBURlRfQ0hFQ0tfRkFJTEVEX1NZTlRBQ1RJQ0FMX0VSUk9SX0lOX1FPU19PUEVSQVRJT04sICAgICAgICAgICAgLy8jODQKKworICAgIFRGVF9DSEVDS19GQUlMRURfSU5TVUZGSUNJRU5UX1JFU09VUkNFUywKKyAgICBURlRfQ0hFQ0tfRkFJTEVEX1NFUklPVVNfRVJST1IsCisKK30gdGZ0X3ZhbGlkYXRlX3Jlc3VsdF9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIFRGVF9GQUlMX0FDVElPTl9OT05FID0gMCwKKyAgICBURlRfRkFJTF9BQ1RJT05fUkVMRUFTRV9QRFVTLAorICAgIFRGVF9GQUlMX0FDVElPTl9NT0RJRklDQVRJT05fUkVKRUNULAorICAgIFRGVF9GQUlMX0FDVElPTl9ERUxFVEVfUVIsCisKK30gdGZ0X2ZhaWxfYWN0aW9uX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFBGX0FDVF9OT05FICAgICAgICAgPSAwLAorICAgIFBGX0FDVF9BREQgICAgICAgICAgPSAxLAorICAgIFBGX0FDVF9NT0QgICAgICAgICAgPSAyLAorICAgIFBGX0FDVF9ERUwgICAgICAgICAgPSAzLAorICAgIFBGX0FDVF9ERUxfQUxMICAgICAgPSA0LAorICAgIFBGX0FDVF9ERUxfQkVBUkVSICAgPSA1LAorICAgIFBGX0FDVF9SRVBMQUNFX1FGSSAgPSA2Cit9cGt0X2ZpbHRlcl9hY3RfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUEZfRElSRUNUSU9OX1BSRV9SRUw3X1RGVCA9IDB4MDAsCisgICAgUEZfRElSRUNUSU9OX0RMX09OTFkgICAgICA9IDB4MDEsCisgICAgUEZfRElSRUNUSU9OX1VMX09OTFkgICAgICA9IDB4MDIsCisgICAgUEZfRElSRUNUSU9OX0JJRElSRUNUSU9OICA9IDB4MDMsCit9cGZfZGlyZWN0aW9uX2VudW07CisKK3R5cGVkZWYgZW51bQoreworICAgIFBGX09XTl9FTlRJVFlfTk9ORSA9IDAsCisgICAgUEZfT1dOX0VOVElUWV9VRSwKKyAgICBQRl9PV05fRU5USVRZX05XCit9cGZfb3duX2VudGl0eV9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIFRGVF9PUENPREVfU1BBUkUgPSAwLCAgICAgICAvLyAoMHgwMCkgU3BhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAoNUcpIFJlc2VydmVkCisgICAgVEZUX09QQ09ERV9DUkVBVEVfTkVXX1RGVCwgIC8vICgweDAxKSBDcmVhdGUgbmV3IFRGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICg1RykgQ3JlYXRlIG5ldyBRb1MgcnVsZQorICAgIFRGVF9PUENPREVfREVMRVRFX1RGVCwgICAgICAvLyAoMHgwMikgRGVsZXRlIGV4aXN0aW5nIFRGVCAgICAgICAgICAgICAgICAgICAgICAgPSAoNUcpIERlbGV0ZSBleGlzdGluZyBRb1MgcnVsZQorICAgIFRGVF9PUENPREVfQUREX1BGLCAgICAgICAgICAvLyAoMHgwMykgQWRkIHBhY2tldCBmaWx0ZXJzIHRvIGV4aXN0aW5nIFRGVCAgICAgICAgPSAoNUcpIE1vZGlmeSBleGlzdGluZyBRb1MgcnVsZSBhbmQgYWRkIHBhY2tldCBmaWx0ZXJzCisgICAgVEZUX09QQ09ERV9SRVBMQUNFX1BGLCAgICAgIC8vICgweDA0KSBSZXBsYWNlIHBhY2tldCBmaWx0ZXJzIGluIGV4aXN0aW5nIFRGVCAgICA9ICg1RykgTW9kaWZ5IGV4aXN0aW5nIFFvUyBydWxlIGFuZCByZXBsYWNlIGFsbCBwYWNrZXQgZmlsdGVycworICAgIFRGVF9PUENPREVfREVMRVRFX1BGLCAgICAgICAvLyAoMHgwNSkgRGVsZXRlIHBhY2tldCBmaWx0ZXJzIGZyb20gZXhpc3RpbmcgVEZUICAgPSAoNUcpIE1vZGlmeSBleGlzdGluZyBRb1MgcnVsZSBhbmQgZGVsZXRlIHBhY2tldCBmaWx0ZXJzCisgICAgVEZUX09QQ09ERV9OT1RGVF9PUCwgICAgICAgIC8vICgweDA2KSBObyBURlQgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICA9ICg1RykgTW9kaWZ5IGV4aXN0aW5nIFFvUyBydWxlIHdpdGhvdXQgbW9kaWZ5aW5nIHBhY2t0ZXQgZmlsdGVycworICAgIFRGVF9PUENPREVfUkVTRVJWRUQgICAgICAgICAvLyAoMHgwNykgUmVzZXJ2ZWQKK30gdGZ0X29wZXJhdGlvbl9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIFBGX0NPTVBfSURfTUFUQ0hfQUxMICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAxLCAvLyBuZXcgZm9yIDVHCisgICAgUEZfQ09NUF9JRF9JUFY0X1JFTU9URV9BRERSICAgICAgICAgICAgICAgICA9IDB4MTAsCisgICAgUEZfQ09NUF9JRF9JUFY0X0xPQ0FMX0FERFIgICAgICAgICAgICAgICAgICA9IDB4MTEsCisgICAgUEZfQ09NUF9JRF9JUFY2X1JFTU9URV9BRERSICAgICAgICAgICAgICAgICA9IDB4MjAsCisgICAgUEZfQ09NUF9JRF9JUFY2X1JFTU9URV9BRERSX1BSRUZJWF9MRU5HVEggICA9IDB4MjEsCisgICAgUEZfQ09NUF9JRF9JUFY2X0xPQ0FMX0FERFJfUFJFRklYX0xFTkdUSCAgICA9IDB4MjMsCisgICAgUEZfQ09NUF9JRF9QUk9UT0NPTF9JRF9ORVhUX0hFQURFUiAgICAgICAgICA9IDB4MzAsCisgICAgUEZfQ09NUF9JRF9TSU5HTEVfTE9DQUxfUE9SVCAgICAgICAgICAgICAgICA9IDB4NDAsCisgICAgUEZfQ09NUF9JRF9MT0NBTF9QT1JUX1JBTkdFICAgICAgICAgICAgICAgICA9IDB4NDEsCisgICAgUEZfQ09NUF9JRF9TSU5HTEVfUkVNT1RFX1BPUlQgICAgICAgICAgICAgICA9IDB4NTAsCisgICAgUEZfQ09NUF9JRF9SRU1PVEVfUE9SVF9SQU5HRSAgICAgICAgICAgICAgICA9IDB4NTEsCisgICAgUEZfQ09NUF9JRF9TRUNVUklUWV9QQVJBTUVURVJfSUQgICAgICAgICAgICA9IDB4NjAsCisgICAgUEZfQ09NUF9JRF9UWVBFX09GX1NFUlZJQ0VfVFJBRkZJQ19DTEFTUyAgICA9IDB4NzAsCisgICAgUEZfQ09NUF9JRF9GTE9XX0xBQkVMICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODAsCisgICAgUEZfQ09NUF9JRF9ERVNUSU5BVElPTl9NQUNfQUREUiAgICAgICAgICAgICA9IDB4ODEsIC8vIG5ldyBmb3IgNUcsIGhvd2V2ZXIsIE5vdCBzdXBwb3J0ZWQgbm93CisgICAgUEZfQ09NUF9JRF9TT1VSQ0VfTUFDX0FERFIgICAgICAgICAgICAgICAgICA9IDB4ODIsIC8vIG5ldyBmb3IgNUcsIGhvd2V2ZXIsIE5vdCBzdXBwb3J0ZWQgbm93CisgICAgUEZfQ09NUF9JRF84MDJfMVFfQ19UQUdfVklEICAgICAgICAgICAgICAgICA9IDB4ODMsIC8vIG5ldyBmb3IgNUcsIGhvd2V2ZXIsIE5vdCBzdXBwb3J0ZWQgbm93CisgICAgUEZfQ09NUF9JRF84MDJfMVFfU19UQUdfVklEICAgICAgICAgICAgICAgICA9IDB4ODQsIC8vIG5ldyBmb3IgNUcsIGhvd2V2ZXIsIE5vdCBzdXBwb3J0ZWQgbm93CisgICAgUEZfQ09NUF9JRF84MDJfMVFfQ19UQUdfUENQX0RFSSAgICAgICAgICAgICA9IDB4ODUsIC8vIG5ldyBmb3IgNUcsIGhvd2V2ZXIsIE5vdCBzdXBwb3J0ZWQgbm93CisgICAgUEZfQ09NUF9JRF84MDJfMVFfU19UQUdfUENQX0RFSSAgICAgICAgICAgICA9IDB4ODYsIC8vIG5ldyBmb3IgNUcsIGhvd2V2ZXIsIE5vdCBzdXBwb3J0ZWQgbm93CisgICAgUEZfQ09NUF9JRF9FVEhFUlRZUEUgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODcsIC8vIG5ldyBmb3IgNUcsIGhvd2V2ZXIsIE5vdCBzdXBwb3J0ZWQgbm93Cit9IHBmX2NvbXBfaWRfZW51bTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBURlRfUEFSQV9MSVNUX0lEX1VOREVGSU5FRCAgICA9IDB4MDAsICAgLy8gKDB4MDApIFVuZGVmaW5lZCAobm90IGRlZmluZWQgaW4gc3BlYyAyNC4wMDgpCisgICAgVEZUX1BBUkFfTElTVF9JRF9BVVRIX1RPS0VOICAgPSAweDAxLCAgIC8vICgweDAxKSBBdXRob3JpemF0aW9uIHRva2VuCisgICAgVEZUX1BBUkFfTElTVF9JRF9GTE9XX0lEICAgICAgPSAweDAyLCAgIC8vICgweDAyKSBGbG93IGlkZW50aWZpZXIgCisgICAgVEZUX1BBUkFfTElTVF9JRF9QRl9JRCAgICAgICAgPSAweDAzICAgIC8vICgweDAzKSBQYWNrZXQgZmlsdGVyIGlkZW50aWZpZXIKK30gdGZ0X3BhcmFfbGlzdF9pZF9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIEJFQVJFUl9UWVBFX1VOS05PV04gPSAwLAorICAgIEJFQVJFUl9UWVBFX1BSSU1BUllfUERQLCAgICAgICAgLy8gKDJHLzNHKSBQUklNQVJZIFBEUCBDT05URVhUCisgICAgQkVBUkVSX1RZUEVfU0VDT05EQVJZX1BEUCwgICAgICAvLyAoMkcvM0cpIFNFQ09OREFSWSBQRFAgQ09OVEVYVAorICAgIEJFQVJFUl9UWVBFX0RFRkFVTFRfQkVBUkVSLCAgICAgLy8gKExURSkgICBERUZBVUxUIEVQUyBCRUFSRVIKKyAgICBCRUFSRVJfVFlQRV9ERURJQ0FURURfQkVBUkVSLCAgIC8vIChMVEUpICAgREVESUNBVEVEIEVQUyBCRUFSRVIKKyAgICBCRUFSRVJfVFlQRV9RT1NfRkxPVyAgICAgICAgICAgIC8vICg1RykgICAgUW9TIEZsb3cKK30gYmVhcmVyX3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBSQVRfSU5EXzJHM0cgPSAxLCAgIC8vIDB4MDEKKyAgICBSQVRfSU5EX0xURSwgICAgICAgIC8vIDB4MDIKKyAgICBSQVRfSU5EXzIzNEcsICAgICAgIC8vIDB4MDMKKyAgICBSQVRfSU5EXzVHICAgICAgICAgIC8vIDB4MDQKK30gcmF0X2luZF9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIFRGVF9DT01QT1NFX1RZUEVfTk9ORSA9IDAsICAgICAgLy8gUmVzZXJ2ZWQgdmFsdWUKKyAgICBURlRfQ09NUE9TRV9UWVBFX01PRF9URlQsICAgICAgIC8vIE9ubHkgVEZUIGlzIHJlcXVlc3RlZCB0byBiZSBtb2RpZmllZAorICAgIFRGVF9DT01QT1NFX1RZUEVfTU9EX1FPUywgICAgICAgLy8gT25seSBRb1MgaXMgcmVxdWVzdGVkIHRvIGJlIG1vZGlmaWVkCisgICAgVEZUX0NPTVBPU0VfVFlQRV9NT0RfVEZUX1FPUywgICAvLyBCb3RoIFRGVCBhbmQgUW9TIGFyZSByZXF1ZXN0ZWQgdG8gYmUgbW9kaWZpZWQKKyAgICBURlRfQ09NUE9TRV9UWVBFX1VOREVGSU5FX1RGVCwgIC8vIFRGVCBpcyByZXF1ZXN0ZWQgdG8gYmUgdW5kZWZpbmVkIChkZWxldGVkKQorICAgIFRGVF9DT01QT1NFX1RZUEVfREVMX0VQU0IgICAgICAgLy8gW0xURSBvbmx5XSBEZWRpY2F0ZWQgRVBTIGJlYXJlciBpcyByZXF1ZXN0ZWQgdG8gYmUgZGVhY3RpdmF0ZWQKK30gdGZ0X2NvbXBvc2VfdHlwZV9lbnVtOworCisvKiBESEwgdHJhY2UgdXNlICovCit0eXBlZGVmIGVudW0geworICAgIFRGVExJQl9URlRfREVDT0RFID0gMCwKKyAgICBURlRMSUJfVEZUX0VOQ09ERSwKKyAgICBURlRMSUJfVEZUX0RJUl9FWFRSQUNULAorICAgIFRGVExJQl9TRVRfQVBQTElFRF9URlQsCisgICAgVEZUTElCX1NFVF9BUFBMSUVEX1FSLAorICAgIFRGVExJQl9DT01QT1NFX1RGVF9UT19OVywKKyAgICBURlRMSUJfREVMX1RGVCwKKyAgICBURlRMSUJfREVMX1FSLAorICAgIFRGVExJQl9HRVRfVVNFUl9ERUZJTkVEX1RGVCwKKyAgICBURlRMSUJfR0VUX0FQUExJRURfVEZULAorICAgIFRGVExJQl9TRVRfVVNFUl9ERUZJTkVEX1RGVCwKKyAgICBURlRMSUJfU0VUX1VTUl9ERUxQRiwKKyAgICBURlRMSUJfR0VUX1VTUl9ERUxQRiwKKyAgICBURlRMSUJfQ0xFQVJfVVNSX0RFTFBGLAorICAgIFRGVExJQl9TRVRfVVNSX0xOS1BGLAorICAgIFRGVExJQl9HRVRfVVNSX0xOS1BGLAorICAgIFRGVExJQl9DTEVBUl9VU1JfTE5LUEYsCisgICAgVEZUTElCX1JFTF9QRiwKKyAgICBVUERBVEVfVEZULAorICAgIFRGVF9ERUNPREUsCisgICAgVEZUX0VOQ09ERSwKKyAgICBQRl9DT05URU5UX0RFQ09ERSwKKyAgICBURlRfQ09NUE9TRSwKKyAgICBQRl9GSUVMRF9DSEVDSywKKyAgICBQRl9DT01QX0NIRUNLLAorICAgIFRGVF9FTVBUWV9DT0xMSVNJT05fQ0hFQ0ssCisgICAgUEZfUFJFQ0VERU5DRV9DT0xMSVNJT05fQ0hFQ0ssCisgICAgQ09NUE9TRV9QRl9BQ1RfTElTVCwKKyAgICBDT01QT1NFX0JFQVJFUl9ERUFDVF9MSVNULAorICAgIEJDTV9SRVNUUklDVF9DSEssCisgICAgVEZUTElCX1RGVF9HRVRfUENfQUNUX0xJU1QsCisgICAgVEZUTElCX0dFVF9BUFBMSUVEX1FSLAorCisgICAgVEZUTElCX1FSU19QUkVDSEVDSywKKyAgICBURlRMSUJfUVJfTEVOR1RIX0RFQ09ERSwKKyAgICBURlRMSUJfQkFDS1VQX0FQUExJRURfUVIsCisgICAgVEZUTElCX1JFU09UUkVfQVBQTElFRF9RUiwKKyAgICBURlRMSUJfREVMX0FQUExJRURfUVJfQllfUFNJLAorICAgIFRGVExJQl9ERUxfQVBQTElFRF9RUl9CWV9QU0lfUVJJLAorICAgIFRGVExJQl9ERUxfQVBQTElFRF9RUl9CWV9QU0lfUUZJLAorICAgIFRGVExJQl9ERUxfQVBQTElFRF9URlRfQllfRUJJLAorICAgIFRGVExJQl9TRVRfQ0lEX0ZPUl9BUFBMSUVEX1FSLAorCisgICAgVEZUTElCX1NFVF9BUFBMSUVEX1RGVF9CWV9FQkksCisgICAgVEZUTElCX1NFVF9DSURfRk9SX0FQUExJRURfVEZULAorICAgIFRGVExJQl9VUERBVEVfREVBQ1RfUVJfTElTVF9UT19ERUxfUUYsCisgICAgVEZUTElCX0NPTlNUUlVDVF9DT05URVhUX0ZPUl9ERUZBVUxUX0JFQVJFUl9XT19URlQsCisKK30gdGZ0bGliX3RyY19mdW5jX25hbWVfZW51bTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBURlRfUFRSID0gMCwKKyAgICBURlRfUkFXX1BUUiwKKyAgICBQRl9BQ1RfTElTVCwKKyAgICBQRl9QVFIsCisgICAgREVBQ1RfQkVBUkVSX0xJU1QsCisgICAgQ09NUE9TRURfVEZUX1BUUgorfSB0ZnRsaWJfdHJjX2Z1bmNfYXJnX25hbWVfZW51bTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBTT1VSQ0VfVEZUID0gMCwKKyAgICBTT1VSQ0VfVEZUX1JBVywKKyAgICBERUNPREVEX1RGVCwKKyAgICBFTkNPREVEX1RGVF9SQVcsCisgICAgRU5DT0RFRF9RUlNfUkFXLAorICAgIENPTVBPU0VEX1RGVCwKKyAgICBFWFRSQUNURURfVEZULAorICAgIENVUlJFTlRfVVNFUl9ERUZJTkVEX1RGVCwKKyAgICBVUERBVEVEX1VTRVJfREVGSU5FRF9URlQsCisgICAgQ1VSUkVOVF9BUFBMSUVEX1RGVCwKKyAgICBVUERBVEVEX0FQUExJRURfVEZULAorICAgIFVTRVJfUkVRVUVTVF9DR1RGVCwKKyAgICBDVVJSRU5UX0FQUExJRURfUVIsCisgICAgQ1VSUkVOVF9BUFBMSUVEX1JRT1MKK30gdGZ0bGliX3RyY190ZnRfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0geworICAgIFRGVExJQl9UUkNfUEFSQV9UWVBFX05PTkUgPSAwLAorICAgIFRGVExJQl9UUkNfUEFSQV9UWVBFX0ZVTkNfQVJHX0lOLAorICAgIFRGVExJQl9UUkNfUEFSQV9UWVBFX0ZVTkNfQVJHX09VVCwKKyAgICBURlRMSUJfVFJDX1BBUkFfVFlQRV9JTlRFUk5BTF9GVU5DX0FSR19PVVQsCisgICAgVEZUTElCX1RSQ19QQVJBX1RZUEVfVEZUX0NPTlRFWFQKK30gdGZ0bGliX3RyY19wYXJhX3R5cGVfZW51bTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBRRl9IQVNfTk9fUlVMRSA9IDAsCisgICAgUUZfSEFTX0RFRkFVTFRfUlVMRSA9IDEsCisgICAgUUZfSEFTX09OTFlfTk9OX0RFRkFVTFRfUlVMRSA9IDIKK30gdGZ0bGliX3FmX2hhc19ydWxlX2VudW07CisKK3R5cGVkZWYgZW51bSB7CisgICAgUU9TX1JVTEVfTEVOX1RZUEVfTk9fUFJFQ0VERU5DRV9RRkksCisgICAgUU9TX1JVTEVfTEVOX1RZUEVfV0lUSF9QUkVDRURFTkNFX1FGSSwKKyAgICBRT1NfUlVMRV9MRU5fVFlQRV9XSVRIX1BSRUNFREVOQ0UsCit9IHFvc19ydWxlX2xlbl90eXBlOworCisjZW5kaWYgLyogVEZUTElCX0NPTU1PTl9FTlVNX0hfICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdGZ0bGliX2NvbW1vbl9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC90ZnRsaWJfY29tbW9uX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlODE5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdGZ0bGliX2NvbW1vbl9zdHJ1Y3QuaApAQCAtMCwwICsxLDQyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEyCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHRmdGxpYl9jb21tb25fc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgIFRGVCBsaWJyYXJ5IGNvbW1vbiBzdHJ1Y3R1cmUKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDkgMTggMjAyMCB0ZXJlbmNlLmt1bworICogW01PTFkwMDU2MDQwM10gW01vdXRvbl1bUjBdW29wZXJhdG9yX0lPVF0gQm90aCBhY3RpdmUgYW5kIGhvbGQgY2FsbCBnZXRzIGRpc2Nvbm5lY3RlZC4KKyAqIC4gRnVydGhlciBlcnJvciBoYW5kbGluZyBmb3IgcGYgcHJlY2VkZW5jZSBjb25mbGljdCB3aXRob3V0IGRlZGljYXRlZCBiZWFyZXIgZGVhY3RpdmF0aW9uLgorICoKKyAqIDA0IDE1IDIwMjAgdGVyZW5jZS5rdW8KKyAqIFtNT0xZMDA1MDgyNDFdIE1lbW9yeSByZWR1Y3Rpb24gLSBsNCBwcyBjaWQgcmVkdWN0aW9uIGFuZCByZWR1Y2UgbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydCBmbG93CisgKiAxLiBTdXBwb3J0IHNldHRpbmcgbnVsbCBmb3IgcGZfYWN0X2xpc3QgcGFyYW1ldGVyLgorICogMi4gU3VwcG9ydCBxb3MgZmxvdyBkZWFjdGl2YXRpb24uCisgKiAzLiBSZWNvcmQgcXIncyBwcmVjZWRlbmNlIGludG8gY29udGV4dCBpbiB0ZnRsaWJfc2V0X3VzZXJfZGVmaW5lZF90ZnQoKSBpZiByYXRlIGlzIDVnLgorICogNC4gQWRkIHByaW1pdGl2ZSB0cmFjZXMgdG8gcmVjb3JkIGN1cnJlbnQgYXBwbGllZCBxci8gdGZ0IHN0YXR1cyBmb3IgYW5hbHlzaXMuCisgKiA1LiB0cmFjZSBlbmhhbmNlbWVudAorICoKKyAqIDA0IDA2IDIwMjAgdGVyZW5jZS5rdW8KKyAqIFtNT0xZMDA1MDgyNDFdIE1lbW9yeSByZWR1Y3Rpb24gLSBsNCBwcyBjaWQgcmVkdWN0aW9uIGFuZCByZWR1Y2UgbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydCBmbG93CisgKiAuIEFkZCBwcmltaXRpdmUgdHJhY2VzIHRvIHJlY29yZCBjdXJyZW50IGFwcGxpZWQgcXIvIHRmdCBzdGF0dXMgZm9yIGFuYWx5c2lzLgorICoKKyAqIDAxIDAyIDIwMjAgdGVyZW5jZS5rdW8KKyAqIFtNT0xZMDA0NjgzNzVdIFtJT0RUXVtNVDY4ODVdW1BldHJ1c11bTVAxXVtaVEVdW0xhYl1bNUdTTV1bQ2hpbmFdW1hpYW5dW0Y2MF1bTjQxXVtjb3JlMSx2cGUwLHRjMCh2cGUzKV0gRmF0YWwgRXJyb3IgKDB4ODIzLCAweDIwMDAsIDB4Y2NjY2NjY2MpIC0gTkFTCisgKiAJCisgKiAuIFJlZHVjZSB0aGUgY29udHJvbCBidWZmZXIgc2l6ZSB3aGVuIGhhbmRsaW5nIHBhY2tldCBmaWx0ZXIgYWN0aW9uIGxpc3QuCisgKgorICogMDkgMjMgMjAxOSB0ZXJlbmNlLmt1bworICogW01PTFkwMDQ0MjUwNV0gVXBkYXRlIGZvciBNYXJjaCBDUiBhbmQgdHJhY2UgZW5oYW5jZW1lbnRzLgorICogCQorICogLiBVcGRhdGUgZm9yIE1hcmNoIENSIGFuZCB0cmFjZSBlbmhhbmNlbWVudHMuCisgKgorICogMDkgMDQgMjAxOSB0ZXJlbmNlLmt1bworICogW01PTFkwMDQzNDc1NF0gVXBncmFkZSBDR1RGVCB0byBzdXBwb3J0IDVHQworICogCQorICogLiBVcGRhdGUgQ0dURlQgYmVoYXZpb3JzIGluIHRmdGxpYi4KKyAqCisgKiAwMyAyNiAyMDE5IGplZmZlcnkuY2hlbgorICogW01PTFkwMDM5MzQ1Nl0gW0dlbjk3XVtWTU9MWV0gNDVHIEludGVyUkFUICYgaW50ZXJTeXN0ZW0gZmVhdHVyZQorICogCQorICogCVtURlRMSUJdIGludGVyZmFjZSBwYXJ0LgorICoKKyAqIDAzIDI2IDIwMTkgamVmZmVyeS5jaGVuCisgKiBbTU9MWTAwMzkzNDU2XSBbR2VuOTddW1ZNT0xZXSA0NUcgSW50ZXJSQVQgJiBpbnRlclN5c3RlbSBmZWF0dXJlCisgKiAJCisgKiAJW1RGVExJQl0gaW50ZXJmYWNlIHBhcnQuCisgKgorICogMTIgMTQgMjAxOCBqZWZmZXJ5LmNoZW4KKyAqIFtNT0xZMDAzNzI2MzVdIFtWTU9MWV0gTDQvVENNL1RGVExJQi9WR1NNIHBoYXNlMiBjaGVjay1pbgorICogCQorICogCVtURlRMSUJdIHBoYXNlMiBjaGVjay1pbi4KKyAqCisgKiAwOSAxNCAyMDE4IGplZmZlcnkuY2hlbgorICogW01PTFkwMDMwNjE0OF0gW05BU10gcGFuZ3UgZ2lhbnQgQ1IKKyAqIAkKKyAqIAlbVEZUTElCXSBwYXNzIDFzdCBOQVMgTW9ESVMgSVQuCisgKgorICogMDggMTcgMjAxOCBqZWZmZXJ5LmNoZW4KKyAqIFtNT0xZMDAzMDYxNDhdIFtOQVNdIHBhbmd1IGdpYW50IENSCisgKiBbVEZUTElCXSByZS1hcmNoaXRlY3R1cmUuCisgKgorICogMDggMTcgMjAxOCBtYXgubW8KKyAqIFtNT0xZMDAzMDYxNDhdIFtOQVNdIHBhbmd1IGdpYW50IENSCisgKiAuY2hhbmdlcyBmcm9tIE5vcm1hbidzIENCcgorICoKKyAqIDA3IDIwIDIwMTggbWF4Lm1vCisgKiBbTU9MWTAwMzM5OTA1XSBbR2VuOTddIHBvcnRpbmcgb2YgTU9EX1ZHU00KKyAqIFtQcm90b2NvbCBidWlsZCB0YWddCisgKiBbSXMgQ0wgc2VsZiB0ZXN0YWJsZTogWUVTXQorICogW0dyb3VwIENMIGxpc3Q6IE5PXQorICoKKyAqIDEwIDE2IDIwMTYgcmVuaHVhbmcubGl1CisgKiBbTU9MWTAwMjA1MDM1XVtURlRMSUJdIE1lbW9yeSBtYW5hZ2VtZW50IGluIFRGVCBpbnRlcm5hbAorICoKKyAqIDExIDE3IDIwMTQgamVmZmVyeS5jaGVuCisgKiBbTU9MWTAwMDg0NjM0XSBbVU1PTFldW1IxMF1bUjExXSBOQVMgY2hlY2staW4gZnJvbSA2MjkxX0RFViB0byBVTU9MWQorICogW1IxMF1bUjExXSBOQVMgY2hlY2staW4gZnJvbSA2MjkxX0RFViB0byBVTU9MWQorICoKKyAqIDA5IDEwIDIwMTQgamVmZmVyeS5jaGVuCisgKiBbTU9MWTAwMDc4MjY0XSBbVU1PTFldW1IxMF1bUjExXSBOQVMgY2hlY2staW4gZnJvbSBDQnIgdG8gNjI5MV9ERVYKKyAqIFtSMTBdW1IxMV0gTkFTIGNoZWNrLWluIGZyb20gQ0JyIHRvIDYyOTFfREVWCisgKgorICogMTIgMjUgMjAxMyBqb2UuY2hhbmcKKyAqIFtNT0xZMDAwNTE0OTddIFtNT0xZXVtOUlNQQ0FdIE5SU1BDQSBwaGFzZSAyIGltcGxlbWVudGF0aW9uCisgKiBbVEZUTElCXSBDaGVjay1pbiByZWxhdGVkIGNoYW5nZXMKKyAqCisgKiAwNCAxMiAyMDEzIGpvZS5jaGFuZworICogW01PTFkwMDAxNDE5N10gVEZUTElCIG5ldyBmZWF0dXJlCisgKiBbTVQ2MjkwXVtURlRMSUJdIHVwZGF0ZSBURlQgcGFyYW1ldGVyIGxpc3Qgd2l0aCBuZXcgc3RydWN0dXJlCisgKgorICogMTIgMDQgMjAxMiBqb2UuY2hhbmcKKyAqIFtNT0xZMDAwMDcwNTFdIFtNVDcyMDhdW0xURSBTaW5nbGUgTW9kZV0gZW51bSByZW5hbWUgJiBtZW1vcnkgYWxsb2NhdGlvbiBtZWNoYW5zaW0gY2hhbmdlCisgKgorICogMTEgMDcgMjAxMiBqb2UuY2hhbmcKKyAqIFtNT0xZMDAwMDUzMjJdIFRBVEFLQSBtZXJnZSB0byBNT0xZCisgKiBbSm9lXSBURlRMSUIgcGFydCBpcyBjaGVjayBpbiBkb25lLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBURlRMSUJfQ09NTU9OX1NUUlVDVF9IXworI2RlZmluZSBURlRMSUJfQ09NTU9OX1NUUlVDVF9IXworCisKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgInRmdGxpYl9jb21tb25fZW51bS5oIgorCisKKy8qc3RydWN0IGRlY2xhcmF0aW9uICovCisKKworLyogSVB2NCByZW1vdGUgYWRkcmVzcyBhbmQgc3VibmV0IG1hc2sgc3RydWN0IChXT1JEKDQtYnl0ZSkgYXJyYXksIHVzZWQgYnkgVVBDTSBvbmx5KSAqLyAgICAgIAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyIGFkZHI7CisgICAga2FsX3VpbnQzMiBtYXNrOworfXJlbW90ZV92NGFkZHJfc3RydWN0OworCisKKy8qIElQdjYgcmVtb3RlIGFkZHJlc3MgYW5kIHN1Ym5ldCBtYXNrIHN0cnVjdCAoV09SRCg0LWJ5dGUpIGFycmF5LCB1c2VkIGJ5IFVQQ00gb25seSkgKi8KK3R5cGVkZWYgc3RydWN0IAoreworICAgIGthbF91aW50MzIgYWRkcls0XTsgCisgICAga2FsX3VpbnQzMiBtYXNrWzRdOworfXJlbW90ZV92NmFkZHJfc3RydWN0OworCit0eXBlZGVmIHJlbW90ZV92NGFkZHJfc3RydWN0IGxvY2FsX3Y0YWRkcl9zdHJ1Y3Q7Cit0eXBlZGVmIHJlbW90ZV92NmFkZHJfc3RydWN0IGxvY2FsX3Y2YWRkcl9zdHJ1Y3Q7CisKKy8qIFBhY2tldCBmaWx0ZXIgc3RydWN0IGZvciBTTS9FU00sIFRDTSwgTDRDLCAmIFVQQ00gKi8KK3R5cGVkZWYgc3RydWN0IAoreworICAgIHBmX293bl9lbnRpdHlfZW51bSAgcGZfb3duX2VudGl0eTsgIC8vIEluZGljYXRlIFVFIG9yIE5XIG93bnMgdGhpcyBQRiAgICAgICAgICAgIAorICAgIGthbF91aW50OCAgICAgICAgICAgcXJpOyAgICAgICAgICAgIC8vIFF1UyBSdWxlIElEIHdoZXJlIHRoZSBwYWNrZXQgZmlsdGVyIGJlbG9uZ3MgdG8KKyAgICBrYWxfdWludDggICAgICAgICAgIGlkOyAgICAgICAgICAgICAvLyBQYWNrZXQgZmlsdGVyIGluZGV4CisgICAga2FsX3VpbnQ4ICAgICAgICAgICBwcmVjZWRlbmNlOyAgICAgLy8gUGFja2V0IGZpbHRlciBldmFsdWF0aW9uIHByZWNlZGVuY2UgaW5kZXgKKyAgICBwZl9kaXJlY3Rpb25fZW51bSAgIGRpcmVjdGlvbjsgICAgICAvLyBEaXJlY3Rpb24gb2YgdGhlIHBhY2tldCBmaWx0ZXIKKworICAgIGthbF91aW50MzIgICAgICAgICAgYml0bWFwOyAgICAgICAgIC8vIFVzZWQgdG8gaW5kaWNhdGUgd2hpY2ggb2YgdGhlIGZvbGxvd2luZyBmaWVsZCBleGlzdAorCisgICAga2FsX2Jvb2wgICAgICAgICAgICBtYXRjaF9hbGxfdHlwZTsKKyAgICAKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgcmVtb3RlX3Y0YWRkcl9zdHJ1Y3QgdjQ7CisgICAgICAgIHJlbW90ZV92NmFkZHJfc3RydWN0IHY2OworICAgIH1yZW1vdGVfYWRkcjsgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW90ZSBhZGRyZXNzIGFuZCBzdWJuZXQgbWFzayAoV09SRCg0LWJ5dGUpIGFycmF5LCB1c2VkIGJ5IFVQQ00gb25seSkKKyAgIAorICAgIHVuaW9uCisgICAgeworICAgICAgICBsb2NhbF92NGFkZHJfc3RydWN0IHY0OworICAgICAgICBsb2NhbF92NmFkZHJfc3RydWN0IHY2OworICAgIH1sb2NhbF9hZGRyOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvY2FsIGFkZHJlc3MgYW5kIHN1Ym5ldCBtYXNrIChXT1JEKDQtYnl0ZSkgYXJyYXksIHVzZWQgYnkgVVBDTSBvbmx5KQorCisgICAga2FsX3VpbnQ4ICAgICAgICAgICByZW1vdGVfYWRkcl9hbmRfbWFza1tNQVhfUkVNT1RFX0FERFJfQU5EX01BU0tfTEVOXTsgLyogLS0tLS0tLS0tLS0tLS0tLS0gUmVtb3RlIGFkZHJlc3MgYW5kIHN1Ym5ldCBtYXNrIChieXRlIGFycmF5KSAtLS0tLS0tLS0tLS0tLS0tKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBJUHY0OiBhZGRyID0gIDAgfiAgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgIG1hc2sgPSAgNCB+ICA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiA8Tk9URTE6IExlbmd0aCBvZiBJUHY0IGFkZHIgKyBtYXNrID0gSVBWNF9SRU1PVEVfQUREUl9BTkRfTUFTS19MRU4oOCk+ICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIElQdjY6IGFkZHIgPSAgMCB+IDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICBtYXNrID0gMTYgfiAzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogPE5PVEUyOiBMZW5ndGggb2YgSVB2NiBhZGRyICsgbWFzayA9IElQVjZfUkVNT1RFX0FERFJfQU5EX01BU0tfTEVOKDMyKT4gICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiA8Tk9URTM6IE1BWF9SRU1PVEVfQUREUl9BTkRfTUFTS19MRU4gaXMgc2V0IGFzIElQVjZfUkVNT1RFX0FERFJfQU5EX01BU0tfTEVOPiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAga2FsX3VpbnQ4ICAgICAgICAgICBsb2NhbF9hZGRyX2FuZF9tYXNrW01BWF9MT0NBTF9BRERSX0FORF9NQVNLX0xFTl07ICAgLyogLS0tLS0tLS0tLS0tLS0tLS0gTG9jYWwgYWRkcmVzcyBhbmQgc3VibmV0IG1hc2sgKGJ5dGUgYXJyYXkpIC0tLS0tLS0tLS0tLS0tLS0tKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBJUHY0OiBhZGRyID0gIDAgfiAgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgIG1hc2sgPSAgNCB+ICA3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiA8Tk9URTE6IExlbmd0aCBvZiBJUHY0IGFkZHIgKyBtYXNrID0gSVBWNF9MT0NBTF9BRERSX0FORF9NQVNLX0xFTig4KT4gICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIElQdjY6IGFkZHIgPSAgMCB+IDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICBtYXNrID0gMTYgfiAzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogPE5PVEUyOiBMZW5ndGggb2YgSVB2NiBhZGRyICsgbWFzayA9IElQVjZfTE9DQUxfQUREUl9BTkRfTUFTS19MRU4oMzIpPiAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiA8Tk9URTM6IE1BWF9MT0NBTF9BRERSX0FORF9NQVNLX0xFTiBpcyBzZXQgYXMgSVBWNl9MT0NBTF9BRERSX0FORF9NQVNLX0xFTj4gICAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAga2FsX3VpbnQ4ICAgICAgICAgICBwcm90b2NvbF9ueHRfaGRyOyAgIC8vIFByb3RvY29sIG51bWJlciAoSVB2NCkgLyBOZXh0IGhlYWRlciAoSVB2NikKKworICAgIGthbF91aW50MTYgICAgICAgICAgbG9jYWxfcG9ydF9sb3c7ICAgICAvLyBTaW5nbGUgbG9jYWwgcG9ydCAvIExvY2FsIHBvcnQgcmFuZ2UgKGxvdykKKyAgICBrYWxfdWludDE2ICAgICAgICAgIGxvY2FsX3BvcnRfaGlnaDsgICAgLy8gICAgICAgKE4vQSkgICAgICAgLyBMb2NhbCBwb3J0IHJhbmdlIChoaWdoKQorICAgIAorICAgIGthbF91aW50MTYgICAgICAgICAgcmVtb3RlX3BvcnRfbG93OyAgICAvLyBTaW5nbGUgcmVtb3RlIHBvcnQgLyBSZW1vdGUgcG9ydCByYW5nZSAobG93KQorICAgIGthbF91aW50MTYgICAgICAgICAgcmVtb3RlX3BvcnRfaGlnaDsgICAvLyAgICAgICAoTi9BKSAgICAgICAgLyBSZW1vdGUgcG9ydCByYW5nZSAoaGlnaCkKKworICAgIGthbF91aW50MzIgICAgICAgICAgc3BpOyAgICAgICAgICAgICAgICAvLyBJUHNlYyBzZWN1cml0eSBwYXJhbWV0ZXIgaW5kZXgKKyAgICAKKyAgICBrYWxfdWludDggICAgICAgICAgIHRvczsgICAgICAgICAgICAgICAgLy8gVHlwZSBvZiBzZXJ2aWNlIChJUHY0KSAvIFRyYWZmaWMgY2xhc3MgKElQdjYpCisgICAga2FsX3VpbnQ4ICAgICAgICAgICB0b3NfbXNrOyAgICAgICAgICAgIC8vIFR5cGUgb2Ygc2VydmljZSBtYXNrIChJUHY0KSAvIFRyYWZmaWMgY2xhc3MgbWFzayAoSVB2NikKKyAgICAKKyAgICBrYWxfdWludDMyICAgICAgICAgIGZsb3dfbGFiZWw7ICAgICAgICAgLy8gRmxvdyBsYWJlbCAoSVB2NikKK31wa3RfZmlsdGVyX3N0cnVjdDsKKworLyogQ29tbW9uIGRlYWN0IGxpc3Q6IHVuaW9uIG9mIGRlYWN0X2JlYXJlcl9saXN0X3N0cnVjdCBhbmQgZGVhY3RfcXJfbGlzdF9zdHVyY3QgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggICBkZWFjdF9udW07CisgICAga2FsX3VpbnQ4ICAgZGVhY3RfbGlzdFtURlRMSUJfTUFYX0RFQUNUX0xJU1RfTlVNXTsKKyAgICBrYWxfYm9vbCAgICBoYXNfZHFyOworICAgIHRmdF92YWxpZGF0ZV9yZXN1bHRfZW51bSBjYXVzZTsKK30gdGZ0X2RlYWN0X2xpc3Rfc3RydWN0OworCisvKiBQRFAvRVBTIGJlYXJlciBjb250ZXh0IGRlYWN0aXZhdGlvbiBsaXN0IGZvciBTTS9FU00gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggICBkZWFjdF9udW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIGRlYWN0aXZhdGVkIGJlYXJlciBkdWUgdG8gcGFja2V0IGZpbHRlciBjb25mbGljdAorICAgIGthbF91aW50OCAgIGRlYWN0X2xpc3RbVEZUTElCX01BWF9CRUFSRVJfQ1RYVF9OVU1dOyAvLyBEZWFjdGl2YXRlZCBiZWFyZXIgY29udGV4dCBsaXN0Cit9IHRmdF9kZWFjdF9iZWFyZXJfbGlzdF9zdHJ1Y3Q7CisKKy8qIFFvUyBSdWxlIGRlYWN0aXZhdGlvbiBsaXN0IGZvciBWR1NNICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4ICAgZGVhY3RfbnVtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBkZWFjdGl2YXRlZCBRb1MgUnVsZSBkdWUgdG8gcGFja2V0IGZpbHRlciBjb25mbGljdAorICAgIGthbF91aW50OCAgIGRlYWN0X2xpc3RbVEZUTElCX01BWF9RUl9OVU1dOyAgICAgICAgICAvLyBEZWFjdGl2YXRlZCBRb1MgUnVsZSBjb250ZXh0IGxpc3QKKyAgICBrYWxfYm9vbCAgICBoYXNfZHFyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVFJVRSBpZiB0aGVyZSBpcyBEZWZhdWx0IFFSIGluIGRlYWN0IGxpc3QuCisgICAgdGZ0X3ZhbGlkYXRlX3Jlc3VsdF9lbnVtIGNhdXNlOworfSB0ZnRfZGVhY3RfcXJfbGlzdF9zdHJ1Y3Q7CisKKy8qIFBhY2tldCBmaWx0ZXIgYWN0aW9uIHN0cnVjdCBmb3IgVVBDTSAqLwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICBiZWFyZXJfaWQ7ICAvLyBFUFMgYmVhcmVyIElEL05TQVBJIHdoZXJlIHRoZSBwYWNrZXQgZmlsdGVyIGJlbG9uZ3MgdG8KKyAgICBrYWxfdWludDggICAgICAgICAgIHFyaTsgICAgICAgIC8vIFF1UyBSdWxlIElEIHdoZXJlIHRoZSBwYWNrZXQgZmlsdGVyIGJlbG9uZ3MgdG8KKyAgICBrYWxfdWludDggICAgICAgICAgIG9sZF9xZmk7ICAgIC8vIE9sZCBRb1MgRmxvdyBJRCB3aGVyZSB0aGUgUW9zIFJ1bGUgYmVsb25ncyB0bworICAgIGthbF91aW50OCAgICAgICAgICAgcWZpOyAgICAgICAgLy8gTmV3IFFvUyBGbG93IElEIAorICAgIHBrdF9maWx0ZXJfYWN0X2VudW0gYWN0aW9uOyAgICAgLy8gVXBkYXRlIGFjdGlvbiBmb3IgdGhlIHBhY2tldCBmaWx0ZXIKKyAgICBwa3RfZmlsdGVyX3N0cnVjdCAgIHBrdF9maWx0ZXI7IC8vIENvbnRlbnQgb2YgdGhlIG5ldyBwYWNrZXQgZmlsdGVyCit9IHBrdF9maWx0ZXJfYWN0X3N0cnVjdDsKKworCisvKiBQYWNrZXQgZmlsdGVyIGFjdGlvbiBsaXN0IHN0cnVjdCBmb3IgVENNLCBVUENNICovCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICBwa3RfZmlsdGVyX251bTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2YgcGFja2V0IGZpbHRlcnMgdG8gYmUgdXBkYXRlIGluIHRoZSBmb2xsb3dpbmcgbGlzdAorICAgIHBrdF9maWx0ZXJfYWN0X3N0cnVjdCAgICpwa3RfZmlsdGVyX2xpc3RbTUFYX1BBQ0tFVF9GSUxURVJfTlVNICogMl07IC8vIExpc3Qgb2YgcGFja2V0IGZpbHRlcnMgdG8gYmUgdXBkYXRlIGFuZCBlYWNoIHdpdGggc3BlY2lmaWMgRVBTIGJlYXJlciBJRC9OU0FQSSAmIGFjdGlvbgorfSBwa3RfZmlsdGVyX2FjdF9saXN0X3N0cnVjdDsKKworLyogUGFja2V0IGZpbHRlciBhY3Rpb24gbGlzdCBsaW5rLWxpc3Qgbm9kZSBmb3IgVkdTTSwgVENNLCBVUENNICovCit0eXBlZGVmIHN0cnVjdCBfcGt0X2ZpbHRlcnNfYWN0X2xpc3Rfbm9kZV9zdHJ1Y3QgeworICAgIHBrdF9maWx0ZXJfYWN0X2xpc3Rfc3RydWN0IHBrdF9maWx0ZXJzOyAvLyBQYWNrZXQgZmlsdGVycyBBY3Rpb24gaW4gYSBRb1MgUnVsZQorICAgIHN0cnVjdCBfcGt0X2ZpbHRlcnNfYWN0X2xpc3Rfbm9kZV9zdHJ1Y3QgKm5leHQ7IC8vIFBvaW50IHRvIHRoZSBuZXh0IHBrdF9maWx0ZXJzIGFjdCBsaXN0IGluIHRoZSBuZXh0IFFvUyBSdWxlCit9IHBrdF9maWx0ZXJzX2FjdF9saXN0X25vZGVfc3RydWN0OworCisvKiBURlQgUERVIHN0cnVjdCBmb3IgU00vRVNNLCBUQ00gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDE2ICBsZW5ndGg7ICAgLy8gbGVuZ3RoIG9mIHRoZSBURlQgcmF3IGRhdGE6IHVwZ3JhZGUgdG8gdWludDE2IGZvciA1RworICAgIGthbF91aW50OCAgICpkYXRhOyAgICAvLyBURlQgcmF3IGRhdGEKK30gdGZ0X3BkdV9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCAgIGF1dGhfdG9rZW5fbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlbmd0aCBvZiBhdXRob3JpemF0aW9uIHRva2VuCisgICAga2FsX3VpbnQ4ICAgYXV0aF90b2tlbltNQVhfQVVUSE9SSVpBVElPTl9UT0tFTl9MRU5dOyAgICAgICAgICAgICAgICAgICAgLy8gYXV0aG9yaXphdGlvbiB0b2tlbgorICAgIGthbF91aW50OCAgIGZsb3dfaWRfbnVtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciBvZiBmbG93IGlkZW50aWZpZXJzCisgICAga2FsX3VpbnQ4ICAgZmxvd19pZF9saXN0W01BWF9GTE9XX0lERU5USUZJRVJfTlVNXVtGTE9XX0lERU5USUZJRVJfTEVOXTsgLyogZmxvdyBpZGVudGlmaWVyIGxpc3QgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKE5PVEU6IGFuIGF1dGh0b2tlbiBjYW4gZm9sbG93IG9uZSBvciBtb3JlIGZsb3cgaWRlbnRpZmllcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgIGFuZCBlYWNoIGZsb3cgaWRlbnRpZmllciBpcyBGTE9XX0lERU5USUZJRVJfTEVOICg0IGJ5dGUpIGxvbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IHRmdF9hdXRodG9rZW5fZmxvd2lkX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4ICAgbGlua2VkX3BmX2lkX251bTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2YgbGlua2VkIHBhY2tldCBmaWx0ZXIgSURzIGNhcnJpZWQgaW4gbGlua2VkX3BmX2lkX2xpc3RbXQorICAgIGthbF91aW50OCAgIGxpbmtlZF9wZl9pZF9saXN0W01BWF9QQUNLRVRfRklMVEVSX05VTV07ICAgLyogTGlua2VkIHBhY2tldCBmaWx0ZXIgSUQgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKE5PVEUxOiBVc2VkIHRvIGluZGljYXRlIHRvIE5XIHRoZSBjaGFuZ2UgZm9yIHdoaWNoIHNlcnZpY2UgYXBwbGllcyB0bykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIChOT1RFMjogV2lsbCBhcHBlYXIgd2hlbiwgMS4gR0JSIGNoYW5nZXMsIDIuIFRGVCBvcGVyYXRpb24gPSAnQWRkIHBhY2tldCBmaWx0ZXJzIHRvIGV4aXN0aW5nIFRGVCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGF1dGh0b2tlbl9mbG93aWRfbnVtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2YgYXV0aHRva2VuX2Zsb3dpZCBncm91cCBpbiBhdXRodG9rZW5fZmxvd2lkX2xpc3RbXQorICAgIHRmdF9hdXRodG9rZW5fZmxvd2lkX3N0cnVjdCAgICAgYXV0aHRva2VuX2Zsb3dpZF9saXN0W01BWF9BVVRIVE9LRU5fRkxPV0lEX05VTV07IC8vIEF1dGhvcml6YXRpb24gYW5kIGZsb3cgaWRlbnRpZmllciBncm91cCBsaXN0CisKK30gdGZ0X3BhcmFtZXRlcl9saXN0X3N0cnVjdDsKKworLyogVEZUIHN0cnVjdCBmb3IgU00vRVNNLCBUQ00sIEw0QyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBjaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGV4dCBpZAorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICBlc3Rfd29fdGZ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5kaWNhdGUgd2hldGhlciBURlQgaXMgZXN0YWJsaXNoZWQgd2l0aG91dCBURlQKKyAgICB0ZnRfb3BlcmF0aW9uX2VudW0gICAgICAgICAgdGZ0X29wY29kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRGVCBvcGVyYXRpb24gY29kZQorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICBlYml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgd2hldGhlciBwYXJhbWV0ZXIgbGlzdCBleGlzdHMKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfZGVmYXVsdF9iZWFyZXI7ICAgICAgICAgICAgICAgICAgICAgIC8vICgyMzRHKSBJbmRpY2F0ZSB3aGV0aGVyIGl0J3MgcHJpbWFyeSBwZHAvIGRlZmF1bHQgYmVhcmVyCisgICAgCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIGRxcl9iaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoNUcpSW5kaWNhdGUgd2hldGhlciB0aGUgUW9TIHJ1bGUgaXMgdGhlIGRlZmF1bHQgUW9TIHJ1bGUKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgcXJpX3ByZXNlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICg1RykKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgcXJpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICg1RykgUW9TIHJ1bGUgaWQKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgcXJfcHJlY2VkZW5jZV9wcmVzZW50OyAgICAgICAgICAgICAgICAgICAvLyAoNUcpCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIHFyX3ByZWNlZGVuY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoNUcpIHByZWNlZGVuY2UgdmFsdWUgb2YgUW9TIHJ1bGUKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgcWZpX3ByZXNlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICg1RykKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgcWZpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICg1RykgUW9TIEZsb3cgSWQKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgcHNpX3ByZXNlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICg1RykKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgcHNpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICg1RykgUERVIHNlc3Npb24gaWQKKyAgICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgcGZfbnVtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBwYWNrZXQgZmlsdGVyIGNhcnJpZWQgaW4gcGZfbGlzdFtdCisgICAgcGt0X2ZpbHRlcl9zdHJ1Y3QgICAgICAgICAgIHBmX2xpc3RbTUFYX1BBQ0tFVF9GSUxURVJfTlVNXTsgICAgICAgICAvLyBQYWNrZXQgZmlsdGVyIGxpc3QKKyAgICB0ZnRfcGFyYW1ldGVyX2xpc3Rfc3RydWN0ICAgcGFyYW1ldGVyX2xpc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICgyMzRHKVBhcmFtZXRlciBsaXN0CisgICAgCit9IHRmdF9pbmZvX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50MTYgIGxlbmd0aDsgICAvLyBsZW5ndGggb2YgdGhlIFFvUyBSdWxlcyByYXcgZGF0YQorICAgIGthbF91aW50OCAgICpkYXRhOyAgICAvLyByYXcgZGF0YSBvZiBRb1MgUnVsZXMKK30gcXJzX3Jhd19zdHJ1Y3Q7CisKKy8qIEEgbWVtb3J5IHJlZHVjdGlvbiB2ZXJzaW9uIG9mIHRmdF9pbmZvX3N0cnVjdCBzdHJ1Y3QuCisgKiBUaGUgdHlwZSBvZiBwZl9saXN0IGlzIGNoYW5nZSBmcm9tIHBrdF9maWx0ZXJfc3RydWN0IHRvIHBrdF9maWx0ZXJfc3RydWN0KiAocG9pbnRlcikgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgY2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQgaWQKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgZXN0X3dvX3RmdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZGljYXRlIHdoZXRoZXIgVEZUIGlzIGVzdGFibGlzaGVkIHdpdGhvdXQgVEZUCisgICAgdGZ0X29wZXJhdGlvbl9lbnVtICAgICAgICAgIHRmdF9vcGNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBURlQgb3BlcmF0aW9uIGNvZGUKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgZWJpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluZGljYXRlIHdoZXRoZXIgcGFyYW1ldGVyIGxpc3QgZXhpc3RzCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIGlzX2RlZmF1bHRfYmVhcmVyOyAgICAgICAgICAgICAgICAgICAgICAvLyAoMjM0RykgSW5kaWNhdGUgd2hldGhlciBpdCdzIHByaW1hcnkgcGRwLyBkZWZhdWx0IGJlYXJlcgorICAgIAorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICBkcXJfYml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKDVHKUluZGljYXRlIHdoZXRoZXIgdGhlIFFvUyBydWxlIGlzIHRoZSBkZWZhdWx0IFFvUyBydWxlCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIHFyaV9wcmVzZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoNUcpCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIHFyaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoNUcpIFFvUyBydWxlIGlkCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgIHFyX3ByZWNlZGVuY2VfcHJlc2VudDsgICAgICAgICAgICAgICAgICAvLyAoNUcpCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIHFyX3ByZWNlZGVuY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoNUcpIHByZWNlZGVuY2UgdmFsdWUgb2YgUW9TIHJ1bGUKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgcWZpX3ByZXNlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICg1RykKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgcWZpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICg1RykgUW9TIEZsb3cgSWQKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgcHNpX3ByZXNlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICg1RykKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgcHNpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICg1RykgUERVIHNlc3Npb24gaWQKKyAgICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgcGZfbnVtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBwYWNrZXQgZmlsdGVyIGNhcnJpZWQgaW4gcGZfbGlzdFtdCisgICAgcGt0X2ZpbHRlcl9zdHJ1Y3QgICAgICAgICAgICpwZl9saXN0W01BWF9QQUNLRVRfRklMVEVSX05VTV07ICAgICAgICAvLyBQb2ludGVycyB0byBwYWNrZXQgZmlsdGVyIGxpc3QKKyAgICB0ZnRfcGFyYW1ldGVyX2xpc3Rfc3RydWN0ICAgcGFyYW1ldGVyX2xpc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICgyMzRHKVBhcmFtZXRlciBsaXN0ICAgIAorfSB0ZnRfaW5mb193X3BmX3B0cl9zdHJ1Y3Q7CisKKy8qIFRGVCBpbmZvIGxpc3QgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggICAgICAgICAgIHRmdF9udW07CisgICAgdGZ0X2luZm9fc3RydWN0ICAgICB0ZnRfaW5mb1sgMSArIFRGVExJQl9NQVhfUVJfTlVNX1BFUl9QRFVTXTsgLy8gKzEgZm9yIDIzNEcgVEZUCit9IHRmdF9pbmZvX2xpc3Rfc3RydWN0OworCisvKiBycW9zIHJ1bGUgc3RydWN0ICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX2Jvb2wgICAgICAgICAgICBydWxlX2luX3VzZTsgICAgLy8KKyAgICBrYWxfdWludDggICAgICAgICAgIHJ1bGVfaWR4OyAgICAgICAvLyA9IHBmIGlkeAorICAgIGthbF91aW50OCAgICAgICAgICAgcXJpOyAgICAgICAgICAgIC8vICg1RykgUW9TIHJ1bGUgaWQKKyAgICBrYWxfdWludDggICAgICAgICAgIHFyX3ByZWNlZGVuY2U7ICAvLyAoNUcpIHByZWNlZGVuY2UgdmFsdWUgb2YgUW9TIHJ1bGUKKyAgICBrYWxfdWludDggICAgICAgICAgIHBzaTsgICAgICAgICAgICAvLyAoNUcpIFBEVSBzZXNzaW9uIGlkCisgICAga2FsX3VpbnQ4ICAgICAgICAgICBxZmk7ICAgICAgICAgICAgLy8gKDVHKSBRb1MgRmxvdyBJZAorICAgIGthbF91aW50MzIgICAgICAgICAgdDM1ODM7CisgICAgcGt0X2ZpbHRlcl9zdHJ1Y3QgICBwZjsgICAgICAgICAgICAgLy8gcGFja2V0IGZpbHRlcgorICAgIAorfSB0ZnRsaWJfcnFvc19ydWxlX3N0cnVjdDsKKworCisvLyBwZHVzIGluZm8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgY2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQgaWQKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgcW9zX2Zsb3dfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICg1RykgUW9TIEZsb3cgSWQKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgcW9zX3J1bGVfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICg1RykgUW9TIFJ1bGUgSWQKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgcXJfcHJlY2VkZW5jZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICg1RykgcHJlY2VkZW5jZSB2YWx1ZSBvZiBRb1MgcnVsZQorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICBkcXJfYml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKDVHKUluZGljYXRlIHdoZXRoZXIgdGhlIFFvUyBydWxlIGlzIHRoZSBkZWZhdWx0IFFvUyBydWxlCit9IHFvc19ydWxlX2luZm9fc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcHNpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoNUcpIHBkdSBzZXNzaW9uIGlkCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcW9zX2Zsb3dfY291bnQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgcW9zX3J1bGVfbGlzdF9sZW47CisKKyAgICAvLyBwc2kncyBpbmZvCisgICAgcW9zX3J1bGVfaW5mb19zdHJ1Y3QgICAgcW9zX3J1bGVfbGlzdFtURlRMSUJfTUFYX1FSX05VTV9QRVJfUERVU107ICAvLyAoNUcpIFFvUyBSdWxlIElkIExpc3QKK30gcGR1c19pbmZvX3N0cnVjdDsKKworCisvLyBiZWFyZXIgaW5mbwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBlYmk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gMjNHOiBuc2FwaSAgICAgICAKKworICAgIC8vIGViaSdzIGluZm8KKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgY2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIC8vIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBsaW5rX2ViaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gMjNHOiBuc2FwaSBvZiBwcmltYXJ5IGNpZAorfSBiZWFyZXJfaW5mb19zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBURlRMSUJfQ09NTU9OX1NUUlVDVF9IXyAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3RmdGxpYl9tc2dfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdGZ0bGliX21zZ19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDgyMGM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3RmdGxpYl9tc2dfc3RydWN0LmgKQEAgLTAsMCArMSwxMTA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTIKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgdGZ0bGliX21zZ19zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBNT0xZCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgbWVzc2FnZSBhbmQgY29tbW9uIHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciBURlRMSUIgKGZvciBVVC9JVCBvbmx5KQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogJExvZyQKKyAqCisgKiAwOCAxMiAyMDIwIHRlcmVuY2Uua3VvCisgKiBbTU9MWTAwNTU3MzE4XSBbTVQ2ODc1XVtNYXJnYXV4XVtRMF1bUjNdW01QNl1bU1FDXVtJbnRlcm5hbF1bV1cgRlRdW0NoaW5hXVtRdXpob3VdWzVHTU1dW01EU1RdW1NXSUZUXVtTXVtDTUNDK0ludmFsaWRdW0Vycm9yIHRpbWVzOjFdU3lzdGVtIEFQSSBEdW1wLDExNjUsMjksOTksL2RhdGEvdmVuZG9yL2NvcmUvLDEsLG10a3JpbGQ6QVQgY29tbWFuZCBwZW5kaW5nIHRvbyBsb25nLiBhc3NlcnQhISEgQVQgY21kOiBFQVBOQUNULnRpbWVyOiA5MDAwMDBtcworICogLiBQcm92aWRlIGEgbmV3IEFQSSB3aGljaCBjb25zdHJ1Y3RzIGNvbnRleHQgZm9yIGRlZmF1bHQgYmVhcmVyIHdpdGhvdXQgdGZ0IHRvIFRDTS4KKyAqCisgKiAwNCAxNSAyMDIwIHRlcmVuY2Uua3VvCisgKiBbTU9MWTAwNTA4MjQxXSBNZW1vcnkgcmVkdWN0aW9uIC0gbDQgcHMgY2lkIHJlZHVjdGlvbiBhbmQgcmVkdWNlIG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnQgZmxvdworICogMS4gU3VwcG9ydCBzZXR0aW5nIG51bGwgZm9yIHBmX2FjdF9saXN0IHBhcmFtZXRlci4KKyAqIDIuIFN1cHBvcnQgcW9zIGZsb3cgZGVhY3RpdmF0aW9uLgorICogMy4gUmVjb3JkIHFyJ3MgcHJlY2VkZW5jZSBpbnRvIGNvbnRleHQgaW4gdGZ0bGliX3NldF91c2VyX2RlZmluZWRfdGZ0KCkgaWYgcmF0ZSBpcyA1Zy4KKyAqIDQuIEFkZCBwcmltaXRpdmUgdHJhY2VzIHRvIHJlY29yZCBjdXJyZW50IGFwcGxpZWQgcXIvIHRmdCBzdGF0dXMgZm9yIGFuYWx5c2lzLgorICogNS4gdHJhY2UgZW5oYW5jZW1lbnQKKyAqCisgKiAwNCAwNiAyMDIwIHRlcmVuY2Uua3VvCisgKiBbTU9MWTAwNTA4MjQxXSBNZW1vcnkgcmVkdWN0aW9uIC0gbDQgcHMgY2lkIHJlZHVjdGlvbiBhbmQgcmVkdWNlIG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnQgZmxvdworICogLiBBZGQgcHJpbWl0aXZlIHRyYWNlcyB0byByZWNvcmQgY3VycmVudCBhcHBsaWVkIHFyLyB0ZnQgc3RhdHVzIGZvciBhbmFseXNpcy4KKyAqCisgKiAwMyAzMSAyMDIwIHRlcmVuY2Uua3VvCisgKiBbTU9MWTAwNTA4MjQxXSBNZW1vcnkgcmVkdWN0aW9uIC0gbDQgcHMgY2lkIHJlZHVjdGlvbiBhbmQgcmVkdWNlIG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnQgZmxvdworICogMS4gU3VwcG9ydCBzZXR0aW5nIG51bGwgZm9yIHBmX2FjdF9saXN0IHBhcmFtZXRlci4KKyAqIDIuIFN1cHBvcnQgcW9zIGZsb3cgZGVhY3RpdmF0aW9uLgorICogMy4gUmVjb3JkIHFyJ3MgcHJlY2VkZW5jZSBpbnRvIGNvbnRleHQgaW4gdGZ0bGliX3NldF91c2VyX2RlZmluZWRfdGZ0KCkgaWYgcmF0ZSBpcyA1Zy4KKyAqIDQuIEFkZCB0aGUgdHJhY2UgdG8gcmVjb3JkIHRoZSBudW1iZXIgb2YgcGR1cy8gcW9zIGZsb3cvIHFvcyBydWxlLyBwYWNrZXQgZmlsdGVyLgorICoKKyAqIDExIDIyIDIwMTkgdGVyZW5jZS5rdW8KKyAqIFtNT0xZMDA0NjA4MzBdIFtNVDY4ODVdW1BldHJ1c11bTVAxXVtFcmljc3Nvbl1bSU9EVF1bU0EgRnVsbFN0YWNrXVtLaXN0YV1bNUddIEZhdGFsIEVycm9yICgweDgyMywgMHgxMDAwLCAweGNjY2NjY2NjKSAtIChMSVNSKVBIWSBMVE1SIEluc3QxCisgKiAJCisgKiAuIENsYWVyIHRoZSBoZWFkZXIgYW5kIG5leHQgb2YgYXBwbGllZC8gZGVmaW5lZCBxcnMgY29ycmVjdGx5LgorICoKKyAqIDA5IDIzIDIwMTkgdGVyZW5jZS5rdW8KKyAqIFtNT0xZMDA0NDI1MDVdIFVwZGF0ZSBmb3IgTWFyY2ggQ1IgYW5kIHRyYWNlIGVuaGFuY2VtZW50cy4KKyAqIAkKKyAqIC4gVXBkYXRlIGZvciBNYXJjaCBDUiBhbmQgdHJhY2UgZW5oYW5jZW1lbnRzLgorICoKKyAqIDA5IDA0IDIwMTkgdGVyZW5jZS5rdW8KKyAqIFtNT0xZMDA0MzQ3NTRdIFVwZ3JhZGUgQ0dURlQgdG8gc3VwcG9ydCA1R0MKKyAqIAkKKyAqIC4gVXBkYXRlIENHVEZUIGJlaGF2aW9ycyBpbiB0ZnRsaWIuCisgKgorICogMDMgMjYgMjAxOSBqZWZmZXJ5LmNoZW4KKyAqIFtNT0xZMDAzOTM0NTZdIFtHZW45N11bVk1PTFldIDQ1RyBJbnRlclJBVCAmIGludGVyU3lzdGVtIGZlYXR1cmUKKyAqIAkKKyAqIAlbVEZUTElCXSBpbnRlcmZhY2UgcGFydC4KKyAqCisgKiAwMyAyNiAyMDE5IGplZmZlcnkuY2hlbgorICogW01PTFkwMDM5MzQ1Nl0gW0dlbjk3XVtWTU9MWV0gNDVHIEludGVyUkFUICYgaW50ZXJTeXN0ZW0gZmVhdHVyZQorICogCQorICogCVtURlRMSUJdIGludGVyZmFjZSBwYXJ0LgorICoKKyAqIDEyIDE0IDIwMTggamVmZmVyeS5jaGVuCisgKiBbTU9MWTAwMzcyNjM1XSBbVk1PTFldIEw0L1RDTS9URlRMSUIvVkdTTSBwaGFzZTIgY2hlY2staW4KKyAqIAkKKyAqIAlbVEZUTElCXSBwaGFzZTIgY2hlY2staW4uCisgKgorICogMDkgMTQgMjAxOCBqZWZmZXJ5LmNoZW4KKyAqIFtNT0xZMDAzMDYxNDhdIFtOQVNdIHBhbmd1IGdpYW50IENSCisgKiAJCisgKiAJW1RGVExJQl0gcGFzcyAxc3QgTkFTIE1vRElTIElULgorICoKKyAqIDA4IDE3IDIwMTggamVmZmVyeS5jaGVuCisgKiBbTU9MWTAwMzA2MTQ4XSBbTkFTXSBwYW5ndSBnaWFudCBDUgorICogW1RGVExJQl0gcmUtYXJjaGl0ZWN0dXJlLgorICoKKyAqIDA4IDE3IDIwMTggamVmZmVyeS5jaGVuCisgKiBbTU9MWTAwMzA2MTQ4XSBbTkFTXSBwYW5ndSBnaWFudCBDUgorICogCQorICogCVtURlRMSUJdIHJlLWFyY2hpdGVjdHVyZS4KKyAqCisgKiAxMCAxOSAyMDE2IHJlbmh1YW5nLmxpdQorICogW01PTFkwMDIwMzI2MF0gW1RGVExJQl0gTG9nZ2luZyBtZWNoYW5pc20gcmVmaW5lbWVudAorICogOTMgVEZUTElCIHJlLWFyY2ggNAorICoKKyAqIDEwIDE3IDIwMTYgcmVuaHVhbmcubGl1CisgKiBbTU9MWTAwMjA1MDM1XSBbVEZUTElCXSBNZW1vcnkgbWFuYWdlbWVudCBpbiBURlQgaW50ZXJuYWwKKyAqIFJlc29sdmUgYnVpbGQgZXJyb3I6CisgKiBwY29yZS9tb2RlbS9pbnRlcmZhY2UvZ2VuZXJhbC8uLi8uLi9sNC90Y20vdGZ0bGliLy4uL2NvbW1vbi90Y21fY29udGV4dC5oOjU1OToyOTogZmF0YWwgZXJyb3I6IHRjbV91Z3RjbV90aW1lci5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgKgorICogMTAgMTcgMjAxNiByZW5odWFuZy5saXUKKyAqIFtNT0xZMDAyMDUwMzVdIFtURlRMSUJdIE1lbW9yeSBtYW5hZ2VtZW50IGluIFRGVCBpbnRlcm5hbAorICogUmVzb2x2ZSB0aGUgYnVpbGQgZXJyb3I6CisgKiBwY29yZS9tb2RlbS9pbnRlcmZhY2UvZ2VuZXJhbC8uLi8uLi9sNC90Y20vdGZ0bGliLy4uL2NvbW1vbi90Y21fY29udGV4dC5oOjU1OToyOTogZmF0YWwgZXJyb3I6IHRjbV91Z3RjbV90aW1lci5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgKgorICogMTAgMTYgMjAxNiByZW5odWFuZy5saXUKKyAqIFtNT0xZMDAyMDUwMzVdW1RGVExJQl0gTWVtb3J5IG1hbmFnZW1lbnQgaW4gVEZUIGludGVybmFsCisgKgorICogMDkgMjYgMjAxNiB2ZXJhLnllaAorICogW01PTFkwMDIwNTExNl0gWzYyOTNdW0VTTV1bVEZUTElCXSBuZXcgZmVhdHVyZS9yZS1hcmNoIGl0ZW0gcG9ydGluZyB0byBVTU9MWUEgdHJ1bmsKKyAqIFtURlRMSUJdW09BXSBQUy5ERVYgcG9ydGluZyB0byBVTU9MWUEuVHJ1bmsuCisgKiAJMS4gVEZUTElCIFVUIGVuaGFuY2VtZW50CisgKiAJMi4gVUxfUEZfQ0hFQ0sKKyAqCisgKiAxMSAxNyAyMDE0IGplZmZlcnkuY2hlbgorICogW01PTFkwMDA4NDYzNF0gW1VNT0xZXVtSMTBdW1IxMV0gTkFTIGNoZWNrLWluIGZyb20gNjI5MV9ERVYgdG8gVU1PTFkKKyAqIFtSMTBdW1IxMV0gTkFTIGNoZWNrLWluIGZyb20gNjI5MV9ERVYgdG8gVU1PTFkKKyAqCisgKiAwOSAxMCAyMDE0IGplZmZlcnkuY2hlbgorICogW01PTFkwMDA3ODI2NF0gW1VNT0xZXVtSMTBdW1IxMV0gTkFTIGNoZWNrLWluIGZyb20gQ0JyIHRvIDYyOTFfREVWCisgKiBbUjEwXVtSMTFdIE5BUyBjaGVjay1pbiBmcm9tIENCciB0byA2MjkxX0RFVgorICoKKyAqIDAxIDI5IDIwMTQgam9lLmNoYW5nCisgKiBbTU9MWTAwMDU1MzM0XSBbTVQ2MjkwXVtTR0xURSBEU0RTXSBOZXcgZmVhdHVyZSBjaGVjay1pbiBNT0xZCisgKiBURlRMSUIgY2hlY2staW4gcmVsYXRlZCBpbnRlcmZhY2UKKyAqCisgKiAwMSAyMSAyMDE0IHdjcHVzZXJfaW50ZWdyYXRvcgorICogW01PTFkwMDA1NDQ3NV0gU0dMVEUgb3B0aW9uIHJlbmFtZQorICogLgorICoKKyAqIDExIDE4IDIwMTMgam9lLmNoYW5nCisgKiBbTU9MWTAwMDQ1MDMzXSBbTU9MWV1bU01dW0VTTV1bVENNXVtURlRdW0N1c3RvbV0gTlJTUENBKE5JU1BDQSkgTmV0d29yayBSZXF1ZXN0ZWQvSW5pdGlhdGVkIFNlY29uZGFyeSBQRFAgQ29udGV4dCBBY3RpdmF0aW9uCisgKiBDaGVjay1pbiBURlRMSUIgcGFydAorICoKKyAqIDExIDA2IDIwMTMgam9lLmNoYW5nCisgKiBbTU9MWTAwMDQ1MzAyXSBbTVQ2MjkwXVtMVEVdIFRGVExJQiBBUEkgdXBkYXRlIGZvciBtdWx0aS1jb250ZXh0IHByb2plY3QKKyAqIAlDaGVjay1pbiBURlRMSUIgcGFydAorICoKKyAqIDEwIDMxIDIwMTMgam9lLmNoYW5nCisgKiBbTU9MWTAwMDQ0NDIzXSBbTVQ2MjkwXSBOZXcgVEZUIEFUIGNvbW1hbmQgZGV2ZWxvcG1lbnQgbWVyZ2UgYmFjayB0byBNT0xZCisgKiBjaGVjayBpbiBURlRMSUIgcmVsYXRlZCBjaGFuZ2UKKyAqCisgKiAwOCAxMiAyMDEzIGpvZS5jaGFuZworICogW01PTFkwMDAzMzM0OF0gW01UNjI5MF1bTU1EQ10gTU1EQyB0eXBlIDIgc2luZ2xlIGxvYWQgZmVhdHVyZSBmb3IgVEZUTElCCisgKiBjb2RlIGNoZWNrIGluCisgKgorICogMDYgMTAgMjAxMyBqb2UuY2hhbmcKKyAqIFtNT0xZMDAwMjUyODZdIFtNVDcyMDhdW05XLVVFIFNJTV0gW1RDIDEwLjguMV0gQVQrQ0dDTU9EIEVycm9yIGR1ZSB0byBURlQgY29tcG9zZSBpc3N1ZQorICogVEZUTElCIG1vZGlmaWNhdGlvbiBmb3IgQVQrQ0dURlQgaW50ZXJwcmV0YXRpb24gKHN1cHBvcnQgYm90aCBkaWZmZXJlbmNlIHNldCAmIGZ1bGwgc2V0KQorICoKKyAqIDA1IDI3IDIwMTMgam9lLmNoYW5nCisgKiBbTU9MWTAwMDIzNzg5XSBbTVQ2MjkwXVtURlRMSUJdIE5ldyBhcmNoaXRlY3R1cmUgJiBFTSBzdXBwb3J0CisgKiBURlRMSUIgcGFydCBjaGVjay1pbgorICoKKyAqIDExIDA3IDIwMTIgam9lLmNoYW5nCisgKiBbTU9MWTAwMDA1MzIyXSBUQVRBS0EgbWVyZ2UgdG8gTU9MWQorICogW0pvZV0gVEZUTElCIHBhcnQgaXMgY2hlY2sgaW4gZG9uZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgVEZUTElCX01TR19TVFJVQ1RfSF8KKyNkZWZpbmUgVEZUTElCX01TR19TVFJVQ1RfSF8KKworI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIgorCisvLyNpbmNsdWRlICJ0ZnRsaWJfdGltZXIuaCIKKyNpbmNsdWRlICJ0ZnRsaWJfY29tbW9uX3N0cnVjdC5oIgorI2luY2x1ZGUgImlwZmNfZXhwb3J0X3BsdWdpbl9ycW9zLmgiCisKKy8qKioqKiBtZXNzYWdlIHN0cnVjdHVyZSBkZWZpbml0aW9uICoqKioqLworCisvKiBNU0dfSURfVEZUTElCX1ZHU01fUlFPU19VUERBVEVfUkVRICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggICBwc2k7CisgICAga2FsX3VpbnQ4ICAgcWZpOworICAgIGthbF91aW50OCAgIHJ1bGVfaWR4OworICAgIHBrdF9maWx0ZXJfYWN0X2VudW0gYWN0aW9uOworICAgIHBrdF9maWx0ZXJfc3RydWN0ICAgcGY7CisKK30gdGZ0bGliX3Znc21fcnFvc191cGRhdGVfcmVxX3N0cnVjdDsKKworCisvLyNpZmRlZiBfX1RGVExJQl9VVF9fCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICBzaW1faW5keDsKKyAgICB0ZnRfYmVhcmVyX2FjdF9lbnVtICAgICAgICAgICAgIGJlYXJlcl9hY3Q7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgICAgICBub19hdXRoX3Fvc19ydWxlczsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGF1dGhfcW9zX3J1bGVzW01BWF9RT1NfUlVMRVNfTEVOXTsKKworfSB0ZnRsaWJfcXJzX3ByZWNoZWNrX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBwc2k7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBxZmk7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBxcmk7CisgICAga2FsX3VpbnQxNiAgICAgICAgICAgICAgICAgICAgICBxcl9yYXdfbGVuOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgcXJfcmF3W01BWF9URlRfTEVOXTsKKyAgICBiZWFyZXJfdHlwZV9lbnVtICAgICAgICAgICAgICAgIGJlYXJlcl90eXBlOworICAgIHRmdF9wcm9jX2Rpcl9lbnVtICAgICAgICAgICAgICAgcHJvY19kaXI7CisgICAgdGZ0X2JlYXJlcl9hY3RfZW51bSAgICAgICAgICAgICBiZWFyZXJfYWN0OworICAgIGV0ZnRfZW51bSAgICAgICAgICAgICAgICAgICAgICAgZXRmdDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHByZWNlZGVuY2U7CisKK30gdGZ0bGliX3FyX2RlY29kZV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIHNpbV9pbmR4OworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgYmVhcmVyX2lkOworICAgIGthbF91aW50MTYgICAgICAgICAgICAgICAgICAgICAgdGZ0X3Jhd19sZW47CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICB0ZnRfcmF3W01BWF9URlRfTEVOXTsKKyAgICBiZWFyZXJfdHlwZV9lbnVtICAgICAgICAgICAgICAgIGJlYXJlcl90eXBlOworICAgIHRmdF9wcm9jX2Rpcl9lbnVtICAgICAgICAgICAgICAgcHJvY19kaXI7CisgICAgdGZ0X2JlYXJlcl9hY3RfZW51bSAgICAgICAgICAgICBiZWFyZXJfYWN0OworICAgIGJjbV9lbnVtICAgICAgICAgICAgICAgICAgICAgICAgYmNtOworICAgIGV0ZnRfZW51bSAgICAgICAgICAgICAgICAgICAgICAgZXRmdDsKKyAgICByYXRfaW5kX2VudW0gICAgICAgICAgICAgICAgICAgIHJhdDsKKworfSB0ZnRsaWJfdGZ0X2RlY29kZV9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7CisgICAgdGZ0X2luZm9fc3RydWN0ICAgICAgICAgICAgICAgICB0ZnQ7CisgICAgZXRmdF9lbnVtICAgICAgICAgICAgICAgICAgICAgICBldGZ0OworICAgIAorfSB0ZnRsaWJfdGZ0X2VuY29kZV9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBiZWFyZXJfaWQ7CisgICAgYmVhcmVyX3R5cGVfZW51bSAgICAgICAgICAgICAgICBiZWFyZXJfdHlwZTsKKyAgICBiY21fZW51bSAgICAgICAgICAgICAgICAgICAgICAgIGJjbTsgICAgICAgICAvLyAyMDEzMTEwNl9Kb2U6IEFkZGVkIHRvIHN1cHBvcnQgMi8zRyAnTVMvTlcnIAorICAgIHJhdF9pbmRfZW51bSAgICAgICAgICAgICAgICAgICAgcmF0OworICAgIAorfSB0ZnRsaWJfdGZ0X3ZhbGlkYXRlX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICBzaW1faW5keDsKKyAgICB0ZnRfaW5mb19zdHJ1Y3QgICAgICAgICAgICAgICAgIHNyY190ZnQ7CisgICAgcGZfZGlyZWN0aW9uX2VudW0gICAgICAgICAgICAgICBwZl9kaXI7CisgICAgCit9IHRmdGxpYl90ZnRfZGlyX2V4dHJhY3Rfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIHNpbV9pbmR4OyAgICAgICAgCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBjaWQ7CisgICAgdGZ0X2luZm9fc3RydWN0ICAgICAgICAgICAgICAgICB0ZnQ7CisgICAgdGZ0X3Byb2NfZGlyX2VudW0gICAgICAgICAgICAgICBwcm9jX2RpcjsKKyAgICB0ZnRfYmVhcmVyX2FjdF9lbnVtICAgICAgICAgICAgIGJlYXJlcl9hY3Q7CisgICAgcmF0X2luZF9lbnVtICAgICAgICAgICAgICAgICAgICByYXQ7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBpc19wZl9hY3RfbGlzdF9udWxsOworfSB0ZnRsaWJfc2V0X2FwcGxpZWRfdGZ0X3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICBzaW1faW5keDsgICAgICAgIAorICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgZWJpOworICAgIHRmdF9pbmZvX3N0cnVjdCAgICAgICAgICAgICAgICAgdGZ0OworICAgIGJlYXJlcl90eXBlX2VudW0gICAgICAgICAgICAgICAgYmVhcmVyX3R5cGU7CisgICAgdGZ0X3Byb2NfZGlyX2VudW0gICAgICAgICAgICAgICBwcm9jX2RpcjsKKyAgICB0ZnRfYmVhcmVyX2FjdF9lbnVtICAgICAgICAgICAgIGJlYXJlcl9hY3Q7CisgICAgcmF0X2luZF9lbnVtICAgICAgICAgICAgICAgICAgICByYXQ7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBpc19wZl9hY3RfbGlzdF9udWxsOworfSB0ZnRsaWJfc2V0X2FwcGxpZWRfdGZ0X2J5X2ViaV9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7ICAgICAgICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHBzaTsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHFmaTsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHFyaTsKKyAgICB0ZnRfaW5mb19zdHJ1Y3QgICAgICAgICAgICAgICAgIHFyOworICAgIGJlYXJlcl90eXBlX2VudW0gICAgICAgICAgICAgICAgYmVhcmVyX3R5cGU7CisgICAgdGZ0X3Byb2NfZGlyX2VudW0gICAgICAgICAgICAgICBwcm9jX2RpcjsKKyAgICB0ZnRfYmVhcmVyX2FjdF9lbnVtICAgICAgICAgICAgIGJlYXJlcl9hY3Q7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBpc19wZl9hY3RfbGlzdF9udWxsOworfSB0ZnRsaWJfc2V0X2FwcGxpZWRfcXJfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIHNpbV9pbmR4OyAgICAgICAgCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBwc2k7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBxZmk7CisKK30gdGZ0bGliX3VwZGF0ZV9kZWFjdF9xcl9saXN0X3RvX2RlbF9xZl9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7ICAgICAKKyAgICB0ZnRsaWJfdHJjX2Z1bmNfbmFtZV9lbnVtICAgICAgIHRmdGxpYl9hcGk7CisKK30gdGZ0bGliX2dlbmVyaWNfYXBpX3JlcV9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBwc2k7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBxZmk7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBydWxlX2lkeDsKKyAgICBwa3RfZmlsdGVyX2FjdF9lbnVtICAgICAgICAgICAgIGFjdGlvbjsKKyAgICBwa3RfZmlsdGVyX3N0cnVjdCAgICAgICAgICAgICAgIHBmOworICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGZfYWN0X2xpc3RfbnVsbDsKKworfSB0ZnRsaWJfcnFvc19zZXRfYXBwbGllZF9xcl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIHNpbV9pbmR4OworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgcHNpOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgTmV4dFFyaTsKKworfSB0ZnRsaWJfcXJfZ2V0X3BmX2FjdF9saXN0X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBlYmk7CisKK30gdGZ0bGliX3RmdF9nZXRfcGZfYWN0X2xpc3Rfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICBzaW1faW5keDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHBzaTsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHFmaTsKKworfSB0ZnRsaWJfcWZfaGFzX2FueV9ydWxlX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7ICAgICAgICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGNpZDsKKyAgICB0ZnRfY29tcG9zZV90eXBlX2VudW0gICAgICAgICAgIHRmdF9jb21wb3NlX3R5cGU7CisgICAgYmVhcmVyX3R5cGVfZW51bSAgICAgICAgICAgICAgICBiZWFyZXJfdHlwZTsKKyAgICB0ZnRfYmVhcmVyX2FjdF9lbnVtICAgICAgICAgICAgIGJlYXJlcl9hY3Q7CisgICAgYmNtX2VudW0gICAgICAgICAgICAgICAgICAgICAgICBiY207CisgICAgcmF0X2luZF9lbnVtICAgICAgICAgICAgICAgICAgICByYXQ7CisKK30gdGZ0bGliX2NvbXBvc2VfdGZ0X3RvX253X3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICBzaW1faW5keDsgICAgICAgIAorICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgcHNpOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgcWZpOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgY2lkOworICAgIHRmdF9jb21wb3NlX3R5cGVfZW51bSAgICAgICAgICAgdGZ0X2NvbXBvc2VfdHlwZTsKKyAgICBiZWFyZXJfdHlwZV9lbnVtICAgICAgICAgICAgICAgIGJlYXJlcl90eXBlOworICAgIHZnX2FjdF9lbnVtICAgICAgICAgICAgICAgICAgICAgdmdfYWN0OworCit9IHRmdGxpYl9jb21wb3NlX2FuZF9lbmNvZGVfcXJzX3RvX253X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7ICAgICAgICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHBzaTsKKyAgICB0ZnRfZGVhY3RfcXJfbGlzdF9zdHJ1Y3QgICAgICAgIGRlYWN0X3FyX2xpc3Q7CisKK30gdGZ0bGliX2NvbXBvc2VfYW5kX2VuY29kZV9kZWFjdF9xcl9saXN0X3RvX253X3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICBzaW1faW5keDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHBzaTsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHFmaTsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGNpZDsKKworfSB0ZnRsaWJfc2V0X2NpZF9mb3JfYXBwbGllZF9xcl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIHNpbV9pbmR4OyAgICAgICAgCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBlYmk7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBjaWQ7CisKK30gdGZ0bGliX3NldF9jaWRfZm9yX2FwcGxpZWRfdGZ0X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7ICAgICAgICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGViaTsKKworfSB0ZnRsaWJfY29uc3RydWN0X2NvbnRleHRfZm9yX2RlZmF1bHRfYmVhcmVyX3dvX3RmdF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIHNpbV9pbmR4OyAgICAgICAgCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBjaWQ7CisgICAgdGZ0X2N0eHRfdHlwZV9lbnVtICAgICAgICAgICAgICB0ZnRfY3R4dF90eXBlOworCit9IHRmdGxpYl9kZWxfdGZ0X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7ICAgICAgICAKKyAgICB0ZnRsaWJfdHJjX2Z1bmNfbmFtZV9lbnVtICAgICAgIGRlbF9hcGk7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBwc2k7ICAgIC8vIHZhbGlkIGZvciBURlRMSUJfREVMX0FQUExJRURfUVJfQllfUFNJLCBURlRMSUJfREVMX0FQUExJRURfUVJfQllfUFNJX1FGSSwgVEZUTElCX0RFTF9BUFBMSUVEX1FSX0JZX1BTSV9RUkkKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHFmaTsgICAgLy8gdmFsaWQgZm9yIFRGVExJQl9ERUxfQVBQTElFRF9RUl9CWV9QU0lfUUZJCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBxcmk7ICAgIC8vIHZhbGlkIGZvciBURlRMSUJfREVMX0FQUExJRURfUVJfQllfUFNJX1FSSQorICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgZWJpOyAgICAvLyB2YWxpZCBmb3IgVEZUTElCX0RFTF9BUFBMSUVEX1RGVF9CWV9FQkkKKyAgICB0ZnRfY3R4dF90eXBlX2VudW0gICAgICAgICAgICAgIHRmdF9jdHh0X3R5cGU7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBpc19wZl9hY3RfbGlzdF9udWxsOworfSB0ZnRsaWJfZGVsX2FwcGxpZWRfdGZ0X29yX3FyX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7ICAgICAgICAKKworfSB0ZnRsaWJfZGVsX2FsbF90ZnRfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICBzaW1faW5keDsgICAgICAgIAorICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgY2lkOworICAgIHRmdF9pbmZvX2xpc3Rfc3RydWN0ICAgICAgICAgICAgdGZ0X2xpc3Q7CisgICAgCit9IHRmdGxpYl9nZXRfdXNlcl9kZWZpbmVkX3RmdF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7ICAgICAgICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGNpZDsKKworfSB0ZnRsaWJfZ2V0X2FwcGxpZWRfdGZ0X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7ICAgICAgICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGNpZDsKKworfSB0ZnRsaWJfZ2V0X2FwcGxpZWRfcXJfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIHNpbV9pbmR4OyAgICAgICAgCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBjaWQ7CisgICAgdGZ0X2luZm9fc3RydWN0ICAgICAgICAgICAgICAgICB0ZnQ7CisgICAgcmF0X2luZF9lbnVtICAgICAgICAgICAgICAgICAgICByYXQ7CisgICAgZXRmdF9lbnVtICAgICAgICAgICAgICAgICAgICAgICBldGZ0OworCit9IHRmdGxpYl9zZXRfdXNlcl9kZWZpbmVkX3RmdF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIHNpbV9pbmR4OyAgICAgICAgCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBjaWQ7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBxcmlfcHJlc2VudDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHFyaTsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGRlbHBmX2lkOworICAgIHJhdF9pbmRfZW51bSAgICAgICAgICAgICAgICAgICAgcmF0OworfSB0ZnRsaWJfc2V0X3Vzcl9kZWxwZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIHNpbV9pbmR4OyAgICAgICAgCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBjaWQ7CisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICBxcmlfcHJlc2VudDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHFyaTsKK30gdGZ0bGliX2dldF91c3JfZGVscGZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICBzaW1faW5keDsgICAgICAgIAorICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgY2lkOworfSB0ZnRsaWJfY2xlYXJfdXNyX2RlbHBmX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7ICAgICAgICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGNpZDsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGxua3BmX2lkOworICAgIHJhdF9pbmRfZW51bSAgICAgICAgICAgICAgICAgICAgcmF0OworfSB0ZnRsaWJfc2V0X3Vzcl9sbmtwZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIHNpbV9pbmR4OyAgICAgICAgCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBjaWQ7Cit9IHRmdGxpYl9nZXRfdXNyX2xua3BmX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2luZHg7ICAgICAgICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGNpZDsKK30gdGZ0bGliX2NsZWFyX3Vzcl9sbmtwZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgICAgICAgIHNpbV9pbmR4OyAgICAgICAgCisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBjaWQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5X2NpZDsKKyAgICBiZWFyZXJfdHlwZV9lbnVtICAgICAgICAgICAgICAgIGJlYXJlcl90eXBlOworICAgIHRmdF9pbmZvX3N0cnVjdCAgICAgICAgICAgICAgICAgdGNtX3VzZXJfZGVmaW5lZF90ZnQ7CisgICAgCit9IHRmdGxpYl9kZWZpbmVfZXBzYl9jb250ZXh0X3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiAgICAgICAgICAgICAgICAgICAgICBzaW1faW5keDsgICAgICAgIAorICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgY2lkOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgYmVhcmVyX2lkOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgbGlua2VkX2JlYXJlcl9pZDsKKyAgICBiZWFyZXJfdHlwZV9lbnVtICAgICAgICAgICAgICAgIGJlYXJlcl90eXBlOworICAgIHRmdF9pbmZvX3N0cnVjdCAgICAgICAgICAgICAgICAgdGNtX2FwcGxpZWRfdGZ0OworICAgIHRmdF9pbmZvX3N0cnVjdCAgICAgICAgICAgICAgICAgdGNtX3VzZXJfZGVmaW5lZF90ZnQ7Cit9IHRmdGxpYl9hY3RfZXBzYl9jb250ZXh0X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgICAgICAgc2ltX2lkeDsgICAgICAgIAorICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgcnVsZV9pZHg7Cit9IHRmdGxpYl9nZXRfcnFvc19ydWxlX3N0cnVjdDsKKworCisKKworLy8jZW5kaWYgLyogI2lmZGVmIF9fVEZUTElCX1VUX18gKi8KKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgdGZ0X3ZhbGlkYXRlX3Jlc3VsdF9lbnVtICAgICAgICB0ZnRsaWJfcmV0X2RlY29kZV9yZXN1bHQ7CisgICAgdGZ0X2luZm9fc3RydWN0ICAgICAgICAgICAgICAgICB0ZnRsaWJfcmV0X3RmdDsKKyAgICB0ZnRfZmFpbF9hY3Rpb25fZW51bSAgICAgICAgICAgIGZhaWxfYWN0aW9uOworICAgIAorfSB0ZnRsaWJfdGZ0X2RlY29kZV9leGVjX3Jlc3VsdF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgdGZ0bGliX3JldF9mdW5jX3Jlc3VsdDsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgIHRmdF9yYXdfbGVuOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgdGZ0bGliX3JldF90ZnRfcmF3W01BWF9URlRfTEVOXTsKKworfSB0ZnRsaWJfdGZ0X2VuY29kZV9leGVjX3Jlc3VsdF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgdGZ0bGliX3JldF9mdW5jX3Jlc3VsdDsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgIHFyc19yYXdfbGVuOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgcXJzX3Jhd1tNQVhfUU9TX1JVTEVTX0xFTl07CisKK30gdGZ0bGliX3Fyc19lbmNvZGVfZXhlY19yZXN1bHRfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBwa3RfZmlsdGVyX2FjdF9saXN0X3N0cnVjdCAgICAgIHRmdGxpYl9yZXRfcGZfYWN0X2xpc3Q7CisgICAgdGZ0X2RlYWN0X2JlYXJlcl9saXN0X3N0cnVjdCAgICB0ZnRsaWJfcmV0X2RlYWN0X2JlYXJlcl9saXN0OworICAgIHRmdF9pbmZvX3N0cnVjdCAgICAgICAgICAgICAgICAgdGNtX2FwcGxpZWRfdGZ0OworCit9IHRmdGxpYl9zZXRfYXBwbGllZF90ZnRfZXhlY19yZXN1bHRfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDsKKyAgICBwa3RfZmlsdGVyX2FjdF9saXN0X3N0cnVjdCAgICAgIHRmdGxpYl9yZXRfcGZfYWN0X2xpc3Q7CisgICAgdGZ0X2RlYWN0X3FyX2xpc3Rfc3RydWN0ICAgICAgICB0ZnRsaWJfcmV0X2RlYWN0X3FyX2xpc3Q7CisgICAgdGZ0X2luZm9fc3RydWN0ICAgICAgICAgICAgICAgICB0Y21fYXBwbGllZF9xcjsKKworfSB0ZnRsaWJfc2V0X2FwcGxpZWRfcXJfZXhlY19yZXN1bHRfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDsKKyAgICBwa3RfZmlsdGVyX2FjdF9saXN0X3N0cnVjdCAgICAgIHRmdGxpYl9yZXRfcGZfYWN0X2xpc3Q7CisgICAgdGZ0bGliX3Jxb3NfcnVsZV9zdHJ1Y3QgICAgICAgICBycW9zX2FwcGxpZWRfcXI7CisKK30gdGZ0bGliX3Jxb3Nfc2V0X2FwcGxpZWRfcXJfZXhlY19yZXN1bHRfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIHRmdGxpYl9yZXRfZnVuY19yZXN1bHQ7CisgICAgdGZ0X2luZm9fc3RydWN0ICAgICAgICAgICAgICAgICB0ZnRsaWJfcmV0X3RmdDsKKworfSB0ZnRsaWJfY29tcG9zZV90ZnRfdG9fbndfZXhlY19yZXN1bHRfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICB0ZnRfaW5mb19zdHJ1Y3QgICAgICAgICAgICAgICAgIHRjbV9hcHBsaWVkX3RmdDsKKyAgICB0ZnRfaW5mb19zdHJ1Y3QgICAgICAgICAgICAgICAgIHRjbV91c2VyX2RlZmluZWRfdGZ0OworCit9IHRmdGxpYl9jdXJyZW50X3RmdF9jb250ZXh0X3N0YXR1c19zdHJ1Y3Q7IC8vIHVzZWQgd2hlbiB0ZnRsaWJfZGVsX3RmdCAvIHRmdGxpYl9nZXRfdXNlcl9kZWZpbmVkX3RmdCAvIHRmdGxpYl9nZXRfYXBwbGllZF90ZnQgaXMgY2FsbGVkCisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHRmdGxpYl90cmNfZnVuY19uYW1lX2VudW0gICAgICAgdGZ0bGliX2FwaTsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIHRmdGxpYl9leGVjX3Jlc3VsdDsKKyAgICB0ZnRfdmFsaWRhdGVfcmVzdWx0X2VudW0gICAgICAgIHRmdGxpYl92YWxpZGF0ZV9yZXN1bHQ7CisgICAgdGZ0X2ZhaWxfYWN0aW9uX2VudW0gICAgICAgICAgICBmYWlsX2FjdGlvbjsKKworfSB0ZnRsaWJfZ2VuZXJpY19leGVjX3Jlc3VsdF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHRmdGxpYl9xZl9oYXNfcnVsZV9lbnVtICAgICAgICAgcmVzdWx0OworCit9IHRmdGxpYl9xZl9oYXNfYW55X3J1bGVfZXhlY19yZXN1bHRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgcmVzdWx0OworfSB0ZnRsaWJfcnFvc19zZXRfdGltZXJfZXhlY19yZXN1bHRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgcmVzdWx0OworICAgIHBrdF9maWx0ZXJfc3RydWN0ICAgICAgIHBmOworfSB0ZnRsaWJfcnFvc19hZGRfcnVsZV9leGVjX3Jlc3VsdF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDsKKyAgICB0ZnRfZGVhY3RfcXJfbGlzdF9zdHJ1Y3QgICAgICAgIHRmdGxpYl9yZXRfZGVhY3RfcXJfbGlzdDsKKworfSB0ZnRsaWJfdXBkYXRlX2RlYWN0X3FyX2xpc3RfdG9fZGVsX3FmX2V4ZWNfcmVzdWx0X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgdGZ0bGliX3JldF9mdW5jX3Jlc3VsdDsKKyAgICB0ZnRfaW5mb19zdHJ1Y3QgICAgICAgICAgICAgICAgIHRjbV91c2VyX2RlZmluZWRfdGZ0OworCit9IHRmdGxpYl9zZXRfdXNlcl9kZWZpbmVkX3RmdF9leGVjX3Jlc3VsdF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIHRmdGxpYl9yZXRfZnVuY19yZXN1bHQ7CisgICAgdGZ0X2luZm9fc3RydWN0ICAgICAgICAgICAgICAgICBkZWZpbmVkX3RmdF9xcjsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWRfdGZ0X3FyX2xlbjsKK30gdGZ0bGliX2dldF91c2VyX2RlZmluZWRfdGZ0X2V4ZWNfcmVzdWx0X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgdGZ0bGliX3JldF9mdW5jX3Jlc3VsdDsKKyAgICB0ZnRfaW5mb19zdHJ1Y3QgICAgICAgICAgICAgICAgIGFwcGxpZWRfdGZ0X3FyOworICAgIHRmdF9pbmZvX3N0cnVjdCAgICAgICAgICAgICAgICAgbmV4dF9hcHBsaWVkX3RmdF9xcjsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZWRfdGZ0X3FyX2xlbjsKKworfSB0ZnRsaWJfZ2V0X2FwcGxpZWRfdGZ0X3FyX2V4ZWNfcmVzdWx0X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgICAgICAgdGZ0bGliX3JldF9mdW5jX3Jlc3VsdDsKKyAgICB0ZnRfaW5mb19zdHJ1Y3QgICAgICAgICAgICAgICAgIGFwcGxpZWRfdGZ0X3FyOworICAgIHRmdF9pbmZvX3N0cnVjdCAgICAgICAgICAgICAgICAgbmV4dF9hcHBsaWVkX3RmdF9xcjsKKworfSB0ZnRsaWJfc2V0X2NpZF9mb3JfYXBwbGllZF90ZnRfcXJfZXhlY19yZXN1bHRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgICAgICAgICAgICAgICAgICAgICAgICB0ZnRsaWJfcmV0X2Z1bmNfcmVzdWx0OworICAgIHRmdF9pbmZvX3N0cnVjdCAgICAgICAgICAgICAgICAgYXBwbGllZF90ZnQ7CisKK30gdGZ0bGliX2NvbnN0cnVjdF9jb250ZXh0X2Zvcl9kZWZhdWx0X2JlYXJlcl93b190ZnRfZXhlY19yZXN1bHRfc3RydWN0OworCisvKiBTZXQgVEZUTElCIGNvbnRleHQgc3RydWN0dXJlICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19tdGtfYXBfZXhpc3Q7CisgICAgCit9IHRmdGxpYl9zZXRfbXRrX2FwX3N0YXR1c19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgaXNfcHJpbV9sb2dfZW5hYmxlOworICAgIAorfSB0ZnRsaWJfZW5hYmxlX3ByaW1fbG9nX3JlcV9zdHJ1Y3Q7CisKKworCisvKiBFTSBtZXNzYWdlIHN0cnVjdHVyZSAqLworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfYm9vbCBpc19lbV9lbmFibGU7CisgICAgCit9IHRmdGxpYl9lbmFibGVfZW1faW5mb19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiAgICAgICAgICBzaW1faW5keDsgICAgICAgICAKKyAgICBrYWxfYm9vbCAgICAgICAgICAgIGJlYXJlcl9zdGF0dXNfZnJvbV9UQ01fdmlldzsKKyAgICBiZWFyZXJfdHlwZV9lbnVtICAgIGJlYXJlcl90eXBlOworICAgIHRmdF9wcm9jX2Rpcl9lbnVtICAgcHJvY19kaXI7CisgICAgdGZ0X2JlYXJlcl9hY3RfZW51bSBiZWFyZXJfYWN0aW9uOworICAgIGthbF91aW50OCAgICAgICAgICAgY2lkOworICAgIGthbF91aW50OCAgICAgICAgICAgZWJpOworICAgIGthbF91aW50OCAgICAgICAgICAgcHJpbWFyeV9jaWQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICBsaW5rZWRfZWJpOworCisgICAga2FsX2Jvb2wgICAgICAgICAgICBhcHBsaWVkX3RmdF9zdGF0dXM7ICAgICAgLy8gVFJVRTogYWN0aXZlLCBGQUxTRTogaW5hY3RpdmUgb3IgaW52YWxpZAorICAgIHRmdF9pbmZvX3N0cnVjdCAgICAgYXBwbGllZF90ZnQ7CisKKyAgICBrYWxfdWludDggICAgICAgICAgIHRmdF9jb25mbGljdF9iZWFyZXJfZGVhY3RfbnVtOworICAgIGthbF91aW50OCAgICAgICAgICAgdGZ0X2NvbmZsaWN0X2JlYXJlcl9kZWFjdF9saXN0W1RGVExJQl9NQVhfQkVBUkVSX0NUWFRfTlVNXTsKKworfSBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgc2ltX2luZHg7ICAgICAgICAgCisgICAga2FsX2Jvb2wgICAgICAgICAgICBiZWFyZXJfc3RhdHVzX2Zyb21fVENNX3ZpZXc7CisgICAgYmVhcmVyX3R5cGVfZW51bSAgICBiZWFyZXJfdHlwZTsKKyAgICBrYWxfdWludDggICAgICAgICAgIGNpZDsKKyAgICBrYWxfdWludDggICAgICAgICAgIGViaTsKKyAgICBrYWxfdWludDggICAgICAgICAgIHByaW1hcnlfY2lkOworICAgIGthbF91aW50OCAgICAgICAgICAgbGlua2VkX2ViaTsKKworICAgIGthbF9ib29sICAgICAgICAgICAgaXNfY2d0ZnRfc2V0OworICAgIGthbF9ib29sICAgICAgICAgICAgY2d0ZnRfcmVzdWx0OworICAgIHBrdF9maWx0ZXJfc3RydWN0ICAgY2d0ZnRfY29udGVudDsKKworICAgIGthbF9ib29sICAgICAgICAgICAgaXNfZWdkZWxwZl9zZXQ7CisgICAga2FsX2Jvb2wgICAgICAgICAgICBlZ2RlbHBmX3Jlc3VsdDsKKyAgICBrYWxfdWludDggICAgICAgICAgIGRlbHBmX2lkOworCisgICAga2FsX2Jvb2wgICAgICAgICAgICBpc19lZ2xua3BmX3NldDsKKyAgICBrYWxfYm9vbCAgICAgICAgICAgIGVnbG5rcGZfcmVzdWx0OworICAgIGthbF91aW50OCAgICAgICAgICAgbG5rcGZfaWQ7CisKKyAgICBrYWxfYm9vbCAgICAgICAgICAgIHVzZXJfZGVmaW5lZF90ZnRfc3RhdHVzOworICAgIHRmdF9pbmZvX3N0cnVjdCAgICAgdXNlcl9kZWZpbmVkX3RmdDsKKyAgICAKK30gZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgc2ltX2luZHg7ICAgICAgICAgCisgICAga2FsX2Jvb2wgICAgICAgICAgICBiZWFyZXJfc3RhdHVzX2Zyb21fVENNX3ZpZXc7CisgICAgYmVhcmVyX3R5cGVfZW51bSAgICBiZWFyZXJfdHlwZTsKKyAgICB0ZnRfcHJvY19kaXJfZW51bSAgIHByb2NfZGlyOworICAgIHRmdF9iZWFyZXJfYWN0X2VudW0gYmVhcmVyX2FjdGlvbjsKKyAgICBrYWxfdWludDggICAgICAgICAgIGNpZDsKKyAgICBrYWxfdWludDggICAgICAgICAgIGViaTsKKyAgICBrYWxfdWludDggICAgICAgICAgIHByaW1hcnlfY2lkOworICAgIGthbF91aW50OCAgICAgICAgICAgbGlua2VkX2ViaTsKKworICAgIHRmdF92YWxpZGF0ZV9yZXN1bHRfZW51bSAgICBud19hc3NpZ25lZF90YWRfdmFsaWRhdGVfcmVzdWx0OworICAgIHRmdF9pbmZvX3N0cnVjdCAgICAgICAgICAgICBud19hc3NpZ25lZF90YWQ7CisgICAgCit9IGVtX3RmdGxpYl9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgIHNpbV9pbmR4OyAgICAgICAgICAKKyAgICBrYWxfYm9vbCAgICAgICAgICAgICAgICBiZWFyZXJfc3RhdHVzX2Zyb21fVENNX3ZpZXc7CisgICAgYmVhcmVyX3R5cGVfZW51bSAgICAgICAgYmVhcmVyX3R5cGU7CisgICAgdGZ0X2JlYXJlcl9hY3RfZW51bSAgICAgYmVhcmVyX2FjdGlvbjsKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICBjaWQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgZWJpOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgIHByaW1hcnlfY2lkOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgIGxpbmtlZF9lYmk7CisgICAgCisgICAgdGZ0X2NvbXBvc2VfdHlwZV9lbnVtICAgY29tcG9zZV90eXBlOworICAgIGthbF9ib29sICAgICAgICAgICAgICAgIHVlX2NvbXBvc2VkX3RhZF92YWxpZGF0ZV9yZXN1bHQ7CisgICAgdGZ0X2luZm9fc3RydWN0ICAgICAgICAgdWVfY29tcG9zZWRfdGFkOworICAgIAorfSBlbV90ZnRsaWJfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyIHNpbV9pbmR4OworICAgIGthbF91aW50OCBwc2k7CisgICAga2FsX3VpbnQzMiB0MzU4MzsKK30gdGZ0bGliX3Jxb3Nfc2V0X3RpbWVyX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgdDM1ODM7Cit9IHRmdGxpYl9pcGZjX3Jxb3NfZW5hYmxlX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBpbmZvX2NudDsKKyAgICBpcGNfcnFfaW5mb190IHJxX2luZm87Cit9IHRmdGxpYl9pcGNvcmVfbmFzX3JxX2luZm9fc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCit9IHRmdGxpYl91c2lyX2hhbmRsZV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKworICAgIExPQ0FMX1BBUkFfSERSCisgICAgdGZ0bGliX3RyY19mdW5jX25hbWVfZW51bSAgICAgICB0ZnRsaWJfYXBpOworCisgICAgLy8gY291bnQgaW5mbworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfcW9zX2Zsb3dfY291bnQ7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF9xb3NfcnVsZV9jb3VudDsKKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3BrdF9maWx0ZXJfY291bnQ7ICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIHBkdXNfaW5mb19sZW47CisKKyAgICAvLyBwZHUgc2Vzc2lvbiBpbmZvCisgICAgcGR1c19pbmZvX3N0cnVjdCAgICAgICAgICAgICAgICBwZHVzX2luZm9bTUFYX05VTV9PRl9TVVBQT1JURURfUERVU107Cit9IHRmdGxpYl9wZHVfc2Vzc2lvbl9pbmZvX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHRmdGxpYl90cmNfZnVuY19uYW1lX2VudW0gICAgICAgdGZ0bGliX2FwaTsKKworICAgIC8vIGNvdW50IGluZm8KKyAgICBrYWxfdWludDE2ICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3BrdF9maWx0ZXJfY291bnQ7ICAKKyAgICBrYWxfdWludDggICAgICAgICAgICAgICAgICAgICAgIGJlYXJlcl9pbmZvX2xlbjsKKworICAgIC8vIHBkdSBzZXNzaW9uIGluZm8KKyAgICBiZWFyZXJfaW5mb19zdHJ1Y3QgICAgICAgICAgICBiZWFyZXJfaW5mb1tURlRMSUJfTUFYX0JFQVJFUl9DVFhUX05VTV07Cit9IHRmdGxpYl9iZWFyZXJfaW5mb19zdHJ1Y3Q7CisKKworLyogUGFja2V0IGZpbHRlciBzdHJ1Y3QgZm9yIGRlYnVnICovCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgICBrYWxfdWludDggICAgICAgICAgIGlkOyAgICAgICAgICAgICAvLyBQYWNrZXQgZmlsdGVyIGluZGV4CisgICAga2FsX3VpbnQ4ICAgICAgICAgICBwcmVjZWRlbmNlOyAgICAgLy8gUGFja2V0IGZpbHRlciBldmFsdWF0aW9uIHByZWNlZGVuY2UgaW5kZXgKKyAgICBrYWxfYm9vbCAgICAgICAgICAgIHBmX2lzX29jY3VwaWVkOyAvLyBUaGlzIHBhY2tldCBmaWx0ZXIgaXMgdXNlZCBvciBub3QKK31wa3RfZmlsdGVyX2RiZ19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQxNiBtZW1fYWxsb2NfbnVtOyAgICAKKyAgICBrYWxfdWludDE2IG1lbV9mcmVlX251bTsKK310ZnRsaWJfY3RybF9idWZfc3RhdGlzdGljc19zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIHZvaWQgKmJ1Zl9hZGRyOworCXBrdF9maWx0ZXJfc3RydWN0ICAgKipwZl9wdHI7Cit9dGZ0bGliX3BmX2luX2N0cmxfYnVmZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIHZvaWQgKmJ1Zl9hZGRyOworICAgIGthbF9jaGFyICpmaWxlX25hbWU7CisgICAga2FsX3VpbnQzMiBsaW5lOworfXRmdGxpYl9ub25fcGZfaW5fY3RybF9idWZmX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAgdGZ0bGliX3BmX2luX2N0cmxfYnVmZl9zdHJ1Y3QgcGZfYWxsb2NfbWVtW1RGVExJQl9NQVhfUEZfSU5fQ1RSTF9CVUZfTlVNXTsKKyAgICBrYWxfdWludDE2IHBmX2FsbG9jX21lbV9jbnQ7CisgICAgdGZ0bGliX25vbl9wZl9pbl9jdHJsX2J1ZmZfc3RydWN0IG5vbl9wZl9hbGxvY19tZW1bVEZUTElCX01BWF9OT05fUEZfSU5fQ1RSTF9CVUZfTlVNXTsgICAgCisgICAgdGZ0bGliX2N0cmxfYnVmX3N0YXRpc3RpY3Nfc3RydWN0IHRmdGxpYl9jdHJsX2J1Zl9zdGF0aXN0aWNzOworfXRmdGxpYl9jdHJsX2J1ZmZfZGJnX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisJa2FsX3VpbnQ4IHBmX29jY3VwaWVkX251bV9pbl9wb29sOworCXBrdF9maWx0ZXJfZGJnX3N0cnVjdCBwZl9kYmdfcG9vbFtURlRMSUJfTUFYX1BGX05VTV9JTl9QT09MXTsKKyAgICBrYWxfdWludDggcGZfYWxsb2NfbnVtX2luX2N0cmxfYnVmOworfXBmX2FsbG9jX2RiZ19zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgICAgICAgICAgICAgIHNpbV9pbmR4OyAgCisgICAgcGZfYWxsb2NfZGJnX3N0cnVjdCAgICAgICAgICAgdGZ0bGliX3BmX2FsbG9jOworICAgIHRmdGxpYl9jdHJsX2J1ZmZfZGJnX3N0cnVjdCAgIHRmdGxpYl9jdHJsX2J1ZjsgICAgCit9IHRmdGxpYl9wZl9hbmRfbWVtX2FsbG9jX3VwZGF0ZV9zdGF0dXNfc3RydWN0OworCit0eXBlZGVmIGVtX3RmdGxpYl9hcHBsaWVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdCBlbV90ZnRsaWJfZWJpNV9hcHBsaWVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0IGVtX3RmdGxpYl9lYmk2X2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2ViaTdfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl9hcHBsaWVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdCBlbV90ZnRsaWJfZWJpOF9hcHBsaWVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0IGVtX3RmdGxpYl9lYmk5X2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2ViaTEwX2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2ViaTExX2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2ViaTEyX2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2ViaTEzX2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2ViaTE0X2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2ViaTE1X2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OworCisKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDBfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDFfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDJfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDNfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDRfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDVfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDZfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDdfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDhfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDlfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDEwX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl91c2VyX2RlZmluZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0IGVtX3RmdGxpYl9jaWQxMV91c2VyX2RlZmluZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OworCisKK3R5cGVkZWYgZW1fdGZ0bGliX3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCBlbV90ZnRsaWJfY2lkMF91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDFfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0IGVtX3RmdGxpYl9jaWQyX3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCBlbV90ZnRsaWJfY2lkM191ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDRfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0IGVtX3RmdGxpYl9jaWQ1X3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCBlbV90ZnRsaWJfY2lkNl91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDdfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0IGVtX3RmdGxpYl9jaWQ4X3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCBlbV90ZnRsaWJfY2lkOV91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2NpZDEwX3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCBlbV90ZnRsaWJfY2lkMTFfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OworCisKK3R5cGVkZWYgZW1fdGZ0bGliX253X2Fzc2lnbmVkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCBlbV90ZnRsaWJfZWJpNV9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2ViaTZfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0IGVtX3RmdGxpYl9lYmk3X253X2Fzc2lnbmVkX3RhZF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX253X2Fzc2lnbmVkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCBlbV90ZnRsaWJfZWJpOF9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2ViaTlfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0IGVtX3RmdGxpYl9lYmkxMF9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2ViaTExX253X2Fzc2lnbmVkX3RhZF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX253X2Fzc2lnbmVkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCBlbV90ZnRsaWJfZWJpMTJfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0IGVtX3RmdGxpYl9lYmkxM19ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgZW1fdGZ0bGliX2ViaTE0X253X2Fzc2lnbmVkX3RhZF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX253X2Fzc2lnbmVkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCBlbV90ZnRsaWJfZWJpMTVfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OworCit0eXBlZGVmIGVtX3RmdGxpYl9hcHBsaWVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdCB0ZnRsaWJfZWJpNV9hcHBsaWVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0IHRmdGxpYl9lYmk2X2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2ViaTdfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl9hcHBsaWVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdCB0ZnRsaWJfZWJpOF9hcHBsaWVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0IHRmdGxpYl9lYmk5X2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2ViaTEwX2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2ViaTExX2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2ViaTEyX2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2ViaTEzX2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2ViaTE0X2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2ViaTE1X2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfYXBwbGllZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2FwcGxpZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OworCisKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDBfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDFfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDJfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDNfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDRfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDVfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDZfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDdfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDhfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDlfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDEwX3VzZXJfZGVmaW5lZF90ZnRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl91c2VyX2RlZmluZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0IHRmdGxpYl9jaWQxMV91c2VyX2RlZmluZWRfdGZ0X3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdCB0ZnRsaWJfdXNlcl9kZWZpbmVkX3RmdF91cGRhdGVfaW5kX3N0cnVjdDsKKworCit0eXBlZGVmIGVtX3RmdGxpYl91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDBfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0IHRmdGxpYl9jaWQxX3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCB0ZnRsaWJfY2lkMl91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDNfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0IHRmdGxpYl9jaWQ0X3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCB0ZnRsaWJfY2lkNV91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDZfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0IHRmdGxpYl9jaWQ3X3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCB0ZnRsaWJfY2lkOF91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDlfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0IHRmdGxpYl9jaWQxMF91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl91ZV9jb21wb3NlZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2NpZDExX3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX3VlX2NvbXBvc2VkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCB0ZnRsaWJfdWVfY29tcG9zZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OworCisKK3R5cGVkZWYgZW1fdGZ0bGliX253X2Fzc2lnbmVkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCB0ZnRsaWJfZWJpNV9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2ViaTZfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0IHRmdGxpYl9lYmk3X253X2Fzc2lnbmVkX3RhZF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX253X2Fzc2lnbmVkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCB0ZnRsaWJfZWJpOF9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2ViaTlfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0IHRmdGxpYl9lYmkxMF9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2ViaTExX253X2Fzc2lnbmVkX3RhZF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX253X2Fzc2lnbmVkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCB0ZnRsaWJfZWJpMTJfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0IHRmdGxpYl9lYmkxM19ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7Cit0eXBlZGVmIGVtX3RmdGxpYl9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3QgdGZ0bGliX2ViaTE0X253X2Fzc2lnbmVkX3RhZF91cGRhdGVfaW5kX3N0cnVjdDsKK3R5cGVkZWYgZW1fdGZ0bGliX253X2Fzc2lnbmVkX3RhZF91cGRhdGVfaW5kX3N0cnVjdCB0ZnRsaWJfZWJpMTVfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0OwordHlwZWRlZiBlbV90ZnRsaWJfbndfYXNzaWduZWRfdGFkX3VwZGF0ZV9pbmRfc3RydWN0IHRmdGxpYl9ud19hc3NpZ25lZF90YWRfdXBkYXRlX2luZF9zdHJ1Y3Q7CisKKyNlbmRpZiAgIC8qIC0tLS0tICNpZm5kZWYgVEZUTElCX01TR19TVFJVQ1RfSF8gLS0tLS0gKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91YWdwc19jcF9jc2NlX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3VhZ3BzX2NwX2NzY2Vfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1NzY2OAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91YWdwc19jcF9jc2NlX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDcKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgdWFncHNfY3BfY3NjZV9zdHJ1Y3QuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBBR1BTCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAkTG9nOiQKKyAqCisgKiAwNiAxMiAyMDE1IHJvbGFuZC5saQorICogW01PTFkwMDEwOTkxN10gWzYyOTFdW0xCU11NRFQgY2hlY2sgaW4gdG8gVU1PTFkgVFJVTksKKyAqIC5bTFBQXVtVTU9MWV0gQWRkIEVNSSBCVyBjb250cmlsIEFQSS4KKyAqIAorICogMTAgMDIgMjAxMiBhZGVsaW5lLmNoYW5nCisgKiBbTU9MWTAwMDA0MjM2XSBbaW50ZXJmYWNlXVtzZXJ2aWNlXVtrYWxdcmVtb3ZlIHN0YWNrX2x0bGNvbS5oCisgKiAyMDEyMDkyOF9NT0xZMDAwMDQyMzZfQWRlbGluZV9SZW1vdmVfc3RhY2tfbHRsY29tLmhfQUdQUy54bHMuCisgKgorICogMTEgMDggMjAxMSBkb3VnLnNoaWgKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTIgMTQgMjAxMCBjLWh1YS55YW5nCisgKiByZW1vdmVkIQorICogVUxDUyBSSFIKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIGFkZCB0byBzb3VyY2UgY29udHJvbCByZWN1cnNlbHkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfVUFHUFNfQ1BfQ1NDRV9TVFJVQ1RfSAorI2RlZmluZSBfVUFHUFNfQ1BfQ1NDRV9TVFJVQ1RfSAorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKK3R5cGVkZWYgc3RydWN0IF9wbG1uX2lkX2ludGVybmFsX3N0cnVjdAoreworCWthbF91aW50OCBtY2MxOworCWthbF91aW50OCBtY2MyOworCWthbF91aW50OCBtY2MzOworCWthbF91aW50OCBtbmMxOworCWthbF91aW50OCBtbmMyOworCWthbF91aW50OCBtbmMzOworfSBwbG1uX2lkX2ludGVybmFsX3N0cnVjdDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVUFTX05PX1NFUlZJQ0UsIAorCVVBU19OT1JNQUxfU0VSVklDRSwgCisJVUFTX0xJTUlURURfU0VSVklDRQorCit9IHVhc19zZXJ2aWNlX3N0YXRlOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBTSUIxNV9TVEFSVF9SRVFfRU5BQkxFLCAKKwlTSUIxNV9TVEFSVF9SRVFfT05FX1NIT1QKKworfSBzaWIxNV9zdGFydF9yZXE7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVUFHUFNfQ1BfQ1NDRV9TVEFSVF9TSUIxNV9DT0xMRUNUSU9OX1JFUQorICoKKyAqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIHNpYjE1X3N0YXJ0X3JlcSAgICBzdGFydF9yZXE7CisKK30gZmRkX3VhZ3BzX2NwX2NzY2Vfc3RhcnRfc2liMTVfY29sbGVjdGlvbl9yZXFfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVBR1BTX0NQX0NTQ0VfU1RPUF9TSUIxNV9DT0xMRUNUSU9OX1JFUQorICoKKyAqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKK30gZmRkX3VhZ3BzX2NwX2NzY2Vfc3RvcF9zaWIxNV9jb2xsZWN0aW9uX3JlcV9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVUFHUFNfQ1BfQ1NDRV9TVEFSVF9TSUIxNV9DT0xMRUNUSU9OX0NORgorICoKKyAqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKK30gZmRkX3VhZ3BzX2NwX2NzY2Vfc3RhcnRfc2liMTVfY29sbGVjdGlvbl9jbmZfc3RydWN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVBR1BTX0NQX0NTQ0VfU1RPUF9TSUIxNV9DT0xMRUNUSU9OX0NORgorICoKKyAqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKK30gZmRkX3VhZ3BzX2NwX2NzY2Vfc3RvcF9zaWIxNV9jb2xsZWN0aW9uX2NuZl9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVUFHUFNfQ1BfQ1NDRV9DRUxMX0NIQU5HRV9JTkQKKyAqCisgKiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAgdWFzX3NlcnZpY2Vfc3RhdGUgc2VydmljZV9zdGF0ZTsKKyAgICBwbG1uX2lkX2ludGVybmFsX3N0cnVjdCBwbG1uX2lkOworICAgIGthbF91aW50MTYgdWFyZmNuOworICAgIGthbF91aW50MTYgcGh5Q2VsbElkOworCit9IGZkZF91YWdwc19jcF9jc2NlX2NlbGxfY2hhbmdlX2luZF9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfVUFHUFNfQ1BfQ1NDRV9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3VhZ3BzX2NwX21lbWVfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdWFncHNfY3BfbWVtZV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjZiMTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3VhZ3BzX2NwX21lbWVfc3RydWN0LmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICB1YWdwc19jcF9tZW1lX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIEFHUFMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2c6JAorICoKKyAqIDAyIDI2IDIwMTYgZ2VvcmdlLmNoYW5nCisgKiBbTU9MWTAwMTUzMzk3XSBbTVQ2NzU1XVtMK1ddW092ZXJuaWdodF1bRkREXVtIS10gTW9kZW0gV2FybmluZyw3OTUsODEzLDk5LC9kYXRhL2NvcmUvLDIsLE1vZGVtIFdhcm5pbmc6ICBbNl1bMzUzXSB1YWdwc19jcF9tc2dfaGRsZXIuYyAjNDUzNworICogCQorICogCS4KKyAqCisgKiAxMiAxNiAyMDE0IGNsYXVkLmxpCisgKiBbTU9MWTAwMDg3Nzk1XSBbTUVNRV0gdW5pdmVyc2FsIGJpbiBjaGVjayBpbgorICogW1VuaXZlcnNhbCBiaW5dIFtGRERdW01FTUUvUlJDRS9DU0NFL0NTRS9BR1BTXSBpbnRlcmZhY2UgYW5kIG1lc3NhZ2UgaWQKKyAqIAorICogMTAgMDIgMjAxMiBhZGVsaW5lLmNoYW5nCisgKiBbTU9MWTAwMDA0MjM2XSBbaW50ZXJmYWNlXVtzZXJ2aWNlXVtrYWxdcmVtb3ZlIHN0YWNrX2x0bGNvbS5oCisgKiAyMDEyMDkyOF9NT0xZMDAwMDQyMzZfQWRlbGluZV9SZW1vdmVfc3RhY2tfbHRsY29tLmhfQUdQUy54bHMuCisgKgorICogMTEgMDggMjAxMSBkb3VnLnNoaWgKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDIgMjUgMjAxMSBjLWh1YS55YW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDEyIDE0IDIwMTAgYy1odWEueWFuZworICogcmVtb3ZlZCEKKyAqIFVMQ1MgUkhSCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIGFkZCB0byBzb3VyY2UgY29udHJvbCByZWN1cnNlbHkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfVUFHUFNfQ1BfTUVNRV9TVFJVQ1RfSAorI2RlZmluZSBfVUFHUFNfQ1BfTUVNRV9TVFJVQ1RfSAorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKworI2RlZmluZSBGRERfQUNUSVZFX1NFVF9DRUxMX05VTSA4CisKK3R5cGVkZWYgZW51bQoreworICAgIEZERF9SUkNfU1RBVEVfSU5BQ1RJVkUsIAorICAgIEZERF9SUkNfU1RBVEVfSURMRSwgCisgICAgRkREX1JSQ19TVEFURV9DRUxMX0RDSCwgCisgICAgRkREX1JSQ19TVEFURV9DRUxMX0ZBQ0gsCisgICAgRkREX1JSQ19TVEFURV9DRUxMX1BDSCwKKyAgICBGRERfUlJDX1NUQVRFX1VSQV9QQ0gKK30gRkREX3JyY19zdGF0ZV9lbnVtOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBGRERfUlJDX01FU1NBR0VfVFlQRV9NRUFTVVJFTUVOVF9SRVBPUlQsIAorICAgIEZERF9SUkNfTUVTU0FHRV9UWVBFX01FQVNVUkVNRU5UX0NPTlRST0xfRkFJTFVSRQorfSBGRERfcnJjX21lc3NhZ2VfdHlwZTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgRkREX1JSQ19NRVNTQUdFX1JFUE9SVF9STENfQU0sIAorICAgIEZERF9SUkNfTUVTU0FHRV9SRVBPUlRfUkxDX1VNCit9IEZERF9ycmNfbWVzc2FnZV9yZXBvcnRfcmxjX3R5cGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVUFHUFNfQ1BfTUVNRV9NT1ZFX1RPX1NUQVRFX0lORAorICoKKyAqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIEZERF9ycmNfc3RhdGVfZW51bSBycmNfc3RhdGU7CisgICAga2FsX2Jvb2wgaXNTdGVhZHlTdGF0ZTsKKworICAgIC8qIEZpbGwgdGhlc2UgcGFyYW1ldGVycyB0byB1cGRhdGUgdGhlIGFjdGl2ZSBzZXQgaW5mb3JtYXRpb24gaWYgYW5kIG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpcyBGRERfQ0VMTF9EQ0ggc3RhdGUgKi8KKyAgICBrYWxfdWludDE2IHVhcmZjbjsKKyAgICBrYWxfdWludDggbnVtT2ZDZWxsOworICAgIGthbF91aW50MTYgcGh5Q2VsbElkW0ZERF9BQ1RJVkVfU0VUX0NFTExfTlVNXTsKKworfSBmZGRfdWFncHNfY3BfbWVtZV9tb3ZlX3RvX3N0YXRlX2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVUFHUFNfQ1BfTUVNRV9QT1NJVElPTklOR19EQVRBX0lORAorICoKKyAqIGRhdGEgaW4gcGR1IGJ1ZmZlciBieSBBU04gZW5jb2RlZCBmb3JtYXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICBrYWxfdWludDE2IHRyYW5zYWN0aW9uX2lkOworCit9IGZkZF91YWdwc19jcF9tZW1lX3Bvc2l0aW9uaW5nX2RhdGFfaW5kX3N0cnVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVQUdQU19DUF9NRU1FX1JFTEVBU0VfTUVBU1VSRU1FTlRfSU5ECisgKgorICogCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorCisgICAga2FsX3VpbnQxNiB0cmFuc2FjdGlvbl9pZDsKKworfSBmZGRfdWFncHNfY3BfbWVtZV9yZWxlYXNlX21lYXN1cmVtZW50X2luZF9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVUFHUFNfQ1BfTUVNRV9QT1NJVElPTklOR19EQVRBX1JFUQorICoKKyAqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIGthbF91aW50MTYgdHJhbnNhY3Rpb25faWQ7CisgICAgLy9SUkNfTWVhc3VyZW1lbnRWYWxpZGl0eSB2YWxpZGl0eV9zdGF0ZTsgLy8gdXNlIEFTTiBkZWNvZGVkIHR5cGUKKyAgICBGRERfcnJjX21lc3NhZ2VfdHlwZSBtZXNzYWdlX3R5cGU7CisgICAga2FsX3VpbnQ4ICptZXNzYWdlX3BkdTsgLy8gTWVhc3VyZW1lbnQgcmVwb3J0IG9yIE1lYXN1cmVtZW50IGNvbnRyb2wgZmFpbHVyZQorCisgICAgRkREX3JyY19tZXNzYWdlX3JlcG9ydF9ybGNfdHlwZSBybGNfdHlwZTsKKworfSBmZGRfdWFncHNfY3BfbWVtZV9wb3NpdGlvbmluZ19kYXRhX3JlcV9zdHJ1Y3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVUFHUFNfQ1BfTUVNRV9SRUxFQVNFX01FQVNVUkVNRU5UX1JFUQorICoKKyAqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIGthbF91aW50MTYgdHJhbnNhY3Rpb25faWQ7CisKK30gZmRkX3VhZ3BzX2NwX21lbWVfcmVsZWFzZV9tZWFzdXJlbWVudF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisKKyAgICBrYWxfdWludDE2IHRyYW5zYWN0aW9uX2lkOworICAgIGthbF9ib29sIGlzU2VudDsKK30gZmRkX3VhZ3BzX2NwX21lbWVfbWVhc3VyZW1lbnRfcmVwb3J0X2NuZl9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBfVUFHUFNfQ1BfTUVNRV9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3VhZ3BzX2NwX3NpYmVfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdWFncHNfY3Bfc2liZV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGVlNWFlCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3VhZ3BzX2NwX3NpYmVfc3RydWN0LmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAwNworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICB1YWdwc19jcF9zaWJlX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIEFHUFMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2c6JAorICoKKyAqIDA2IDEyIDIwMTUgcm9sYW5kLmxpCisgKiBbTU9MWTAwMTA5OTE3XSBbNjI5MV1bTEJTXU1EVCBjaGVjayBpbiB0byBVTU9MWSBUUlVOSworICogLltMUFBdW1VNT0xZXSBBZGQgRU1JIEJXIGNvbnRyaWwgQVBJLgorICogCisgKiAxMCAwMiAyMDEyIGFkZWxpbmUuY2hhbmcKKyAqIFtNT0xZMDAwMDQyMzZdIFtpbnRlcmZhY2VdW3NlcnZpY2VdW2thbF1yZW1vdmUgc3RhY2tfbHRsY29tLmgKKyAqIDIwMTIwOTI4X01PTFkwMDAwNDIzNl9BZGVsaW5lX1JlbW92ZV9zdGFja19sdGxjb20uaF9BR1BTLnhscy4KKyAqCisgKiAxMSAwOCAyMDExIGRvdWcuc2hpaAorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAxMiAxNCAyMDEwIGMtaHVhLnlhbmcKKyAqIHJlbW92ZWQhCisgKiBVTENTIFJIUgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogYWRkIHRvIHNvdXJjZSBjb250cm9sIHJlY3Vyc2VseQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9VQUdQU19DUF9TSUJFX1NUUlVDVF9ICisjZGVmaW5lIF9VQUdQU19DUF9TSUJFX1NUUlVDVF9ICisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgordHlwZWRlZiBlbnVtCit7CisgICAgU0lCXzE1LAorICAgIFNJQl8xNV8xLAorICAgIFNJQl8xNV8yLAorICAgIFNJQl8xNV8zCit9IHNpYjE1X3R5cGVfZW51bTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVQUdQU19DUF9TSUJFX1NJQjE1X0NIQU5HRV9JTkQKKyAqCisgKiBkYXRhIGluIHBkdSBidWZmZXIgYnkgQVNOIGZvcm1hdCwgc2liIGFscmVhZHkgYXNzZW1ibGVkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKworICAgIHNpYjE1X3R5cGVfZW51bSBzaWIxNV90eXBlOworICAgIGthbF91aW50OCAgICAgICBvY2N1cklkZW50aXR5OworCit9IGZkZF91YWdwc19jcF9zaWJlX3NpYjE1X2NoYW5nZV9pbmRfc3RydWN0OworCisjZW5kaWYgLyogX1VBR1BTX0NQX1NJQkVfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91YXNfY29tbW9uX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdWFzX2NvbW1vbl9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMjg2MTgKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdWFzX2NvbW1vbl9lbnVtcy5oCkBAIC0wLDAgKzEsNTU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDcKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgdWFzX2NvbW1vbl9lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTlpBCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICRMb2c6JAorICoKKyAqIDA0IDIwIDIwMTggdmVuZF9tdGJfYnB0MDAyCisgKiBbTU9MWTAwMzIxMjA3XSBlRnVzZSBpbnZva2UgcHJvdGVjdGlvbqBmcm9tIFVMMgorICogLgorICoKKyAqIDA3IDI4IDIwMTcgaGFtaWx0b24ubGlhbmcKKyAqIFtNT0xZMDAyNjY4NTNdIFtCaWFuY28vWmlvbl0gZ21uIHN3IGNoZWNrLWluCisgKiAJCisgKiAJR01OIFNXIGZvciAzRyBMMiBwYXJ0CisgKgorICogMDQgMTIgMjAxNyBjZW4uY2hlbgorICogW01PTFkwMDI0MDI3MF0gWzYyOTNdW0dlbWluaV1bVCtXXSBQaGFzZSAxOiBDb21tb24gSW50ZXJmYWNlIENoYW5nZXMgQ2hlY2sgaW4uCisgKiBVQVNfVEREX1JSQ0UgcGFydC4KKyAqCisgKiAwNCAxMiAyMDE3IGplbi1kZS5sYWkKKyAqIFtNT0xZMDAyNDAyNzBdIFs2MjkzXVtHZW1pbmldW1QrV10gUGhhc2UgMTogQ29tbW9uIEludGVyZmFjZSBDaGFuZ2VzIENoZWNrIGluCisgKgorICogMDMgMzEgMjAxNyBqZW4tZGUubGFpCisgKiBbTU9MWTAwMTk1MzE3XSBbVVJMQ11bVFhdIC0gR2VuOTMgVVJMQyBUWCBjb2RlIG1vZGlmaWNhdGlvbiBmb3IgbmV3IEhXIGFuZCBNQ1UgQXJjaGkKKyAqIAkKKyAqIAlbVUwyXSAtIEZERCBUK1cgdWJpbiBzaGFyZSBtZW1vcnkKKyAqCisgKiAwMSAxMiAyMDE2IGNoYXJsZXNjbS53dQorICogW01PTFkwMDE1NjIzOV0gW1VNT0xZXVtMUjExXSAzRyBGREQvVEREIEwyIGJpZyBzaXplIG1lbW9yeSB1bmlvbgorICogW0ZERHxUREQgY29tbW9uXSAgVUJpbiAzRyBMMiBtZW1vcnkgcmVkdWN0aW9uIGJ5IHVuaW9uCisgKgorICogMDggMjEgMjAxNSBqZW4tZGUubGFpCisgKiBbTU9MWTAwMTM2MTAzXSBbQ09QWSBDUl1bV1cgRlRdW01leGljby1NZXhpY29dW0RlbmFsaS0xXVtNVDY3MzVdW1RlbGNlbF1bRS1SQUNIXSBdW0FTU0VSVF0gRmF0YWwgRXJyb3IgKDB4ODQwLCAweGYyNWUzYzMwKQorICoKKyAqIDEyIDMxIDIwMTQgbmFuY3kuY2hhbmcKKyAqIFtNT0xZMDAwODc1MTBdIFtVbml2ZXJzYWwgQmluXSBGREQgREJNRSAmIExEQk1FIGRldmVsb3BtZW50CisgKiAuCisgKgorICogMTIgMzAgMjAxNCBjaGFybGVzY20ud3UKKyAqIFtNT0xZMDAwODc2NzldIFtVTU9MWV1bRkREXVtVQVMgQ09NTU9OXVtVTDIgQ09NTU9OL1VSTEMvQk1DL1NFUV1VLUJpbiBDQnIgdG8gVU1PTFkgVFJVTkNLLgorICoKKyAqIDEyIDI2IDIwMTQgY2hpLWNodW5nLmxpbgorICogW01PTFkwMDA4OTEzMV0gW01UNjI5MSBHZW1pbmldIEwrVytXK1cgY29kZSByZXZpc2lvbiBjaGVjayBpbgorICogLgorICoKKyAqIDEyIDI0IDIwMTQgdGMuY2hhbmcKKyAqIFtNT0xZMDAwODc0MzRdIFtVbml2ZXJzYWwgQmluXSBDaGVjayBpbi4KKyAqCisgKiAxMiAxNiAyMDE0IGNoYXJsZXNjbS53dQorICogW01PTFkwMDA4NzY3OV0gW1VNT0xZXVtGRERdW1VBUyBDT01NT05dW1VMMiBDT01NT04vVVJMQy9CTUMvU0VRXVUtQmluIENCciB0byBVTU9MWSBUUlVOQ0suCisgKgorICogMTIgMTUgMjAxNCBjaGFybGVzY20ud3UKKyAqIFtNT0xZMDAwODc2NzldIFtVTU9MWV1bRkREXVtVQVMgQ09NTU9OXVtVTDIgQ09NTU9OL1VSTEMvQk1DL1NFUV1VLUJpbiBDQnIgdG8gVU1PTFkgVFJVTkNLLgorICoKKyAqIDEyIDEyIDIwMTQgY2hpbi1jaGlhLmNoYW5nCisgKiBbTU9MWTAwMDg3NDQzXSBbVW5pdmVyc2FsIEJpbl0gW0ZERF0gW1VBU10gW1VSUi9Db21tb25dIENoZWNrLWluCisgKiBbVW5pQmluXSBbRkREXSBbVU1PTFldIHVhc19jb21tb25fZW51bXMuaAorICoKKyAqIDEyIDEyIDIwMTQgdGMuY2hhbmcKKyAqIFtNT0xZMDAwODc0MzRdIFtVbml2ZXJzYWwgQmluXSBDaGVjayBpbi4KKyAqIFBEQ1AgYW5kIENTUiBleHBvcnRlZCBBUElzLgorICoKKyAqIDExIDE0IDIwMTQgeWVuY2hpaC55YW5nCisgKiBbTU9MWTAwMDg0MjU2XSBbTUVNRV0gc3luYyBNVDYyOTEgdG8gVU1PTFkKKyAqIFVSUi9NRU1FLgorICoKKyAqIDExIDEzIDIwMTQgY2xhdWQubGkKKyAqIFtNT0xZMDAwODQyNTZdIFtNRU1FXSBzeW5jIE1UNjI5MSB0byBVTU9MWQorICogW01FTUVdIGludGVyZmFjZSBjaGVjayBpbgorICoKKyAqIDA2IDIwIDIwMTQgamlucGVuZy5odQorICogW01PTFkwMDA2Nzg0MV0gW0tsb2N3b3JrXSBpbiAvL01PTFkvVFJVTksvTU9MWS9tY3UvbW9kZW0vdWFzX3RkZDEyOC91bDIvdXJsYy9zcmMvY3JsY19mc20uYywgbGluZSA3NjM2LgorICoKKyAqIDA2IDA1IDIwMTQgaGVhZC5oc3UKKyAqIFtNT0xZMDAwNjg1MTFdIFtXVyBGVF1bU2luZ2Fwb3JlXVtNVDY1OTVdW00xXSBBc3NlcnQ6IHJhYm1fZnNtLmMgbGluZTo2NjMKKyAqICAuCisgKgorICogMDEgMjIgMjAxNCB5YW5qdWFuLmZlbmcKKyAqIFtNT0xZMDAwNTQzMjRdIFs0RyBHZW1pbmldW01lcmdlXSBNT0xZLk1NLkdFTUlOSS5ERVYgTWVyZ2UgYmFjayB0byBNT0xZCisgKiAuCisgKgorICogMTEgMjEgMjAxMyByYWNoZWwubGl1CisgKiBbTU9MWTAwMDQ1ODU0XSBbUFMxMjY3IEhHK1dHXSBDaGVjay1pbiBHZW1pbmkgSEcrV0cgbW9kaWZpY2F0aW9uCisgKiBDb21tb24gZmlsZXMuCisgKgorICogMTEgMDUgMjAxMyBqb2huc29uLmxpdQorICogW01PTFkwMDA0MjY1OF0gW1NIQVFdIFVBUyByZWxhdGVkIGhlYWRlciBzcGxpdAorICogLgorICoKKyAqIDExIDA1IDIwMTMgYW5kcmV3Lnd1CisgKiBbTU9MWTAwMDQyNjU4XSBbU0hBUV0gVUFTIHJlbGF0ZWQgaGVhZGVyIHNwbGl0CisgKiA8c2F2ZWQgYnkgUGVyZm9yY2U+CisgKgorICogMDggMjYgMjAxMyB0ZXJlYXNhLmh1YW5nCisgKiBbTU9MWTAwMDM0ODY5XSBbSEcrV0ddIFBTNiBjb2RlIGNoZWNrIGluIE1PTFkKKyAqIFtIRyBXR10gQ29tbW9uIG1hY3JvIGRlZmluYXRpb24gYW5kIG1vZGlmaWNhdGlvbi4KKyAqCisgKiAwNiAyNiAyMDEzIGhzaXUtY2hpLmhzdQorICogW01PTFkwMDAyNzU4Ml0gW1I3UjhdW1VSTENdIFN0b3AgVGltZXJfUG9sbF9QZXJpb2RpYyBpbiBQQ0ggc3RhdGUgaWYgbm8gdW4tYWNrZWQgUERVIHRvIHJlZHVjZSBzdGFuZGJ5IHBvd2VyIGNvbnN1bXB0aW9uCisgKiAuCisgKgorICogMDQgMjYgMjAxMyBodWlmZW5nLmppbmcKKyAqIE1PTFkwMDAxMzIyNCBtb2x5CisgKgorICogMDQgMDkgMjAxMyB5dW5nZnUuY2hlbgorICogW01PTFkwMDAxMzIyNF0gPz/vv71xPz8/P++/ve+/vT8/P++/ve+/vT/vv73vv70KKyAqIC4KKyAqIAorICogMTAgMTAgMjAxMiB5b3VuZy56aG91CisgKiBbTU9MWTAwMDA0MTQ4XSBbM0cgVEREXVtVUkxDXVRERCBSOSBEZXYgUGF0Y2ggYmFjayB0byBNb2x5CisgKiBTeW5jIHVhc19jb21tb25fZW51bXMuaAorICoKKyAqIDA2IDIxIDIwMTIgaHNpdS1jaGkuaHN1CisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDA0IDE3IDIwMTIgeWl0aW5nLmNoZW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDA0IDE2IDIwMTIgeWl0aW5nLmNoZW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDA0IDExIDIwMTIgeWl0aW5nLmNoZW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDAxIDEyIDIwMTIgcGVuZy1hbi5jaGVuCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDAxIDA5IDIwMTIga2F0aGllLmhvCisgKiByZW1vdmVkIQorICogTWlncmF0ZSBSTEMgUlggcGFydCBvZiBtYWtlIGZpbGUsIHNhcCwgdXJsY1xpbmMuCisgKgorICogMTEgMDggMjAxMSB3ZWltaW4uemVuZworICogcmVtb3ZlZCEKKyAqIG1lcmdlIE1TQkIuCisgKgorICogMDggMzAgMjAxMSBtZW5nc3VuZy53dQorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwMiAyNCAyMDExIHRjLmNoYW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDAyIDE0IDIwMTEgdGMuY2hhbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDEgMjYgMjAxMSBtYXgueWluCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDEyIDMxIDIwMTAgbWF4LnlpbgorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAxMiAxNiAyMDEwIHBlbmctYW4uY2hlbgorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAxMiAxNCAyMDEwIG5pY2t5LmNob3UKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTAgMjUgMjAxMCBtYXgueWluCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiBjb25zdGFudCB2YWx1ZXMgbW9kaWZpY2F0aW9uIGZvciB0ZXN0IGxvb3AgbW9kZSAmIEJNQworICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiBBZGQgY29weXJpZ2h0IGhlYWRlci4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1VBU19DT01NT05fRU5VTVNfSAorI2RlZmluZSBfVUFTX0NPTU1PTl9FTlVNU19ICisKKy8qIE5pY2t5IDIwMTAxMDA4OiBpbmNsdWRlIGhlYWRlciBmaWxlcyBmb3IgcmVkdW5kYW50IGhlYWRlciBmaWxlIHJlbW92YWwgKi8KKyNpbmNsdWRlICJhc19jb21tb24uaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImdsb2JhbF9kZWYuaCIKKworLyogVW5pdmVyc2FsIEJpbjogbWVyZ2UgVEREIGFuZCBGREQgVUFTL1VSUjogYmVnaW4gKi8KKworLyogW0gvRyArIFcvR10gVXNlZCBieSBVUlIsIFVMMiwgVUwyRCBjb250ZXh0IGRlY2xhcmF0aW9uICovCisjZGVmaW5lIE1BWElNVU1fVUFTX0NOVFggKE1BWF9VTVRTX05VTSkKKworLyogW0gvRyArIFcvR10gVXNlZCBieSBVUlIsIFVMMiwgVUwyRCBjb250ZXh0IGluZGljYXRpb24gKi8KK3R5cGVkZWYgZW51bSB7CisgICAgVUFTMSA9IDAsCisgICAgVUFTMiA9IDEsCisgICAgVUFTMyA9IDIsCisgICAgVUFTNCA9IDMKK30gVUFTX0NVUlJFTlRfQ05UWF9QVFJfZW51bTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBURERfVUFTX1NJTTEgPSAwLAorICAgIFRERF9VQVNfTUFYX1NJTV9OVU0KK30gVEREX1VBU19TSU1fSU5ERVhfZW51bTsKKworCisvKiBPZmZzZXQgaW4gdXBsaW5rIERSTEMgUERVICovCisjZGVmaW5lIE5VTV9EUkxDX09GRlNFVCAoOCkKKworLyogTWF4IFlpbiAyMDA5LTEwLTE5OiBTYWZlIHNwYWNlIGZvciBSTEMgaGVhZGVyIHNwYWNlIAorICogc2l6ZW9mKHBkY3BfcHNfZGF0YV9yZXFfc3RydWN0KSAtIHNpemVvZihQRUVSX0JVRkZfSERSKSArIDQgKHJlc2VydmVkIGZvciBSZVR4IGZyb20gUkFURE0pCisgKi8KKyNkZWZpbmUgRFJMQ19TQUZFX0hFQURFUl9TUEFDRV9PRkZTRVQgICAyNCAgCisKKy8vIFVzZWQgYnkgU0FQX1JSQ0VfU0lCRSwgU0FQX01FTUVfU0lCRS4KKyNkZWZpbmUgRkREX01BWF9NRUFTX0NFTExTICgzMikKKyNkZWZpbmUgVEREX01BWF9NRUFTX0NFTExTICAoMzIpCisKKworLyogRGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIHNjcmFtYmxpbmcgY29kZSBwZXIgZnJlcXVlbmN5LiAgVGhlCisgICBmcmVxdWVuY3kgY2FycmllciBpbmZvcm1hdGlvbiBtYXkgY29udGFpbiB1cCB0byAzMiBzY3JhbWJsaW5nIGNvZGVzCisgICAobSkgW3JlZjozMS4xMDI7MjcwXSAqLworLyogSm9obiBUYW5nIDIwMDUvMTAvMjQuICovCisjZGVmaW5lIE1BWF9OVU1fU0NSQU1CTElOR19DT0RFIDMyCisKKyNkZWZpbmUgTUFYX05VTV9UUkNIICAgICAgICAgICAgIDgKKworCisvKioKKyogRGF0YWJhc2UgaW5kZXhvcgorKi8KKyNkZWZpbmUgRkREX0RCSWR4IFJSQ19GRERfREJfQ2VsbF9JZHgKKyNkZWZpbmUgVEREX0RCSWR4IFJSQ19URERfREJfQ2VsbF9JZHgKKyNkZWZpbmUgREJfSU5WQUxJRF9JTkRFWCAoLTEpCisKKyNkZWZpbmUgTUFYX1JCU19JTl9SQUIgICAgICAgICAgICAgKDMpCisKKyNpZmRlZiBfX1VNVFNfUjVfXworI2RlZmluZSBNQVhfUkJfTE9PUEVEX0JBQ0sgICAgKDUpIC8qIHJlZmVyIHRvIDM0LjEwOSBWNS41LjAgc2VjdGlvbiA2LjIsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsb29wYmFjayBSQiBpcyA1ICovCisjZWxzZSAvKiBfX1VNVFNfUjVfXyAqLworI2RlZmluZSBNQVhfUkJfTE9PUEVEX0JBQ0sgICAgKDQpIC8qIHJlZmVyIHRvIDM0LjEwOSBWMy5hLjAgc2VjdGlvbiA2LjIsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsb29wYmFjayBSQiBpcyA0ICovCisjZW5kaWYgLyogX19VTVRTX1I1X18gKi8KKworLy8gVW5pQmluIG1vZGlmeTogIEZERCgxODAwKSwgVEREKDE1NjApLCAgVEREIGFsaWduIHRvIEZERAorI2RlZmluZSBNQVhfTDJfRVhURVJOQUxfU0RVX1NJWkUgICAoMTgwMCkgCisKKy8qCisgKiBUaGVvcmV0aWNhbGx5IE1heCBTRFUgc2l6ZSBmb3IgVE0gbW9kZSBpbiBTUkIgaXMgTWF4IE1BQy1laHMgUERVIHNpemUuIFRoaXMgaXMgcG9zc2libGUgaW4gZS1GQUNIIEJDQ0gvUENDSCBtYXBwZWQgb250byBlaHMuCisgKi8KKyNkZWZpbmUgTUFYX0wyX1RNX1NEVV9TSVpFICgyMDQ4KQorCisjaWZkZWYgX19DU0hTUEFfU1VQUE9SVF9fCisjZGVmaW5lIE1BWF9DU19VTF9NRU1fTlVNICg0MCkgLyogNSsxIGZvciBSTEMgZGlzY2FyZCB0aW1lciwgMzIgZm9yIFVNQUMgSEFSUSBwcm9jZXNzLCAyIGZvciBpbnRlcm5hbCBkZWxheSAqLworLyoKKyAqICBIQVJRIHdvcnN0IGNhc2UKKyAqICAxLiBbMTBtcyBUVEldIE1heCB0aW1lIGZvciBvbmUgcHJvY2VzcyBpcyAxNiAqIDQwbXMgKGR1cmF0aW9uIGZvciB0aGUgc2FtZSBwcm9jZXNzIHRvIHRyYW5zbWl0KSAgPSA2NDBtcyAgPT0+IDMyIHBpZWNlcworICoKKyAqICAyLiBbMm1zIFRUSV0gTWF4IHRpbWUgZm9yIG9uZSBwcm9jZXNzIGlzIDE2ICogMTZtcyAoZHVyYXRpb24gZm9yIHRoZSBzYW1lIHByb2Nlc3MgdG8gdHJhbnNtaXQpID0gMjU2bXMgID09PiAxMyBwaWVjZXMKKyAqLworI2RlZmluZSBNQVhfQ1NfRExfSFNQQV9EQVRBX1NJWkUgKDg0KSAvKiAxIGJ5dGUgZm9yIFBEQ1AgaGVhZGVyLCAzIGJ5dGVzIGFsaWdubWVudCovCisjZW5kaWYKKworI2RlZmluZSBNQVhfQ1NfREFUQV9TSVpFICgxNjApICAvKiBkb24ndCBuZWVkIHRvIGxlYXZlIDggYnl0ZXMgZm9yIFJMQyBhbmQgMWJ5dGUgZm9yIFBEQ1AgIGJlY2F1c2UgdGhleSB3b3VsZCBhbGxvY2F0ZWQgaW4gZnJlZSBoZWFkZXIqLworI2RlZmluZSBNQVhfUkxDX0NTX0RBVEFfU0laRSAoTlVNX0RSTENfT0ZGU0VUICsgTUFYX0NTX0RBVEFfU0laRSkgLyogUkxDIG5lZWRzIHRvIHJlc2VydmUgTlVNX0RSTENfT0ZGU0VUKDgpIGJ5dGVzIGZvciBleHRyYSBpbmZvIGluIGNzcl90bV9kYXRhX3JlcSAqLworCisvKiBkZWZpbml0aW9uIGZvciBIUDg5NjAgTEJNOiBleHRyYSBDUkMgYnl0ZXMgLSAzLiAqLworI2RlZmluZSBNQVhfQ1NfRExfREFUQV9TSVpFICg0ODArNCkKKworI2RlZmluZSBGSVJTVF9FWFRFTkRFRF9VU0VSX1JCX0lEIChFWFRfUkJfSURfRENDSF9SQjQgKyAxKQorI2RlZmluZSBFWFRFTkRFRF9SQl9JRF9OT05FIChGSVJTVF9FWFRFTkRFRF9SQl9JRC0xKQorI2RlZmluZSBJU19WQUxJRF9FWFRFTkRFRF9SQl9JRChpZCkgSVNfSU5SQU5HRSgoaWQpLCBGSVJTVF9FWFRFTkRFRF9SQl9JRCwgTEFTVF9FWFRFTkRFRF9SQl9JRCkKKworI2RlZmluZSBJTlJBTkdFX1JCMV9SQjMyKGlkKSAgIElTX0lOUkFOR0UoKGlkKSwgRVhUX1JCX0lEX0RDQ0hfUkIxLCBFWFRfUkJfSURfUkIzMikKKworI2RlZmluZSBJTlZBTElEX1QzMDhfRFVSQVRJT04gICAgICAgIDB4RkZGRgorCisvKiBFcmljOiBNb3ZlZCBoZXJlIHNpbmNlIGl0J3Mgc2hhcmVkIGJ5IE1FTUUgJiBVTUFDICovCisjZGVmaW5lIEZERF9JTlZBTElEX01FQVNVUkVNRU5UX0lEICAgICAgMzMKKyNkZWZpbmUgVEREX0lOVkFMSURfTUVBU1VSRU1FTlRfSUQgICAgICAxNworCisjZGVmaW5lIEZERF9NQVhfTlVNX1RWTV9DRkcgICAgICAgICAgICAgMzIKKyNkZWZpbmUgVEREX01BWF9OVU1fVFZNX0NGRyAgICAgICAgICAgICAxNgorCisvKiBNYWNybyBmb3IgaW5mb3JtYXRpb24gZXh0cmFjdGVkIGFib3ZlICovCit0eXBlZGVmIGVudW0gdFR4UnhUYWcKK3sKKyAgICBUWCwKKyAgICBSWAorfSB0VHhSeDsKKwordHlwZWRlZiBlbnVtIHRSTENFbnRpdHlNb2RlVGFnCit7CisgICAgUkxDX1RNID0gMSwKKyAgICBSTENfVU0sCisgICAgUkxDX0FNCit9IHRSTENFbnRpdHlNb2RlOworCisvKiBKZWZmIFd1ICovCisjZGVmaW5lIFJBQk1fTUFYX05TQVBJICAgICAxMQorI2RlZmluZSBNSU5fTlNBUEkgNQorI2RlZmluZSBNQVhfTlNBUEkgMTUKKworLyogMjAxMS4wMi4xNDogU2V0IDUgZm9yIHBhc3NpbmcgR0NGIFRDIDcuMS41LjIgKi8KKyNkZWZpbmUgTUFYX1ZBTChWQUxfQSwgVkFMX0IpICAgKCgoVkFMX0EpID4gKFZBTF9CKSkgPyAoVkFMX0EpOihWQUxfQikpCisjZGVmaW5lIE5VTV9PRl9OU0FQSSBNQVhfVkFMKEdQUlNfTUFYX1BEUF9TVVBQT1JULCA1KQorCisvLyBVbmlCaW4gbW9kaWZ5OiAgRkRECisvLyBGREQ6ICAjZGVmaW5lIFJBQk1fTUFYX1BTX1JBQlMgKDExKQorLy8gVEREOiAjZGVmaW5lIFJBQk1fTUFYX1BTX1JBQlMgTUFYX1ZBTChHUFJTX01BWF9QRFBfU1VQUE9SVCwgNSkKKyNkZWZpbmUgUkFCTV9NQVhfUFNfUkFCUyAoMTEpCisKKy8qIENOIGRvbWFpbiBlbWJlZGRlZCBpbiBNVUkuICovCisjZGVmaW5lIE1VSV9QU19ET01BSU4gMHgwMDAwMDEwMCAvKiBtYXNrIHRvIGdldCBDTiBEb21haW4uICovCisjZGVmaW5lIE1VSV9ET01BSU5fUE9TIDggLyogdGhlIHBvc2l0aW9uIHRvIGluZGljYXRlIENOIERvbWFpbiBpcyBhdCBiaXQgTVVJX0RPTUFJTl9QT1MrMS4gKi8KKy8qIEJNQyBsZXZlbCAyIERSWCBiaXRtYXAgc2l6ZS4gKi8KKyNkZWZpbmUgVUFTX0JNQ19NQVhfQklUTUFQX1NJWkUgKDMyKQorI2RlZmluZSBNQVhfQU1fREFUQV9DTkYgKDgpCisKKy8qIE1heCBZaW4gKi8KKyNkZWZpbmUgUERDUF9ETF9QRFVfRlJFRV9IRUFERVJfU1BBQ0UgICAgICAgNAorCisjZGVmaW5lIFNIQVFfUERDUF9OT19IRFJfUERVX0hEUl9MRU4gICAgICAgICAwCisKKyNkZWZpbmUgIEZBQ0hfQkNIX0FJQ0hfU1VQUE9SVEVEIEtBTF9UUlVFCisKK3R5cGVkZWYgZW51bQoreworICAgLyogRXh0ZW5kZWQgQmVhcmVyIElEcyAqLworICAgLyogSURzIDQuLjMxIGZvciB1c2VyIHBsYW5lIChEVENIKSwgcm91dGVkIHRvL2Zyb20gVVVTIFNBUCAqLworCisgICAvKiBCcm9hZGNhc3QgY29udHJvbCBjaGFubmVsICovCisgICBFWFRfUkJfSURfQUxMID0gLTYsCisgICBGSVJTVF9FWFRFTkRFRF9SQl9JRCA9IC01LAorICAgRVhUX1JCX0lEX0NUQ0ggPSBGSVJTVF9FWFRFTkRFRF9SQl9JRCwgLyogLTUgYWxsb2NhdGVkIHRvIENUQ0ggKi8KKyAgIEVYVF9SQl9JRF9CQ0NIX0ZBQ0gsIC8qIC00IGFsbG9jYXRlZCB0byBCQ0NIL0ZBQ0ggKi8KKyAgIEVYVF9SQl9JRF9CQ0NIX0JDSDAsIC8qIC0zIGFsbG9jYXRlZCB0byBCQ0NIJyBmb3IgU0ZOIHRpbWluZyBtZWFzdXJlbWVudCAqLworICAgRVhUX1JCX0lEX0JDQ0hfQkNIMSwgLyogLTIgYWxsb2NhdGVkIHRvIEJDQ0gvQkNIICovCisgICBFWFRfUkJfSURfUENDSCwgICAgICAvKiAtMSBQYWdpbmcgY29udHJvbCBjaGFubmVsICovCisgICBFWFRfUkJfSURfQ0NDSCwgICAgICAvKiAgMCBDb21tb24gY29udHJvbCBjaGFubmVsICovCisgICBFWFRfUkJfSURfRENDSF9SQjEsICAvKiAgMSBEZWRpY2F0ZWQgY29udHJvbCBjaGFubmVsLCBVTSBiZWFyZXIgKi8KKyAgIEVYVF9SQl9JRF9EQ0NIX1JCMiwgIC8qICAyIERlZGljYXRlZCBjb250cm9sIGNoYW5uZWwsIEFNIGJlYXJlciAqLworICAgRVhUX1JCX0lEX0RDQ0hfUkIzLCAgLyogIDMgRm9yIGhpZ2ggcHJpb3JpdHkgU0FQSSAwIE5BUyBEVCBtZXNzYWdlcyAqLworICAgRVhUX1JCX0lEX0RDQ0hfUkI0LCAgIC8qICA0IEZvciBsb3cgcHJpb3JpdHkgU0FQSSAzIE5BUyBEVCBtZXNzYWdlcyAqLworICAgRVhUX1JCX0lEX1JCNSwgCisgICBFWFRfUkJfSURfUkI2LCAKKyAgIEVYVF9SQl9JRF9SQjcsIAorICAgRVhUX1JCX0lEX1JCOCwgCisgICBFWFRfUkJfSURfUkI5LCAKKyAgIEVYVF9SQl9JRF9SQjEwLCAKKyAgIEVYVF9SQl9JRF9SQjExLCAKKyAgIEVYVF9SQl9JRF9SQjEyLCAKKyAgIEVYVF9SQl9JRF9SQjEzLCAKKyAgIEVYVF9SQl9JRF9SQjE0LCAKKyAgIEVYVF9SQl9JRF9SQjE1LCAKKyAgIEVYVF9SQl9JRF9SQjE2LCAKKyAgIEVYVF9SQl9JRF9SQjE3LCAKKyAgIEVYVF9SQl9JRF9SQjE4LCAKKyAgIEVYVF9SQl9JRF9SQjE5LCAKKyAgIEVYVF9SQl9JRF9SQjIwLCAKKyAgIEVYVF9SQl9JRF9SQjIxLCAKKyAgIEVYVF9SQl9JRF9SQjIyLCAKKyAgIEVYVF9SQl9JRF9SQjIzLCAKKyAgIEVYVF9SQl9JRF9SQjI0LCAKKyAgIEVYVF9SQl9JRF9SQjI1LCAKKyAgIEVYVF9SQl9JRF9SQjI2LCAKKyAgIEVYVF9SQl9JRF9SQjI3LCAKKyAgIEVYVF9SQl9JRF9SQjI4LCAKKyAgIEVYVF9SQl9JRF9SQjI5LCAKKyAgIEVYVF9SQl9JRF9SQjMwLCAKKyAgIEVYVF9SQl9JRF9SQjMxLCAKKyAgIEVYVF9SQl9JRF9SQjMyLCAKKyAgIExBU1RfRVhURU5ERURfUkJfSUQgPSBFWFRfUkJfSURfUkIzMgorLy8gICBEVU1NWV9FWFRFTkRFRF9SQl9JRCA9IDB4N0ZGRkZGRkYgLyogZnJvc3Q6IHJlbW92ZSBpdCAqLworfSBFeHRlbmRlZFJiSWQ7CisKKy8qIEplZmYgV3UgKi8KK3R5cGVkZWYgZW51bQoreworICAgIFJBQl9SRUxFQVNFX0JZX05XLAorICAgIFJBQl9SRUxFQVNFX0JZX1JSQ19DT05OX1JFTEVBU0UsCisgICAgUkFCX1JFTEVBU0VfQllfTE9TVF9DT1ZFUkFHRSwKKyAgICBSQUJfUkVMRUFTRV9CWV9JTlRFUl9SQVQsCisgICAgUkFCX1JFTEVBU0VfQllfVU5TUEVDSUZJRUQKK30gcmFiX3JlbGVhc2VfY2F1c2VfZW51bTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgTDJfUlJDX0lETEUsCisgICAgTDJfUlJDX0NFTExfRENILAorICAgIEwyX1JSQ19DRUxMX0ZBQ0gsCisgICAgTDJfUlJDX0NFTExfUENILAorICAgIEwyX1JSQ19VUkFfUENILAorICAgIEwyX1JSQ19JTlZBTElEX1NUQVRFCit9IEwyX1JSQ19TVEFURTsKKwordHlwZWRlZiBlbnVtIENNQUNfVHJhZmZpY1ZvbHVtZUV2ZW50VHlwZSB7CisgICAgZTRhID0gMCwKKyAgICBlNGIgPSAxLAorICAgIGVJbnZhbGlkPTMKK30gQ01BQ19UcmFmZmljVm9sdW1lRXZlbnRUeXBlOworCisKK3R5cGVkZWYgZW51bQoreworICAgIEZJUlNUX0xPR0lDQUxfQ0hBTk5FTF9QRFVfVFlQRSwKKyAgICBQRFVfVFlQRV9DT05UUk9MID0gRklSU1RfTE9HSUNBTF9DSEFOTkVMX1BEVV9UWVBFLAorICAgIFBEVV9UWVBFX0RBVEEsCisgICAgUERVX1RZUEVfTkEsCisgICAgTEFTVF9MT0dJQ0FMX0NIQU5ORUxfUERVX1RZUEUgPSBQRFVfVFlQRV9OQQorfXRSbGNQZHVUeXBlIDsKKworCit0eXBlZGVmIGthbF91aW50MTYgUkxDRW50aXR5SUQ7CisKKy8qIFtNT0RJRklDQVRJT05dIEthdGhpZSAqLwordHlwZWRlZiBlbnVteworICAgIFJFQVNNX0NBVVNFX05PUk1BTCwKKyAgICBSRUFTTV9DQVVTRV9NUlcsCisgICAgLyogUkVBU01fQ0FVU0VfUkVTRVQsICovCisgICAgUkVBU01fQ0FVU0VfTlVNCit9dFJlYXNtQ2F1c2U7CisKKwordHlwZWRlZiBlbnVtCit7CisgICAgQU1fUkxDX1NEVV9BQ0sgPSAwLAorICAgIEFNX1JMQ19TRFVfQUxMX1RYLAorICAgIEFNX1JMQ19TRFVfTk9UX0FMTF9UWAorfSB0QW1SbGNTZHVUeFJlc3VsdDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgVUFTX0RMX0FETSA9IDAsCisgICAgR1JMQ19ETF9BRE1fRklSU1RfUEFSVCwKKyAgICBHUkxDX0RMX0FETV9TRUNPTkRfUEFSVCwKKyAgICBVQVNfRExfSURMRV9BRE0KK30gdWFzX2RsX2FkbV9pbmRleF9lbnVtOworCisKKwordHlwZWRlZiBrYWxfdWludDE2IFJMQ0VudGl0eUlEOworCisvKiBVTUFDIFI3ICovCisvKiBBdXRob3IgOiBEYXZpZCAqLworLyogVGVtcCBFbnVtLiBBZnRlciBjb2RlIG1lcmdlIHdpdGggUkxDLCBpIG5lZWQgdG8gcmVwbGFjZSBpdCB3aXRoIFJMQy1TTENFIGludGVyZmFjZS4qLwordHlwZWRlZiBlbnVtCit7CisgICAgRmxleGlibGUgPSAwLAorICAgIEZpeGVkID0gMQorfSB0UmxjRml4ZWRGbGV4aWJsZTsKKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBzd0Y4QWxnb1VlYTAgPSAwLyogTm8gQ2lwaGVyICovCisgICAsc3dGOEFsZ29VZWExCisgICAsc3dGOEFsZ29VZWEyCit9IHN3RjhBbGdvOworCisKKy8qIEVudW0gdG8gaW5kaWNhdGUgdGhlIHViaW4gbWVtb3J5IGlzIGluaXRpYWxpemVkIHRvIE5vbmUgLyBGREQgLyBUREQuKi8KK3R5cGVkZWYgZW51bQoreworICAgVUwyX1VCSU5fTUVNX0lOSVRfSU5fTk9ORSA9IDAsICAgLyogSW5pdGlhbGl6YXRpb24gc3RhdGUsIHVsMiB1YmluIG1lbW9yeSBkb2Vzbid0IGluaXQgdG8gRkREIG9yIFRERCAqLworICAgVUwyX1VCSU5fTUVNX0lOSVRfSU5fRkRELCAgICAgICAgLyogdWwyIHViaW4gbWVtb3J5IGlzIGluaXRpYWxpemVkIHRvIEZERCAqLworICAgVUwyX1VCSU5fTUVNX0lOSVRfSU5fVERELCAgICAgICAgLyogdWwyIHViaW4gbWVtb3J5IGlzIGluaXRpYWxpemVkIHRvIFRERCAqLworICAgVUwyX1VCSU5fTUVNX1RBU0tfSU5fTk9ORSwKKyAgIFVMMl9VQklOX01FTV9UQVNLX0lOX0ZERCwgICAgICAgIC8qIHVsMiB1YmluIG1lbW9yeSBpcyBpbml0aWFsaXplZCB0byBGREQgKi8KKyAgIFVMMl9VQklOX01FTV9UQVNLX0lOX1RERCAgICAgICAgIC8qIHVsMiB1YmluIG1lbW9yeSBpcyBpbml0aWFsaXplZCB0byBUREQgKi8KK30gdWwyX3ViaW5fbWVtX2luaXRfc3RhdGVfZTsKKworI2VuZGlmIC8qIF9VQVNfQ09NTU9OX0VOVU1TX0ggKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3Vhc19lYXNfZW51bXMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91YXNfZWFzX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdkYmVlMwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91YXNfZWFzX2VudW1zLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfVUFTX0VBU19FTlVNU19ICisjZGVmaW5lIF9VQVNfRUFTX0VOVU1TX0gKKworI2luY2x1ZGUgImlyYXRfY29tbW9uX2VudW1zLmgiCisKKy8qIE1BQ1JPIGdvZXMgaGVyZSAqLworI2RlZmluZSBNQVhfTlVNX0NFTExfSU5GT19VVFJBICgxNikKKyNkZWZpbmUgTUFYX05VTV9SRURJUkVDVElPTl9GUkVRX1VUUkEgKDYpCisKK3R5cGVkZWYgZW51bSB7CisgICAgQ0dJX0lORk9fTk9UX0NTR19DRUxMICAgID0gMHgwMCwKKyAgICBDR0lfSU5GT19DU0dfQ0xPU0VEX0NFTEwgPSAweDAxLAorICAgIENHSV9JTkZPX0hZQlJJRF9DRUxMICAgICA9IDB4MDIsCit9IGNlbGxfdHlwZV9lbnVtOworCit0eXBlZGVmIGVudW0geworCQlGRERfTU9CX01FTUVfTUVBU19TVE9QX0NBVVNFX1JFR1VMQVIsIC8qbm9ybWFsIHN0b3AqLworCQlGRERfTU9CX01FTUVfTUVBU19TVE9QX0NBVVNFXzRHM0lSSE8gLypzdG9wIHRyaWdnZXJlZCBieSA0RzMgSVJITyovCit9RkREX01PQl9NRU1FX01FQVNVUkVNRU5UX1NUT1BfQ0FVU0U7CisKKworI2VuZGlmICAvKiBVQVNfRUFTX0VOVU1TX0ggKi8KZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91YXNfZWFzX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3Vhc19lYXNfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyNDE0ZgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91YXNfZWFzX3N0cnVjdC5oCkBAIC0wLDAgKzEsNDY1IEBACisjaWZuZGVmIF9VQVNfRUFTX1NUUlVDVF9ICisjZGVmaW5lIF9VQVNfRUFTX1NUUlVDVF9ICisKKyNpbmNsdWRlICJpcmF0X2NvbW1vbl9lbnVtcy5oIgorI2luY2x1ZGUgImlyYXRfY29tbW9uX3N0cnVjdC5oIgorI2luY2x1ZGUgInVhc19lYXNfZW51bXMuaCIKKyNpbmNsdWRlICJtY2RfbDNfaW5jX3N0cnVjdC5oIgorI2luY2x1ZGUgImNzaV91bXRzX2Fzbi5oIgorI2luY2x1ZGUgInVhc19lYXNfaW50ZXJfY29yZV9zdHJ1Y3QuaCIKKyNpbmNsdWRlICJnbG9iYWxfdHlwZS5oIgorCisvKiBNZWFzdXJlbWVudCByZXN1bHRzIHJlbGF0ZWQ6IFVBUyB0by9mcm9tIEVBUyAqLworCisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKworLyogTWVhc3VyZW1lbnQgcmVxdWVzdC9jb25maXJtIHJlbGF0ZWQ6IFVBUyB0by9mcm9tIEVBUyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgTE9DQUxfUEFSQV9IRFIKKyAga2FsX3VpbnQ4IHRpZDsKKyAga2FsX2Jvb2wgaHBzX2ZsYWc7CisgIGthbF91aW50OCBwcmlvX21lYXNfcGVyaW9kOworICBrYWxfdWludDggZnJlcV9udW07CisgIGVhc19tZWFzX2ZyZXFfaW5mb19zdHJ1Y3QgZnJlcVtNQVhfTUVBU19JUkFUX0ZSRVFdOworCisvLyNpZmRlZiBfX0xURV9SMTFfXworICBrYWxfdWludDggcmFjaF9yZXBvcnRfZnJlcV9udW07CisvLyNlbmRpZgorICBrYWxfYm9vbCByc3JxX21lYXNfb25fYWxsX3N5bWJvbHM7Cit9IHVhc19lYXNfbHRlX21lYXN1cmVtZW50X3JlcV9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorfSB1YXNfZWFzX2x0ZV9tZWFzdXJlbWVudF9jbmZfc3RydWN0OworCisvKiBNZWFzdXJlbWVudCByZXF1ZXN0L2NvbmZpcm0gcmVsYXRlZDogRUFTIHRvIFVBUyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICBrYWxfdWludDggbGlzdF9yZWY7CisgIGthbF9pbnQxNiBwcmlvX21lYXNfcGVyaW9kOworICBGRERfbWVhc19VbXRzQ2VsbExpc3QgdW10c19jZWxsX2xpc3Q7CisgIGthbF9pbnQ4IGZkZF9yc2NwX21pbl9pbl9kYm07IC8vVEJDIHdpdGggTFRFCisgIGthbF91aW50MTYgZmlyc3RfbWVhc191YXJmY247IC8vIGludmFsaWQgdmFsdWUgPSAtMQorICBrYWxfYm9vbCBpc19kZXRlY3RlZF9jZWxsX21lYXNbRkREX01BWF9OVU1fTUVBU1VSRURfVU1UU19DQVJSSUVSU107CisgIG1lYXNfc2NhbGVfZmFjdG9yX2VudW0gbWVhc19zY2FsZV9mYWN0b3I7CisgIEZERF9NT0JfTUVNRV9NRUFTVVJFTUVOVF9TVE9QX0NBVVNFIHN0b3BfY2F1c2U7Cit9IGVhc19mZGRfdWFzX2NvbmZpZ191Y2VsbF9wcmlvX21lYXNfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICBrYWxfdWludDggbGlzdF9yZWY7CisgIGthbF9pbnQxNiBwcmlvX21lYXNfcGVyaW9kOworICBURERfbWVhc19VbXRzQ2VsbExpc3QgdW10c19jZWxsX2xpc3Q7Ly9udW1FbGVtZW50cyBpbiBDc2lVbXRzQ2VsbExpc3RPblRoZUNhcnJpZXIgbXVzdCBiZSAwCisvLyAga2FsX2ludDggZmRkX3JzY3BfbWluX2luX2RibTsgLy9UQkMgd2l0aCBMVEUsIEZERCBvbmx5CisgIGthbF91aW50MTYgZmlyc3RfbWVhc191YXJmY247IC8vIGludmFsaWQgdmFsdWUgPSAtMS8vVEJELCBmb3IgQ1NGQiwgd2hldGhlciByZXBvcnQgbWVhcyByZXN1bHQgcGVyIGZyZXE/CisgIGthbF9ib29sIGlzX2RldGVjdGVkX2NlbGxfbWVhc1tURERfTUFYX05VTV9NRUFTVVJFRF9VTVRTX0NBUlJJRVJTXTsKKyAgbWVhc19zY2FsZV9mYWN0b3JfZW51bSBtZWFzX3NjYWxlX2ZhY3RvcjsKK30gZWFzX3RkZF91YXNfY29uZmlnX3VjZWxsX3ByaW9fbWVhc19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIGthbF91aW50OCBsaXN0X3JlZjsKKyAgRkREX21lYXNfVW10c0NlbGxMaXN0IHVtdHNfY2VsbF9saXN0OworICBrYWxfaW50OCBmZGRfcnNjcF9taW5faW5fZGJtOyAvL1RCQyB3aXRoIExURQorICBrYWxfdWludDE2IGZpcnN0X21lYXNfdWFyZmNuOyAvLyBpbnZhbGlkIHZhbHVlID0gLTEKKyAga2FsX2Jvb2wgaXNfZGV0ZWN0ZWRfY2VsbF9tZWFzW0ZERF9NQVhfTlVNX01FQVNVUkVEX1VNVFNfQ0FSUklFUlNdOworICAvKiBUaGlzIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG1lYXN1cmVtZW50IHBlcmlvZCBzaG91bGQgYmUgcmVzZXQKKyAgICogaW1tZWRpYXRlbHkuIChUUlVFOiAgbWVhcyBpcyBwZXJmb3JtZWQgaW4gdGhlIGZpcnN0IERSWC4gCisgICAqICAgICAgICAgICAgICAgRkFMU0U6IG1lYXMgaXMgcGVyZm9ybWVkIGluIHRoZSBmaXJzdCBULW1lYXMgb2NjYXNpb24pICAKKyAgICogSW4gY3VycmVudCBkZXNpZ24sIHRoZSBmb2xsb3dpbmcgcnVsZXMgc2hvdWxkIGJlIGZvbGxvd2VkLgorICAgKiAoMSlJZiBudW1iZXIgb2YgQVJGQ04gIT0gMCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IGFzIEZBTFNFIG9ubHkgaWYgdG1lYXN1cmUgbWVhc3VyZW1lbnQgCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0cmlnZ2VyZWQgd2hlbiBwcmlvcml0eSBtZWFzdXJlbWVudCBpcyBvbi1nb2luZyAoaS5lLiwgYXQgbGVhc3QgCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgb2YgVU1UUyBjZWxscyBoaXRzIHByaW9yaXR5IHJlc2VsZWN0aW9uIGNyaXRlcmlhIGZvciBwcmlvcml0eSAKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG1lYXN1cmVtZW50IHJlc2VsZWN0aW9uKS4gRm9yIG90aGVyIGNhc2UsIHRoaXMgZmxhZyBzaG91bGQgCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBzZXQgYXMgVFJVRS4gSWYgYW55IGltcHJvdmVtZW50IGlzIG5lZWRlZCwgdGhlIHVzYWdlIGxpbWl0YXRpb24gCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyBmbGFnIHNob3VsZCBiZSBjb25maXJtZWQgd2l0aCBVTDEncyBjb2xsZWFndWUuCisgICAqICgyKSBJZiBudW1iZXIgb2YgQVJGQ04gPT0gMCwgdGhpcyBmbGFnIHdpbGwgYWx3eWFzIGJlIHNldCBhcyBGQUxTRTsKKyAgICovCisgIGthbF9ib29sIGlzX21lYXNfcGVyaW9kX3Jlc2V0OworICAKKyAgLyogV2hlbiB0aGlzIGZsYWcgaXMgc2V0IHRvIFRSVUUsIHRoZSBzdGFuZGJ5IG1lYXN1cmVtZW50IHdpbGwgYmUgcGVyZm9ybWVkIGV2ZXJ5IFQtbWVhcyB3aXRob3V0ICovCisgIC8qIG11bHRpcGx5aW5nIGJ5IE4gbGF5ZXJzLiBTbyB0aGF0IHRoZXJlIHdpbGwgYmUgMiBtZWFzdXJlbWVudCByZXN1bHRzIHdpdGhpbiAxMHMgT09TIHBlcmlvZCwgd2hpY2ggKi8KKyAgLyogaW5jcmVhc2VzIHRoZSBzdWNjZXNzZnVsIHJhdGUgb2YgZmluZGluZyBhIGNhbmRpZGF0ZSBkdXJpbmcgT09TICovCisgIGthbF9ib29sIHByb2hpYml0X2FwcGx5X25fbGF5ZXI7CisgIG1lYXNfc2NhbGVfZmFjdG9yX2VudW0gbWVhc19zY2FsZV9mYWN0b3I7CisgIEZERF9NT0JfTUVNRV9NRUFTVVJFTUVOVF9TVE9QX0NBVVNFIHN0b3BfY2F1c2U7IAkKK30gZWFzX2ZkZF91YXNfY29uZmlnX3VjZWxsX21lYXNfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICBrYWxfdWludDggbGlzdF9yZWY7CisgIFRERF9tZWFzX1VtdHNDZWxsTGlzdCB1bXRzX2NlbGxfbGlzdDsKKyAgLy9rYWxfaW50OCBmZGRfcnNjcF9taW5faW5fZGJtOyAvL1RCQyB3aXRoIExURSwgRkREIG9ubHkKKyAga2FsX3VpbnQxNiBmaXJzdF9tZWFzX3VhcmZjbjsgLy8gaW52YWxpZCB2YWx1ZSA9IC0xLy9UQkQsIGZvciBDU0ZCLCB3aGV0aGVyIHJlcG9ydCBtZWFzIHJlc3VsdCBwZXIgZnJlcT8KKyAga2FsX2Jvb2wgaXNfZGV0ZWN0ZWRfY2VsbF9tZWFzW1RERF9NQVhfTlVNX01FQVNVUkVEX1VNVFNfQ0FSUklFUlNdOworICBrYWxfYm9vbCAgaXNfbWVhc19wZXJpb2RfcmVzZXQ7CisKKyAgLyogV2hlbiB0aGlzIGZsYWcgaXMgc2V0IHRvIFRSVUUsIHRoZSBzdGFuZGJ5IG1lYXN1cmVtZW50IHdpbGwgYmUgcGVyZm9ybWVkIGV2ZXJ5IFQtbWVhcyB3aXRob3V0ICovCisgIC8qIG11bHRpcGx5aW5nIGJ5IE4gbGF5ZXJzLiBTbyB0aGF0IHRoZXJlIHdpbGwgYmUgMiBtZWFzdXJlbWVudCByZXN1bHRzIHdpdGhpbiAxMHMgT09TIHBlcmlvZCwgd2hpY2ggKi8KKyAgLyogaW5jcmVhc2VzIHRoZSBzdWNjZXNzZnVsIHJhdGUgb2YgZmluZGluZyBhIGNhbmRpZGF0ZSBkdXJpbmcgT09TICovCisgIGthbF9ib29sIHByb2hpYml0X2FwcGx5X25fbGF5ZXI7CisgIG1lYXNfc2NhbGVfZmFjdG9yX2VudW0gbWVhc19zY2FsZV9mYWN0b3I7Cit9IGVhc190ZGRfdWFzX2NvbmZpZ191Y2VsbF9tZWFzX3JlcV9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorfSBlYXNfZmRkX3Vhc19jb25maWdfdWNlbGxfcHJpb19tZWFzX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKK30gZWFzX2ZkZF91YXNfY29uZmlnX3VjZWxsX21lYXNfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorfSBlYXNfdGRkX3Vhc19jb25maWdfdWNlbGxfcHJpb19tZWFzX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKK30gZWFzX3RkZF91YXNfY29uZmlnX3VjZWxsX21lYXNfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgIGthbF9ib29sICAgaXNfbGFjX3ZhbGlkOworICBrYWxfdWludDE2IGxhYzsKKyAga2FsX2Jvb2wgICBpc19yYWNfdmFsaWQ7CisgIGthbF91aW50OCAgcmFjOworfSB1Y2VsbF9jZ2lfaW5mb19vcHRpb25hbF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIGNnaV9pbmZvX3N0YXR1c19lbnVtIGNnaV9pbmZvX3N0YXR1czsKKyAgICBrYWxfdWludDMyIGNlbGxfaWQ7CisgICAga2FsX3VpbnQ4ICBudW1fcGxtbl9pZF9saXN0OworICAgIHBsbW5faWRfc3RydWN0IHBsbW5faWRfbGlzdFs2XTsgLy9NQVhfTlVNX1BMTU5fSUQKKyAgICBjc2dfYWNjZXNzX21vZGVfZW51bSB1Y2VsbF90eXBlOworICAgIGthbF91aW50MzIgICAgIGNzZ19pZDsKKyAgICB1Y2VsbF9jZ2lfaW5mb19vcHRpb25hbF9zdHJ1Y3Qgb3B0aW9uYWxfZmllbGQ7Cit9IHVjZWxsX2NnaV9pbmZvX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcGxtbl9zZWFyY2hfdHlwZV9lbnVtCXBsbW5fc2VhcmNoX3R5cGU7CisgICAgYXV0b19zZWFyY2hfY21kX2VudW0gYXV0b19zZWFyY2hfY21kOworICAgIGthbF91aW50OCAgbnVtX2NhcnJpZXJzOworICAgIGthbF91aW50MTYgY3NnX3VhcmZjbltNQVhfTlVNX0NTR19DQVJSSUVSU107Cit9IGVhc191YXNfc2VhcmNoX2NzZ191Y2VsbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBzZWFyY2hfc3RhdHVzX2VudW0gc2VhcmNoX3N0YXR1czsKKyAgICBrYWxfdWludDggbnVtX2NhcnJpZXJzOworICAgIHRzXzNHX2NzZ191Y2VsbF9ldmx1YXRpb25fcmVzdWx0IGNzZ191Y2VsbF9ldmx1YXRpb25fcmVzdWx0X2xpc3RbTUFYX05VTV9DU0dfQ0FSUklFUlNdOworfSBlYXNfdWFzX3NlYXJjaF9jc2dfdWNlbGxfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcGxtbl9zZWFyY2hfdHlwZV9lbnVtCXBsbW5fc2VhcmNoX3R5cGU7CisgICAgYXV0b19zZWFyY2hfY21kX2VudW0gYXV0b19zZWFyY2hfY21kOworICAgIGthbF91aW50OCAgbnVtX2NhcnJpZXJzOworICAgIGthbF91aW50MTYgY3NnX3VhcmZjbltNQVhfTlVNX0NTR19DQVJSSUVSU107Cit9IGVhc191YXNfZXZhbHVhdGVfY3NnX3VjZWxsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHNlYXJjaF9zdGF0dXNfZW51bSBzZWFyY2hfc3RhdHVzOworICAgIGthbF91aW50OCBudW1fY2FycmllcnM7CisgICAgdHNfM0dfY3NnX3VjZWxsX2V2bHVhdGlvbl9yZXN1bHQgY3NnX3VjZWxsX2V2bHVhdGlvbl9yZXN1bHRfbGlzdFtNQVhfTlVNX0NTR19DQVJSSUVSU107Cit9IGVhc191YXNfZXZhbHVhdGVfY3NnX3VjZWxsX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHBsbW5fc2VhcmNoX3R5cGVfZW51bSBwbG1uX3NlYXJjaF90eXBlOworICAgIGF1dG9fc2VhcmNoX2NtZF9lbnVtIGF1dG9fc2VhcmNoX2NtZDsKKyAgICBrYWxfdWludDggIG51bV9mcmVxOworICAgIEVBUkZDTiAgICAgZnJlcV9saXN0W01BWF9OVU1fQ1NHX0ZSRVFdOworfSB1YXNfZWFzX3NlYXJjaF9jc2dfZWNlbGxfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAgc2VhcmNoX3N0YXR1c19lbnVtIHNlYXJjaF9zdGF0dXM7CisgICAga2FsX3VpbnQ4IG51bV9jc2dfZnJlcV9zZWFyY2hfcmVzdWx0OworICAgIGNzZ19mcmVxX3NlYXJjaF9yZXN1bHRfc3RydWN0IGNzZ19mcmVxX3NlYXJjaF9yZXN1bHRfbGlzdFtNQVhfTlVNX0NTR19GUkVRXTsKK30gdWFzX2Vhc19zZWFyY2hfY3NnX2VjZWxsX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHBsbW5fc2VhcmNoX3R5cGVfZW51bSBwbG1uX3NlYXJjaF90eXBlOworICAgIGF1dG9fc2VhcmNoX2NtZF9lbnVtIGF1dG9fc2VhcmNoX2NtZDsKKyAgICBrYWxfdWludDggIG51bV9mcmVxOworICAgIEVBUkZDTiAgICAgZnJlcV9saXN0W01BWF9OVU1fQ1NHX0ZSRVFdOworfSB1YXNfZWFzX2V2YWx1YXRlX2NzZ19lY2VsbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBzZWFyY2hfc3RhdHVzX2VudW0gc2VhcmNoX3N0YXR1czsKKyAgICBrYWxfdWludDggbnVtX2NzZ19mcmVxX3NlYXJjaF9yZXN1bHQ7CisgICAgY3NnX2ZyZXFfc2VhcmNoX3Jlc3VsdF9zdHJ1Y3QgY3NnX2ZyZXFfc2VhcmNoX3Jlc3VsdF9saXN0W01BWF9OVU1fQ1NHX0ZSRVFdOworfSB1YXNfZWFzX2V2YWx1YXRlX2NzZ19lY2VsbF9jbmZfc3RydWN0OworCisvKjNHNCBDU0cgRklOR0VSUFJJTlQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHBsbW5faWRfc3RydWN0ICAgIGNzZ19wbG1uOworICAgIGthbF91aW50MzIgICAgICAgIGNzZ19pZDsKKyAgICBrYWxfdWludDMyICAgICAgICBjc2dfY2VsbF9pZDsKKyAgICBFQVJGQ04gICAgICAgICAgICBjc2dfZnJlcXVlbmN5OworICAgIGthbF91aW50MTYgICAgICAgIGNzZ19waHlzaWNhbF9jZWxsX2lkOworfSB1YXNfZWFzX2J1aWxkX2ZpbmdlcnByaW50X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorfSB1YXNfZWFzX2J1aWxkX2ZpbmdlcnByaW50X2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUgorfSB1YXNfZWFzX2Fib3J0X2ZpbmdlcnByaW50X2luZF9zdHJ1Y3Q7CisKKy8qNEczIENTRyBGSU5HRVJQUklOVCAqLwordHlwZWRlZiB1YXNfZWFzX2J1aWxkX2ZpbmdlcnByaW50X3JlcV9zdHJ1Y3QgZWFzX3Vhc19idWlsZF9maW5nZXJwcmludF9yZXFfc3RydWN0OworCit0eXBlZGVmIHVhc19lYXNfYnVpbGRfZmluZ2VycHJpbnRfY25mX3N0cnVjdCBlYXNfdWFzX2J1aWxkX2ZpbmdlcnByaW50X2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgdWFzX2Vhc19hYm9ydF9maW5nZXJwcmludF9pbmRfc3RydWN0IGVhc191YXNfYWJvcnRfZmluZ2VycHJpbnRfaW5kX3N0cnVjdDsKKworLypFTkQgT0YgQ1NHIEZJTkdFUlBSSU5UICovCisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQ4IHRpZDsKKyAgICByZXBvcnRfY2dpX3JlcV90eXBlX2VudW0gcmVwb3J0X2NnaV9yZXFfdHlwZTsKKyAgICBrYWxfdWludDE2IHVhcmZjbjsKKyAgICBrYWxfdWludDE2IHBoeXNpY2FsX2NlbGxfaWQ7Cit9IGVhc191YXNfcmVwb3J0X2NnaV9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgdGlkOworICAgIGthbF91aW50MTYgdWFyZmNuOworICAgIGthbF91aW50MTYgcGh5c2ljYWxfY2VsbF9pZDsKKyAgICB1Y2VsbF9jZ2lfaW5mb19zdHJ1Y3QgdWNlbGxfY2dpX2luZm87Cit9IGVhc191YXNfcmVwb3J0X2NnaV9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHRlX2lyX2NlbGxfY2hhbmdlX3RyaWdnZXIgaXJfY2VsbF9jaGFuZ2VfdHJpZ2dlcjsKKyAgICBwbG1uX3NlYXJjaF90eXBlX2VudW0gcGxtbl9zZWFyY2hfdHlwZTsKKyAgICB0ZV91bXRzX21vZGUgdGFyZ2V0X2NlbGxfbW9kZTsKKyAgICB0c191bXRzX3RhcmdldF9jZWxsX3VuaW9uIHRhcmdldF9jZWxsOworICAgIGVhc19jZWxsX2luZm8gc2Vydl9jZWxsOworfSBlYXNfdWFzX2V2YWx1YXRlX3VjZWxsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgdGVfaXJfY2VsbF9yZXNlbGVjdGlvbl9zdGF0dXMgaXJfY2VsbF9ldmFsX3N0YXR1czsKKyAgICB0c19ldmFsX2FjdGl2YXRlX2ZhaWxfaGFuZGxlICBFdmFsX2FjdGl2YXRlX2ZhaWxfaGFuZGxlOworICAgIGVhc19jZWxsX2luZm8gc2Vydl9jZWxsOworfSBlYXNfdWFzX2V2YWx1YXRlX3VjZWxsX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIGthbF91aW50MTYgcGh5c19jZWxsX2lkOworICAga2FsX3VpbnQxNiBCQ0NIX0NvbnRhaW5lcl9zaXplOyAvLyAwIH4gbWF4X3NpemUgCisgICBrYWxfdWludDggICpCQ0NIX2NvbnRhaW5lcjsgLyogbm90ZTogcmVtZW1iZXIgdG8gRnJlZSB0aGUgbWVtb3J5IGhlcmUqLworfSB0c19pcl91dHJhX2NlbGxfaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAga2FsX3VpbnQxNiB1YXJmY247CisgICBrYWxfdWludDggY2VsbF9pbmZvX251bTsKKyAgIHRzX2lyX3V0cmFfY2VsbF9pbmZvIGNlbGxfaW5mb1tNQVhfTlVNX0NFTExfSU5GT19VVFJBXTsKK30gdHNfaXJfdXRyYV9jZWxsX2luZm9fbGlzdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAga2FsX3VpbnQ4IG51bUVsZW1lbnRzOworICAgdHNfaXJfdXRyYV9jZWxsX2luZm9fbGlzdCBlbGVtZW50W01BWF9OVU1fUkVESVJFQ1RJT05fRlJFUV9VVFJBXTsKK30gZWFzX3Vhc19yZWRpcmVjdEluZm87CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgdGVfaXJfY2VsbF9jaGFuZ2VfdHJpZ2dlciBpcl9jZWxsX2NoYW5nZV90cmlnZ2VyOworICAgIHBsbW5fc2VhcmNoX3R5cGVfZW51bSBwbG1uX3NlYXJjaDsKKyAgICB0ZV91bXRzX21vZGUgdGFyZ2V0X2NlbGxfbW9kZTsKKyAgICB0c191bXRzX3RhcmdldF9jZWxsX3VuaW9uIHRhcmdldF9jZWxsOworICAgIGthbF91aW50MTYgaXJjY29fdGltZTsKKyAgICBlYXNfdWFzX3JlZGlyZWN0SW5mbyByZWRpcmVjdGlvbjsKKyAgICBpcl9sdGVfc2NlbGxfc3RydWN0IGx0ZV9zY2VsbF9pbmY7IC8qIGNlbGwgaW5mbyBvZiB0aGUgc291cmNlIExURSBjZWxsICovCit9IGVhc191YXNfYWN0aXZhdGVfdWNlbGxfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICB0ZV9pcl9jZWxsX3Jlc2VsZWN0aW9uX3N0YXR1cyAgICAgIGlyX2NlbGxfYWN0aXZhdGlvbl9zdGF0dXM7CisgICAgdHNfZXZhbF9hY3RpdmF0ZV9mYWlsX2hhbmRsZSAgICAgICBldmFsX2FjdGl2YXRlX2ZhaWxfaGFuZGxlOworICAgIHRlX2lyX2NlbGxfY2hhbmdlX2ZhaWxfcmVhc29uX2VudW0gaXJfY2VsbF9jaGFuZ2VfZmFpbGVkX3JlYXNvbjsKK30gZWFzX3Vhc19hY3RpdmF0ZV91Y2VsbF9jbmZfc3RydWN0OworCisvLyNpZmRlZiBfX0xURV9SMTFfXwordHlwZWRlZiBzdHJ1Y3QgeworICAga2FsX2Jvb2wgaXNfcGxtbl9pZF92YWxpZDsKKyAgIHBsbW5faWRfc3RydWN0IHBsbW5faWQ7CisgICBrYWxfdWludDMyIGNlbGxfaWQ7CisgICBrYWxfdWludDE2IHVhcmZjbjsKKyAgIGthbF91aW50MTYgcHNjOworfSB1Y2VsbF9pbmZvX2JlZm9yZV9ob19zdHJ1Y3Q7CisvLyNlbmRpZgorCisvKiBGb3IgM0c0IElSSE8gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfYm9vbCAgICBpc19saW1pdGVkX3NlcnZpY2U7CisgICBwbG1uX3NlYXJjaF90eXBlX2VudW0JcGxtbl9zZWFyY2hfdHlwZTsKKy8vI2lmZGVmIF9fTFRFX1IxMV9fCisgICB1Y2VsbF9pbmZvX2JlZm9yZV9ob19zdHJ1Y3QgdWNlbGxfaW5mbzsKKy8vI2VuZGlmCit9IHVhc19lYXNfaGFuZG92ZXJfZWNlbGxfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKKyAgIC8qIE5vIHBhcmFtZXRlcnMgaGVyZSAqLworfSB1YXNfZWFzX2hvX2FjdGl2YXRlX2VjZWxsX3JlcV9zdHJ1Y3Q7CisKKy8qIEZvciAzRzQgSVJDUiBvciBJUiBSZWRpcmVjdGlvbiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGVhc190YXJnZXRfY2VsbF9pbmZvICAgdGFyZ2V0X2NlbGw7CisgICBwbG1uX3NlYXJjaF90eXBlX2VudW0gIHBsbW5fc2VhcmNoX3R5cGU7CisgICAvKjNHNCBiYWNrZ3JvdW5kIHNlYXJjaCBwYXJhbWV0ZXIqLworICAga2FsX2Jvb2wgICAgICAgICAgICAgICBpc19iYWNrZ3JvdW5kX3NlYXJjaF90cmlnZ2VyOworICAgdWFzX2NlbGxfaW5mbyAgICAgICAgICBzZXJ2aW5nX2NlbGxfaW5mbzsKK30gdWFzX2Vhc19ldmFsdWF0ZV9lY2VsbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgLyogTm8gcGFyYW1ldGVycyBoZXJlICovCit9IHVhc19lYXNfZXZhbHVhdGVfZWNlbGxfc3RvcF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgdGVfaXJfY2VsbF9jaGFuZ2VfdHJpZ2dlciAgdHJpZ2dlcjsKKyAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgIHdhaXRfdGltZTsKKyAgIGVhc190YXJnZXRfY2VsbF9pbmZvICAgICAgIHRhcmdldF9jZWxsOworICAgcGxtbl9zZWFyY2hfdHlwZV9lbnVtICAgICAgcGxtbl9zZWFyY2hfdHlwZTsKKyAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgIHJlZGlyZWN0X2ZyZXFfbnVtOworICAgbHRlX3JlZGlyZWN0X2luZm8gICAgICAgICAgcmVkaXJlY3RfZnJlcV9pbmZvW01BWF9VQVNfRUFTX1JFRElSRUNUX0ZSRVFfTlVNXTsKKyAgIGthbF91aW50MzIgICAgICAgICAgICAgICAgIHJlbWFpbmluZ190aW1lX2FmcjsKKyAgIGthbF9ib29sICAgICAgICAgICAgICAgICAgIGlzX2VsZXZhdG9yX21vZGU7CisgICBrYWxfYm9vbCAgICAgICAgICAgICAgICAgICBpc19jdXN0b21fdGhyZXNob2xkX25lZWQ7Cit9IHVhc19lYXNfYWN0aXZhdGVfZWNlbGxfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKKyAgIHRlX2lyX2hhbmRvdmVyX3N0YXR1cyAgaG9fdG9fZWFzX3N0YXR1czsKKyAgIGthbF91aW50OCAgbmFzX3NlY19wYXJhbV90b19ldXRyYVtOQVNfU0VDVVJJVFlfUEFSQU1fTEVOXTsKK30gdWFzX2Vhc19oYW5kb3Zlcl9lY2VsbF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgdGVfaXJfaGFuZG92ZXJfc3RhdHVzICBob190b19lYXNfc3RhdHVzOworfSB1YXNfZWFzX2hvX2FjdGl2YXRlX2VjZWxsX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSCisgICB0ZV9pcl9jZWxsX3Jlc2VsZWN0aW9uX3N0YXR1cyAgZXZhbF9zdGF0dXM7CisgICB0c19ldmFsX2FjdGl2YXRlX2ZhaWxfaGFuZGxlICAgZXZhbF9hY3RpdmF0ZV9mYWlsX2hhbmRsZTsKK30gdWFzX2Vhc19ldmFsdWF0ZV9lY2VsbF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgLyogTm8gcGFyYW1ldGVycyBoZXJlICovCit9IHVhc19lYXNfZXZhbHVhdGVfZWNlbGxfc3RvcF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgdGVfaXJfY2VsbF9yZXNlbGVjdGlvbl9zdGF0dXMgIGFjdGl2ZV9zdGF0dXM7CisgICB0c19ldmFsX2FjdGl2YXRlX2ZhaWxfaGFuZGxlICAgZXZhbF9hY3RpdmF0ZV9mYWlsX2hhbmRsZTsKK30gdWFzX2Vhc19hY3RpdmF0ZV9lY2VsbF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgLyogTm8gcGFyYW1ldGVycyBoZXJlICovCit9IHVhc19lYXNfYWJvcnRfaG9fZWNlbGxfcmVxX3N0cnVjdDsKKworLyogRm9yIDRHMyBJUkhPICovCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgcGxtbl9zZWFyY2hfdHlwZV9lbnVtICBwbG1uX3NlYXJjaF90eXBlOworfSBlYXNfdWFzX2hhbmRvdmVyX3VjZWxsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSCisgICAvKiBObyBwYXJhbWV0ZXJzIGhlcmUgKi8KK30gZWFzX3Vhc19ob19hY3RpdmF0ZV91Y2VsbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgLyogTm8gcGFyYW1ldGVycyBoZXJlICovCit9IGVhc191YXNfYWJvcnRfaG9fdWNlbGxfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGhvX2Zyb21fbHRlX3R5cGVfZW51bSAgbHRlX2hvX3R5cGU7CisgICB0ZV9pcl9oYW5kb3Zlcl9zdGF0dXMgIGlyX2hvX2V2YWxfc3RhdHVzOworICAga2FsX3VpbnQxNiAgICAgICAgICAgICB1YXJmY25fREw7CisjaWZkZWYgX19TUlZDQ19DRUxMX0lORk9fXworICAga2FsX3VpbnQxNiAgICAgICAgICAgICBwc2M7CisjZW5kaWYKK30gZWFzX3Vhc19oYW5kb3Zlcl91Y2VsbF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgdGVfaXJfaGFuZG92ZXJfc3RhdHVzICBpcl9ob19hY3RpdmF0ZV9zdGF0dXM7CisgI2lmZGVmIF9fU1JWQ0NfQ0VMTF9JTkZPX18KKyAgIHRlX2lyX2hhbmRvdmVyX3BoeV9mYWlsX3N1YmNhdXNlIGlyX2hhbmRvdmVyX3RvX3VtdHNfcGh5X2ZhaWxfc3ViY2F1c2U7CisgI2VuZGlmIC8qX19TUlZDQ19DRUxMX0lORk9fXyovCit9IGVhc191YXNfaG9fYWN0aXZhdGVfdWNlbGxfY25mX3N0cnVjdDsKKworLyozRzQgYmFja2dyb3VuZCBzZWFyY2gqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKKyAgIC8qIE5vIHBhcmFtZXRlcnMgaGVyZSAqLworfSB1YXNfZWFzX2JhY2tncm91bmRfc2VhcmNoX3N0YXJ0X3JlcV9zdHJ1Y3Q7CisKKy8qM0c0IGJhY2tncm91bmQgc2VhcmNoKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSCisgICAvKiBObyBwYXJhbWV0ZXJzIGhlcmUgKi8KK30gdWFzX2Vhc19iYWNrZ3JvdW5kX3NlYXJjaF9zdGFydF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgLyogTm8gcGFyYW1ldGVycyBoZXJlICovCit9IHVhc19lYXNfYmFja2dyb3VuZF9zZWFyY2hfc3RvcF9yZXFfc3RydWN0OworCisvKiBfXzRHX0JBQ0tHUk9VTkRfU0VBUkNIX18gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSCisgICAvKiBMVEUgZGV0ZWN0ZWQgY2VsbCBpbmZvICovCisgICBFQVJGQ04gICAgICAgICAgICAgZWFyZmNuOworICAga2FsX3VpbnQxNiAgICAgICAgIHBjaTsgICAKK30gZWFzX3Vhc19iYWNrZ3JvdW5kX3NlYXJjaF9mb3VuZF9pbmRfc3RydWN0OworCisvKiBIU1JfU05JRkZfU0VBUkNIICovCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgLyogTFRFIGRldGVjdGVkIGNlbGwgaW5mbyAqLworICAgRUFSRkNOICAgICAgICAgICAgIGVhcmZjbjsKKyAgIGthbF91aW50MTYgICAgICAgICBwY2k7ICAgCit9IGVhc191YXNfaHNyX2NlbGxfZm91bmRfaW5kX3N0cnVjdDsKKworI2VuZGlmICAvKiBVQVNfRUFTX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdWFzX2V4cG9ydF9hcGkuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91YXNfZXhwb3J0X2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZjg0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdWFzX2V4cG9ydF9hcGkuaApAQCAtMCwwICsxLDMxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA3CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHVhc19leHBvcnRfYXBpLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTUFVSQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2c6JAorICoKKyAqIDA5IDI4IDIwMTggcGF3YW4uc2luZ2gKKyAqIFtNT0xZMDAzNTMzOTVdIFtNVDYyOTddIE1vZGlmeSBjb2RlIGZvciBNUEQuCisgKgorICogMDQgMjYgMjAxNyBtZW5nbWVuZy5zdW4KKyAqIFtNT0xZMDAyNDQwMTNdIFtHZW45M11bVEREIDNHXSBSQVRETSBDb2RlIFNNUAorICogVEwyRCBwYXJ0CisgKgorICogMDQgMTIgMjAxNyBjaGktY2h1bmcubGluCisgKiBbTU9MWTAwMjQwMjcwXSBbNjI5M11bR2VtaW5pXVtUK1ddIFBoYXNlIDE6IENvbW1vbiBJbnRlcmZhY2UgQ2hhbmdlcyBDaGVjayBpbgorICogCQorICogCS4KKyAqCisgKiAwNCAxMiAyMDE3IGNoaS1jaHVuZy5saW4KKyAqIFtNT0xZMDAyNDAyNzBdIFs2MjkzXVtHZW1pbmldW1QrV10gUGhhc2UgMTogQ29tbW9uIEludGVyZmFjZSBDaGFuZ2VzIENoZWNrIGluCisgKiAJCisgKiAJLgorICoKKyAqIDAxIDEyIDIwMTYgY2hhcmxlc2NtLnd1CisgKiBbTU9MWTAwMTU2MjM5XSBbVU1PTFldW0xSMTFdIDNHIEZERC9UREQgTDIgYmlnIHNpemUgbWVtb3J5IHVuaW9uCisgKiBbRkREfFRERCBjb21tb25dICBVQmluIDNHIEwyIG1lbW9yeSByZWR1Y3Rpb24gYnkgdW5pb24KKyAqCisgKiAwNSAyMCAyMDE1IGplbi1kZS5sYWkKKyAqIFtNT0xZMDAwODkxMzFdIFtNVDYyOTEgR2VtaW5pXSBMK1crVytXIGNvZGUgcmV2aXNpb24gY2hlY2sgaW4KKyAqIAlMK1cKKyAqCisgKiAwNSAyMCAyMDE1IHRlcmVhc2EuaHVhbmcKKyAqIFtNT0xZMDAwODkxMzFdIFtNVDYyOTEgR2VtaW5pXSBMK1crVytXIGNvZGUgcmV2aXNpb24gY2hlY2sgaW4KKyAqIFtSUkNFXUwrVytXK1cgZGV2ZWxvcG1lbnQuCisgKgorICogMDQgMTYgMjAxNSBoZWFkLmhzdQorICogW01PTFkwMDA4NzQzNF0gW1VuaXZlcnNhbCBCaW5dIENoZWNrIGluCisgKiAJO1tVQklOXVtQaGFzZSAyXSBSQVRETSBhbmQgQ1NSCisgKgorICogMDEgMjAgMjAxNSB0Yy5jaGFuZworICogW01PTFkwMDA4NzQzNF0gW1VuaXZlcnNhbCBCaW5dIENoZWNrIGluLgorICoKKyAqIDEyIDMwIDIwMTQgdGMuY2hhbmcKKyAqIFtNT0xZMDAwODc0MzRdIFtVbml2ZXJzYWwgQmluXSBDaGVjayBpbi4KKyAqCisgKiAxMiAzMCAyMDE0IGNoYXJsZXNjbS53dQorICogW01PTFkwMDA4NzY3OV0gW1VNT0xZXVtGRERdW1VBUyBDT01NT05dW1VMMiBDT01NT04vVVJMQy9CTUMvU0VRXVUtQmluIENCciB0byBVTU9MWSBUUlVOQ0suCisgKgorICogMTIgMjkgMjAxNCB0Yy5jaGFuZworICogW01PTFkwMDA4NzQzNF0gW1VuaXZlcnNhbCBCaW5dIENoZWNrIGluLgorICoKKyAqIDEyIDI0IDIwMTQgdGMuY2hhbmcKKyAqIFtNT0xZMDAwODc0MzRdIFtVbml2ZXJzYWwgQmluXSBDaGVjayBpbi4KKyAqCisgKiAxMiAxNiAyMDE0IHRjLmNoYW5nCisgKiBbTU9MWTAwMDg3NDM0XSBbVW5pdmVyc2FsIEJpbl0gQ2hlY2sgaW4uCisgKgorICogMTIgMTUgMjAxNCBjaGFybGVzY20ud3UKKyAqIFtNT0xZMDAwODc2NzldIFtVTU9MWV1bRkREXVtVQVMgQ09NTU9OXVtVTDIgQ09NTU9OL1VSTEMvQk1DL1NFUV1VLUJpbiBDQnIgdG8gVU1PTFkgVFJVTkNLLgorICoKKyAqIDEyIDEyIDIwMTQgdGMuY2hhbmcKKyAqIFtNT0xZMDAwODc0MzRdIFtVbml2ZXJzYWwgQmluXSBDaGVjayBpbi4KKyAqIFBEQ1AgYW5kIENTUiBleHBvcnRlZCBBUElzLgorICoKKyAqIDExIDEzIDIwMTMgZXRoYW4uaGFuCisgKiBbTU9MWTAwMDQ2MjU4XSBbTEdFIHNtYXJ0IHBob25lIHByb2plY3RdIDJHIHByb3RvY29sIHJlbGVhc2UgcGFja2FnZSBzdXJ2ZXksIGhhbmRsZSB0aGUgZGVwZW5kYW5jeSBmb3IgTU0KKyAqIAkuCisgKgorICogMTEgMTMgMjAxMyBkZXJlay5jaG8KKyAqIFtNT0xZMDAwNDYyMjhdIFtTSEFRXVVhcyByZWxhdGVkIGhlYWRlciBzcGxpdAorICogPHNhdmVkIGJ5IFBlcmZvcmNlPgorICoKKyAqIDExIDA1IDIwMTMgam9obnNvbi5saXUKKyAqIFtNT0xZMDAwNDI2NThdIFtTSEFRXSBVQVMgcmVsYXRlZCBoZWFkZXIgc3BsaXQKKyAqIC4KKyAqCisgKiAxMSAwNSAyMDEzIGFuZHJldy53dQorICogW01PTFkwMDA0MjY1OF0gW1NIQVFdIFVBUyByZWxhdGVkIGhlYWRlciBzcGxpdAorICogPHNhdmVkIGJ5IFBlcmZvcmNlPgorICogCisgKiAxMCAwMiAyMDEyIGlqLmxpYW8KKyAqIFtNT0xZMDAwMDQyMzZdIFtpbnRlcmZhY2VdW3NlcnZpY2VdW2thbF1yZW1vdmUgc3RhY2tfbHRsY29tLmgKKyAqCisgKiAwNSAyMyAyMDEyIGlqLmxpYW8KKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDQgMTcgMjAxMiB5aXRpbmcuY2hlbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDQgMTYgMjAxMiB5aXRpbmcuY2hlbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDQgMTEgMjAxMiB5aXRpbmcuY2hlbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTEgMDggMjAxMSB5dXRpbmcuY2hlbgorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAxMCAxNSAyMDExIG1lbmdzdW5nLnd1CisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDA5IDI3IDIwMTEgeXV0aW5nLmNoZW4KKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogQWRkIGNvcHlyaWdodCBoZWFkZXIuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfVUFTX0VYUE9SVF9BUElfSAorI2RlZmluZSBfVUFTX0VYUE9SVF9BUElfSAorCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfZGVmcy5oIgorCisjaW5jbHVkZSAidWFzX2NvbW1vbl9lbnVtcy5oIgorI2luY2x1ZGUgInJhdGRtX3NoYXFfYXBpLmgiCisKKyNpbmNsdWRlICJsMWF1ZGlvLmgiCisKKyNpbmNsdWRlICJnbXNzX3B1YmxpYy5oIgorI2luY2x1ZGUgImNzcl9leHBvcnRfYXBpLmgiCisKKworI2lmIGRlZmluZWQoX19TWU5DX0hETENfQ1NEX18pCisjaW5jbHVkZSAicmF0Y21fY3NkX2ludGVyZmFjZS5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJzaW1fZXhwb3J0ZWRfZW51bS5oIiAvL1tMRytXR10gcHJvdG9jb2xfaWRfZW51bQorCisjaWZkZWYgX19VTVRTX0ZERF9NT0RFX18KKworLyogRm9yIEdlbWluaSBUK1cgZmVhdHVyZSwgUERVIGluIFJSQyBJRExFIHN0YXRlIHdpbGwgdXNlIHRoaXMgcG9vbCwgKi8KKyNkZWZpbmUgRkREX1VBU19ETF9JRExFX0FETV9BTExPQyhtZW1fcHRyLCBhbGxvY19zaXplKSAgICBcCitkb3sgICBcCisgICAgbWVtX3B0ciA9IEZERF9VQVNfRExfQURNX0FMTE9DX2ludChVQVNfRExfSURMRV9BRE0sIGFsbG9jX3NpemUsIF9fRklMRV9fLCBfX0xJTkVfXyk7ICAgIFwKK313aGlsZSgwKQorCisvKiBmb3IgREwgQURNIHBvb2wsIHRoZSB1c2VycyBzaGFsbCBiZSBpbiB0aGUgc2FtZSB0YXNrISAqLworI2RlZmluZSBGRERfVUFTX0RMX0FETV9BTExPQyhtZW1fcHRyLCBhbGxvY19zaXplKSAgICBcCitkb3sgICBcCisgICAgbWVtX3B0ciA9IEZERF9VQVNfRExfQURNX0FMTE9DX2ludChVQVNfRExfQURNLCBhbGxvY19zaXplLCBfX0ZJTEVfXywgX19MSU5FX18pOyAgICBcCit9d2hpbGUoMCkKKworI2RlZmluZSBGRERfVUFTX0RMX0FETV9GUkVFKG1lbV9wdHIpICAgIEZERF9VQVNfRExfQURNX0ZSRUVfaW50KFVBU19ETF9BRE0sIG1lbV9wdHIsIF9fRklMRV9fLCBfX0xJTkVfXykKKworCisKKy8qIEZvciAyRyBSTEMgREwgYmxvY2sgZmlyc3QgaGFsZiBtZW1vcnkgdXNlICovCisjZGVmaW5lIEdSTENfRExfQURNX0FMTE9DX0ZJUlNUX1BBUlQobWVtX3B0ciwgYWxsb2Nfc2l6ZSkgICAgXAorZG97ICAgXAorICAgIG1lbV9wdHIgPSBGRERfVUFTX0RMX0FETV9BTExPQ19pbnQoR1JMQ19ETF9BRE1fRklSU1RfUEFSVCwgYWxsb2Nfc2l6ZSwgX19GSUxFX18sIF9fTElORV9fKTsJICBcCit9d2hpbGUoMCkKKworI2RlZmluZSBHUkxDX0RMX0FETV9GUkVFX0ZJUlNUX1BBUlQobWVtX3B0cikgICAgICAgIEZERF9VQVNfRExfQURNX0ZSRUVfaW50KEdSTENfRExfQURNX0ZJUlNUX1BBUlQsIG1lbV9wdHIsIF9fRklMRV9fLCBfX0xJTkVfXykKKworCisvKiBGb3IgMkcgUkxDIERMIGJsb2NrIHNlY29uZCBoYWxmIG1lbW9yeSB1c2UgKi8KKyNkZWZpbmUgR1JMQ19ETF9BRE1fQUxMT0NfU0VDT05EX1BBUlQobWVtX3B0ciwgYWxsb2Nfc2l6ZSkgICAgXAorZG97ICAgXAorICAgIG1lbV9wdHIgPSBGRERfVUFTX0RMX0FETV9BTExPQ19pbnQoR1JMQ19ETF9BRE1fU0VDT05EX1BBUlQsIGFsbG9jX3NpemUsIF9fRklMRV9fLCBfX0xJTkVfXyk7CSAgXAorfXdoaWxlKDApCisKKyNkZWZpbmUgR1JMQ19ETF9BRE1fRlJFRV9TRUNPTkRfUEFSVChtZW1fcHRyKSAgICAgICAgRkREX1VBU19ETF9BRE1fRlJFRV9pbnQoR1JMQ19ETF9BRE1fU0VDT05EX1BBUlQsIG1lbV9wdHIsIF9fRklMRV9fLCBfX0xJTkVfXykKKworCitleHRlcm4gdm9pZCogRkREX1VBU19ETF9BRE1fQUxMT0NfaW50KHVhc19kbF9hZG1faW5kZXhfZW51bSBhbGxvY19pZHgsIGthbF91aW50MzIgYWxsb2Nfc2l6ZSwgY2hhciogZmlsZW5hbWUsIGthbF91aW50MzIgbGluZSk7CitleHRlcm4gdm9pZCBGRERfVUFTX0RMX0FETV9GUkVFX2ludCh1YXNfZGxfYWRtX2luZGV4X2VudW0gZnJlZV9pZHgsIHZvaWQqIG1lbV9wdHIsIGNoYXIqIGZpbGVuYW1lLCBrYWxfdWludDMyIGxpbmUpOworI2VuZGlmIC8qIF9fVU1UU19GRERfTU9ERV9fICovCisKKyNpZiBkZWZpbmVkKF9fUkFURE1fVUxfU0hBUV9fKSB8fCBkZWZpbmVkKF9fVU1UU19UREQxMjhfTU9ERV9fKQorZXh0ZXJuIGthbF9ib29sIHVybGNfcmVhbHRpbWVfc2hhcV9xdWVyeV9pZl9uZWVkX2tpY2tfdXJsYyhFeHRlbmRlZFJiSWQgUmJJZCwgU0hBUV9MTFFVRVVFX0lEWCBwYWNrZXRfdHlwZSwgVUFTX0NVUlJFTlRfQ05UWF9QVFJfZW51bSBjdXJyX2lkeCk7CisjZW5kaWYgLyogZGVmaW5lZChfX1JBVERNX1VMX1NIQVFfXykgfHwgZGVmaW5lZChfX1VNVFNfVEREMTI4X01PREVfXykgKi8KKworI2lmZGVmIF9fUkFURE1fVUxfU0hBUV9fCitleHRlcm4ga2FsX2Jvb2wgUGRjcENoZWNrU2hhcVN0YXR1cyhrYWxfdWludDggbnNhcGksIEV4dGVuZGVkUmJJZCAqUmJJZCwga2FsX3VpbnQxNiBucGR1X251bSwgVUFTX0NVUlJFTlRfQ05UWF9QVFJfZW51bSBTaW1JZHgpOworZXh0ZXJuIHZvaWQgUGRjcFVwZGF0ZVNlbmRTTihFeHRlbmRlZFJiSWQgUmJJZCwga2FsX3VpbnQxNiBucGR1X251bSwgVUFTX0NVUlJFTlRfQ05UWF9QVFJfZW51bSBTaW1JZHgpOworZXh0ZXJuIGthbF9ib29sIG1NYWNJc1RpY2tBdmFpbGFibGUoVUFTX0NVUlJFTlRfQ05UWF9QVFJfZW51bSBzaW1faWR4KTsKKyNlbmRpZiAvKiBfX1JBVERNX1VMX1NIQVFfXyAqLworCisjaWYgZGVmaW5lZChfX1NZTkNfSERMQ19DU0RfXykKK2V4dGVybiB2b2lkIHJhdGNtX2Nzcl9hY3RpdmF0ZV9yZXEoQ1NEX01PREVfRU5VTSBjc2RfbW9kZSxDU0RfVVNFUl9SQVRFX0VOVU0gdXNlcl9yYXRlLCBVQVNfQ1VSUkVOVF9DTlRYX1BUUl9lbnVtIHNpbV9pZHgpOworZXh0ZXJuIHZvaWQgcmF0Y21fY3NyX2RlYWN0aXZhdGVfcmVxKFVBU19DVVJSRU5UX0NOVFhfUFRSX2VudW0gc2ltX2lkeCk7CitleHRlcm4gdm9pZCByYXRjbV9jc3JfY3NkX3B1dF91cGxpbmtkYXRhKGthbF91aW50OCAqZGF0YSwga2FsX3VpbnQxNiBsZW5ndGgsIENTRF9WMjRfU1RBVFVTX1NUUlVDVCBjc2RfdjI0c3RhdHVzLCBVQVNfQ1VSUkVOVF9DTlRYX1BUUl9lbnVtIHNpbV9pZHgpOworZXh0ZXJuIGthbF91aW50MTYgcmF0Y21fY3NyX2NzZF9nZXRfZG93bmxpbmtkYXRhKGthbF91aW50MTYgc2R1TGVuZ3RoLCBrYWxfdWludDggKmRhdGEsIENTRF9WMjRfU1RBVFVTX1NUUlVDVCAqY3NkX3YyNHN0YXR1cywgVUFTX0NVUlJFTlRfQ05UWF9QVFJfZW51bSBzaW1faWR4KTsKKyNlbmRpZiAvKiBkZWZpbmVkKF9fU1lOQ19IRExDX0NTRF9fKSB8fCBkZWZpbmVkKF9fQ1NEX05UX18pICovCisKK2V4dGVybiB2b2lkIFVBU19DU1JfU1AzR19DYWxsYmFjayhTUDNHX0V2ZW50IGV2ZW50LCB2b2lkICpkYXRhLCBVQVNfQ1VSUkVOVF9DTlRYX1BUUl9lbnVtIHNpbV9pZHgpOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSUkNFIENhbGwgQmFjayBGdW5jdGlvbiAoUHJvdmlkZSB0byBOQVMvTDQpOgorICoKKyAqIC0gQXNzaWduIFVBUyBpbmRleCA6CisgKiAgICBwcm90b2NvbF9pZF9lbnVtIHByb3RvY29sX2lkICggbWN1XGNvbW1vblxpbnRlcmZhY2VcbW9kZW1cc2ltXHNpbV9leHBvcnRlZF9lbnVtLmgpCisgKgorICogLSBGdW5jdGlvbiBsaXN0IDoKKyAqICAgIDEuIEZERF9SUkNfQ1BDU3VwcG9ydCAgICAgICAgICAgIDogUmV0dXJuIFRSVUUgaWYgVUUgc3VwcG9ydHMgQ1BDLgorICogICAgMi4gRkREX1JSQ19OV19SOF9GRF9TdXBwb3J0ICAgICAgOiBSZXR1cm4gVFJVRSBpZiBOVyBzdXBwb3J0cyBUMzIzLgorICogICAgMy4gRkREX1JSQ19Jc0Nvbm5lY3RlZFN0YXRlICAgICAgOiBSZXR1cm4gVFJVRSBpZiBSUkMgaXMgY29ubmVjdGVkIHN0YXRlLgorICogICAgNC4gRkREX1JSQ0VfSXNfQ2FwYWJpbGl0eV9FbmFibGUgOiBSZXR1cm4gVFJVRSBpZiB0aGUgcXVlcnkgY2FwYWJpbGl0eSBiaXQgaXMgT04uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fRkFTVF9ET1JNQU5DWV9fKSB8fCBkZWZpbmVkKF9fTk9fUFNEQVRBX1NFTkRfU0NSSV9fKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uOiAgICBGRERfUlJDX0NQQ1N1cHBvcnQKKyAqCisgKiBEZXNjcmlwdGlvbjogUmV0dXJuIFRSVUUgaWYgVUUgc3VwcG9ydHMgQ1BDLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIGthbF9ib29sIEZERF9SUkNfQ1BDU3VwcG9ydChwcm90b2NvbF9pZF9lbnVtIHByb3RvY29sX2lkKTsKKworI2lmZGVmIF9fRkFTVF9ET1JNQU5DWV9fCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb246ICAgIEZERF9SUkNfTldfUjhfRkRfU3VwcG9ydAorICoKKyAqIERlc2NyaXB0aW9uOiBSZXR1cm4gVFJVRSBpZiBOVyBzdXBwb3J0cyBUMzIzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIGthbF9ib29sIEZERF9SUkNfTldfUjhfRkRfU3VwcG9ydChwcm90b2NvbF9pZF9lbnVtIHByb3RvY29sX2lkKTsKKyNlbmRpZiAvKiBfX0ZBU1RfRE9STUFOQ1lfXyAqLworI2VuZGlmIC8qIF9fRkFTVF9ET1JNQU5DWV9fIHx8IF9fTk9fUFNEQVRBX1NFTkRfU0NSSV9fICovCisKKyNpZiBkZWZpbmVkKF9fTFRFX1JBVF9fKSB8fCBkZWZpbmVkKF9fUFBBQ1JfU1VQUE9SVF9fKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRnVuY3Rpb246ICAgIEZERF9SUkNfSXNDb25uZWN0ZWRTdGF0ZQorKgorKiBEZXNjcmlwdGlvbjogQ2FsbGVkIGJ5IE5BUyB0byBjaGVjayBpZiBjdXJyZW50bHkgUlJDRSBpcyBpbiBjb25uZWN0ZWQgc3RhdGUuCisqICAgICAgICAgICAgICAgICAgICBJZiB0aGUgUlJDIENvbm5lY3Rpb24gUmVsZWFzZSBwcm9jZWR1cmUgaXMgb25nb2luZywgdGhpcyBmdW5jdGlvbiB3aWxsCisqICAgICAgICAgICAgICAgICAgICByZXR1cm4gS0FMX0ZBTFNFCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBrYWxfYm9vbCBGRERfUlJDX0lzQ29ubmVjdGVkU3RhdGUocHJvdG9jb2xfaWRfZW51bSBwcm90b2NvbF9pZCk7CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uOiAgICBGRERfUlJDRV9Jc19DYXBhYmlsaXR5X0VuYWJsZQorICoKKyAqIERlc2NyaXB0aW9uOiBSZXR1cm4gVFJVRSBpZiB0aGUgcXVlcnkgY2FwYWJpbGl0eSBiaXQgaXMgT04uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEVOQUJMRV9NVF9OT19SRVNUUklDVCAgMHgwMSAgIC8qIFtBTFBTMDAyODk3OThdW1NvZnRiYW5rIElPVF1bUkFOLTEzLTAxLTA0XSBBbGxvdyBNVCBjYWxsIHdoaWxlIGFsbCBBQyBibG9ja2VkLiAqLworZXh0ZXJuIGthbF9ib29sIEZERF9SUkNFX0lzX0NhcGFiaWxpdHlfRW5hYmxlKGthbF91aW50OCBjYXBhYmlsaXR5X2JpdCwgcHJvdG9jb2xfaWRfZW51bSBwcm90b2NvbF9pZCk7CisKKy8vIFRERCBSUkNFIEZ1bmN0aW9uCitleHRlcm4ga2FsX2Jvb2wgVEREX1JSQ19DUENTdXBwb3J0KCk7CitleHRlcm4ga2FsX2Jvb2wgVEREX1JSQ19OV19SOF9GRF9TdXBwb3J0KCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uOiAgICBGRERfdWFzX2FkbV9kZWluaXQKKyAqCisgKiBEZXNjcmlwdGlvbjogVUwyIFVCSU4gRkREL1RERCBtZW1vcnkgdW5pb24gdG9nZXRoZXIuIFdoZW4gRkREIG1vZGUgc3dpdGNoCisgKiAgICAgICAgICAgICAgdG8gVERELCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiB2b2lkIEZERF91YXNfYWRtX2RlaW5pdCh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uOiAgICBURERfdWFzX2FkbV9kZWluaXQKKyAqCisgKiBEZXNjcmlwdGlvbjogVUwyIFVCSU4gRkREL1RERCBtZW1vcnkgdW5pb24gdG9nZXRoZXIuIFdoZW4gVEREIG1vZGUgc3dpdGNoCisgKiAgICAgICAgICAgICAgdG8gRkRELCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiB2b2lkIFRERF91YXNfYWRtX2RlaW5pdCh2b2lkKTsKKworI2VuZGlmIC8qIF9VQVNfRVhQT1JUX0FQSV9IICovCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91YXNfZ2FzX2VudW1zLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdWFzX2dhc19lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMTg1M2UKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdWFzX2dhc19lbnVtcy5oCkBAIC0wLDAgKzEsMjgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDcKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgdWFzX2dhc19lbnVtcy5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTlpBCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICRMb2c6JAorICoKKyAqIDAzIDMxIDIwMjEgb3Rfc2h1YmhhbS1zay5rdW1hcgorICogW01PTFkwMDYwNTkyN10gbW9kZW0gRUUgSU5WQUxJRAorICogCQorICogCTxzYXZlZCBieSBQZXJmb3JjZT4KKyAqCisgKiAxMCAyNiAyMDE3IG5hbGluLmNob3ZhdGlhCisgKiBbTU9MWTAwMjg0NDgzXSBbQ09ERSBTWU5DXSAyRyAtM0c/Pz8gPz8/Pz8KKyAqIC51bW9sYQorICoKKyAqIDExIDE0IDIwMTQgeWVuY2hpaC55YW5nCisgKiBbTU9MWTAwMDg0MjU2XSBbTUVNRV0gc3luYyBNVDYyOTEgdG8gVU1PTFkKKyAqIFVSUi9NRU1FLgorICoKKyAqIDExIDEyIDIwMTQgdHN1bmctd2VpLnR1CisgKiBbTU9MWTAwMDgwMjExXSBbTVQ2MjkxX0RFVl1bTVQ2MjkxX1VFU0lNX0RFVl0gQ2hlY2sgaW4gbG93IHBvd2VyIHRvIE1UNjI5MV9ERVYsIE1UNjI5MV9VRVNJTV9ERVYKKyAqIE1lcmdpbmcgR0lTRSBsb3cgcG93ZXIgdG8gVU1PTFkgdHJ1bmsKKyAqCisgKiAwNyAwMyAyMDEzIG1pbmcubGVlCisgKiBbTU9MWTAwMDI2NTAxXSBbR0FTX1VBU10gQ2lwaGVyIHN0YXR1cyBtaXNtYXRjaCBlcnJvciBoYW5kbGluZworICogLgorICoKKyAqIDA2IDI1IDIwMTMgaGVucnkubGFpCisgKiBbTU9MWTAwMDI3MjUzXSBbTVQ2MjkwXSBCdWcgZml4IGZvciBHQVMgbXVsdGktbW9kZSBkZXZlbG9wbWVudAorICogLgorICoKKyAqIDAzIDEzIDIwMTMgYy1odWEueWFuZworICogW01PTFkwMDAwOTE4NF0gW1VSUl0gTXVsdGltb2RlIE1lcmdlIHRvIE1PTFkKKyAqIC4KKyAqCisgKiAwMSAyMiAyMDEzIGMtaHVhLnlhbmcKKyAqIFtNT0xZMDAwMDkxODRdIFtVUlJdIE11bHRpbW9kZSBNZXJnZSB0byBNT0xZCisgKiAuCisgKgorICogMDEgMTEgMjAxMyBoZW5yeS5sYWkKKyAqIFtIZW5yeV1bTXVsdGktTW9kZSBEZXZlbG9wbWVudF0gR0FTIERldmVsb3BtZW50IGFuZCBSOCBDUiBTeW5jCisgKgorICogMDkgMDkgMjAxMiB5b25nLnN1CisgKiBbTU9MWTAwMDAzMzIxXSBbM0cgVEREXVtSUkNFXVtJbnRlclJBVF1tb2RpZmllZCBjb2RlIGZvciBNQVhfVEFSR0VUX0dTTV9DRUxMU19OVU0KKyAqIC4KKyAqIAorICogMDggMTQgMjAxMiBwZXRlci5jaGllbgorICogW01PTFkwMDAwMjExOF0gW1BTMV1bR0FTXSBJbnRlcm5hbCBpbmplY3QgbWVzc2FnZSB0ZXN0IGZvciBNRUFTIElUCisgKiAuCisgKiAKKyAqIDA4IDE0IDIwMTIgcGV0ZXIuY2hpZW4KKyAqIFtNT0xZMDAwMDIxMThdIFtQUzFdW0dBU10gSW50ZXJuYWwgaW5qZWN0IG1lc3NhZ2UgdGVzdCBmb3IgTUVBUyBJVAorICogLgorICogCisgKiAwOCAxNCAyMDEyIHBldGVyLmNoaWVuCisgKiBbTU9MWTAwMDAyMTE4XSBbUFMxXVtHQVNdIEludGVybmFsIGluamVjdCBtZXNzYWdlIHRlc3QgZm9yIE1FQVMgSVQKKyAqIC4KKyAqCisgKiAwNSAyNSAyMDEyIGhhaXpob3UubGl1CisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDA1IDE3IDIwMTIgYy1odWEueWFuZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwNSAwMiAyMDEyIGFkZWxpbmUuY2hhbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDEgMTEgMjAxMiBzaHVud2VuLmhzaWFvCisgKiByZW1vdmVkIQorICogQ2hlY2sgaW4gVEs2MjgwX0RWVF9ERVYgdG8gTVQ2MjgwX0RWVF9ERVYKKyAqCisgKiAxMSAwOCAyMDExIGp1bnpoZW4ucWluCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDEwIDI4IDIwMTAgYWRlbGluZS5jaGFuZworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiBTdXBwb3J0ZWQgM3JkIGNyaXRlcmlhIGZvciBJbnRlclJBVCBjZWxsIHJlc2VsZWN0aW9uIHRvIFVUUkFOLgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiBBZGQgY29weXJpZ2h0IGhlYWRlci4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1VBU19HQVNfRU5VTVNfSAorI2RlZmluZSBfVUFTX0dBU19FTlVNU19ICisKKyNpbmNsdWRlICJpcmF0X2NvbW1vbl9lbnVtcy5oIgorI2luY2x1ZGUgInVhc19nYXNfaW50ZXJfY29yZV9lbnVtLmgiCisKKy8qIE1BQ1JPUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNQVggVmFsdWVzICovCisjZGVmaW5lIE1BWF9MRU5fSE9fVE9fR1NNX01TRyAoMjUxKSAgLyogT2N0ZXRzICovCisjZGVmaW5lIE1BWF9MRU5fVExWX0NMQVNTTUFSS18yICg1KSAgLyogT2N0ZXRzICovCisjZGVmaW5lIE1BWF9MRU5fVl9DTEFTU01BUktfMyAgKDMyKSAgICAgLyogT2N0ZXRzICovCisjZGVmaW5lIE1BWF9MRU5fSE9fVE9fVVRSQU5fTVNHICAoMjUxKSAvKiBPY3RldHMgKi8KKyNkZWZpbmUgTUFYX0xFTl9VVFJBTl9IQU5ET1ZFUl9JTkZPX01TRyAoMjUxKSAvKiBPY3RldHMqLworI2RlZmluZSBNQVhfTEVOX1VUUkFOX0hBTkRPVkVSX0lORk9fRVVUUkFOX01TRyAoMzUwKSAvKiBPY3RldHMqLworI2RlZmluZSBNQVhfTlVNX01FQVNVUkVEX1VNVFNfRkREX0NFTEwgNjQKKworCisjZGVmaW5lIFVBU19HQVNfSU5WQUxJRF9VQVJGQ04gKDB4ZmZmZikKKworI2lmIGRlZmluZWQoX19VTVRTX1RERDEyOF9NT0RFX18pCisjZGVmaW5lIE1BWF9OVU1fTUVBU1VSRURfVU1UU19URERfQ0VMTCAoNjQpCisjZW5kaWYgLy9kZWZpbmVkKF9fVU1UU19UREQxMjhfTU9ERV9fKQorCisvKk90aGVyIGNvbnN0YW50cyovCisjZGVmaW5lIElOVEVSX1JSQ19HU01fQ0lQSEVSSU5HX0tFWV9MRU5HVEggICA4ICAKKyNkZWZpbmUgSU5URVJfUlJDX1VNVFNfQ0lQSEVSSU5HX0tFWV9MRU5HVEggMTYKKyNkZWZpbmUgSU5URVJfUlJDX1VNVFNfSU5URUdSSVRZX0tFWV9MRU5HVEggMTYKKyNkZWZpbmUgVEVNUF9GQUlMVVJFX1BFTkFMVFlfVElNRSAzMCAvKkhhaXpob3UgMjAxMDA4MTkgVGltZSBwZW5hbHR5IGZvciBjb252ZXJ0IHRlbXAgZmFpbHVyZSB0byBpbml0aWFsX3ZhbHVlIGFmdGVyIHJlc2VsIHRvIHVjZWxsIGZhaSovCisKKyNkZWZpbmUgSU5URVJfUlJDX0xFTl9QTE1OX0lERU5USVRZIDMKKworLyogTUFYL01JTiB2YWx1ZXMgKi8KKyNkZWZpbmUgTUFYX1VBUkZDTl9SU1NJX1ZBTCAoLTEwMCkKKyNkZWZpbmUgTUlOX1VBUkZDTl9SU1NJX1ZBTCAoLTQ4MCkKKyNkZWZpbmUgTUFYX1VDRUxMX1JTQ1BfVkFMICgtMTAwKQorI2RlZmluZSBNSU5fVUNFTExfUlNDUF9WQUwgKC00ODApCisjZGVmaW5lIE1BWF9VQ0VMTF9FQ19OT19WQUwgMAorI2RlZmluZSBNSU5fVUNFTExfRUNfTk9fVkFMICgtMTAwKQorCisjZGVmaW5lIE1BWF9VTVRTX1VBUkZDTiAxNjM4MworI2RlZmluZSBNSU5fVU1UU19VQVJGQ04gMAorI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorI2RlZmluZSBJTlZBTElEX05DX01PREUgKDB4RkYpCisKKworCisjaWZkZWYgX19QUkVGRVJfSElHSF9QUklPXzNHX0lOXzIzR19NT0RFX18KKyNkZWZpbmUgSU5URVJfREVGQVVMVF9SU0NQX1RIUkVTSE9MRF9QUklPICgyMSkgLyogLTk1IGRCbSAqLworI2VuZGlmIC8qIF9fUFJFRkVSX0hJR0hfUFJJT18zR19JTl8yM0dfTU9ERV9fICovCisKKy8qIFRZUEVTIERFRklOSVRJT05TICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIGVudW0gCit7CisgICBVTVRTX1NJR05BTExJTkdfS0VZU19GT1JfQ1NfRE9NQUlOLAorICAgVU1UU19TSUdOQUxMSU5HX0tFWVNfRk9SX1BTX0RPTUFJTgorfXRlX3VtdHNfc2lnbmFsbGluZ19jb25uZWN0aW9uX2tleXM7CisKK3R5cGVkZWYgZW51bSB7CisgICAgTDFfQVZBSUxJQklMSVRZX1NUQVRVU19WQUNBTlQsIC8qIER1cmluZyBDZWxsIHNlbGVjdGlvbiovCisgICAgTDFfQVZBSUxJQklMSVRZX1NUQVRVU19TSEFSRUQsIC8qIElETEUgY2FtcGVkLFVSQV9QQ0gsQ0VMTF9QQ0ggKi8KKyAgICBMMV9BVkFJTElCSUxJVFlfU1RBVFVTX09DQ1VQSUVEIC8qIFBUTSxERURJQ0FURUQsQ0VMTF9GQUNILENFTExfRENIKi8KK310ZV9sMV9hdmFpbGliaWxpdHlfc3RhdHVzOyAgICAKKwordHlwZWRlZiBlbnVtIHsKKyAgSVJfQ0VMTF9DSEFOR0VfQ09NUExFVEVfU1VDQ0VTUywKKyAgSVJfQ0VMTF9DSEFOR0VfQ09NUExFVEVfRkFJTCwKKyAgSVJfQ0VMTF9DSEFOR0VfQ09NUExFVEVfRkFJTF9CWV9OQVNfQ09NTUFORAorfXRlX2lyX2NlbGxfY2hhbmdlX2NvbXBsZXRlX3N0YXR1czsKKwordHlwZWRlZiBlbnVtIHsKKyAgIElSX0NFTExfUkVTRUxFQ1RJT05fVFlQRV9OT1JNQUwsCisgICBJUl9DRUxMX1JFU0VMRUNUSU9OX1RZUEVfTElNSVRFRF9TRVJWSUNFCit9dGVfaXJfY2VsbF9yZXNlbGVjdGlvbl90eXBlOworCisjaWYgMCAvL19fVU1UU19UREQxMjhfTU9ERV9fCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYgLy9fX1VNVFNfVEREMTI4X01PREVfXworCisjZW5kaWYgLyogVUFTX0dBU19FTlVNU19IICovCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdWFzX2dhc19zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91YXNfZ2FzX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZDQ5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdWFzX2dhc19zdHJ1Y3QuaApAQCAtMCwwICsxLDc5MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA3CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgIHVhc19nYXNfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9OWkEKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2c6JAorICoKKyAqIDEwIDI0IDIwMTYgYWJoaW5hdi5hZ2Fyd2FsCisgKiBbTU9MWTAwMjA5MjAwXSBbRmVhdHVyZSBSZXF1ZXN0XSBbVU1PTFlBXSBDUyBTdXBwb3J0IGR1cmluZyAzRyBjYWxsIGNvbm5lY3Rpb24KKyAqIC4KKyAqCisgKiAxMCAyMSAyMDE2IHJpY2hhLmd1cHRhCisgKiBbTU9MWTAwMjA4MzM1XSBbTVQ2MjkzXSBbQjY2XSBHQVMgY29kZSBwb3J0aW5nIChpbnRlcmZhY2UgcGFydCkKKyAqIC4KKyAqCisgKiAwMiAyNiAyMDE2IHNyaWhhcmkubWFkZGlwYXRpCisgKiBbTU9MWTAwMTYyNDYxXSCmYkFuZHJvaWQ/Pz9Nb2RlbT8/TG9nqrq73ahECisgKiAuCisgKgorICogMDkgMDIgMjAxNSBicnVjZS5saQorICogW01PTFkwMDEyNTI5MV0gMjNHIFBpbmdQb25nIFJlc2VsZWN0aW9uIFJlc3RyYWluIC0gR0FTCisgKiAuCisgKgorICogMDcgMDggMjAxNSBtaW5nLmxlZQorICogW01PTFkwMDA4NzQ3MF0gW1VuaXZlcnNhbCBCaW5dIEZERCBHQVMgZGV2ZWxvcGVtZW50CisgKiAzRyBDU0cgcmVtb3ZlIFNBUCBvcHRpb24uCisgKgorICogMDEgMDcgMjAxNSB5ZW5jaGloLnlhbmcKKyAqIFtNT0xZMDAwODQyNTZdIFtNRU1FXSBzeW5jIE1UNjI5MSB0byBVTU9MWQorICogRml4IGJ1aWxkIGVycm9yLgorICoKKyAqIDEyIDE5IDIwMTQgYmlydWkubGkKKyAqIFtNT0xZMDAwODc2NzddIFtVM0ddW1RERF1bVUFTIFJSQ0VdIG1vZGlmaWNhdGlvbnMgZm9yIFUzRworICogbWVyZ2UuCisgKgorICogMTIgMTYgMjAxNCBjbGF1ZC5saQorICogW01PTFkwMDA4Nzc5NV0gW01FTUVdIHVuaXZlcnNhbCBiaW4gY2hlY2sgaW4KKyAqIFtVbml2ZXJzYWwgYmluXVtGRERdW01FTUUvRUFTL0dBU10gaW50ZXJmYWNlCisgKgorICogMTIgMTUgMjAxNCBoZW5yeS5sYWkKKyAqIFtNT0xZMDAwODc2NjhdIFtNVDYyOTFdW1VCSU5dIENoZWNrIGluIEVSUkMvQ0VMIG1vZGlmaWNhdGlvbnMKKyAqIC4KKyAqCisgKiAxMSAxNCAyMDE0IHllbmNoaWgueWFuZworICogW01PTFkwMDA4NDI1Nl0gW01FTUVdIHN5bmMgTVQ2MjkxIHRvIFVNT0xZCisgKiBVUlIvTUVNRS4KKyAqCisgKiAxMSAwNSAyMDE0IG1pbmcubGVlCisgKiBbTU9MWTAwMDgxMTU0XSBbQVRUX1RNT19ERVZdIEFUJlQgcmVxdWlyZW1lbnQgbWVyZ2UgYmFjaworICogQ1NHIGZpbmdlcnByaW50IEdBUyBwYXJ0LgorICoKKyAqIDAxIDIxIDIwMTQgd2NwdXNlcl9pbnRlZ3JhdG9yCisgKiBbTU9MWTAwMDU0NDc1XSBTR0xURSBvcHRpb24gcmVuYW1lCisgKiAuCisgKgorICogMTEgMTMgMjAxMyBiby53dQorICogW01PTFkwMDA0NjAyN10gW01UNjI5MEUxXVtNTURTX0RDXSBNTURDIGZlYXR1cmUgcGF0Y2ggYmFjayB0byBNT0xZIHRydW5rCisgKiAuCisgKgorICogMDcgMjQgMjAxMyBydWppbmcuemhhbworICogW01PTFkwMDAzMTAyMF0gW01NRFNfRENdIE1lcmdlIE1NREMgaW50ZXJmYWNlIHRvIE1PTFkKKyAqIC4yLT4zNEcgTkJSIHRyYW5zZmVyCisgKgorICogMDcgMjMgMjAxMyBydWppbmcuemhhbworICogW01PTFkwMDAyMzkzNV0gW01UNjI5MEUxXVtXL0ddW1RhcmdldCBJVF0gTWVhcyByZXN1bHQgaXMgcmVjZWl2ZWQgc28gZnJlcXVlbnRseSB3aGVuIHByaW9yaXR5IG1lYXN1cmVtZW50IGFuZCBkcnggbWVhc3VyZW1lbnQgYXJlIG9uLWdvaW5nCisgKiAuCisgKgorICogMDcgMjMgMjAxMyBkb25ncWluZy5xaQorICogW01PTFkwMDAyMzkzNV0gW01UNjI5MEUxXVtXL0ddW1RhcmdldCBJVF0gTWVhcyByZXN1bHQgaXMgcmVjZWl2ZWQgc28gZnJlcXVlbnRseSB3aGVuIHByaW9yaXR5IG1lYXN1cmVtZW50IGFuZCBkcnggbWVhc3VyZW1lbnQgYXJlIG9uLWdvaW5nCisgKiAuCisgKgorICogMDcgMjMgMjAxMyBoZW5yeS5sYWkKKyAqIFtNT0xZMDAwMjM5MzVdIFtNVDYyOTBFMV1bVy9HXVtUYXJnZXQgSVRdIE1lYXMgcmVzdWx0IGlzIHJlY2VpdmVkIHNvIGZyZXF1ZW50bHkgd2hlbiBwcmlvcml0eSBtZWFzdXJlbWVudCBhbmQgZHJ4IG1lYXN1cmVtZW50IGFyZSBvbi1nb2luZworICogLgorICoKKyAqIDA3IDAzIDIwMTMgbWluZy5sZWUKKyAqIFtNT0xZMDAwMjY1MDFdIFtHQVNfVUFTXSBDaXBoZXIgc3RhdHVzIG1pc21hdGNoIGVycm9yIGhhbmRsaW5nCisgKiAuCisgKgorICogMDUgMDkgMjAxMyBoZW5yeS5sYWkKKyAqIFtNT0xZMDAwMDkyMjJdIFtHQVNdW011bHRpLU1vZGUgRGV2ZWxvcG1lbnRdIE1lcmdlIEdBUyBtdWx0aS1tb2RlIGRldmVsb3BtZW50IHRvIE1PTFkKKyAqIC4KKyAqCisgKiAwMyAxMyAyMDEzIGMtaHVhLnlhbmcKKyAqIFtNT0xZMDAwMDkxODRdIFtVUlJdIE11bHRpbW9kZSBNZXJnZSB0byBNT0xZCisgKiAuCisgKgorICogMDEgMjIgMjAxMyBjLWh1YS55YW5nCisgKiBbTU9MWTAwMDA5MTg0XSBbVVJSXSBNdWx0aW1vZGUgTWVyZ2UgdG8gTU9MWQorICogLgorICoKKyAqIDAxIDExIDIwMTMgaGVucnkubGFpCisgKiBbSGVucnldW011bHRpLU1vZGUgRGV2ZWxvcG1lbnRdIEdBUyBEZXZlbG9wbWVudCBhbmQgUjggQ1IgU3luYworICoKKyAqIDEwIDI1IDIwMTIgbWluZy5sZWUKKyAqIFtNT0xZMDAwMDQyMzZdIFtpbnRlcmZhY2VdW3NlcnZpY2VdW2thbF1yZW1vdmUgc3RhY2tfbHRsY29tLmgKKyAqIC4KKyAqCisgKiAwOSAyNyAyMDEyIHlvbmcuc3UKKyAqIFtNT0xZMDAwMDQyMzZdIFtpbnRlcmZhY2VdW3NlcnZpY2VdW2thbF1yZW1vdmUgc3RhY2tfbHRsY29tLmgKKyAqIDxzYXZlZCBieSBQZXJmb3JjZT4KKyAqIAorICogMDkgMjYgMjAxMiB5ZS55dWFuCisgKiBbTU9MWTAwMDA0MTczXSBbM0cgVEREXVtDSVNFXVI5IGNvZGUgbWVyZ2UgYmFjayB0byBNT0xZCisgKiBDU0NFIENPREUgSW50ZXJmYWNlIHBhcnQgLgorICoKKyAqIDA2IDI5IDIwMTIgaGVucnkubGFpCisgKiBbTU9MWTAwMDAwMTI4XSBbTVQ2MjgwXVtHQVNdIFNJMlEvTUVBUy9SRVNFTCBpbXByb3ZlbWVudCBjaGVjay1pbgorICogLgorICoKKyAqIDA1IDI1IDIwMTIgaGFpemhvdS5saXUKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDUgMjUgMjAxMiB5b25nLnN1CisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDA1IDE3IDIwMTIgcGV0ZXIuY2hpZW4KKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMDUgMDIgMjAxMiBhZGVsaW5lLmNoYW5nCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDAxIDExIDIwMTIgc2h1bndlbi5oc2lhbworICogcmVtb3ZlZCEKKyAqIENoZWNrIGluIFRLNjI4MF9EVlRfREVWIHRvIE1UNjI4MF9EVlRfREVWCisgKgorICogMDEgMDYgMjAxMiBjaGktY2h1bmcubGluCisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDExIDE0IDIwMTEgemVuZ3l1LmhhbworICogcmVtb3ZlZCEKKyAqIG1lcmdlIGludGVyZmFjZTogdWFzX2dhc19zdHJ1Y3QuaAorICoKKyAqIDExIDExIDIwMTEgZXZlbHluLndhbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogMTEgMDkgMjAxMSByeWFuLm91CisgKiByZW1vdmVkIQorICogLgorICoKKyAqIDEyIDE3IDIwMTAgc2h1bndlbi5oc2lhbworICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAxMCAyOCAyMDEwIG1hcnVjby50dQorICogcmVtb3ZlZCEKKyAqIC4KKyAqCisgKiAwOCAwNCAyMDEwIHdpbGxpYW0uY2hhbmcKKyAqIHJlbW92ZWQhCisgKiAuCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiAKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIAorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiBTdXBwb3J0ZWQgM3JkIGNyaXRlcmlhIGZvciBJbnRlclJBVCBjZWxsIHJlc2VsZWN0aW9uIHRvIFVUUkFOLgorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiBBZGQgY29weXJpZ2h0IGhlYWRlci4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9VQVNfR0FTX1NUUlVDVF9ICisjZGVmaW5lIF9VQVNfR0FTX1NUUlVDVF9ICisKKyNpbmNsdWRlICJ1YXNfZ2FzX2VudW1zLmgiICAgIAorI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJjc2lfdW10c19hc24uaCIgICAgIAorI2luY2x1ZGUgImwzX2luY19lbnVtcy5oIiAgICAgCisjaW5jbHVkZSAibWNkX2wzX2luY19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJjc2lfZ3NtX2Fzbi5oIgorI2luY2x1ZGUgImlyYXRfY29tbW9uX2VudW1zLmgiICAgICAgCisjaW5jbHVkZSAiaXJhdF9jb21tb25fc3RydWN0LmgiCisjaW5jbHVkZSAidWFzX2dhc19pbnRlcl9jb3JlX3N0cnVjdC5oIgorI2luY2x1ZGUgImFzX2ludGVyX2NvcmVfZW51bS5oIgorCisjaWZkZWYgX19DTUNDX1NURF9GUl9fCisjZGVmaW5lIE1BWF9DRUxMX05VTSAyNworI2VuZGlmCisKKy8vQ29tbW9uIHN0cnVjdHVyZQorCit0eXBlZGVmIHN0cnVjdCB7CisgICBrYWxfdWludDggdDMyMTJfdGltZXJfdmFsOworICAga2FsX2Jvb2wgYXR0X2ZsYWc7Cit9IHRzX2NzX3NwZWNpZmljX2NuX2luZm87CisKKworLy9EdWFsIG1vZGUgTUVNRSBTQVAgc3RhcnQgCisvKgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgIExPQ0FMX1BBUkFfSERSCit9dWFzX2dhc19jb25maWdfZ2NlbGxfbWVhc19jbmZfc3RydWN0OyovCisKKy8qCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKKyAgIHRzX2lyX2dzbV9jZWxsX3Jzc2lfaW5mbyBnc21fY2VsbF9yc3NpX2luZm87Cit9dWFzX2dhc19nY2VsbF9tZWFzX2luZF9zdHJ1Y3Q7Ki8KKworLyoKK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorICAgdHNfaXJfZ3NtX2NlbGxfYnNpY19pbmZvIGdzbV9jZWxsX2JzaWNfaW5mbzsKK311YXNfZ2FzX2djZWxsX2JzaWNfaW5kX3N0cnVjdDsqLworCisvKgordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICB0c19pcl91bXRzX2NlbGxfbGlzdCBpcl91bXRzX2NlbGxfbGlzdDsKK31nYXNfdWFzX2NvbmZpZ191Y2VsbF9tZWFzX3JlcV9zdHJ1Y3Q7Ki8KKy8vRHVhbCBtb2RlIE1FTUUgU0FQIGVuZAorCit0eXBlZGVmIHN0cnVjdAoreworICBrYWxfdWludDMyIGNlbGxfY2hhbmdlX3RpbWVvdXQ7CisgIC8qIE1IOiBBZGRlZCBmb3IgaW5mb3JtaW5nIEdBUyB0aGUgQ0NPIGFjdGl2YXRpb24gdGltZSAoMjAwNzA1MTEpICovCisgIGthbF91aW50MzIgY2VsbF9jaGFuZ2VfYWN0aXZhdGlvbl90aW1lOworICBrYWxfdWludDMyIHdhaXRfdGltZTsKK30gSVIzRzJUaW1lclN0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAga2FsX3VpbnQ4IG51bUVsZW1lbnRzOworICBHU01fVGFyZ2V0Q2VsbEluZm8gZWxlbWVudFtNQVhfVEFSR0VUX0dTTV9DRUxMU19OVU1dOyAvKiBPbmx5IHRoZSBmaXJzdCBudW1FbGVtZW50cyBhcmUgdmFsaWQgKi8KK30gR1NNX1RhcmdldENlbGxJbmZvTGlzdDsKKworLy9Gcm9tIEdBUyB0byBVQVMKK3R5cGVkZWYgc3RydWN0Cit7CisgICBMT0NBTF9QQVJBX0hEUgorfXVhc19nYXNfY29uZmlnX2djZWxsX21lYXNfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICBrYWxfdWludDggbGlzdF9yZWY7CisgIEZERF9tZWFzX1VtdHNDZWxsTGlzdCB1bXRzX2NlbGxfbGlzdDsKKyNpZiBkZWZpbmVkKF9fR0VSQU5fUjVfXykgJiYgZGVmaW5lZChfX1VNVFNfUjVfXykKKyAga2FsX2ludDggZmRkX3JzY3BfbWluX2luX2RibTsKKyNlbmRpZiAvKiBkZWZpbmVkKF9fR0VSQU5fUjVfXykgJiYgZGVmaW5lZChfX1VNVFNfUjVfXykqLworICBrYWxfdWludDE2IGZpcnN0X21lYXNfdWFyZmNuOyAvLyBpbnZhbGlkIHZhbHVlID0gVUFTX0dBU19JTlZBTElEX1VBUkZDTgorICBrYWxfYm9vbCBpc19kZXRlY3RlZF9jZWxsX21lYXNbRkREX01BWF9OVU1fTUVBU1VSRURfVU1UU19DQVJSSUVSU107CisgIC8qIFRoaXMgZmxhZyBpcyB1c2VkIHRvIGluZGljYXRlIHdoZXRoZXIgbWVhc3VyZW1lbnQgcGVyaW9kIHNob3VsZCBiZSByZXNldAorICAgKiBpbW1lZGlhdGVseS4gKFRSVUU6ICBtZWFzIGlzIHBlcmZvcm1lZCBpbiB0aGUgZmlyc3QgRFJYLiAKKyAgICogICAgICAgICAgICAgICBGQUxTRTogbWVhcyBpcyBwZXJmb3JtZWQgaW4gdGhlIGZpcnN0IFQtbWVhcyBvY2Nhc2lvbikgIAorICAgKiBJbiBjdXJyZW50IGRlc2lnbiwgdGhlIGZvbGxvd2luZyBydWxlcyBzaG91bGQgYmUgZm9sbG93ZWQuCisgICAqICgxKUlmIG51bWJlciBvZiBBUkZDTiAhPSAwLCB0aGlzIGZsYWcgd2lsbCBiZSBzZXQgYXMgRkFMU0Ugb25seSBpZiB0bWVhc3VyZSBtZWFzdXJlbWVudCAKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRyaWdnZXJlZCB3aGVuIHByaW9yaXR5IG1lYXN1cmVtZW50IGlzIG9uLWdvaW5nIChpLmUuLCBhdCAKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXN0IG9uZSBvZiBVTVRTIGNlbGxzIGhpdHMgcHJpb3JpdHkgcmVzZWxlY3Rpb24gY3JpdGVyaWEgZm9yIHByaW9yaXR5IAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgbWVhc3VyZW1lbnQgcmVzZWxlY3Rpb24pLiBGb3Igb3RoZXIgY2FzZSwgdGhpcyBmbGFnIHNob3VsZCAKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHNldCBhcyBUUlVFLiBJZiBhbnkgaW1wcm92ZW1lbnQgaXMgbmVlZGVkLCB0aGUgdXNhZ2UgbGltaXRhdGlvbiAKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIGZsYWcgc2hvdWxkIGJlIGNvbmZpcm1lZCB3aXRoIFVMMSdzIGNvbGxlYWd1ZS4KKyAgICogKDIpIElmIG51bWJlciBvZiBBUkZDTiA9PSAwLCB0aGlzIGZsYWcgd2lsbCBhbHd5YXMgYmUgc2V0IGFzIEZBTFNFOworICAgKi8KKyAgIGthbF9ib29sIGlzX21lYXNfcGVyaW9kX3Jlc2V0OyAgICAKK31mZGRfZ2FzX3Vhc19jb25maWdfdWNlbGxfbWVhc19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIGthbF91aW50OCBsaXN0X3JlZjsKKyAgVEREX21lYXNfVW10c0NlbGxMaXN0IHVtdHNfY2VsbF9saXN0OworICBrYWxfdWludDE2IGZpcnN0X21lYXNfdWFyZmNuOyAvL2luIHRkZCwgaXQgaXMgdW51c2VkLCAgaW52YWxpZCB2YWx1ZSA9IFVBU19HQVNfSU5WQUxJRF9VQVJGQ04KKyAga2FsX2Jvb2wgaXNfZGV0ZWN0ZWRfY2VsbF9tZWFzW1RERF9NQVhfTlVNX01FQVNVUkVEX1VNVFNfQ0FSUklFUlNdOworICAvKiBUaGlzIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG1lYXN1cmVtZW50IHBlcmlvZCBzaG91bGQgYmUgcmVzZXQKKyAgICogaW1tZWRpYXRlbHkuIChUUlVFOiAgbWVhcyBpcyBwZXJmb3JtZWQgaW4gdGhlIGZpcnN0IERSWC4gCisgICAqICAgICAgICAgICAgICAgRkFMU0U6IG1lYXMgaXMgcGVyZm9ybWVkIGluIHRoZSBmaXJzdCBULW1lYXMgb2NjYXNpb24pICAKKyAgICogSW4gY3VycmVudCBkZXNpZ24sIHRoZSBmb2xsb3dpbmcgcnVsZXMgc2hvdWxkIGJlIGZvbGxvd2VkLgorICAgKiAoMSlJZiBudW1iZXIgb2YgQVJGQ04gIT0gMCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IGFzIEZBTFNFIG9ubHkgaWYgdG1lYXN1cmUgbWVhc3VyZW1lbnQgCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0cmlnZ2VyZWQgd2hlbiBwcmlvcml0eSBtZWFzdXJlbWVudCBpcyBvbi1nb2luZyAoaS5lLiwgYXQgCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFzdCBvbmUgb2YgVU1UUyBjZWxscyBoaXRzIHByaW9yaXR5IHJlc2VsZWN0aW9uIGNyaXRlcmlhIGZvciBwcmlvcml0eSAKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG1lYXN1cmVtZW50IHJlc2VsZWN0aW9uKS4gRm9yIG90aGVyIGNhc2UsIHRoaXMgZmxhZyBzaG91bGQgCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBzZXQgYXMgVFJVRS4gSWYgYW55IGltcHJvdmVtZW50IGlzIG5lZWRlZCwgdGhlIHVzYWdlIGxpbWl0YXRpb24gCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyBmbGFnIHNob3VsZCBiZSBjb25maXJtZWQgd2l0aCBVTDEncyBjb2xsZWFndWUuCisgICAqICgyKSBJZiBudW1iZXIgb2YgQVJGQ04gPT0gMCwgdGhpcyBmbGFnIHdpbGwgYWx3eWFzIGJlIHNldCBhcyBGQUxTRTsKKyAgICovCisgICBrYWxfYm9vbCBpc19tZWFzX3BlcmlvZF9yZXNldDsgCit9dGRkX2dhc191YXNfY29uZmlnX3VjZWxsX21lYXNfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICB0ZV9sMV9hdmFpbGliaWxpdHlfc3RhdHVzIGwxX2F2YWlsaWJpbGl0eV9zdGF0dXM7Cit9Z2FzX3Vhc19sb3dlcl9sYXllcl9hdmFpbGFiaWxpdHlfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICB0ZV9pcl9oYW5kb3Zlcl9zdGF0dXMgaXJfaGFuZG92ZXJfdG9fZ3NtX3N0YXR1czsKK311YXNfZ2FzX2hvX2FjdGl2YXRlX2djZWxsX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKyAgdGVfaXJfaGFuZG92ZXJfc3RhdHVzIGlyX2hhbmRvdmVyX3RvX2dzbV9zdGF0dXM7Cit9dWFzX2dhc19oYW5kb3Zlcl9nY2VsbF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICBMT0NBTF9QQVJBX0hEUgorICAgdHNfY2lwaGVyaW5nX2luZm8gICAgICBjaXBoZXJpbmdfaW5mbzsKKyAgIHBsbW5fc2VhcmNoX3R5cGVfZW51bSAgcGxtbl9zZWFyY2hfdHlwZTsKK31nYXNfdWFzX2hhbmRvdmVyX3VjZWxsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSCisgICBsYWlfc3RydWN0ICBsYWk7CisgICB0c19jc19zcGVjaWZpY19jbl9pbmZvICBnYXNfY3NfY25faW5mbzsKKwkvKiBfX0FMUFMwMjUwNjg3OF9TVVBQT1JUX18gKi8KKwl0ZV9pcl9jYWxsX3R5cGUgY2FsbF90eXBlOworfWdhc191YXNfaG9fYWN0aXZhdGVfdWNlbGxfcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICB0ZV9pcl9jZWxsX3Jlc2VsZWN0aW9uX3N0YXR1cyBpcl9jZWxsX2V2YWxfc3RhdHVzOworICB0c19ldmFsX2FjdGl2YXRlX2ZhaWxfaGFuZGxlCWV2YWxfYWN0aXZhdGVfZmFpbF9oYW5kbGU7Cit9dWFzX2dhc19ldmFsdWF0ZV9nY2VsbF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIHRlX2lyX2NlbGxfcmVzZWxlY3Rpb25fc3RhdHVzIGlyX2NlbGxfYWN0aXZhdGlvbl9zdGF0dXM7CisgIHRzX2V2YWxfYWN0aXZhdGVfZmFpbF9oYW5kbGUgZXZhbF9hY3RpdmF0ZV9mYWlsX2hhbmRsZTsKKyAgdGVfaXJfY2VsbF9jaGFuZ2VfZmFpbF9yZWFzb25fZW51bSBpcl9jZWxsX2NoYW5nZV9mYWlsZWRfcmVhc29uOyAKK311YXNfZ2FzX2FjdGl2YXRlX2djZWxsX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKK311YXNfZ2FzX2V2YWx1YXRlX2djZWxsX3N0b3BfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorIHRlX2lyX2NlbGxfY2hhbmdlX2NvbXBsZXRlX3N0YXR1cyBpcl9jZWxsX2NoYW5nZV9jb21wbGV0ZV9zdGF0dXM7CisgIC8qQnlyb246IDIwMDcvMDUvMDg6IEFkZCBmb3IgcmVhbCBDQ08gZmFpbCBjYXVzZSovCisgIHRlX2lyX2NlbGxfY2hhbmdlX2ZhaWxfcmVhc29uX2VudW0gaXJfY2VsbF9jaGFuZ2VfZmFpbGVkX3JlYXNvbjsKK311YXNfZ2FzX2djZWxsX2NoYW5nZV9jb21wbGV0ZV9pbmRfc3RydWN0OworCisjaWZkZWYgX19DTUNDX1NURF9GUl9fCit0eXBlZGVmIHN0cnVjdHsKKyAgVTE2IGNlbGxJZDsKKyAgQ3NpVWFyZmNuIHVhcmZjbjsJCit9Q2VsbFBhcmE7Cit0eXBlZGVmIHN0cnVjdHsKKyAgTE9DQUxfUEFSQV9IRFIKKyAgVTggbnVtRWxlbWVudHM7CisgIENlbGxQYXJhICBlbGVtZW50c1tNQVhfQ0VMTF9OVU1dOworfXN0ZF9mcl9jZWxsX2xpc3Q7Cit0eXBlZGVmIHN0cnVjdAoreworICAgCUxPQ0FMX1BBUkFfSERSCisgICAJa2FsX3VpbnQ4ICAgICBmclRocmVzaG9sZDsKKyAgIAlrYWxfdWludDggICAgIG51bUVsZW1lbnRzOworICAgCUNzaVVhcmZjbiAgICAgZWxlbWVudFs5XTsKK31nYXNfdWFzX3N0ZF9mcl9pbmZvX2luZF9zdHJ1Y3Q7CisjZW5kaWYKKworI2lmZGVmIF9fQ01DQ18yM0dfUElOR1BPTkdfUkVTVFJBSU5fXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX2Jvb2wgICAgaXNfMkdfc3RhcnRfcmVzZWxfcmVzdHJhaW47Cit9IGdhc191YXNfcmVzZWxfcmVzdHJhaW5fc3RhdHVzX2luZDsKKyNlbmRpZgorCisKKy8qIGZvciBSNiByZWRpcmVjdGlvbiBmZWF0dXJlICovCisjaWYgKGRlZmluZWQoX19HRVJBTl9SNl9fKSB8fCBkZWZpbmVkKF9fQ01DQ19GUl9fKSB8fCBkZWZpbmVkKF9fQ01DQ19TVERfRlJfXykpCisKKy8qIFJlcXVlc3QgdG8gZXZhbHVhdGUgYSBjZWxsCisgICBiZWNhdXNlIG9mIGludGVyIFJBVCBjZWxsIHJlc2VsZWN0aW9uIG9yIG5ldHdvcmsgb3JkZXJlZCBjZWxsIGNoYW5nZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICAvKiB0ZV9pcl9jZWxsX3Jlc2VsZWN0aW9uX3R5cGUgaXJfY2VsbF9yZXNlbGVjdGlvbl90eXBlOyBkZXByZXRlZCAqLworIHRlX2lyX2NlbGxfY2hhbmdlX3RyaWdnZXIgaXJfY2VsbF9jaGFuZ2VfdHJpZ2dlcjsKKyAga2FsX2Jvb2wgbm90VG9DaGVjazNyZENyaXRlcmlvbjsgLyogS0FMX0ZBTFNFOiBjaGVjayAzcmQgQ3JpdGVyaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0FMX1RSVUU6ICBkb24ndCBjaGVjaywgaS5lLiwgaWYgSVJDUiBjYW5kaWRhdGUgaXMgZnJvbSBBUEJDUi9DU0csIDNyZCBjcml0ZXJpb24gd2lsbCBub3QgYmUgY2hlY2tlZCAqLworIHBsbW5fc2VhcmNoX3R5cGVfZW51bSBwbG1uX3NlYXJjaF90eXBlOworIHRlX3VtdHNfbW9kZSB0YXJnZXRfY2VsbF9tb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIHRzX3VtdHNfdGFyZ2V0X2NlbGxfdW5pb24gdGFyZ2V0X2NlbGw7Cit9IGdhc191YXNfZXZhbHVhdGVfdWNlbGxfcmVxX3N0cnVjdDsKKworLyogUmVxdWVzdCB0byBhY3RpdmF0ZSBhIGNlbGwgd2l0aG91dCBhbiBldmFsdWF0aW9uIHBoYXNlICovCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIGthbF91aW50MzIgY2VsbF9jaGFuZ2VfdGltZW91dDsgLyogdmFsdWUgaW4gbWlsbGkgc2Vjb25kcyBvciB6ZXJvIHdoZW4gbm90IHJlcXVpcmVkICovCisgIC8qIHRlX2lyX2NlbGxfcmVzZWxlY3Rpb25fdHlwZSBpcl9jZWxsX3Jlc2VsZWN0aW9uX3R5cGU7IGRlcHJldGVkICovCisgIHRlX2lyX2NlbGxfY2hhbmdlX3RyaWdnZXIgaXJfY2VsbF9jaGFuZ2VfdHJpZ2dlcjsKKyAga2FsX2Jvb2wgbm90VG9DaGVjazNyZENyaXRlcmlvbjsgLyogS0FMX0ZBTFNFOiBjaGVjayAzcmQgQ3JpdGVyaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtBTF9UUlVFOiAgZG9uJ3QgY2hlY2ssIGkuZS4sIGlmIElSQ1IgY2FuZGlkYXRlIGlzIGZyb20gQVBCQ1IvQ1NHLCAzcmQgY3JpdGVyaW9uIHdpbGwgbm90IGJlIGNoZWNrZWQgKi8KKyBwbG1uX3NlYXJjaF90eXBlX2VudW0gcGxtbl9zZWFyY2hfdHlwZTsKKyB0ZV91bXRzX21vZGUgdGFyZ2V0X2NlbGxfbW9kZTsKKyB0c191bXRzX3RhcmdldF9jZWxsX3VuaW9uIHRhcmdldF9jZWxsOyAvKiBGb3IgSVJfQ0VMTF9DSEFOR0VfT1JERVIgKi8KKyNpZiAoZGVmaW5lZChfX0dFUkFOX1I2X18pIHx8IGRlZmluZWQoX19DTUNDX0ZSX18pKQorIENzaVVtdHNDZWxsTGlzdCByZWRpcmVjdGlvbl9saXN0OyAvKiBGb3IgSVJfUkVESVJFQ1RJT04gKi8KKyNlbmRpZgorI2lmZGVmIF9fQ01DQ19TVERfRlJfXworIHN0ZF9mcl9jZWxsX2xpc3Qgc3RkX2ZyX2NlbGxfbGlzdDsKKyNlbmRpZgorfSBnYXNfdWFzX2FjdGl2YXRlX3VjZWxsX3JlcV9zdHJ1Y3Q7CisKKyNlbHNlCisKKy8qIFJlcXVlc3QgdG8gZXZhbHVhdGUgYSBjZWxsCisgICBiZWNhdXNlIG9mIGludGVyIFJBVCBjZWxsIHJlc2VsZWN0aW9uIG9yIG5ldHdvcmsgb3JkZXJlZCBjZWxsIGNoYW5nZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorIGthbF91aW50MTYgY2VsbF9jaGFuZ2VfdGltZW91dDsgLyogdmFsdWUgaW4gc2Vjb25kcyBvciB6ZXJvIHdoZW4gbm90IHJlcXVpcmVkICovCisgLyogdGVfaXJfY2VsbF9yZXNlbGVjdGlvbl90eXBlIGlyX2NlbGxfcmVzZWxlY3Rpb25fdHlwZTsgZGVwcmV0ZWQgKi8KKyB0ZV9pcl9jZWxsX2NoYW5nZV90cmlnZ2VyIGlyX2NlbGxfY2hhbmdlX3RyaWdnZXI7CisgICAga2FsX2Jvb2wgbm90VG9DaGVjazNyZENyaXRlcmlvbjsgLyogS0FMX0ZBTFNFOiBjaGVjayAzcmQgQ3JpdGVyaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0FMX1RSVUU6ICBkb24ndCBjaGVjaywgaS5lLiwgaWYgSVJDUiBjYW5kaWRhdGUgaXMgZnJvbSBBUEJDUi9DU0csIDNyZCBjcml0ZXJpb24gd2lsbCBub3QgYmUgY2hlY2tlZCAqLworIHBsbW5fc2VhcmNoX3R5cGVfZW51bSBwbG1uX3NlYXJjaF90eXBlOworIHRlX3VtdHNfbW9kZSB0YXJnZXRfY2VsbF9tb2RlOworIHRzX3VtdHNfdGFyZ2V0X2NlbGxfdW5pb24gdGFyZ2V0X2NlbGw7Cit9IGdhc191YXNfZXZhbHVhdGVfdWNlbGxfcmVxX3N0cnVjdDsKKworLyogUmVxdWVzdCB0byBhY3RpdmF0ZSBhIGNlbGwgd2l0aG91dCBhbiBldmFsdWF0aW9uIHBoYXNlICovCit0eXBlZGVmIGdhc191YXNfZXZhbHVhdGVfdWNlbGxfcmVxX3N0cnVjdCAgZ2FzX3Vhc19hY3RpdmF0ZV91Y2VsbF9yZXFfc3RydWN0OworI2VuZGlmIC8qIChkZWZpbmVkKF9fR0VSQU5fUjZfXykgJiYgZGVmaW5lZChfX1VNVFNfUjZfXykpIHx8IGRlZmluZWQgKF9fRkREX1JFRElSRUNUSU9OX18pICovCisKKy8qIFJlcXVlc3QgdG8gc3RvcCBhbiBvbmdvaW5nIGV2YWx1YXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKK30gZ2FzX3Vhc19ldmFsdWF0ZV91Y2VsbF9zdG9wX3JlcV9zdHJ1Y3Q7CisKKyNpZmRlZiBfX0xURV9SQVRfXwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICBldXRyYW5fY2FwX2VudW0gZXV0cmFuX2NhcDsKK30gZ2FzX3Vhc19ldXRyYW5fY2FwX3VwZGF0ZV9pbmRfc3RydWN0OworI2VuZGlmIC8qIF9fTFRFX1JBVF9fICovCisKKy8vRnJvbSBVQVMgdG8gR0FTCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIHRzX2NpcGhlcmluZ19pbmZvIGNpcGhlcmluZ19pbmZvOworICBwbG1uX3NlYXJjaF90eXBlX2VudW0gcGxtbl9zZWFyY2hfdHlwZTsKKyAgdGVfZ3NtX2JhbmRfaW5kaWNhdG9yIGJhbmRfaW5kaWNhdG9yOworICBrYWxfdWludDE2ICAgICAgICAgbWVzc2FnZV9sZW5ndGg7CisjaWZkZWYgX19UQzdfX0NTX19TVVBQT1JUX18KKyAga2FsX2Jvb2wgaXNfZmFzdF9yZXR1cm5fdG9fdW10czsKKyNlbmRpZgorfSB1YXNfZ2FzX2hhbmRvdmVyX2djZWxsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKyAga2FsX3VpbnQ4IHQzMjEyX3RpbWVyX3ZhbDsKKyAga2FsX2Jvb2wgYXR0X2ZsYWc7CisgIGthbF91aW50MzIgd2FpdF90aW1lOworICAvKiBfX0FMUFMwMjUwNjg3OF9TVVBQT1JUX18gKi8KKyAgdGVfaXJfY2FsbF90eXBlIGNhbGxfdHlwZTsgIAorfSB1YXNfZ2FzX2hvX2FjdGl2YXRlX2djZWxsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKyAgdGVfaXJfaGFuZG92ZXJfc3RhdHVzIGlyX2hhbmRvdmVyX3RvX3V0cmFuX3N0YXR1czsKK30gZ2FzX3Vhc19oYW5kb3Zlcl91Y2VsbF9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIHRlX2lyX2hhbmRvdmVyX3N0YXR1cyBpcl9oYW5kb3Zlcl90b191dHJhbl9zdGF0dXM7Cit9IGdhc191YXNfaG9fYWN0aXZhdGVfdWNlbGxfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICBrYWxfdWludDggbGlzdF9yZWY7CisjaWZkZWYgX19URERfRE1fR0FQX09QVElNSVpBVElPTl9fCisgIGthbF9ib29sIGlzX2JzaWNfZ2FwX3ZhbGlkOworI2VuZGlmCisgIHRlX2lyX3VycmNfc3RhdGUgdXJyY19zdGF0ZTsKKyAgdHNfaXJfZ3NtX2NlbGxfbGlzdCBnc21fY2VsbF9saXN0OworICAvKiBUaGlzIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG1lYXN1cmVtZW50IHBlcmlvZCBzaG91bGQgYmUgcmVzZXQKKyAgICogaW1tZWRpYXRlbHkuIChUUlVFOiAgbWVhcyBpcyBwZXJmb3JtZWQgaW4gdGhlIGZpcnN0IERSWC4gCisgICAqICAgICAgICAgICAgICAgRkFMU0U6IG1lYXMgaXMgcGVyZm9ybWVkIGluIHRoZSBmaXJzdCBULW1lYXMgb2NjYXNpb24pIAorICAgKiBJbiBjdXJyZW50IGRlc2lnbiwgdGhlIGZvbGxvd2luZyBydWxlcyBzaG91bGQgYmUgZm9sbG93ZWQuCisgICAqICgxKUlmIG51bSBvZiBHU00gY2VsbHMgIT0gMCwgdGhpcyBmbGFnIHdpbGwgYmUgc2V0IGFzIEZBTFNFIG9ubHkgaWYgdG1lYXMsZ3NtIG1lYXN1cmVtZW50IAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRyaWdnZXJlZCB3aGVuIHByaW9yaXR5IG1lYXN1cmVtZW50IGlzIG9uLWdvaW5nIChpLmUuLCBhdCAKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFzdCBvbmUgb2YgR1NNIGNlbGxzIGhpdHMgcHJpb3JpdHkgcmVzZWxlY3Rpb24gY3JpdGVyaWEgZm9yIHByaW9yaXR5IAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG1lYXN1cmVtZW50IHJlc2VsZWN0aW9uKS4gRm9yIG90aGVyIGNhc2UsIHRoaXMgZmxhZyBzaG91bGQgCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgc2V0IGFzIFRSVUUuIElmIGFueSBpbXByb3ZlbWVudCBpcyBuZWVkZWQsIHRoZSB1c2FnZSBsaW1pdGF0aW9uIAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIGZsYWcgc2hvdWxkIGJlIGNvbmZpcm1lZCB3aXRoIEdMMSdzIGNvbGxlYWd1ZS4KKyAgICogKDIpIElmIG51bSBvZiBHU00gY2VsbHMgPT0gMCwgdGhpcyBmbGFnIHdpbGwgYWx3eWFzIGJlIHNldCBhcyBGQUxTRTsKKyAgICovCisgIGthbF9ib29sIGlzX21lYXNfcGVyaW9kX3Jlc2V0OyAgCit9dWFzX2dhc19jb25maWdfZ2NlbGxfbWVhc19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCit9ZmRkX2dhc191YXNfY29uZmlnX3VjZWxsX21lYXNfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorfXRkZF9nYXNfdWFzX2NvbmZpZ191Y2VsbF9tZWFzX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKyAgdGVfbDFfYXZhaWxpYmlsaXR5X3N0YXR1cyBsMV9hdmFpbGliaWxpdHlfc3RhdHVzOworfXVhc19nYXNfbG93ZXJfbGF5ZXJfYXZhaWxhYmlsaXR5X3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKyAgdGVfaXJfY2VsbF9yZXNlbGVjdGlvbl9zdGF0dXMgaXJfY2VsbF9ldmFsX3N0YXR1czsKKyAgdHNfZXZhbF9hY3RpdmF0ZV9mYWlsX2hhbmRsZQlldmFsX2FjdGl2YXRlX2ZhaWxfaGFuZGxlOworfWdhc191YXNfZXZhbHVhdGVfdWNlbGxfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICB0ZV9pcl9jZWxsX3Jlc2VsZWN0aW9uX3N0YXR1cyBpcl9jZWxsX2FjdGl2YXRpb25fc3RhdHVzOworICB0c19ldmFsX2FjdGl2YXRlX2ZhaWxfaGFuZGxlCWV2YWxfYWN0aXZhdGVfZmFpbF9oYW5kbGU7CisgIC8qQnlyb246IDIwMDcvMDUvMDg6IEFkZCBmb3IgcmVhbCBDQ08gZmFpbCBjYXVzZSovCisgIHRlX2lyX2NlbGxfY2hhbmdlX2ZhaWxfcmVhc29uX2VudW0gaXJfY2VsbF9jaGFuZ2VfZmFpbGVkX3JlYXNvbjsKK31nYXNfdWFzX2FjdGl2YXRlX3VjZWxsX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKK31nYXNfdWFzX2V2YWx1YXRlX3VjZWxsX3N0b3BfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICB0ZV9pcl9jZWxsX2NoYW5nZV9jb21wbGV0ZV9zdGF0dXMgaXJfY2VsbF9jaGFuZ2VfY29tcGxldGVfc3RhdHVzOworICAvKkJ5cm9uOiAyMDA3LzA1LzA4OiBBZGQgZm9yIHJlYWwgQ0NPIGZhaWwgY2F1c2UqLworICB0ZV9pcl9jZWxsX2NoYW5nZV9mYWlsX3JlYXNvbl9lbnVtIGlyX2NlbGxfY2hhbmdlX2ZhaWxlZF9yZWFzb247Cit9Z2FzX3Vhc191Y2VsbF9jaGFuZ2VfY29tcGxldGVfaW5kX3N0cnVjdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIHRlX2lyX2NlbGxfY2hhbmdlX3RyaWdnZXIgaXJfY2VsbF9jaGFuZ2VfdHJpZ2dlcjsKKyAgcGxtbl9zZWFyY2hfdHlwZV9lbnVtIHBsbW5fc2VhcmNoX3R5cGU7CisgIEdTTV9UYXJnZXRDZWxsSW5mbyB0YXJnZXRfZ2NlbGxfaW5mbzsKK30gdWFzX2dhc19ldmFsdWF0ZV9nY2VsbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIHRlX2lyX2NlbGxfY2hhbmdlX3RyaWdnZXIgaXJfY2VsbF9jaGFuZ2VfdHJpZ2dlcjsKKyAgcGxtbl9zZWFyY2hfdHlwZV9lbnVtIHBsbW5fc2VhcmNoX3R5cGU7ICAKKyAgR1NNX1RhcmdldENlbGxfSW5mb191bmlvbiB0YXJnZXRfZ2NlbGxfaW5mbzsKKyAgR1NNX1RhcmdldENlbGxfU0lfSW5mb191bmlvbiB0YXJnZXRfZ2NlbGxfc2lfaW5mbzsKKyAga2FsX3VpbnQzMiBjZWxsX2NoYW5nZV9hY3RpdmF0aW9uX3RpbWU7IC8qIG1pbGxpLXNlY29uZHMsICovICAgCisgIGthbF91aW50MzIgY2VsbF9jaGFuZ2VfdGltZW91dDsgLyogdmFsdWUgaW4gbWlsbGktc2Vjb25kcyBvciB6ZXJvIHdoZW4gbm90IHJlcXVpcmVkICovCisgIGthbF91aW50MzIgd2FpdF90aW1lOyAvKiBtaWxsaS1zZWNvbmRzOiAwfjE1MDAwIG1zLCBHQVMgc2hvdWxkIG5vdCByZXNlbGVjdCBiYWNrIHRvIFVNVFMvTFRFIHdpdGhpbiAid2FpdF90aW1lIiBwZXJpb2QgKi8gIAorICBrYWxfYm9vbCBuY19tb2RlX3ByZXNlbnQ7IC8qIGlmIFRSVUUgbmNfbW9kZSBpcyBwcmVzZW50ICovCisgIGthbF91aW50OCAgbmNfbW9kZTsgLyogT3B0aW9uYWwsIHByZXNlbnQgaWYgbmNfbW9kZV9wcmVzZW50IGlzIFRSVUUgKi8KK30gdWFzX2dhc19hY3RpdmF0ZV9nY2VsbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCit9dWFzX2dhc19ldmFsdWF0ZV9nY2VsbF9zdG9wX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKyAga2FsX2ludDggcV9yeGxldl9taW47IC8qIFJhbmdlIC0xMTUgdG8gLTI1IGRCbSAqLworICBrYWxfdWludDggcF9jb21wZW5zYXRpb247IC8qIFJhbmdlIDAgdG8gMTIgZEJtICovCit9dWFzX2dhc19jZWxsX3Jlc2VsZWN0aW9uX3BhcmFtc19yZXFfc3RydWN0OworI2lmIDAgLypicndhbmcsIDIwMDgwODMwLCB0aGlzIGRlZmluaXRpb24gc2hvdWxkIGJlIHBsYWNlZCBiZWZvcmUgdWFzX2dhc19ldmFsdWF0ZV9nY2VsbF9yZXFfc3RydWN0Ki8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisKKyNpZiAoZGVmaW5lZChfX1VNVFNfUjVfXykgJiYgZGVmaW5lZChfX0dFUkFOX1I1X18pKQordHlwZWRlZiBzdHJ1Y3QgeworICAgTE9DQUxfUEFSQV9IRFIKKyAgIGthbF9ib29sIGlzQ29tcHJlc3NlZFZlcnNpb247ICAgCit9IGdhc191YXNfaG9fdW10c19pbmZvX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIExPQ0FMX1BBUkFfSERSCisgICBrYWxfYm9vbCBpc0NvbXByZXNzZWRWZXJzaW9uOyAgIAorfSBnYXNfdWFzX2hvX3VtdHNfaW5mb19yc3Bfc3RydWN0OworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcGxtbl9zZWFyY2hfdHlwZV9lbnVtIHBsbW5fc2VhcmNoX3R5cGU7CisgICAgYXV0b19zZWFyY2hfY21kX2VudW0gYXV0b19zZWFyY2hfY21kOworICAgIGthbF91aW50OCAgICAgICAgbnVtX2NhcnJpZXJzOworICAgIGthbF91aW50MTYgICAgICBjc2dfdWFyZmNuW01BWF9OVU1fQ1NHX0NBUlJJRVJTXTsKK30gZ2FzX3Vhc19zZWFyY2hfY3NnX3VjZWxsX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIExPQ0FMX1BBUkFfSERSCisgICAgc2VhcmNoX3N0YXR1c19lbnVtIHNlYXJjaF9zdGF0dXM7CisgICAga2FsX3VpbnQ4ICAgICAgICAgbnVtX2NhcnJpZXJzOworICAgIHRzXzNHX2NzZ191Y2VsbF9ldmx1YXRpb25fcmVzdWx0IGNzZ191Y2VsbF9ldmx1YXRpb25fcmVzdWx0X2xpc3RbTUFYX05VTV9DU0dfQ0FSUklFUlNdOworfSBnYXNfdWFzX3NlYXJjaF9jc2dfdWNlbGxfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBwbG1uX3NlYXJjaF90eXBlX2VudW0gcGxtbl9zZWFyY2hfdHlwZTsKKyAgICBhdXRvX3NlYXJjaF9jbWRfZW51bSBhdXRvX3NlYXJjaF9jbWQ7CisgICAga2FsX3VpbnQ4ICAgICAgICBudW1fY2FycmllcnM7CisgICAga2FsX3VpbnQxNiAgICAgIGNzZ191YXJmY25bTUFYX05VTV9DU0dfQ0FSUklFUlNdOworfSBnYXNfdWFzX2V2YWx1YXRlX2NzZ191Y2VsbF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIHNlYXJjaF9zdGF0dXNfZW51bSBzZWFyY2hfc3RhdHVzOworICAgIGthbF91aW50OCAgICAgICAgIG51bV9jYXJyaWVyczsKKyAgICB0c18zR19jc2dfdWNlbGxfZXZsdWF0aW9uX3Jlc3VsdCBjc2dfdWNlbGxfZXZsdWF0aW9uX3Jlc3VsdF9saXN0W01BWF9OVU1fQ1NHX0NBUlJJRVJTXTsKK30gZ2FzX3Vhc19ldmFsdWF0ZV9jc2dfdWNlbGxfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBwbG1uX2lkX3N0cnVjdCBjc2dfcGxtbjsKKyAgICBrYWxfdWludDMyIGNzZ19pZDsKKyAgICBrYWxfdWludDMyIGNzZ19jZWxsX2lkOworICAgIGthbF91aW50MzIgY3NnX2ZyZXF1ZW5jeTsKKyAgICBrYWxfdWludDE2IGNzZ19waHlzaWNhbF9jZWxsX2lkOworfSB1YXNfZ2FzX2J1aWxkX2ZpbmdlcnByaW50X3JlcV9zdHJ1Y3Q7CisKKyNpZiBkZWZpbmVkKF9fTFRFX1JBVF9fKSB8fCBkZWZpbmVkKF9fMjNHX1BSSV9SRVNFTF9TVVBQT1JUX18pCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCisgIGthbF91aW50OCBsaXN0X3JlZjsKKyAgdGVfaXJfdXJyY19zdGF0ZSB1cnJjX3N0YXRlOworICBrYWxfaW50MTYgcHJpb19tZWFzX3BlcmlvZDsKKyAgdHNfaXJfZ3NtX2NlbGxfbGlzdCBnc21fY2VsbF9saXN0OworfXVhc19nYXNfY29uZmlnX2djZWxsX3ByaW9fbWVhc19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCit9ZmRkX2dhc191YXNfY29uZmlnX3VjZWxsX3ByaW9fbWVhc19jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgIExPQ0FMX1BBUkFfSERSCit9dGRkX2dhc191YXNfY29uZmlnX3VjZWxsX3ByaW9fbWVhc19jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgTE9DQUxfUEFSQV9IRFIKK311YXNfZ2FzX2NvbmZpZ19nY2VsbF9wcmlvX21lYXNfY25mX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICBrYWxfdWludDggbGlzdF9yZWY7CisgIGthbF9pbnQxNiBwcmlvX21lYXNfcGVyaW9kOworICBGRERfbWVhc19VbXRzQ2VsbExpc3QgdW10c19jZWxsX2xpc3Q7CisgIGthbF9pbnQ4IGZkZF9yc2NwX21pbl9pbl9kYm07CisgIGthbF91aW50MTYgZmlyc3RfbWVhc191YXJmY247IC8vIGludmFsaWQgdmFsdWUgPSBVQVNfR0FTX0lOVkFMSURfVUFSRkNOCisgIGthbF9ib29sIGlzX2RldGVjdGVkX2NlbGxfbWVhc1tGRERfTUFYX05VTV9NRUFTVVJFRF9VTVRTX0NBUlJJRVJTXTsKK31mZGRfZ2FzX3Vhc19jb25maWdfdWNlbGxfcHJpb19tZWFzX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgTE9DQUxfUEFSQV9IRFIKKyAga2FsX3VpbnQ4IGxpc3RfcmVmOworICBrYWxfaW50MTYgcHJpb19tZWFzX3BlcmlvZDsKKyAgVEREX21lYXNfVW10c0NlbGxMaXN0IHVtdHNfY2VsbF9saXN0OworICAvL2thbF9pbnQ4IGZkZF9yc2NwX21pbl9pbl9kYm07CisgIGthbF9pbnQ4IHRkZF9yc2NwX21pbl9pbl9kYm07CisgIGthbF91aW50MTYgZmlyc3RfbWVhc191YXJmY247IC8vIGludmFsaWQgdmFsdWUgPSBVQVNfR0FTX0lOVkFMSURfVUFSRkNOCisgIGthbF9ib29sIGlzX2RldGVjdGVkX2NlbGxfbWVhc1tURERfTUFYX05VTV9NRUFTVVJFRF9VTVRTX0NBUlJJRVJTXTsKK310ZGRfZ2FzX3Vhc19jb25maWdfdWNlbGxfcHJpb19tZWFzX3JlcV9zdHJ1Y3Q7CisjZW5kaWYgLyogZGVmaW5lZChfX0xURV9SQVRfXykgfHwgZGVmaW5lZChfXzIzR19QUklfUkVTRUxfU1VQUE9SVF9fKSAqLworCisKKyNpZmRlZiBfX0xURV9SQVRfXwordHlwZWRlZiBzdHJ1Y3QgeworICBMT0NBTF9QQVJBX0hEUgorICBldXRyYW5fY2FwX2VudW0gZXV0cmFuX2NhcDsKK30gdWFzX2dhc19ldXRyYW5fY2FwX3VwZGF0ZV9pbmRfc3RydWN0OworI2VuZGlmIC8qIF9fTFRFX1JBVF9fICovCisKKworI2VuZGlmIC8qIF9VQVNfR0FTX1NUUlVDVF9IICovCisKKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3VwY21fZW1fc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdXBjbV9lbV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjRkMmY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3VwY21fZW1fc3RydWN0LmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxMgorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICB1cGNtX2VtX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogIE5vdyB3ZSB1c2UgVVBDTSB0byBzZW5kIEVNIHBhcmFtZXRlcnMgdG8gdG9vbAorICogIFRoaXMgSGVhZGVyIGZpbGUgaXMgdXNlZCBmb3IgdGhlIElMTS4KKyAqICBVUENNIHdpbGwgaGVscCB0byBzZW5kIHRmdF9wZiwgcmF0YWRwIEVNIAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqICAgCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDQgMDkgMjAxOCBjaGluLXdlaS5oc3UKKyAqIFtNT0xZMDAzMTg2NDFdIFtNVDYyOTVdW0VMMl0gRU0gaW5mbyBzdHJ1Y3R1cmUgcmVmaW5lCisgKiBbVU1PTFlFXSBFTSBpbmZvIHN0cnVjdHVyZSByZWZpbmUuCisgKgorICogMDMgMTIgMjAxNSBzdGFuLmNoZW4KKyAqIFtNT0xZMDAwOTg3NzRdIFtVUENNXSBFTSBJbmZvIGZvciA5MQorICogQ2hlY2tpbiBOZXcgRU0gaW5mbyBhbmQgc3RydWN0LgorICoKKyAqIDA1IDI3IDIwMTMgbW9qYS5oc3UKKyAqIFtNT0xZMDAwMDc2MjVdIE1haW50YWluIGNvZGUKKyAqIGFkZCByYXRhZHAgRU0gc3RhdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogICAgICAgRmlsZW5hbWU6ICB1cGNtX2VtX3N0cnVjdC5oCisgKgorICogICAgRGVzY3JpcHRpb246ICBFTSBJTE0gb2YgVVBDTQorICoKKyAqICAgICAgICBDcmVhdGVkOiAgMjAxMy8wNS8yNyAwMzozOToxOQorICogICAgICAgIEF1dGhvcjogIG10azAxNjQxIChtb2phKQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpZm5kZWYgIFVQQ01fRU1fU1RSVUNUX0lOQworI2RlZmluZSAgVVBDTV9FTV9TVFJVQ1RfSU5DCisKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgImVtX3B1YmxpY19zdHJ1Y3QuaCIKKyNpbmNsdWRlICJ1cGNtX3N0YXRzLmgiCisjaW5jbHVkZSAidGZ0X3BmX3N0YXRzLmgiCisjaW5jbHVkZSAicmF0YWRwX3N0YXRzLmgiCisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgZW1faW5mb19lbnVtIGVtX2luZm87CisgICAgdXBjbV9zdGF0c190ICAgdXBjbTsKKyAgICB0ZnRfcGZfc3RhdHNfdCB0ZnRfcGY7CisgICAgcmF0YWRwX3N0YXRzX3QgcmF0YWRwOworfWVtX3VwY21fc3RhdHVzX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBlbV9pbmZvX2VudW0gZW1faW5mbzsKKyAgICBrYWxfdWludDMyIHRvdGFsX3J4X2J5dGVfcGVyX3NlY29uZDsKKyAgICBrYWxfdWludDMyIHRvdGFsX3R4X2J5dGVfcGVyX3NlY29uZDsKK31lbV91cGNtX3BzX3RwdXRfaW5mb19pbmRfc3RydWN0OworCisjZW5kaWYgICAvKiAtLS0tLSAjaWZuZGVmIFVQQ01fRU1fU1RSVUNUX0lOQyAgLS0tLS0gKi8KKwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3VwY21fc3RhdHMuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91cGNtX3N0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhMDJkZgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91cGNtX3N0YXRzLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxMgorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICB1cGNtX3N0YXRzLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgVVBDTSBzdGF0aXN0aWNzCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqICAgCisgKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMTEgMTYgMjAyMCBzdHVuLnd1CisgKiBbTU9MWTAwNTkxNzk5XSBbTVQ2ODgwXVtDb2xnaW5dW05ldyBmZWF0dXJlXSBBZGQgTmV3IElDRHMgQ01fSVBfRExfU1RBVHMvQ01fSVBfVUxfU1RBVHMKKyAqIAkKKyAqIAkuCisgKgorICogMDkgMDYgMjAxOSBjaGluLXdlaS5oc3UKKyAqIFtNT0xZMDA0MzcxOTldIFtNVDYyOTddW0lDRF1bRU1dIGZpeCB3cm9uZyB2YWx1ZXMgb2YgUERDUCB0aHJvdWdocHV0IGFuZCBJUCB0aHJvdWdocHV0CisgKiAJCisgKiAJW0lDRF1bRU1dIFVULgorICoKKyAqIDA5IDE4IDIwMTggdGMuY2hhbmcKKyAqIFtNT0xZMDAzNDU5OTBdIFtWTU9MWV0gQ29kZSBzeW5jLgorICoKKyAqIDA5IDE0IDIwMTggdGMuY2hhbmcKKyAqIFtNT0xZMDAzNDU5OTBdIFtWTU9MWV0gQ29kZSBzeW5jCisgKiBSb2xsYmFjayBmaXJzdC4gRml4IGJ1aWxkIGVycm9yIGxvY2FsbHkKKyAqCisgKiAwNiAxNSAyMDE3IGktZmVuZy5jaGVuCisgKiBbTU9MWTAwMjU3Njg0XSBbTVQ2NzYzXVtCaWFuY29dW04xXVtFTV0gTm8gaW5mbyBpbiBFTDIgUERDUCBVTCBUcHV0L1BEVSBzaXplCisgKiBbVFJVTktdW0VNXUVQRENQIFVMIFN0YXRpc3RpY3MKKyAqCisgKiAwMiAyMiAyMDE3IHRpbW90aHkueWFvCisgKiBbTU9MWTAwMjMxNTYxXSBbNjI5M11bRUwyXVtVUENNXSBsb2cgcmVmaW5lICYgY29kZSBmbG93IHJlZmluZQorICogVVBDTSBsb2cgcmVmaW5lLgorICoKKyAqIDA5IDI2IDIwMTYgY2FtbWllLnlhbmcKKyAqIFtNT0xZMDAxOTU1NjNdIFs2MjkzXVtFTDJdW1VQQ01dW1JBVERNXVtFUERDUF0gSW5pdGlhbCBmZWF0dXJlIGludGVncmF0aW9ucworICogW1RSVU5LXSBVUENNL1JBVERNL0VQRENQIGZlYXR1cmUgaW50ZWdyYXRpb25zIGZyb20gUFMuREVWCisgKgorICogMDcgMTcgMjAxMyBtb2phLmhzdQorICogW01PTFkwMDAzMDExMV0gQWRkIFVQQ00gVHgvUnggc3RhdGlzdGljcyBxdWVyeSBBUEkKKyAqIC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiAgICAgICBGaWxlbmFtZTogIHVwY21fc3RhdHMuaAorICoKKyAqICAgIERlc2NyaXB0aW9uOiAgU3RhdGlzdGljcyBvZiBVUENNCisgKgorICogICAgICAgIENyZWF0ZWQ6ICAyMDEzLzA1LzI0IDAzOjM5OjEwCisgKiAgICAgICAgQXV0aG9yOiAgbXRrMDE2NDEgKG1vamEpCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2lmbmRlZiAgVVBDTV9TVEFUU19JTkMKKyNkZWZpbmUgIFVQQ01fU1RBVFNfSU5DCisKKyNpbmNsdWRlIDx1cGNtX2VudW0uaD4KKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgICAgLyogRm9yIERlZmF1bHQgRVBTQiAqLworICAgIGthbF91aW50MzIgZGZ0X3Jjdl91bF9idXJzdF92NHY2OworICAgIGthbF91aW50MzIgZGZ0X3Jjdl91bF9idXJzdF92NDsKKyAgICBrYWxfdWludDMyIGRmdF9yY3ZfdWxfYnVyc3RfdjY7CisgICAga2FsX3VpbnQzMiBkZnRfdWxfbm9fbWF0Y2hfdGZ0X2Ryb3A7CisgICAga2FsX3VpbnQzMiBkZnRfdWxfc3VzcGVuZF9xdWV1ZTsKKyAgICAKKyAgICBrYWxfdWludDMyIHVsX2J5dGVzOworICAgIGthbF91aW50MzIgdWxfZ3BkczsgICAvLyB1bF9wa3RzCisgICAga2FsX3VpbnQzMiB1bF9ieXRlc19wcmk7CisgICAga2FsX3VpbnQzMiB1bF9ncGRzX3ByaTsgICAvL3VsX3BrdHNfcHJpCisJa2FsX3VpbnQxNiB1bF9tYXg7CisJCisJa2FsX3VpbnQxNiBkbF9tYXg7CisgICAga2FsX3VpbnQzMiBkbF9ieXRlczsKKyAgICBrYWxfdWludDMyIGRsX251bXM7CisKKyAgICBrYWxfdWludDMyIHJvbGxiYWNrX3VsX3RpbWVzOworICAgIGthbF91aW50MzIgcmN2X2J5X2ViaV90aW1lczsKKworICAgIGthbF91aW50MzIgcGt0X2ZpbHRlcl9hZGQ7CisgICAga2FsX3VpbnQzMiBwa3RfZmlsdGVyX21vZDsKKyAgICBrYWxfdWludDMyIHBrdF9maWx0ZXJfZGVsOworICAgIGthbF91aW50MzIgcGt0X2ZpbHRlcl9kZWxhbGw7CisgICAga2FsX3VpbnQzMiBwa3RfZmlsdGVyX2RlbF9iZWFyZXI7Cit9dXBjbV9lcHNiX3N0YXRzX3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworICAgIGthbF91aW50MzIgbG9vcGJhY2tfc2R1czsKKyAgICBrYWxfdWludDMyIGJ1ZmZlcmVkX3NkdXM7CisgICAga2FsX3VpbnQzMiBkZWxheV9zZHVzOworfXVwY21fdGVzdF9tb2RlX3N0YXRzX3Q7CisKK3R5cGVkZWYgc3RydWN0IAoreworCisjaWZkZWYgX19GSVZFR19OQVNfXworICAgIC8vIFRPRE86IDVHIHBhcnQuIDlYWCBiZWFyZXJzIG1ha2Ugc3RydWN0dXJlIHNpemUgPiAyXjE2CisgICAgdXBjbV9lcHNiX3N0YXRzX3QgICAgICBlcHNiW01BWF8yMzRHX0VQU0JfTlVNXTsKKyAgICAvKiBUaGUgYmFja3VwIGZvciBwcmV2aW91cyBhY3RpdmF0aW9uICovCisgICAgdXBjbV9lcHNiX3N0YXRzX3QgICAgICBwcmVfZXBzYltNQVhfMjM0R19FUFNCX05VTV07CisJdXBjbV9lcHNiX3N0YXRzX3QgICAgICBucl9wc2lbTlVNXzVHX1BEVV9TRVNTSU9OXTsKKyAgICAvKiBUaGUgYmFja3VwIGZvciBwcmV2aW91cyBhY3RpdmF0aW9uICovCisgICAgdXBjbV9lcHNiX3N0YXRzX3QgICAgICBwcmVfbnJfcHNpW05VTV81R19QRFVfU0VTU0lPTl07CisjZWxzZQorICAgIHVwY21fZXBzYl9zdGF0c190ICAgICAgZXBzYltNQVhfRVBTQl9OVU1dOworICAgIC8qIFRoZSBiYWNrdXAgZm9yIHByZXZpb3VzIGFjdGl2YXRpb24gKi8KKyAgICB1cGNtX2Vwc2Jfc3RhdHNfdCAgICAgIHByZV9lcHNiW01BWF9FUFNCX05VTV07CisjZW5kaWYKKworICAgIHVwY21fdGVzdF9tb2RlX3N0YXRzX3QgdGVzdF9tb2RlOworICAgIGthbF91aW50MzIgc3VzcGVuZF90b3RhbDsKKyAgICBrYWxfdWludDMyIHJlc3VtZV90b3RhbDsKKworICAgIGthbF91aW50MzIgYWN0dl90ZXN0bW9kZTsKKyAgICBrYWxfdWludDMyIGRlYWN0dl90ZXN0bW9kZTsKKyAgICBrYWxfdWludDMyIGNsb3NlX3Rlc3Rsb29wOworICAgIGthbF91aW50MzIgb3Blbl90ZXN0bG9vcDsKK311cGNtX3N0YXRzX3Q7CisKKy8qIAorICogVGhpcyBwb2ludGVyIHdpbGwgYmUgaW5pdGVkIGluIHVwY21faW5pdAorICovCitleHRlcm4gdXBjbV9zdGF0c190ICpwX3VwY21fc3RhdHNfZzsKKyNlbmRpZiAgIC8qIC0tLS0tICNpZm5kZWYgVVBDTV9TVEFUU19JTkMgIC0tLS0tICovCisKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91cGRzX3ZnbW1fc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdXBkc192Z21tX3N0cnVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNDBhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdXBkc192Z21tX3N0cnVjdC5oCkBAIC0wLDAgKzEsODQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxOQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgVVBEU19WR01NX1NUUlVDVF9ICisjZGVmaW5lIFVQRFNfVkdNTV9TVFJVQ1RfSAorCisjaW5jbHVkZSAibWNkX2wzX2luY19zdHJ1Y3QuaCIKKwordHlwZWRlZiBlbnVtCit7CisgICAgVVBEU19WR01NX0RBVEFfQ05GX1JFU1VMVF9PSywKKyAgICBVUERTX1ZHTU1fREFUQV9DTkZfUkVTVUxUX0ZBSUwsCisKK30gdXBkc192Z21tX2RhdGFfY25mX3Jlc3VsdF9lbnVtOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgLyogcmF3X2RhdGEgY2FycmllZCBpbiBwZWVyX2J1ZmYgKi8KK30gdXBkc192Z21tX2RhdGFfaW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzZXFfbnVtOworICAgIC8qIHJhd19kYXRhIGNhcnJpZWQgaW4gcGVlcl9idWZmICovCit9IHVwZHNfdmdtbV9kYXRhX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc2VxX251bTsKKyAgICB1cGRzX3ZnbW1fZGF0YV9jbmZfcmVzdWx0X2VudW0gY2F1c2U7Cit9IHVwZHNfdmdtbV9kYXRhX2NuZl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc2VxX251bTsKKyAgICBwbG1uX2lkX3N0cnVjdCBzZWxlY3RlZF9wbG1uOworfSB1cGRzX3ZnbW1fZ2V0X3VlX3N0YXRlX2luZGljYXRpb25faW5kX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzZXFfbnVtOworICAgIGthbF9ib29sIHVlX3N0YXRlX2luZGljYXRpb25fbmVlZGVkOyAvLyBJZGVudGlmeSB3aGV0aGVyIFVFX1NUQVRFX0lORElDQVRJT04gaXMgbmVlZGVkIHRvIGJlIHNlbnQKKyAgICAvKiByYXdfZGF0YSBjYXJyaWVkIGluIHBlZXJfYnVmZiAqLworfSB1cGRzX3ZnbW1fZ2V0X3VlX3N0YXRlX2luZGljYXRpb25fcnNwX3N0cnVjdDsKKyAKKworI2VuZGlmIC8qIFVQRFNfVkdNTV9TVFJVQ1RfSCAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91cmxjX2NvbW1vbl9lbnVtcy5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3VybGNfY29tbW9uX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjczZDYxNgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91cmxjX2NvbW1vbl9lbnVtcy5oCkBAIC0wLDAgKzEsMTE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTQKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgdXJsY19jb21tb25fZW51bXMuaAorICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICBVTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAkTG9nOiQKKyAqCisgKiAwNyAyOCAyMDE3IGhhbWlsdG9uLmxpYW5nCisgKiBbTU9MWTAwMjY2ODUzXSBbQmlhbmNvL1ppb25dIGdtbiBzdyBjaGVjay1pbgorICogCQorICogCUdNTiBTVyBmb3IgM0cgTDIgcGFydAorICoKKyAqIDA1IDE5IDIwMTcgbWluZy5sZWUKKyAqIFtNT0xZMDAyNTExNDJdIFtCSUFOQ09dW01UNjc2M11bUkRJVF1bUEhPTkVdW092ZXJuaWdodF1bSFFdW01UQkZdW0xhYl1bRXJpY3Nzb25dRmF0YWwgZXJyb3IodGFzayldIGVycl9jb2RlMToweDAwMDAxNjM3IGVycl9jb2RlMjoweDAwMDAwMDAzIGVycl9jb2RlMzoweENDQ0NDQ0NDCisgKiBSb2xsYmFjayBkZWxheSBmcmVlIFZSQgorICoKKyAqIDA5IDI2IDIwMTYgamVuLWRlLmxhaQorICogW01PTFkwMDE5NTMxN10gW1VSTENdW1RYXSAtIEdlbjkzIFVSTEMgVFggY29kZSBtb2RpZmljYXRpb24gZm9yIG5ldyBIVyBhbmQgTUNVIEFyY2hpCisgKgorICogMDkgMDIgMjAxNSBqZW4tZGUubGFpCisgKiBbTU9MWTAwMDk5MDUzXSBbVU1PTFldW1VSTENdIC0gY2hlY2sgaW4gZm9yIFVSTEMgRU0gIGZvciBBVCZUCisgKgorICogMDMgMTUgMjAxNSBqZW4tZGUubGFpCisgKiBbTU9MWTAwMDk5MDUzXSBbVU1PTFldW1VSTENdIC0gY2hlY2sgaW4gZm9yIFVSTEMgRU0tIFVSTEMgc3RhdHVzIGFuZCBVUkxDIGxheWVyIHRwdXQKKyAqCisKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1VSTENfQ09NTU9OX0VOVU1TX0gKKyNkZWZpbmUgX1VSTENfQ09NTU9OX0VOVU1TX0gKKworLyogVW5pdmVyc2FsIEJpbjogbWVyZ2UgVEREIGFuZCBGREQgdXJsY190aW1lcl9pZF9lbnVtICovCit0eXBlZGVmIGVudW0KK3sKKyAgICBVUkxDX1RJTUVSX0RJU0NBUkRfRVhQSVJZLCAgICAgICAgICAgICAgICAgIC8qIDAgKi8KKyAgICBVUkxDX1RJTUVSX1BPTExfRVhQSVJZLAorICAgIFVSTENfVElNRVJfUE9MTF9QUk9ISUJJVF9FWFBJUlksCisgICAgVVJMQ19USU1FUl9QT0xMX1BFUklPRElDX0VYUElSWSwKKyAgICBVUkxDX1RJTUVSX1JTVF9FWFBJUlksCisgICAgVVJMQ19USU1FUl9NUldfRVhQSVJZLAorICAgIFVSTENfVElNRVJfU1RBVFVTX1BST0hJQklUX0VYUElSWSwKKyAgICBVUkxDX1RJTUVSX1NUQVRVU19QRVJJT0RJQ19FWFBJUlksCisjaWYgZGVmaW5lZChGRERfUkxDX1RYX05PQUNLX0dVQVJEX1RJTUVSKSB8fCBkZWZpbmVkKFRERF9STENfVFhfTk9BQ0tfR1VBUkRfVElNRVIpCisgICAgVVJMQ19USU1FUl9UWF9OT0FDS19HVUFSRF9FWFBJUlksCisjZW5kaWYKKyAgICBURERfVVJMQ19USU1FUl9NQVhfTlVNLAorICAgIFVSTENfVElNRVJfUFJPQ0VTU19BQ0tfRVhQSVJZID0gVEREX1VSTENfVElNRVJfTUFYX05VTSwKKyAgICBVUkxDX1RJTUVSX0xPTkdfUE9MTF9QUk9ISUJJVF9FWFBJUlksCisjaWZkZWYgX19VUkxDX0VNX18KKyAgICBVUkxDX1RJTUVSX0VNX1VQREFURV9FWFBJUlksCisjZW5kaWYKKyAgICBVUkxDX1RJTUVSX1BST0NFU1NfRU5EX0dVQVJEX0VYUElSWSwKKyAgICBVUkxDX1RJTUVSX1JBTkRPTV9GQVRBTF9FWFBJUlksCisgICAgRkREX1VSTENfVElNRVJfTlVNX01TR1MgICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHRpbWVyIG1zZ3MgKi8KK30gdXJsY190aW1lcl9pZF9lbnVtOworI2lmZGVmIF9fVVJMQ19FTV9fCit0eXBlZGVmIGVudW0KK3sKKyAgICBGRERfVVJMQ19FTV9OT05FID0gMCwKKyAgICBGRERfVVJMQ19FTV9BTUFaT05fUkxDX1NUQVRVUyA9IDB4MSwKKyAgICBGRERfVVJMQ19FTV9ORU1PTElLRV9STENfVFBVVCA9IDB4MiwKKyAgICBGRERfVVJMQ19FTV9BVFRfUkxDX1NUQVRJU1RJQ1MgPSAweDQsCisgICAgRkREX1VSTENfRU1fQVRUX1JMQ19SRVNFVCA9IDB4OCwKK30gdXJsY19lbV90eXBlX2VudW07CisjZW5kaWYKKyNlbmRpZiAvKiBfVVJMQ19DT01NT05fRU5VTVNfSCAqLworCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdXJsY19leHBvcnRfYXBpLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdXJsY19leHBvcnRfYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY3OWIyMQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC91cmxjX2V4cG9ydF9hcGkuaApAQCAtMCwwICsxLDkwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgICBybGNfZXhwb3J0X2FwaS5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoKKyogIFRoaXMgcHJvZHVjdCBoYXMgYmVlbiBkZXZlbG9wZWQgdXNpbmcgYSBwcm90b2NvbCBzdGFjaworKiAgZGV2ZWxvcGVkIGJ5IFNhc2tlbiBDb21tdW5pY2F0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fVVJMQ19FWFBPUlRfQVBJX0hfXworI2RlZmluZSBfX1VSTENfRVhQT1JUX0FQSV9IX18KKworI2luY2x1ZGUgInVhc19jb21tb25fZW51bXMuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQVBJIEludGVyZmFjZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIEV4dGVuZGVkUmJJZCBGRERfdXJsY19yeF9sb29rdXBfcmJpZChrYWxfdWludDggUmJJZHgpOworZXh0ZXJuIGthbF91aW50OCBGRERfdXJsY19yeF9sb29rdXBfcmJpZHgoRXh0ZW5kZWRSYklkIFJiSWQsa2FsX3VpbnQ4IHNpbV9pZHgpOworI2VuZGlmCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdXJzcF91cGRzX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3Vyc3BfdXBkc19zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDNjZDU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3Vyc3BfdXBkc19zdHJ1Y3QuaApAQCAtMCwwICsxLDEyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE5CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBVUlNQX1VQRFNfU1RSVUNUX0gKKyNkZWZpbmUgVVJTUF9VUERTX1NUUlVDVF9ICisKKyNpbmNsdWRlICJtY2RfbDNfaW5jX3N0cnVjdC5oIgorCit0eXBlZGVmIGVudW0KK3sKKyAgICBVUERTX1RZUEVfUkVTRVJWRUQgPSAweDAwLAorICAgIFVQRFNfVFlQRV9VUlNQICAgICA9IDB4MDEsCisgICAgVVBEU19UWVBFX0FORFNQICAgID0gMHgwMgorfSB1ZV9wb2xpY3lfcGFydF90eXBlX2VudW07CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWVfcG9saWN5X3BhcnRfdHlwZV9lbnVtIHVlX3BvbGljeV9wYXJ0X3R5cGU7IC8vTm8gbmVlZCB0byByZWFkIGJ5IGRlc3RpbmF0aW9uIG1vZHVsZSBkdWUgdG8gb25seSBzZW5kIFVSU1AgdG8gTU9EX1VSU1AKKyAgICBrYWxfdWludDE2IHVlX3BvbGljeV9wYXJ0X2NvbnRlbnRfbGVuOyAvLyBMZW5ndGggb2YgY29udGVudCBpbiBVRSBwb2xpY3kgcGFydAorICAgIGthbF91aW50OCAqdWVfcG9saWN5X3BhcnRfY29udGVudDsgLy8gQ29udGVudHMgb2YgVUUgcG9saWN5IHBhcnQKK30gdWVfcG9saWN5X3BhcnRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MTYgdXBzYzsKKyAgICBrYWxfdWludDE2IGluc3RydWN0aW9uX29yZGVyOworICAgIGthbF91aW50OCB1ZV9wb2xpY3lfcGFydF9udW07IC8vIG51bSBvZiBVRSBwb2xpY3kgcGFydCBpbmNsdWRlZCBpbiBpbnN0cnVjdGlvbgorICAgIHVlX3BvbGljeV9wYXJ0X3N0cnVjdCAqdWVfcG9saWN5X3BhcnQ7IC8vIEFycmF5IG9mIFVFIHBvbGljeSBwYXJ0Cit9IHVlX3BvbGljeV9pbnN0cnVjdGlvbl9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgcGxtbl9pZF9zdHJ1Y3QgcGxtbl9pZDsKKyAgICBrYWxfdWludDggaW5zdHJ1Y3Rpb25fbnVtOyAvLyBudW0gb2YgaW5zdHJ1Y3Rpb24gaW5jbHVkZWQgaW4gMSBzdWJsaXN0CisgICAgdWVfcG9saWN5X2luc3RydWN0aW9uX3N0cnVjdCAqaW5zdHJ1Y3Rpb247IC8vIEFycmF5IG9mIGluc3RydWN0aW9uCit9IHVlX3BvbGljeV9zdWJsaXN0X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDE2IHVwc2M7CisgICAga2FsX3VpbnQxNiBmYWlsX2luc3RydWN0aW9uX29yZGVyOworICAgIGthbF91aW50OCBjYXVzZTsKKyAKK30gdWVfcG9saWN5X3Jlc3VsdF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgcGxtbl9pZF9zdHJ1Y3QgcGxtbl9pZDsKKyAgICBrYWxfdWludDggcmVzdWx0X251bTsgLy8gbnVtIG9mIHJlc3VsdCBpbmNsdWRlZCBpbiBzdWJyZXN1bHQKKyAgICB1ZV9wb2xpY3lfcmVzdWx0X3N0cnVjdCAqcmVzdWx0OyAvLyBBcnJheSBvZiByZXN1bHQKK30gdWVfcG9saWN5X3N1YnJlc3VsdF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgcGxtbl9pZF9zdHJ1Y3QgcGxtbl9pZDsKKyAgICBrYWxfdWludDggdXBzY19udW07CisgICAga2FsX3VpbnQxNiAqdXBzYzsKK30gdXBzaV9zdWJsaXN0X3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzZXFfbnVtOworICAgIGthbF91aW50OCB1ZV9wb2xpY3lfc3VibGlzdF9udW07IC8vIG51bSBvZiBzdWJsaXN0IGluY2x1ZGVkCisgICAgdWVfcG9saWN5X3N1Ymxpc3Rfc3RydWN0ICp1ZV9wb2xpY3lfc3VibGlzdDsgLy8gQXJyYXkgb2Ygc3VibGlzdAorfSB1cnNwX3VwZHNfdWVfcG9saWN5X2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc2VxX251bTsKKyAgICBrYWxfYm9vbCByZXN1bHRfc3VjY2VzczsgLy8gSWYgYWxsIFVFIHBvbGljeSBleGVjdXRlIHN1Y2Nlc3NmdWxseSwgdGhlbiByZXRydW4gS0FMX1RSVUUKKyAgICBrYWxfdWludDggdWVfcG9saWN5X3N1YnJlc3VsdF9udW07IC8vIG51bSBvZiBzdWJyZXN1bHQgaW5jbHVkZWQKKyAgICB1ZV9wb2xpY3lfc3VicmVzdWx0X3N0cnVjdCAqdWVfcG9saWN5X3N1YnJlc3VsdDsgLy8gQXJyYXkgb2Ygc3VicmVzdWx0Cit9IHVyc3BfdXBkc191ZV9wb2xpY3lfcnNwX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzZXFfbnVtOworfSB1cnNwX3VwZHNfZ2V0X3VlX3BvbGljeV9pbmZvX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDggc2VxX251bTsKKyAgICBrYWxfdWludDggdXBzaV9zdWJsaXN0X251bTsgLy8gSWYgdGhpcyB2YWx1ZSBpcyAwLCBubyBuZWVkIHRvIGNyZWF0ZSBVRV9TVEFURV9JTkRJQ0FUSU9OCisgICAgdXBzaV9zdWJsaXN0X3N0cnVjdCAqdXBzaV9zdWJsaXN0OworLyoKK2thbF91aW50OCBvc19pZF9udW07Citvc19pZF9zdHJ1Y3QgKm9zX2lkCisqLworfSB1cnNwX3VwZHNfZ2V0X3VlX3BvbGljeV9pbmZvX3JzcF9zdHJ1Y3Q7CisKKyNlbmRpZiAvKiBVUlNQX1VQRFNfU1RSVUNUX0ggKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdXJzcF92Z21tX3N0cnVjdC5oIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3Vyc3BfdmdtbV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2EzYTFjCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3Vyc3BfdmdtbV9zdHJ1Y3QuaApAQCAtMCwwICsxLDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTkKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFVSU1BfVkdNTV9TVFJVQ1RfSAorI2RlZmluZSBVUlNQX1ZHTU1fU1RSVUNUX0gKKworCisjZGVmaW5lIFZHTU1fU0lOR0xFX05TU0FJX0xFTkdUSCAgICAgICAgICAgIDQKKyNkZWZpbmUgVkdNTV9NQVhfU0lOR0xFX05TU0FJX0lOX0xJU1QgICAgICAgOAorCit0eXBlZGVmIGVudW0KK3sKKyAgICBWR01NX1NJTkdMRV9OU1NBSV9UWVBFX1NTVCA9IDEsICAgICAgLy8gU0lOR0xFX05TU0FJIGNvbnRhaW5zIFNsaWNlL1NlcnZpY2UgVHlwZSBvbmx5CisgICAgVkdNTV9TSU5HTEVfTlNTQUlfVFlQRV9TU1RfU0QsICAgICAgIC8vIFNJTkdMRV9OU1NBSSBjb250YWlucyBhbHNvIFNsaWNlIERpZmZlcmVudGlhdG9yCisgICAgVkdNTV9TSU5HTEVfTlNTQUlfVFlQRV9TU1RfU1NUX01BUFBFRCwvLyBTSU5HTEVfTlNTQUkgU1NUIGhhcyBtYXBwaW5nIHRvIEhQTE1OCisgICAgVkdNTV9TSU5HTEVfTlNTQUlfVFlQRV9TU1RfU0RfU1NUX01BUFBFRCwvLyBTSU5HTEVfTlNTQUkgU1NUK1NEIFNTVCBoYXMgbWFwcGluZyB0byBIUExNTgorICAgIFZHTU1fU0lOR0xFX05TU0FJX1RZUEVfU1NUX1NEX1NTVF9NQVBQRURfU0RfTUFQUEVELC8vIFNJTkdMRV9OU1NBSSBTU1QgYW5kIFNEIGhhdmUgbWFwcGluZyB0byBIUExNTgorICAgIFZHTU1fU0lOR0xFX05TU0FJX1RZUEVfRU1QVFkgPSAweEZGCit9IHZnbW1fc2luZ2xlX25zc2FpX3R5cGVfZW51bTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB2Z21tX3NpbmdsZV9uc3NhaV90eXBlX2VudW0gc2luZ2xlX25zc2FpX3R5cGU7CisgICAga2FsX3VpbnQ4ICAgICAgICAgICAgICAgICAgIHNpbmdsZV9uc3NhaVtWR01NX1NJTkdMRV9OU1NBSV9MRU5HVEhdOworICAgIGthbF91aW50OCAgICAgICAgICAgICAgICAgICBzaW5nbGVfbnNzYWlfbWFwcGVkX2hwbG1uW1ZHTU1fU0lOR0xFX05TU0FJX0xFTkdUSF07CisgICAgcGxtbl9pZF9zdHJ1Y3QgICAgICAgICAgICAgIGFzc29jaWF0ZWRfcGxtbjsKK312Z21tX3NpbmdsZV9uc3NhaV9zdHJ1Y3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCBzaW5nbGVfbnNzYWlfbnVtYmVyOworICAgIHZnbW1fc2luZ2xlX25zc2FpX3N0cnVjdCBuc3NhaV9saXN0W1ZHTU1fTUFYX1NJTkdMRV9OU1NBSV9JTl9MSVNUXTsKK30gdXJzcF92Z21tX25zc2FpX2NvbmZpZ3VyYXRpb25faW5kX3N0cnVjdDsKKworI2VuZGlmIC8qIFVSU1BfVkdNTV9TVFJVQ1RfSCAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC92ZG1fZXh0ZXJuYWxfbGliLmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdmRtX2V4dGVybmFsX2xpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNzg3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdmRtX2V4dGVybmFsX2xpYi5oCkBAIC0wLDAgKzEsMzc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTQKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4gCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLS0tLQorICogICB2ZG1fZXh0ZXJuYWxfbGliLmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgZGVmaW5lcyBmdW5jdGlvbnMgZm9yIGV4dGVybmFsIG1vZHVsZSB1c2FnZS4KKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICRMb2ckCisgKgorICogMDkgMTggMjAyMCBjaGVuLXdlaS5sYW4KKyAqIFtNT0xZMDA1NjgwODddIFtHZW45N10gU3VwcG9ydCA1ZyB0OTExCisgKiA1Ry05MTEKKyAqCisgKiAwOSAxMSAyMDIwIGNoZW4td2VpLmxhbgorICogW01PTFkwMDU2ODA4N10gW0dlbjk3XSBTdXBwb3J0IDVnIHQ5MTEKKyAqIAkKKyAqIAlbTVBEXXQ5MTEKKyAqCisgKiAxMiAwOSAyMDE5IGNoZW4td2VpLmxhbgorICogW01PTFkwMDQ2MzMzN10goWk1Ry1MSKFqIEh2b2x0ZSBmZWF0dXJlID/Vda5JP7vdqEQgKEZvbGxvd2luZyBBTFBTMDQ3NjY5MDApCisgKiBETUYKKyAqCisgKiAxMiAwMiAyMDE5IGNoZW4td2VpLmxhbgorICogW01PTFkwMDM0NjY0N10gW01UNjI5N11bVkRNL0w0XSBjaGFuZ2VzIGZvciA5NworICogW3BhdGNoIGJhY2tdODUxOTkwOCw4NTE5ODE4LDg5MTUyOTYsOTA4Njk4OCw5MDg2MTQ4LDkwODU4MTUsOTMxODIwNiw5MzU3MTAxCisgKgorICogMDcgMTUgMjAxOSBjaGVuLXdlaS5sYW4KKyAqIFtNT0xZMDAzNDY2NDddIFtNVDYyOTddW1ZETS9MNF0gY2hhbmdlcyBmb3IgOTcKKyAqIFtTRE0sVkRNIHBhdGNoIGJhY2tdODIzNzQ3NCw3ODQ0OTE4LDc3NTg1NzEKKyAqCisgKiAxMSAwMSAyMDE4IGt1YW4td2VpLmNoZW4KKyAqIFtNT0xZMDAzNDY2NDddIFtNVDYyOTddW1ZETS9MNF0gY2hhbmdlcyBmb3IgOTcKKyAqIFtWTU9MWV1bVkRNXVtNUERdCisgKgorICogMDggMTcgMjAxOCBrdWFuLXdlaS5jaGVuCisgKiBbTU9MWTAwMzQ2NjQ3XSBbTVQ2Mjk3XVtWRE0vTDRdIGNoYW5nZXMgZm9yIDk3CisgKiBbVk1PTFldIHZkbSByZWxhdGVkIG90aGVycworICoKKyAqIDAyIDI3IDIwMTggeXVsb25nLmNoYW5nCisgKiBbTU9MWTAwMzA5NjAyXSBbVU1PTFlFXVtDZXJ2aW5vXVtNVDY3NjVdW08xXVtNUDEuNV1bVEREXVtDTUNDIEZUXVtCZWlqaW5nXVtWb0xURSBGVF1bNC40XVVFIEEgZHJvcCB0byBHIHdoZW4gY2FsbCBVRSBCX05vbmd6aGFucWlhb18xNTowMzo0MAorICogQWRkIHB1YmxpYyBmdW5jdGlvbiBmb3IgcXVlcnkgaWYgYW55IGNhbGwgaXMgb25nb2luZworICoKKyAqIDEyIDExIDIwMTcgcmVuaHVhbmcubGl1CisgKiBbTU9MWTAwMjk1MTUyXSBbUm9zZV1bc3lsdmlhXVtCU1ArXVtPMV1UaGUgRUNDIGNhbGwgd2lsbCBjYW4ndCBiZSBkaWFsIG91dCBzdWNjZXNzLigyLzUpCisgKiBwcm92aWRlIGV4dGVybmFsIEFQSSBmb3IgQVRQIHRvIHF1ZXJ5IGlmIGVtZXJnZW5jeSBjYWxsIGlzIG9uZ29pbmcKKyAqCisgKiAxMCAxMiAyMDE3IGplcnJ5LmNoZW5nCisgKiBbTU9MWTAwMjgwMzY0XSBbUFZUIG11c3QgcmVzb2x2ZV2habNxP6FqP6W0P6vmPz8xMTKzcT+kpD8/q0g/CisgKiAuW1IzXSAucHVibGljIGFwaSBmb3IgaXNfZTkxMV9mbG93X2FwcGxpZWQKKyAqCisgKiAwNyAyNiAyMDE3IGplcnJ5LmNoZW5nCisgKiBbTU9MWTAwMjY2NjQ2XSBbVkRNXVtMUjExLk1QM10gtKOrZT+lzVNSVkNDqro/snqhQXZvbHRlP621IKlNIHZpbHRlPz8grE+nX6VppUikwD+wdLhtoUgKKyAqIC5wcm92aWRlIGV4dGVybmFsIEFQSSBmb3IgRVJSQyB0byBrbm93IFZvTFRFL1ZpTFRFIC0gZml4IGlucHV0IHBhcmFtZXRlciBmb3IgTCtMCisgKgorICogMDcgMjUgMjAxNyBqZXJyeS5jaGVuZworICogW01PTFkwMDI2NjY0Nl0gW1ZETV1bTFIxMS5NUDNdILSjq2U/pc1TUlZDQ6q6P7J6oUF2b2x0ZT+ttSCpTSB2aWx0ZT8/IKxPp1+laaVIpMA/sHS4baFICisgKiAucHJvdmlkZSBleHRlcm5hbCBBUEkgZm9yIEVSUkMgdG8ga25vdyBWb0xURS9WaUxURQorICoKKyAqIDA0IDE4IDIwMTcgamVycnkuY2hlbmcKKyAqIFtNT0xZMDAyNDIxNDZdIFs5M11bVkRNXSBidWcgZml4CisgKiAuYmxvY2sgQVQrRU1DUyB0byBMNCBpZiBlbWNfc2NhbiBpcyBub3QgZW5hYmxlCisgKgorICogMTIgMTkgMjAxNiBqZXJyeS5jaGVuZworICogW01PTFkwMDIxMDA2MV0gWzkzXVtWRE1dIFVNT0xZIHN5bmMgdG8gVU1PTFlBCisgKiAuc3luYyBbTU9MWTAwMjEzNTE4XSBbVENMX1RGXVtWelddW0U5MTFdWzIuMTddIDkxMSBjYWxsIG5vdCBjb25uZWN0ZWQKKyAqIAkKKyAqIAlub3RlOiBWRE0gcHJvdmlkZSB2ZG1fZXh0ZXJuYWxfd2ZjX3N3aXRjaCBmb3IgbDRjCisgKgorICogMTIgMTQgMjAxNiBqZXJyeS5jaGVuZworICogW01PTFkwMDIxMDA2MV0gWzkzXVtWRE1dIFVNT0xZIHN5bmMgdG8gVU1PTFlBCisgKiAuc3luYyBbTU9MWTAwMjA0MTUwXSBUSyB2encgaFZvTFRFL0U5MTEgaW1wbGVtZW50YXRpb24KKyAqIAkKKyAqIAlUSyBoVm9MVEUuCisgKgorICogMTEgMTEgMjAxNiBqZXJyeS5jaGVuZworICogW01PTFkwMDIxMDA2MV0gWzkzXVtWRE1dIFVNT0xZIHN5bmMgdG8gVU1PTFlBCisgKiBbTU9MWTAwMTkxOTQ0XSBbQ0w6IDMwMDA1NDVdbXVsdGlwbGUgSU1TIDogVkRNIHBhcnQKKyAqIAkKKyAqIAlNSU1TIDogYWRkIG5ldyBhcmcgOiBwc19pZCAgaW4gdmRtIGV4dGVybmFsIGZ1bmN0aW9ucy4KKyAqCisgKiAxMCAyOCAyMDE2IGplcnJ5LmNoZW5nCisgKiBbTU9MWTAwMjEwMDYxXSBbOTNdW1ZETV0gVU1PTFkgc3luYyB0byBVTU9MWUEKKyAqIHJvbGxiYWNrLgorICoKKyAqIDA3IDExIDIwMTYgamVycnkuY2hlbmcKKyAqIFtNT0xZMDAxODU5MDddIFtNVDYyOTNdIFtFTkFTXSBVTU9MWSBtZXJnZSB0byBVTU9MWUEKKyAqIFtWRE1dIFtzeW5jIFVNT0xZIHRvIFVNT0xZQV0gTU9MWTAwMTgzNjExLgorICoKKyAqIDAzIDAxIDIwMTYgaWFuLXl3LmNoZW4KKyAqIFtNT0xZMDAxNDc0NTRdIFZaVyAzR1BQMiBTTVMgb3ZlciBJTVMKKyAqICBpbnRlcmZhY2VzIHBhcnQgdG8gYnVpbGQgcGFzcworICoKKyAqIDAyIDI0IDIwMTYgY2hpbnRlLmNoZW4KKyAqIFtNT0xZMDAxNTQ4MDZdIFtNVDY3NTVdW1Z6V11bY2hpcHNldF1bUkRJVF1bSW5Ib3VzZV1bSFFdW0RFVmVIUlBEXSBNTyAzR1BQIFNNUyBub3Qgc2VudAorICogU0RNIGJ1aWxkIGZhaWwsIGFkZCB2ZG1fZXh0ZXJuYWxfaXNfYzJrX2NzX3ZvaWNlX2NhbGxfb25nb2luZygpdG8gYnVpbGQgcGFzcworICoKKyAqIDA5IDE0IDIwMTUgbGV4ZWwueXUKKyAqIFtNT0xZMDAxNDE1NzNdIFtVTU9MWV1bTFIxMV1bVE1PXVtJTVNdIGJDU0ZCCisgKiAJLgorICoKKyAqIDAzIDEyIDIwMTUgbGV4ZWwueXUKKyAqIFtNT0xZMDAwODU3MDNdIFtWRE1dW01UNjI5MV0gU3luYyBNT0xZIHRvIFVNT0xZCisgKiAJW01PTFkwMDA4NTg1Nl0gW0NNQ0MgVm9MVEVdIFByb3ZpZGUgYW4gaW50ZXJmYWNlIGZvciBFTU0gdG8gcXVlcnkgSU1TIGNhbGwgc3RhdHVzCisgKgorICogMTIgMDUgMjAxNCBsZXhlbC55dQorICogW01PTFkwMDA4NTcwM10gW1ZETV1bTVQ2MjkxXSBTeW5jIE1PTFkgdG8gVU1PTFkKKyAqIAlbTU9MWTAwMDg1ODU2XSBbQ01DQyBWb0xURV0gUHJvdmlkZSBhbiBpbnRlcmZhY2UgZm9yIEVNTSB0byBxdWVyeSBJTVMgY2FsbCBzdGF0dXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfVkRNX0VYVEVSTkFMX0xJQl9IXworI2RlZmluZSBfVkRNX0VYVEVSTkFMX0xJQl9IXworCisjaW5jbHVkZSAia2FsX2dlbmVyYWxfdHlwZXMuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKyNpbmNsdWRlICJpbXNfbnZyYW1fZGVmLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGJyaWVmIEdldCBjdXJyZW50IFJBVAorICogICAgICAgIAorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiByYXRfZW51bQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3JhdF9lbnVtIHZkbV9leHRlcm5hbF9nZXRfY3VycmVudF9yYXQocHJvdG9jb2xfaWRfZW51bSBwc19pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBicmllZiBDaGVjayBpZiBhbnkgQ1Mgdm9pY2UgY2FsbCBpcyBvbmdvaW5nCisgKiAgICAgICAgCisgKiBAcGFyYW1baW5dIHZvaWQKKyAqCisgKiBAcmV0dXJuIGthbF9ib29sOiBUUlVFIG9yIEZBTFNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgdmRtX2V4dGVybmFsX2lzX2NzX3ZvaWNlX2NhbGxfb25nb2luZyhwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGJyaWVmIENoZWNrIGlmIGFueSBJTVMgdm9pY2UgY2FsbCBpcyBvbmdvaW5nCisgKiAgICAgICAgCisgKiBAcGFyYW1baW5dIHZvaWQKKyAqCisgKiBAcmV0dXJuIGthbF9ib29sOiBUUlVFIG9yIEZBTFNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgdmRtX2V4dGVybmFsX2lzX2ltc192b2ljZV9jYWxsX29uZ29pbmcocHJvdG9jb2xfaWRfZW51bSBwc19pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBicmllZiBDaGVjayBpZiBhbnkgVm9XSUZJIGNhbGwgaXMgb25nb2luZworICogICAgICAgIAorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiBrYWxfYm9vbDogVFJVRSBvciBGQUxTRQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIHZkbV9leHRlcm5hbF9pc19pbXNfb3Zlcl93aWZpX2NhbGxfb25nb2luZyhwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGJyaWVmIENoZWNrIGlmIGFueSBWb0xURSBjYWxsIGV4aXN0cworICogICAgICAgIAorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiBrYWxfYm9vbDogVFJVRSBvciBGQUxTRQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIHZkbV9leHRlcm5hbF9pc192b2x0ZV9jYWxsX2V4aXN0KHByb3RvY29sX2lkX2VudW0gcHNfaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAYnJpZWYgQ2hlY2sgaWYgYW55IFZpTFRFIGNhbGwgZXhpc3RzCisgKiAgICAgICAgCisgKiBAcGFyYW1baW5dIHZvaWQKKyAqCisgKiBAcmV0dXJuIGthbF9ib29sOiBUUlVFIG9yIEZBTFNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgdmRtX2V4dGVybmFsX2lzX3ZpbHRlX2NhbGxfZXhpc3QocHJvdG9jb2xfaWRfZW51bSBwc19pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBicmllZiBDaGVjayBpZiBJTVMgY2FsbCBmYWlsZWQgYmVmb3JlIGRvbWFpbiBzZWxlY3Rpb24gZW5kCisgKiAgICAgICAgCisgKiBAcGFyYW1baW5dIHZvaWQKKyAqCisgKiBAcmV0dXJuIGthbF9ib29sOiBUUlVFIG9yIEZBTFNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgdmRtX2V4dGVybmFsX2NoZWNrX2hpc3RvcnlfaW1zX2ZhaWxlZChwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGJyaWVmIENoZWNrIGlmIGFueSBDMksgQ1Mgdm9pY2UgY2FsbCBpcyBvbmdvaW5nCisgKiAgICAgICAgCisgKiBAcGFyYW1baW5dIHZvaWQKKyAqCisgKiBAcmV0dXJuIGthbF9ib29sOiBUUlVFIG9yIEZBTFNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgdmRtX2V4dGVybmFsX2lzX2Mya19jc192b2ljZV9jYWxsX29uZ29pbmcocHJvdG9jb2xfaWRfZW51bSBwc19pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBicmllZiBDaGVjayBpZiBDMksgQ1MgcmVnaXN0ZXJlZAorICogICAgICAgIAorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiBrYWxfYm9vbDogVFJVRSBvciBGQUxTRQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIHZkbV9leHRlcm5hbF9pc19jMmtfY3NfcmVnaXN0ZXJlZChwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGJyaWVmIENoZWNrIGlmIEMySyBQUyByZWdpc3RlcmVkCisgKiAgICAgICAgCisgKiBAcGFyYW1baW5dIHZvaWQKKyAqCisgKiBAcmV0dXJuIGthbF9ib29sOiBUUlVFIG9yIEZBTFNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgdmRtX2V4dGVybmFsX2lzX2Mya19wc19yZWdpc3RlcmVkKHByb3RvY29sX2lkX2VudW0gcHNfaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAYnJpZWYgQ2hlY2sgaWYgbmVlZCB0byBkZWxheSBTUkxURSBtb2RlIHN3aXRjaCAob25seSB1c2VkIGZvciBPUDEyIGhWb0xURSBmZWF0dXJlKQorICogICAgICAgIAorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiBrYWxfYm9vbDogVFJVRSBvciBGQUxTRQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIHZkbV9leHRlcm5hbF9pc19kZWxheV9TUkxURV9zd2l0Y2hfbmVlZGVkKHByb3RvY29sX2lkX2VudW0gcHNfaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAYnJpZWYgbGV0IFZETSB0byB3cml0ZSBudnJhbSBwYXJhbWV0ZXJzCisgKiAgICAgICAgICAgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgZm9yIHRlc3QgcHVycG9zZQorICogICAgICAgIAorICogQHBhcmFtW2luXSAKKyAqCisgKiBAcmV0dXJuIAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgdmRtX2V4dGVybmFsX3dyaXRlX252cmFtKG52cmFtX2xpZF9pbXNfZW51bSB2ZG1fbGlkLCBrYWxfdWludDgqIHBkdV9wdHIsIGthbF91aW50MzIgdmRtX252cmFtX3NpemUsIHByb3RvY29sX2lkX2VudW0gcHNfaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAYnJpZWYgbGV0IFZETSB0byByZWFkIG52cmFtIHBhcmFtZXRlcnMKKyAqICAgICAgICAgICB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBmb3IgdGVzdCBwdXJwb3NlCisgKiAgICAgICAgCisgKiBAcGFyYW1baW5dIAorICoKKyAqIEByZXR1cm4gCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB2ZG1fZXh0ZXJuYWxfcmVhZF9udnJhbShudnJhbV9saWRfaW1zX2VudW0gdmRtX2xpZCwga2FsX3VpbnQ4KiBwZHVfcHRyLCBrYWxfdWludDMyIHZkbV9udnJhbV9zaXplLCBwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQFRvIGNoZWNrIHdoZXRoZXIgd2NmIGlzIHR1cm5lZC1vbiBvciBvZmYuIFRoaXMgaW5mbyBjb21lcyBmcm9tIEFUK0VJTVNXRkMKKyAqICAgICAgICAKKyAqIEBwYXJhbVtpbl0gCisgKgorICogQHJldHVybiAKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfYm9vbCB2ZG1fZXh0ZXJuYWxfd2ZjX3N3aXRjaChwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGJyaWVmIENoZWNrIGlmIGFueSBjYWxsIGlzIG9uZ29pbmcKKyAqICAgICAgICAKKyAqIEBwYXJhbVtpbl0gcHNfaWQKKyAqCisgKiBAcmV0dXJuIGthbF9ib29sOiBUUlVFIG9yIEZBTFNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgdmRtX2V4dGVybmFsX2lzX2NhbGxfb25nb2luZyhwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQCBBc3NpZ24gdGhlIGZyZWUgY2FsbCBpZCB0byBDU01DQworICogICAgICAgIAorICogQHBhcmFtW2luXSBjYWxsX2lkX3B0cgorICoKKyAqIEByZXR1cm4ga2FsX2Jvb2wKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfYm9vbCB2ZG1fZXh0ZXJuYWxfYWxsb2NfY2FsbF9jb250ZXh0KGthbF9ib29sIGlzX21vX2Rpciwga2FsX3VpbnQ4KiBjYWxsX2lkX3B0ciwga2FsX3VpbnQ4IHBzX2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQCByZWxlYXNlIHRoZSBmcmVlIGNhbGwgaWQgdG8gQ1NNQ0MKKyAqICAgICAgICAKKyAqIEBwYXJhbVtpbl0gY2FsbF9pZF9wdHIKKyAqCisgKiBAcmV0dXJuIAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgdmRtX2V4dGVybmFsX2RlYWxsb2NfY2FsbF9jb250ZXh0KGthbF91aW50OCBjYWxsX2lkLCBrYWxfdWludDggcHNfaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAYnJpZWYgQ2hlY2sgaWYgYWRzIG52IGFsbG93IGVtZXJnIHZvbHRlCisgKiAgICAgICAgCisgKiBAcGFyYW1baW5dIHBzX2lkCisgKgorICogQHJldHVybiBrYWxfYm9vbDogVFJVRSBvciBGQUxTRQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2thbF9ib29sIHZkbV9leHRlcm5hbF9pc19lbWVyZ192b2x0ZV9zdXBwb3J0X2J5X2Fkc19udihwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGJyaWVmIENoZWNrIGlmIGFkcyBudiBhbGxvdyBlbWVyZyB2b3dpZmkKKyAqICAgICAgICAKKyAqIEBwYXJhbVtpbl0gcHNfaWQKKyAqCisgKiBAcmV0dXJuIGthbF9ib29sOiBUUlVFIG9yIEZBTFNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwora2FsX2Jvb2wgdmRtX2V4dGVybmFsX2lzX2VtZXJnX3Zvd2lmaV9zdXBwb3J0X2J5X2Fkc19udihwcm90b2NvbF9pZF9lbnVtIHBzX2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGJyaWVmIHVwZGF0ZSBzaWxlbnRfcmVkaWFsX2VuYWJsZSBzZXR0aW5nCisgKiAgICAgICAgCisgKiBAcGFyYW1baW5dIG5ldyBzaWxlbnRfcmVkaWFsX2VuYWJsZSB2YWx1ZQorICoKKyAqIEByZXR1cm4gdm9pZAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgdmRtX2V4dGVybmFsX3VwZGF0ZV9zaWxlbnRfcmVkaWFsX2VuYWJsZV92YWx1ZShwcm90b2NvbF9pZF9lbnVtIHBzX2lkLCBrYWxfYm9vbCBzaWxlbnRfcmVkaWFsX2VuYWJsZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEBicmllZiBjaGVjayBjdXJyZW50IGNhbXBpbmcgaW5mbworICogICAgICAgIAorICogQHBhcmFtW2luXSBwcm90b2NvbF9pZF9lbnVtIHBzX2lkLHJhdF9lbnVtIHJhdCwga2FsX2Jvb2wgaXNfcmVnaXN0ZXJlZAorICoKKyAqIEByZXR1cm4ga2FsX2Jvb2w6IFRSVUUgb3IgRkFMU0UKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitrYWxfYm9vbCB2ZG1fZXh0ZXJuYWxfY2hlY2tfY2FtcGluZ19pbmZvKHByb3RvY29sX2lkX2VudW0gcHNfaWQscmF0X2VudW0gcmF0LCBrYWxfYm9vbCBpc19yZWdpc3RlcmVkKTsKKworI2VuZGlmIC8vIF9WRE1fRVhURVJOQUxfTElCX0hfCmRpZmYgLS1naXQgYS9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdmRtX2dtc3Nfc3RydWN0LmggYi9tY3UvcHJvdG9jb2wvaW50ZXJmYWNlL2dlbmVyYWwvdmRtX2dtc3Nfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNkYjJiNwotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC92ZG1fZ21zc19zdHJ1Y3QuaApAQCAtMCwwICsxLDEyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE4CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgdmRtX2dtc3Nfc3RydWN0LmgKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgZGVjbGFyZXMgdGhlIHN0cnVjdHVyZXMgZm9yIFZETS9HTVNTIGludGVyZmFjZQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0tLS0tCisgKiAtLS0tLS0tCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1ZETV9HTVNTX1NUUlVDVF9IXworI2RlZmluZSBfVkRNX0dNU1NfU1RSVUNUX0hfCisKKyNpbmNsdWRlICJrYWxfcHVibGljX2RlZnMuaCIKKyNpbmNsdWRlICJrYWxfZ2VuZXJhbF90eXBlcy5oIgorI2luY2x1ZGUgImwzX2luY19lbnVtc19wdWJsaWMuaCIKKyNpbmNsdWRlICJsM19pbmNfZW51bXMuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgIHRyeF9pZDsgICAgIAorICAgIHJhdF9lbnVtICAgIGF2YWlsYWJsZV9yYXQ7ICAgICAgICAgICAgLyogcmF0IG5lZWQgdG8gYmUgc2VhcmNoZWQgKi8KKyAgICByYXRfZW51bSAgICBwcmVmZXJfcmF0OyAgICAgICAgICAgICAgIC8qIHN1YnNldCBvZiBhdmFpbGFibGUgcmF0LCBzZWFyY2ggdGhvc2UgUkFUIGZpcnN0ICovCisgICAga2FsX2Jvb2wgICAgcmVzZXRfc3JjaF9saXN0OyAgICAgICAgICAvKiBpZiB0cnVlLCBnbXNzIG5lZWQgdG8gcmVzZXQgc2VhcmNoIGxpc3QgYW5kIGJhcnJlZCBsaXN0ICovICAKKyAgICBrYWxfdWludDE2ICAgY2FtcGluZ19pbmZvX2lkOyAgICAgICAgICAvKiBpbmRpY2F0ZSB0aGUgY2FtcGluZyBpbmZvIHVzZWQgZnJvbSBWRE0sIG9ubHkgZm9yIDNHUFAgKi8gCit9IHZkbV9nbXNzX2VtY19zZXJ2aWNlX3NjYW5fcmVxX3N0cnVjdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50OCAgIHRyeF9pZDsgICAgICAgIAorICAgIHJhdF9lbnVtICAgIGF2YWlsYWJsZV9yYXQ7CisgICAgdmRtX2dtc3NfZmFpbHVyZV9jYXVzZV9lbnVtIGZhaWx1cmVfY2F1c2U7Cit9IHZkbV9nbXNzX2VtY19zZXJ2aWNlX2luZF9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBMT0NBTF9QQVJBX0hEUiAgICAKKyAgICByYXRfZW51bSAgICAgICAgcmF0OworICAgIHBsbW5faWRfc3RydWN0ICBwbG1uX2lkOyAgICAvKiB1c2VkIGZvciByYXQgaXMgM0dQUCBvbmx5ICovCisgICAga2FsX3VpbnQxNiAgICAgIGJhbmQ7CisgICAga2FsX3VpbnQxNiAgICAgIGNoYW5uZWw7ICAgIC8qIHVzZWQgZm9yIHJhdCBpcyAzR1BQMiBvbmx5ICovCit9IHZkbV9nbXNzX2VtY19iYXJfbmV0d29ya19yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgcmF0X2VudW0gICAgICAgICAgICByYXQ7CisgICAga2FsX3VpbnQxNiAgICAgICAgICBiYW5kOworICAgIHBsbW5faWRfc3RydWN0ICAgICAgcGxtbl9pZDsgIC8qIHVzZWQgZm9yIHJhdCBpcyAzR1BQIG9ubHkgKi8KKyAgICBrYWxfdWludDE2ICAgICAgICAgIGNoYW5uZWw7ICAvKiB1c2VkIGZvciByYXQgaXMgM0dQUDIgb25seSAqLworICAgIGthbF9ib29sICAgICAgICAgICAgaXNfcmVnaXN0ZXJlZDsgLyppbmRpY2F0ZSBpZiB0aGUgcmVjb3JkIGlzIHJlZ2lzdGVyZWQgb3Igbm90Ki8KKyAgICBrYWxfYm9vbCAgICAgICAgICAgIGlzX2ltc19lbWVyZ2VuY3lfc3VwcG9ydDsgLyppbmRpY2F0ZSBpZiB0aGUgY2VsbCBzdXBwb3J0IGltcyBlbWVyZ2VuY3kgY2FsbCwgb25seSBhcHBsaWNhYmxlIHdoZW4gTFRFIGNlbGwqLworICAgIGthbF91aW50MTYgICAgICAgICAgIGNhbXBpbmdfaW5mb19pZDsgLyppbmRpY2F0ZSB0aGUgY2FtcGluZyBpbmZvIGlkLCBvbmx5IHVzZWQgZm9yIDNHUFAgKi8gICAgCit9IHZkbV9nbXNzX2NhbXBpbmdfaW5mb19pbmRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAga2FsX3VpbnQzMiAgICAgIHRyeF9pZDsgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBJRCAqLworICAgIHJhdF9lbnVtICAgICAgICBhdmFpbGFibGVfcmF0OyAgICAgICAgLyogcmF0IG5lZWQgdG8gYmUgc2VhcmNoZWQgKi8KKyAgICByYXRfZW51bSAgICAgICAgcHJlZmVyX3JhdDsgICAgICAgICAgIC8qIHN1YnNldCBvZiBhdmFpbGFibGUgcmF0LCBzZWFyY2ggdGhvc2UgUkFUIGZpcnN0LiBSQVROX05PTkUgaWYgbm8gcHJlZmVyZW5jZSAqLworICAgIG1vZHVsZV90eXBlICAgICBzb3VyY2U7ICAgICAgICAgICAgICAgLyogVGhlIHNvdXJjZSBtb2R1bGUgb2YgdGhpcyBzZXJ2aWNlIHNjYW4gKi8KK30gdmRtX2dtc3Nfc2VydmljZV9zY2FuX3JlcV9zdHJ1Y3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgTE9DQUxfUEFSQV9IRFIKKyAgICBrYWxfdWludDMyICAgICAgICAgICAgICAgIHRyeF9pZDsgICAgIC8qIFRyYW5zYWN0aW9uIElEICovCisgICAgcHJvY19zdGF0dXNfZW51bSAgICAgICAgICBzdGF0dXM7ICAgICAvKiBQUk9DX1NVQ0NFU1MsIFBST0NfRkFJTEVEIG9yIFBST0NfUkVKRUNURUQgKi8KKyAgICBtb2R1bGVfdHlwZSAgICAgICAgICAgICAgIHNvdXJjZTsgICAgIC8qIFRoZSBzb3VyY2UgbW9kdWxlIG9mIHRoaXMgc2VydmljZSBzY2FuICovCit9IHZkbV9nbXNzX3NlcnZpY2Vfc2Nhbl9jbmZfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgdmRtX2NhbGxfZG9tYWluX2VudW0gZWNibV9kb21haW47Cit9IHZkbV9nbXNzX2VjYm1fbW9kZV9zdGFydF9yZXFfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIExPQ0FMX1BBUkFfSERSCisgICAgdmRtX2NhbGxfZG9tYWluX2VudW0gZWNibV9kb21haW47IAorfSB2ZG1fZ21zc19lY2JtX21vZGVfc3RvcF9yZXFfc3RydWN0OworCisjZW5kaWYgLy8gX1ZETV9HTVNTX1NUUlVDVF9IXwpkaWZmIC0tZ2l0IGEvbWN1L3Byb3RvY29sL2ludGVyZmFjZS9nZW5lcmFsL3Z0MmNzcl9zdHJ1Y3QuaCBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC92dDJjc3Jfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3NGFhNgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9wcm90b2NvbC9pbnRlcmZhY2UvZ2VuZXJhbC92dDJjc3Jfc3RydWN0LmgKQEAgLTAsMCArMSw2NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA3CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogdnQyY3NyX3N0cnVjdC5oCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1BVUkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgaXMgaW50ZW5kcyBmb3Igc3RydWN0dXJlIGRlZmluaXRpb24gYmV0d2VlbiBWVCBhbmQgQ1NSLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2lmbmRlZiBfVlQyQ1NSX1NUUlVDVF9ICisjZGVmaW5lIF9WVDJDU1JfU1RSVUNUX0gKKworI2luY2x1ZGUgImthbF9nZW5lcmFsX3R5cGVzLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19kZWZzLmgiCisKK3R5cGVkZWYgc3RydWN0IHZ0X3Rlc3RfcmVxX3N0cnVjdHsKKyAgICBMT0NBTF9QQVJBX0hEUgorICAgIGthbF91aW50MzIgZGF0YV9zaXplOworICAgIGthbF91aW50OCByYXdfZGF0YSBbODAwMF07Cit9dnRfdGVzdF9yZXFfc3RydWN0OworCisjZW5kaWYK