ZGlmZiAtLWdpdCBhL0NsZWFuU3BlYy5tayBiL0NsZWFuU3BlYy5tawppbmRleCBiODRlMWI2Li4xYzY0YmZjIDEwMDY0NAotLS0gYS9DbGVhblNwZWMubWsKKysrIGIvQ2xlYW5TcGVjLm1rCkBAIC00NywzICs0NywxMyBAQAogIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICMgTkVXRVIgQ0xFQU4gU1RFUFMgTVVTVCBCRSBBVCBUSEUgRU5EIE9GIFRIRSBMSVNUCiAjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCiskKGNhbGwgYWRkLWNsZWFuLXN0ZXAsIHJtIC1mICQoUFJPRFVDVF9PVVQpL3N5c3RlbS9saWIvbGliZHluYW1pY19zZW5zb3JfZXh0LnNvKQorJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtZiAkKFBST0RVQ1RfT1VUKS9zeXN0ZW0vbGliNjQvbGliZHluYW1pY19zZW5zb3JfZXh0LnNvKQorJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtZiAkKFBST0RVQ1RfT1VUKS9zeXN0ZW0vbGliL2h3L3NlbnNvcnMuZHluYW1pY19zZW5zb3JfaGFsLnNvKQorJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtZiAkKFBST0RVQ1RfT1VUKS9zeXN0ZW0vbGliNjQvaHcvc2Vuc29ycy5keW5hbWljX3NlbnNvcl9oYWwuc28pCisKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIE5FV0VSIENMRUFOIFNURVBTIE1VU1QgQkUgQVQgVEhFIEVORCBPRiBUSEUgTElTVAorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oYXJkd2FyZS9hdWRpby5oIGIvaW5jbHVkZS9oYXJkd2FyZS9hdWRpby5oCmluZGV4IGM5NWFkMDkuLjJkNmViMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvYXVkaW8uaAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL2F1ZGlvLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgogCiAjaW5jbHVkZSA8Y3V0aWxzL2JpdG9wcy5oPgogCkBAIC01OSwxOSArNjAsNiBAQAogLyogTWluaW1hbCBhdWRpbyBIQUwgdmVyc2lvbiBzdXBwb3J0ZWQgYnkgdGhlIGF1ZGlvIGZyYW1ld29yayAqLwogI2RlZmluZSBBVURJT19ERVZJQ0VfQVBJX1ZFUlNJT05fTUlOIEFVRElPX0RFVklDRV9BUElfVkVSU0lPTl8yXzAKIAotLyoqCi0gKiBMaXN0IG9mIGtub3duIGF1ZGlvIEhBTCBtb2R1bGVzLiBUaGlzIGlzIHRoZSBiYXNlIG5hbWUgb2YgdGhlIGF1ZGlvIEhBTAotICogbGlicmFyeSBjb21wb3NlZCBvZiB0aGUgImF1ZGlvLiIgcHJlZml4LCBvbmUgb2YgdGhlIGJhc2UgbmFtZXMgYmVsb3cgYW5kCi0gKiBhIHN1ZmZpeCBzcGVjaWZpYyB0byB0aGUgZGV2aWNlLgotICogZS5nOiBhdWRpby5wcmltYXJ5LmdvbGRmaXNoLnNvIG9yIGF1ZGlvLmEyZHAuZGVmYXVsdC5zbwotICovCi0KLSNkZWZpbmUgQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lEX1BSSU1BUlkgInByaW1hcnkiCi0jZGVmaW5lIEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRF9BMkRQICJhMmRwIgotI2RlZmluZSBBVURJT19IQVJEV0FSRV9NT0RVTEVfSURfVVNCICJ1c2IiCi0jZGVmaW5lIEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRF9SRU1PVEVfU1VCTUlYICJyX3N1Ym1peCIKLSNkZWZpbmUgQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lEX0NPREVDX09GRkxPQUQgImNvZGVjX29mZmxvYWQiCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoqCkBAIC04MiwxMSArNzAsNiBAQAogICogIGF1ZGlvIGRldmljZSBwYXJhbWV0ZXJzCiAgKi8KIAotLyogQlQgU0NPIE5vaXNlIFJlZHVjdGlvbiArIEVjaG8gQ2FuY2VsbGF0aW9uIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX0tFWV9CVF9OUkVDICJidF9oZWFkc2V0X25yZWMiCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9WQUxVRV9PTiAib24iCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9WQUxVRV9PRkYgIm9mZiIKLQogLyogVFRZIG1vZGUgc2VsZWN0aW9uICovCiAjZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9LRVlfVFRZX01PREUgInR0eV9tb2RlIgogI2RlZmluZSBBVURJT19QQVJBTUVURVJfVkFMVUVfVFRZX09GRiAidHR5X29mZiIKQEAgLTk0LDggKzc3LDcgQEAKICNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1ZBTFVFX1RUWV9IQ08gInR0eV9oY28iCiAjZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9WQUxVRV9UVFlfRlVMTCAidHR5X2Z1bGwiCiAKLS8qIEhlYXJpbmcgQWlkIENvbXBhdGliaWxpdHkgLSBUZWxlY29pbCAoSEFDLVQpIG1vZGUgb24vb2ZmCi0gICBTdHJpbmdzIG11c3QgYmUgaW4gc3luYyB3aXRoIENhbGxGZWF0dXJlc1NldHRpbmcuamF2YSAqLworLyogSGVhcmluZyBBaWQgQ29tcGF0aWJpbGl0eSAtIFRlbGVjb2lsIChIQUMtVCkgbW9kZSBvbi9vZmYgKi8KICNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX0tFWV9IQUMgIkhBQ1NldHRpbmciCiAjZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9WQUxVRV9IQUNfT04gIk9OIgogI2RlZmluZSBBVURJT19QQVJBTUVURVJfVkFMVUVfSEFDX09GRiAiT0ZGIgpAQCAtMTA2LDYzICs4OCwxNSBAQAogLyogQTJEUCBzb3VyY2UgYWRkcmVzcyBzZXQgYnkgZnJhbWV3b3JrICovCiAjZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9BMkRQX1NPVVJDRV9BRERSRVNTICJhMmRwX3NvdXJjZV9hZGRyZXNzIgogCi0vKiBTY3JlZW4gc3RhdGUgKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX0tFWV9TQ1JFRU5fU1RBVEUgInNjcmVlbl9zdGF0ZSIKLQogLyogQmx1ZXRvb3RoIFNDTyB3aWRlYmFuZCAqLwogI2RlZmluZSBBVURJT19QQVJBTUVURVJfS0VZX0JUX1NDT19XQiAiYnRfd2JzIgogCi0vKiBHZXQgYSBuZXcgSFcgc3luY2hyb25pemF0aW9uIHNvdXJjZSBpZGVudGlmaWVyLgotICogUmV0dXJuIGEgdmFsaWQgc291cmNlIChwb3NpdGl2ZSBpbnRlZ2VyKSBvciBBVURJT19IV19TWU5DX0lOVkFMSUQgaWYgYW4gZXJyb3Igb2NjdXJzCi0gKiBvciBubyBIVyBzeW5jIGlzIGF2YWlsYWJsZS4gKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX0hXX0FWX1NZTkMgImh3X2F2X3N5bmMiCi0KIC8qKgogICogIGF1ZGlvIHN0cmVhbSBwYXJhbWV0ZXJzCiAgKi8KIAotI2RlZmluZSBBVURJT19QQVJBTUVURVJfU1RSRUFNX1JPVVRJTkcgInJvdXRpbmciICAgICAgICAgICAgIC8qIGF1ZGlvX2RldmljZXNfdCAqLwotI2RlZmluZSBBVURJT19QQVJBTUVURVJfU1RSRUFNX0ZPUk1BVCAiZm9ybWF0IiAgICAgICAgICAgICAgIC8qIGF1ZGlvX2Zvcm1hdF90ICovCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9TVFJFQU1fQ0hBTk5FTFMgImNoYW5uZWxzIiAgICAgICAgICAgLyogYXVkaW9fY2hhbm5lbF9tYXNrX3QgKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1NUUkVBTV9GUkFNRV9DT1VOVCAiZnJhbWVfY291bnQiICAgICAvKiBzaXplX3QgKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1NUUkVBTV9JTlBVVF9TT1VSQ0UgImlucHV0X3NvdXJjZSIgICAvKiBhdWRpb19zb3VyY2VfdCAqLwotI2RlZmluZSBBVURJT19QQVJBTUVURVJfU1RSRUFNX1NBTVBMSU5HX1JBVEUgInNhbXBsaW5nX3JhdGUiIC8qIHVpbnQzMl90ICovCi0KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX0RFVklDRV9DT05ORUNUICJjb25uZWN0IiAgICAgICAgICAgIC8qIGF1ZGlvX2RldmljZXNfdCAqLwotI2RlZmluZSBBVURJT19QQVJBTUVURVJfREVWSUNFX0RJU0NPTk5FQ1QgImRpc2Nvbm5lY3QiICAgICAgLyogYXVkaW9fZGV2aWNlc190ICovCi0KLS8qIFF1ZXJ5IHN1cHBvcnRlZCBmb3JtYXRzLiBUaGUgcmVzcG9uc2UgaXMgYSAnfCcgc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5ncyBmcm9tCi0gKiBhdWRpb19mb3JtYXRfdCBlbnVtIGUuZzogInN1cF9mb3JtYXRzPUFVRElPX0ZPUk1BVF9QQ01fMTZfQklUIiAqLwotI2RlZmluZSBBVURJT19QQVJBTUVURVJfU1RSRUFNX1NVUF9GT1JNQVRTICJzdXBfZm9ybWF0cyIKLS8qIFF1ZXJ5IHN1cHBvcnRlZCBjaGFubmVsIG1hc2tzLiBUaGUgcmVzcG9uc2UgaXMgYSAnfCcgc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5ncyBmcm9tCi0gKiBhdWRpb19jaGFubmVsX21hc2tfdCBlbnVtIGUuZzogInN1cF9jaGFubmVscz1BVURJT19DSEFOTkVMX09VVF9TVEVSRU98QVVESU9fQ0hBTk5FTF9PVVRfTU9OTyIgKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1NUUkVBTV9TVVBfQ0hBTk5FTFMgInN1cF9jaGFubmVscyIKLS8qIFF1ZXJ5IHN1cHBvcnRlZCBzYW1wbGluZyByYXRlcy4gVGhlIHJlc3BvbnNlIGlzIGEgJ3wnIHNlcGFyYXRlZCBsaXN0IG9mIGludGVnZXIgdmFsdWVzIGUuZzoKLSAqICJzdXBfc2FtcGxpbmdfcmF0ZXM9NDQxMDB8NDgwMDAiICovCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9TVFJFQU1fU1VQX1NBTVBMSU5HX1JBVEVTICJzdXBfc2FtcGxpbmdfcmF0ZXMiCi0KLS8qIFNldCB0aGUgSFcgc3luY2hyb25pemF0aW9uIHNvdXJjZSBmb3IgYW4gb3V0cHV0IHN0cmVhbS4gKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1NUUkVBTV9IV19BVl9TWU5DICJod19hdl9zeW5jIgotCi0vKiBFbmFibGUgbW9ubyBhdWRpbyBwbGF5YmFjayBpZiAxLCBlbHNlIHNob3VsZCBiZSAwLiAqLwotI2RlZmluZSBBVURJT19QQVJBTUVURVJfTU9OT19PVVRQVVQgIm1vbm9fb3V0cHV0IgotCi0vKioKLSAqIGF1ZGlvIGNvZGVjIHBhcmFtZXRlcnMKLSAqLwotCi0jZGVmaW5lIEFVRElPX09GRkxPQURfQ09ERUNfUEFSQU1TICJtdXNpY19vZmZsb2FkX2NvZGVjX3BhcmFtIgotI2RlZmluZSBBVURJT19PRkZMT0FEX0NPREVDX0JJVF9QRVJfU0FNUExFICJtdXNpY19vZmZsb2FkX2JpdF9wZXJfc2FtcGxlIgotI2RlZmluZSBBVURJT19PRkZMT0FEX0NPREVDX0JJVF9SQVRFICJtdXNpY19vZmZsb2FkX2JpdF9yYXRlIgotI2RlZmluZSBBVURJT19PRkZMT0FEX0NPREVDX0FWR19CSVRfUkFURSAibXVzaWNfb2ZmbG9hZF9hdmdfYml0X3JhdGUiCi0jZGVmaW5lIEFVRElPX09GRkxPQURfQ09ERUNfSUQgIm11c2ljX29mZmxvYWRfY29kZWNfaWQiCi0jZGVmaW5lIEFVRElPX09GRkxPQURfQ09ERUNfQkxPQ0tfQUxJR04gIm11c2ljX29mZmxvYWRfYmxvY2tfYWxpZ24iCi0jZGVmaW5lIEFVRElPX09GRkxPQURfQ09ERUNfU0FNUExFX1JBVEUgIm11c2ljX29mZmxvYWRfc2FtcGxlX3JhdGUiCi0jZGVmaW5lIEFVRElPX09GRkxPQURfQ09ERUNfRU5DT0RFX09QVElPTiAibXVzaWNfb2ZmbG9hZF9lbmNvZGVfb3B0aW9uIgotI2RlZmluZSBBVURJT19PRkZMT0FEX0NPREVDX05VTV9DSEFOTkVMICAibXVzaWNfb2ZmbG9hZF9udW1fY2hhbm5lbHMiCi0jZGVmaW5lIEFVRElPX09GRkxPQURfQ09ERUNfRE9XTl9TQU1QTElORyAgIm11c2ljX29mZmxvYWRfZG93bl9zYW1wbGluZyIKLSNkZWZpbmUgQVVESU9fT0ZGTE9BRF9DT0RFQ19ERUxBWV9TQU1QTEVTICAiZGVsYXlfc2FtcGxlcyIKLSNkZWZpbmUgQVVESU9fT0ZGTE9BRF9DT0RFQ19QQURESU5HX1NBTVBMRVMgICJwYWRkaW5nX3NhbXBsZXMiCisvKiBFbmFibGUgQUFOQyAqLworI2RlZmluZSBBVURJT19QQVJBTUVURVJfS0VZX0FBTkMgImFhbmNfZW5hYmxlZCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0zOTksNiArMzMzLDY1IEBACiAgICAgaW50ICgqZ2V0X3ByZXNlbnRhdGlvbl9wb3NpdGlvbikoY29uc3Qgc3RydWN0IGF1ZGlvX3N0cmVhbV9vdXQgKnN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCAqZnJhbWVzLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVzdGFtcCk7CiAKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIGZyYW1ld29yayB0byBzdGFydCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgICAqIGNyZWF0ZV9tbWFwX2J1ZmZlciBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBzdGFydCgpCisgICAgICoKKyAgICAgKiBcbm90ZSBGdW5jdGlvbiBvbmx5IGltcGxlbWVudGVkIGJ5IHN0cmVhbXMgb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gc3RyZWFtIHRoZSBzdHJlYW0gb2JqZWN0LgorICAgICAqIFxyZXR1cm4gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MuCisgICAgICogICAgICAgICAtRU5PU1lTIGlmIGNhbGxlZCBvdXQgb2Ygc2VxdWVuY2Ugb3Igb24gbm9uIG1tYXAgc3RyZWFtCisgICAgICovCisgICAgaW50ICgqc3RhcnQpKGNvbnN0IHN0cnVjdCBhdWRpb19zdHJlYW1fb3V0KiBzdHJlYW0pOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gc3RvcCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgICAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIHN0YXJ0KCkKKyAgICAgKgorICAgICAqIFxub3RlIEZ1bmN0aW9uIG9ubHkgaW1wbGVtZW50ZWQgYnkgc3RyZWFtcyBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgICAqCisgICAgICogXHBhcmFtW2luXSBzdHJlYW0gdGhlIHN0cmVhbSBvYmplY3QuCisgICAgICogXHJldHVybiAwIGluIGNhc2Ugb2Ygc3VjY2Vzcy4KKyAgICAgKiAgICAgICAgIC1FTk9TWVMgaWYgY2FsbGVkIG91dCBvZiBzZXF1ZW5jZSBvciBvbiBub24gbW1hcCBzdHJlYW0KKyAgICAgKi8KKyAgICBpbnQgKCpzdG9wKShjb25zdCBzdHJ1Y3QgYXVkaW9fc3RyZWFtX291dCogc3RyZWFtKTsKKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgZnJhbWV3b3JrIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIG9uIHRoZSBtbWFwIGJ1ZmZlciB1c2VkIGZvciBhdWRpbworICAgICAqIHNhbXBsZXMgdHJhbnNmZXIuCisgICAgICoKKyAgICAgKiBcbm90ZSBGdW5jdGlvbiBvbmx5IGltcGxlbWVudGVkIGJ5IHN0cmVhbXMgb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gc3RyZWFtIHRoZSBzdHJlYW0gb2JqZWN0LgorICAgICAqIFxwYXJhbVtpbl0gbWluX3NpemVfZnJhbWVzIG1pbmltdW0gYnVmZmVyIHNpemUgcmVxdWVzdGVkLiBUaGUgYWN0dWFsIGJ1ZmZlcgorICAgICAqICAgICAgICBzaXplIHJldHVybmVkIGluIHN0cnVjdCBhdWRpb19tbWFwX2J1ZmZlcl9pbmZvIGNhbiBiZSBsYXJnZXIuCisgICAgICogXHBhcmFtW291dF0gaW5mbyBhZGRyZXNzIGF0IHdoaWNoIHRoZSBtbWFwIGJ1ZmZlciBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBccmV0dXJuIDAgaWYgdGhlIGJ1ZmZlciB3YXMgYWxsb2NhdGVkLgorICAgICAqICAgICAgICAgLUVOT0RFViBpbiBjYXNlIG9mIGluaXRpYWxpemF0aW9uIGVycm9yCisgICAgICogICAgICAgICAtRUlOVkFMIGlmIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHNpemUgaXMgdG9vIGxhcmdlCisgICAgICogICAgICAgICAtRU5PU1lTIGlmIGNhbGxlZCBvdXQgb2Ygc2VxdWVuY2UgKGUuZy4gYnVmZmVyIGFscmVhZHkgYWxsb2NhdGVkKQorICAgICAqLworICAgIGludCAoKmNyZWF0ZV9tbWFwX2J1ZmZlcikoY29uc3Qgc3RydWN0IGF1ZGlvX3N0cmVhbV9vdXQgKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbWluX3NpemVfZnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX21tYXBfYnVmZmVyX2luZm8gKmluZm8pOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gcmVhZCBjdXJyZW50IHJlYWQvd3JpdGUgcG9zaXRpb24gaW4gdGhlIG1tYXAgYnVmZmVyCisgICAgICogd2l0aCBhc3NvY2lhdGVkIHRpbWUgc3RhbXAuCisgICAgICoKKyAgICAgKiBcbm90ZSBGdW5jdGlvbiBvbmx5IGltcGxlbWVudGVkIGJ5IHN0cmVhbXMgb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gc3RyZWFtIHRoZSBzdHJlYW0gb2JqZWN0LgorICAgICAqIFxwYXJhbVtvdXRdIHBvc2l0aW9uIGFkZHJlc3MgYXQgd2hpY2ggdGhlIG1tYXAgcmVhZC93cml0ZSBwb3NpdGlvbiBzaG91bGQgYmUgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBccmV0dXJuIDAgaWYgdGhlIHBvc2l0aW9uIGlzIHN1Y2Nlc3NmdWxseSByZXR1cm5lZC4KKyAgICAgKiAgICAgICAgIC1FTk9EQVRBIGlmIHRoZSBwb3NpdGlvbiBjYW5ub3QgYmUgcmV0cmlldmVkCisgICAgICogICAgICAgICAtRU5PU1lTIGlmIGNhbGxlZCBiZWZvcmUgY3JlYXRlX21tYXBfYnVmZmVyKCkKKyAgICAgKi8KKyAgICBpbnQgKCpnZXRfbW1hcF9wb3NpdGlvbikoY29uc3Qgc3RydWN0IGF1ZGlvX3N0cmVhbV9vdXQgKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX21tYXBfcG9zaXRpb24gKnBvc2l0aW9uKTsKIH07CiB0eXBlZGVmIHN0cnVjdCBhdWRpb19zdHJlYW1fb3V0IGF1ZGlvX3N0cmVhbV9vdXRfdDsKIApAQCAtNDQ5LDYgKzQ0Miw2NSBAQAogICAgICAqLwogICAgIGludCAoKmdldF9jYXB0dXJlX3Bvc2l0aW9uKShjb25zdCBzdHJ1Y3QgYXVkaW9fc3RyZWFtX2luICpzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgKmZyYW1lcywgaW50NjRfdCAqdGltZSk7CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIGZyYW1ld29yayB0byBzdGFydCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgICAqIGNyZWF0ZV9tbWFwX2J1ZmZlciBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBzdGFydCgpCisgICAgICoKKyAgICAgKiBcbm90ZSBGdW5jdGlvbiBvbmx5IGltcGxlbWVudGVkIGJ5IHN0cmVhbXMgb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gc3RyZWFtIHRoZSBzdHJlYW0gb2JqZWN0LgorICAgICAqIFxyZXR1cm4gMCBpbiBjYXNlIG9mZiBzdWNjZXNzLgorICAgICAqICAgICAgICAgLUVOT1NZUyBpZiBjYWxsZWQgb3V0IG9mIHNlcXVlbmNlIG9yIG9uIG5vbiBtbWFwIHN0cmVhbQorICAgICAqLworICAgIGludCAoKnN0YXJ0KShjb25zdCBzdHJ1Y3QgYXVkaW9fc3RyZWFtX2luKiBzdHJlYW0pOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gc3RvcCBhIHN0cmVhbSBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgICAqCisgICAgICogXG5vdGUgRnVuY3Rpb24gb25seSBpbXBsZW1lbnRlZCBieSBzdHJlYW1zIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCisgICAgICoKKyAgICAgKiBccGFyYW1baW5dIHN0cmVhbSB0aGUgc3RyZWFtIG9iamVjdC4KKyAgICAgKiBccmV0dXJuIDAgaW4gY2FzZSBvZiBzdWNjZXNzLgorICAgICAqICAgICAgICAgLUVOT1NZUyBpZiBjYWxsZWQgb3V0IG9mIHNlcXVlbmNlIG9yIG9uIG5vbiBtbWFwIHN0cmVhbQorICAgICAqLworICAgIGludCAoKnN0b3ApKGNvbnN0IHN0cnVjdCBhdWRpb19zdHJlYW1faW4qIHN0cmVhbSk7CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIGZyYW1ld29yayB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgbW1hcCBidWZmZXIgdXNlZCBmb3IgYXVkaW8KKyAgICAgKiBzYW1wbGVzIHRyYW5zZmVyLgorICAgICAqCisgICAgICogXG5vdGUgRnVuY3Rpb24gb25seSBpbXBsZW1lbnRlZCBieSBzdHJlYW1zIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCisgICAgICoKKyAgICAgKiBccGFyYW1baW5dIHN0cmVhbSB0aGUgc3RyZWFtIG9iamVjdC4KKyAgICAgKiBccGFyYW1baW5dIG1pbl9zaXplX2ZyYW1lcyBtaW5pbXVtIGJ1ZmZlciBzaXplIHJlcXVlc3RlZC4gVGhlIGFjdHVhbCBidWZmZXIKKyAgICAgKiAgICAgICAgc2l6ZSByZXR1cm5lZCBpbiBzdHJ1Y3QgYXVkaW9fbW1hcF9idWZmZXJfaW5mbyBjYW4gYmUgbGFyZ2VyLgorICAgICAqIFxwYXJhbVtvdXRdIGluZm8gYWRkcmVzcyBhdCB3aGljaCB0aGUgbW1hcCBidWZmZXIgaW5mb3JtYXRpb24gc2hvdWxkIGJlIHJldHVybmVkLgorICAgICAqCisgICAgICogXHJldHVybiAwIGlmIHRoZSBidWZmZXIgd2FzIGFsbG9jYXRlZC4KKyAgICAgKiAgICAgICAgIC1FTk9ERVYgaW4gY2FzZSBvZiBpbml0aWFsaXphdGlvbiBlcnJvcgorICAgICAqICAgICAgICAgLUVJTlZBTCBpZiB0aGUgcmVxdWVzdGVkIGJ1ZmZlciBzaXplIGlzIHRvbyBsYXJnZQorICAgICAqICAgICAgICAgLUVOT1NZUyBpZiBjYWxsZWQgb3V0IG9mIHNlcXVlbmNlIChlLmcuIGJ1ZmZlciBhbHJlYWR5IGFsbG9jYXRlZCkKKyAgICAgKi8KKyAgICBpbnQgKCpjcmVhdGVfbW1hcF9idWZmZXIpKGNvbnN0IHN0cnVjdCBhdWRpb19zdHJlYW1faW4gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbWluX3NpemVfZnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX21tYXBfYnVmZmVyX2luZm8gKmluZm8pOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gcmVhZCBjdXJyZW50IHJlYWQvd3JpdGUgcG9zaXRpb24gaW4gdGhlIG1tYXAgYnVmZmVyCisgICAgICogd2l0aCBhc3NvY2lhdGVkIHRpbWUgc3RhbXAuCisgICAgICoKKyAgICAgKiBcbm90ZSBGdW5jdGlvbiBvbmx5IGltcGxlbWVudGVkIGJ5IHN0cmVhbXMgb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gc3RyZWFtIHRoZSBzdHJlYW0gb2JqZWN0LgorICAgICAqIFxwYXJhbVtvdXRdIHBvc2l0aW9uIGFkZHJlc3MgYXQgd2hpY2ggdGhlIG1tYXAgcmVhZC93cml0ZSBwb3NpdGlvbiBzaG91bGQgYmUgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBccmV0dXJuIDAgaWYgdGhlIHBvc2l0aW9uIGlzIHN1Y2Nlc3NmdWxseSByZXR1cm5lZC4KKyAgICAgKiAgICAgICAgIC1FTk9EQVRBIGlmIHRoZSBwb3NpdGlvbiBjYW5ub3QgYmUgcmV0cmVpdmVkCisgICAgICogICAgICAgICAtRU5PU1lTIGlmIGNhbGxlZCBiZWZvcmUgbW1hcF9yZWFkX3Bvc2l0aW9uKCkKKyAgICAgKi8KKyAgICBpbnQgKCpnZXRfbW1hcF9wb3NpdGlvbikoY29uc3Qgc3RydWN0IGF1ZGlvX3N0cmVhbV9pbiAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fbW1hcF9wb3NpdGlvbiAqcG9zaXRpb24pOwogfTsKIHR5cGVkZWYgc3RydWN0IGF1ZGlvX3N0cmVhbV9pbiBhdWRpb19zdHJlYW1faW5fdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oYXJkd2FyZS9hdWRpb19hbHNhb3BzLmggYi9pbmNsdWRlL2hhcmR3YXJlL2F1ZGlvX2Fsc2FvcHMuaAppbmRleCBmODM5NDFlLi42YTE3YTM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2F1ZGlvX2Fsc2FvcHMuaAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL2F1ZGlvX2Fsc2FvcHMuaApAQCAtMzgsNyArMzgsNyBAQAogc3RhdGljIGlubGluZSBlbnVtIHBjbV9mb3JtYXQgcGNtX2Zvcm1hdF9mcm9tX2F1ZGlvX2Zvcm1hdChhdWRpb19mb3JtYXRfdCBmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSNpZmRlZiBIQVZFX0JJR19FTkRJQU4KKyNpZiBIQVZFX0JJR19FTkRJQU4KICAgICBjYXNlIEFVRElPX0ZPUk1BVF9QQ01fMTZfQklUOgogICAgICAgICByZXR1cm4gUENNX0ZPUk1BVF9TMTZfQkU7CiAgICAgY2FzZSBBVURJT19GT1JNQVRfUENNXzI0X0JJVF9QQUNLRUQ6CkBAIC03Myw3ICs3Myw3IEBACiBzdGF0aWMgaW5saW5lIGF1ZGlvX2Zvcm1hdF90IGF1ZGlvX2Zvcm1hdF9mcm9tX3BjbV9mb3JtYXQoZW51bSBwY21fZm9ybWF0IGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewotI2lmZGVmIEhBVkVfQklHX0VORElBTgorI2lmIEhBVkVfQklHX0VORElBTgogICAgIGNhc2UgUENNX0ZPUk1BVF9TMTZfQkU6CiAgICAgICAgIHJldHVybiBBVURJT19GT1JNQVRfUENNXzE2X0JJVDsKICAgICBjYXNlIFBDTV9GT1JNQVRfUzI0XzNCRToKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvYXVkaW9fZWZmZWN0LmggYi9pbmNsdWRlL2hhcmR3YXJlL2F1ZGlvX2VmZmVjdC5oCmluZGV4IDhhODg0MTQuLjMzNjZlMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvYXVkaW9fZWZmZWN0LmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9hdWRpb19lZmZlY3QuaApAQCAtMjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSA8Y3V0aWxzL2JpdG9wcy5oPgogCi0jaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+CisjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvX2VmZmVjdC5oPgogCiAKIF9fQkVHSU5fREVDTFMKQEAgLTM2LDIzMSArMzYsMTEgQEAKIC8vICAgICAgQ29tbW9uIERlZmluaXRpb25zCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLS8vCi0vLy0tLSBFZmZlY3QgZGVzY3JpcHRvciBzdHJ1Y3R1cmUgZWZmZWN0X2Rlc2NyaXB0b3JfdAotLy8KLQotLy8gVW5pcXVlIGVmZmVjdCBJRCAoY2FuIGJlIGdlbmVyYXRlZCBmcm9tIHRoZSBmb2xsb3dpbmcgc2l0ZToKLS8vICBodHRwOi8vd3d3Lml0dS5pbnQvSVRVLVQvYXNuMS91dWlkLmh0bWwpCi0vLyBUaGlzIGZvcm1hdCBpcyB1c2VkIGZvciBib3RoICJ0eXBlIiBhbmQgInV1aWQiIGZpZWxkcyBvZiB0aGUgZWZmZWN0IGRlc2NyaXB0b3Igc3RydWN0dXJlLgotLy8gLSBXaGVuIHVzZWQgZm9yIGVmZmVjdCB0eXBlIGFuZCB0aGUgZW5naW5lIGlzIGltcGxlbWVudGluZyBhbmQgZWZmZWN0IGNvcnJlc3BvbmRpbmcgdG8gYSBzdGFuZGFyZAotLy8gT3BlblNMIEVTIGludGVyZmFjZSwgdGhpcyBJRCBtdXN0IGJlIHRoZSBvbmUgZGVmaW5lZCBpbiBPcGVuU0xFU19JSUQuaCBmb3IgdGhhdCBpbnRlcmZhY2UuCi0vLyAtIFdoZW4gdXNlZCBhcyB1dWlkLCBpdCBzaG91bGQgYmUgYSB1bmlxdWUgVVVJRCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLgotdHlwZWRlZiBzdHJ1Y3QgZWZmZWN0X3V1aWRfcyB7Ci0gICAgdWludDMyX3QgdGltZUxvdzsKLSAgICB1aW50MTZfdCB0aW1lTWlkOwotICAgIHVpbnQxNl90IHRpbWVIaUFuZFZlcnNpb247Ci0gICAgdWludDE2X3QgY2xvY2tTZXE7Ci0gICAgdWludDhfdCBub2RlWzZdOwotfSBlZmZlY3RfdXVpZF90OwotCi0vLyBNYXhpbXVtIGxlbmd0aCBvZiBjaGFyYWN0ZXIgc3RyaW5ncyBpbiBzdHJ1Y3R1cmVzIGRlZmluZXMgYnkgdGhpcyBBUEkuCi0jZGVmaW5lIEVGRkVDVF9TVFJJTkdfTEVOX01BWCA2NAotCi0vLyBOVUxMIFVVSUQgZGVmaW5pdGlvbiAobWF0Y2hlcyBTTF9JSURfTlVMTF8pCi0jZGVmaW5lIEVGRkVDVF9VVUlEX0lOSVRJQUxJWkVSIHsgMHhlYzcxNzhlYywgMHhlNWUxLCAweDQ0MzIsIDB4YTNmNCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMHg0NiwgMHg1NywgMHhlNiwgMHg3OSwgMHg1MiwgMHgxMCB9IH0KLXN0YXRpYyBjb25zdCBlZmZlY3RfdXVpZF90IEVGRkVDVF9VVUlEX05VTExfID0gRUZGRUNUX1VVSURfSU5JVElBTElaRVI7Ci1zdGF0aWMgY29uc3QgZWZmZWN0X3V1aWRfdCAqIGNvbnN0IEVGRkVDVF9VVUlEX05VTEwgPSAmRUZGRUNUX1VVSURfTlVMTF87Ci1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IEVGRkVDVF9VVUlEX05VTExfU1RSID0gImVjNzE3OGVjLWU1ZTEtNDQzMi1hM2Y0LTQ2NTdlNjc5NTIxMCI7Ci0KLQotLy8gVGhlIGVmZmVjdCBkZXNjcmlwdG9yIGNvbnRhaW5zIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBmYWNpbGl0YXRlIHRoZSBlbnVtZXJhdGlvbiBvZiB0aGUgZWZmZWN0Ci0vLyBlbmdpbmVzIHByZXNlbnQgaW4gYSBsaWJyYXJ5LgotdHlwZWRlZiBzdHJ1Y3QgZWZmZWN0X2Rlc2NyaXB0b3JfcyB7Ci0gICAgZWZmZWN0X3V1aWRfdCB0eXBlOyAgICAgLy8gVVVJRCBvZiB0byB0aGUgT3BlblNMIEVTIGludGVyZmFjZSBpbXBsZW1lbnRlZCBieSB0aGlzIGVmZmVjdAotICAgIGVmZmVjdF91dWlkX3QgdXVpZDsgICAgIC8vIFVVSUQgZm9yIHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbgotICAgIHVpbnQzMl90IGFwaVZlcnNpb247ICAgIC8vIFZlcnNpb24gb2YgdGhlIGVmZmVjdCBjb250cm9sIEFQSSBpbXBsZW1lbnRlZAotICAgIHVpbnQzMl90IGZsYWdzOyAgICAgICAgIC8vIGVmZmVjdCBlbmdpbmUgY2FwYWJpbGl0aWVzL3JlcXVpcmVtZW50cyBmbGFncyAoc2VlIGJlbG93KQotICAgIHVpbnQxNl90IGNwdUxvYWQ7ICAgICAgIC8vIENQVSBsb2FkIGluZGljYXRpb24gKHNlZSBiZWxvdykKLSAgICB1aW50MTZfdCBtZW1vcnlVc2FnZTsgICAvLyBEYXRhIE1lbW9yeSB1c2FnZSAoc2VlIGJlbG93KQotICAgIGNoYXIgICAgbmFtZVtFRkZFQ1RfU1RSSU5HX0xFTl9NQVhdOyAgIC8vIGh1bWFuIHJlYWRhYmxlIGVmZmVjdCBuYW1lCi0gICAgY2hhciAgICBpbXBsZW1lbnRvcltFRkZFQ1RfU1RSSU5HX0xFTl9NQVhdOyAgICAvLyBodW1hbiByZWFkYWJsZSBlZmZlY3QgaW1wbGVtZW50b3IgbmFtZQotfSBlZmZlY3RfZGVzY3JpcHRvcl90OwotCi0vLyBDUFUgbG9hZCBhbmQgbWVtb3J5IHVzYWdlIGluZGljYXRpb246IGVhY2ggZWZmZWN0IGltcGxlbWVudGF0aW9uIG11c3QgcHJvdmlkZSBhbiBpbmRpY2F0aW9uIG9mCi0vLyBpdHMgQ1BVIGFuZCBtZW1vcnkgdXNhZ2UgZm9yIHRoZSBhdWRpbyBlZmZlY3QgZnJhbWV3b3JrIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZWZmZWN0cwotLy8gaW5zdGFudGlhdGVkIGF0IGEgZ2l2ZW4gdGltZSBvbiBhIGdpdmVuIHBsYXRmb3JtLgotLy8gVGhlIENQVSBsb2FkIGlzIGV4cHJlc3NlZCBpbiAwLjEgTUlQUyB1bml0cyBhcyBlc3RpbWF0ZWQgb24gYW4gQVJNOUUgY29yZSAoQVJNdjVURSkgd2l0aCAwIFdTLgotLy8gVGhlIG1lbW9yeSB1c2FnZSBpcyBleHByZXNzZWQgaW4gS0IgYW5kIGluY2x1ZGVzIG9ubHkgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeQotCi0vLyBEZWZpbml0aW9ucyBmb3IgZmxhZ3MgZmllbGQgb2YgZWZmZWN0IGRlc2NyaXB0b3IuCi0vLyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIHwgZGVzY3JpcHRpb24gICAgICAgICAgICAgICB8IGJpdHMgICAgICB8IHZhbHVlcwotLy8gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICB8IGNvbm5lY3Rpb24gbW9kZSAgICAgICAgICAgfCAwLi4yICAgICAgfCAwIGluc2VydDogYWZ0ZXIgdHJhY2sgcHJvY2VzcwotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDEgYXV4aWxpYXJ5OiBjb25uZWN0IHRvIHRyYWNrIGF1eGlsaWFyeQotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICBvdXRwdXQgYW5kIHVzZSBzZW5kIGxldmVsCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMiByZXBsYWNlOiByZXBsYWNlcyB0cmFjayBwcm9jZXNzIGZ1bmN0aW9uOwotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgbXVzdCBpbXBsZW1lbnQgU1JDLCB2b2x1bWUgYW5kIG1vbm8gdG8gc3RlcmVvLgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDMgcHJlIHByb2Nlc3Npbmc6IGFwcGxpZWQgYmVsb3cgYXVkaW8gSEFMIG9uIGlucHV0Ci0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgNCBwb3N0IHByb2Nlc3Npbmc6IGFwcGxpZWQgYmVsb3cgYXVkaW8gSEFMIG9uIG91dHB1dAotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDUgLSA3IHJlc2VydmVkCi0vLyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIHwgaW5zZXJ0aW9uIHByZWZlcmVuY2UgICAgICB8IDMuLjUgICAgICB8IDAgbm9uZQotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDEgZmlyc3Qgb2YgdGhlIGNoYWluCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMiBsYXN0IG9mIHRoZSBjaGFpbgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDMgZXhjbHVzaXZlIChvbmx5IGVmZmVjdCBpbiB0aGUgaW5zZXJ0IGNoYWluKQotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDQuLjcgcmVzZXJ2ZWQKLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgfCBWb2x1bWUgbWFuYWdlbWVudCAgICAgICAgIHwgNi4uOCAgICAgIHwgMCBub25lCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMSBpbXBsZW1lbnRzIHZvbHVtZSBjb250cm9sCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMiByZXF1aXJlcyB2b2x1bWUgaW5kaWNhdGlvbgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDQgcmVzZXJ2ZWQKLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgfCBEZXZpY2UgaW5kaWNhdGlvbiAgICAgICAgIHwgOS4uMTEgICAgIHwgMCBub25lCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMSByZXF1aXJlcyBkZXZpY2UgdXBkYXRlcwotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDIsIDQgcmVzZXJ2ZWQKLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgfCBTYW1wbGUgaW5wdXQgbW9kZSAgICAgICAgIHwgMTIuLjEzICAgIHwgMSBkaXJlY3Q6IHByb2Nlc3MoKSBmdW5jdGlvbiBvciBFRkZFQ1RfQ01EX1NFVF9DT05GSUcKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIGNvbW1hbmQgbXVzdCBzcGVjaWZ5IGEgYnVmZmVyIGRlc2NyaXB0b3IKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAyIHByb3ZpZGVyOiBwcm9jZXNzKCkgZnVuY3Rpb24gdXNlcyB0aGUKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIGJ1ZmZlclByb3ZpZGVyIGluZGljYXRlZCBieSB0aGUKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIEVGRkVDVF9DTURfU0VUX0NPTkZJRyBjb21tYW5kIHRvIHJlcXVlc3QgaW5wdXQuCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBidWZmZXJzLgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDMgYm90aDogYm90aCBpbnB1dCBtb2RlcyBhcmUgc3VwcG9ydGVkCi0vLyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIHwgU2FtcGxlIG91dHB1dCBtb2RlICAgICAgICB8IDE0Li4xNSAgICB8IDEgZGlyZWN0OiBwcm9jZXNzKCkgZnVuY3Rpb24gb3IgRUZGRUNUX0NNRF9TRVRfQ09ORklHCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBjb21tYW5kIG11c3Qgc3BlY2lmeSBhIGJ1ZmZlciBkZXNjcmlwdG9yCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMiBwcm92aWRlcjogcHJvY2VzcygpIGZ1bmN0aW9uIHVzZXMgdGhlCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBidWZmZXJQcm92aWRlciBpbmRpY2F0ZWQgYnkgdGhlCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBFRkZFQ1RfQ01EX1NFVF9DT05GSUcgY29tbWFuZCB0byByZXF1ZXN0IG91dHB1dAotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgYnVmZmVycy4KLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAzIGJvdGg6IGJvdGggb3V0cHV0IG1vZGVzIGFyZSBzdXBwb3J0ZWQKLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgfCBIYXJkd2FyZSBhY2NlbGVyYXRpb24gICAgIHwgMTYuLjE3ICAgIHwgMCBObyBoYXJkd2FyZSBhY2NlbGVyYXRpb24KLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAxIG5vbiB0dW5uZWxlZCBodyBhY2NlbGVyYXRpb246IHRoZSBwcm9jZXNzKCkgZnVuY3Rpb24KLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIHJlYWRzIHRoZSBzYW1wbGVzLCBzZW5kIHRoZW0gdG8gSFcgYWNjZWxlcmF0ZWQKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIGVmZmVjdCBwcm9jZXNzb3IsIHJlYWRzIGJhY2sgdGhlIHByb2Nlc3NlZCBzYW1wbGVzCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBhbmQgcmV0dXJucyB0aGVtIHRvIHRoZSBvdXRwdXQgYnVmZmVyLgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDIgdHVubmVsZWQgaHcgYWNjZWxlcmF0aW9uOiB0aGUgcHJvY2VzcygpIGZ1bmN0aW9uIGlzCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICB0cmFuc3BhcmVudC4gVGhlIGVmZmVjdCBpbnRlcmZhY2UgaXMgb25seSB1c2VkIHRvCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBjb250cm9sIHRoZSBlZmZlY3QgZW5naW5lLiBUaGlzIG1vZGUgaXMgcmVsZXZhbnQgZm9yCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBnbG9iYWwgZWZmZWN0cyBhY3R1YWxseSBhcHBsaWVkIGJ5IHRoZSBhdWRpbwotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgaGFyZHdhcmUgb24gdGhlIG91dHB1dCBzdHJlYW0uCi0vLyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIHwgQXVkaW8gTW9kZSBpbmRpY2F0aW9uICAgICB8IDE4Li4xOSAgICB8IDAgbm9uZQotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDEgcmVxdWlyZXMgYXVkaW8gbW9kZSB1cGRhdGVzCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMi4uMyByZXNlcnZlZAotLy8gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICB8IEF1ZGlvIHNvdXJjZSBpbmRpY2F0aW9uICAgfCAyMC4uMjEgICAgfCAwIG5vbmUKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAxIHJlcXVpcmVzIGF1ZGlvIHNvdXJjZSB1cGRhdGVzCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMi4uMyByZXNlcnZlZAotLy8gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICB8IEVmZmVjdCBvZmZsb2FkIHN1cHBvcnRlZCAgfCAyMiAgICAgICAgfCAwIFRoZSBlZmZlY3QgY2Fubm90IGJlIG9mZmxvYWRlZCB0byBhbiBhdWRpbyBEU1AKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAxIFRoZSBlZmZlY3QgY2FuIGJlIG9mZmxvYWRlZCB0byBhbiBhdWRpbyBEU1AKLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgfCBQcm9jZXNzIGZ1bmN0aW9uIG5vdCAgICAgIHwgMjMgICAgICAgIHwgMCBUaGUgZWZmZWN0IGltcGxlbWVudHMgYSBwcm9jZXNzIGZ1bmN0aW9uLgotLy8gIHwgaW1wbGVtZW50ZWQgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDEgVGhlIGVmZmVjdCBkb2VzIG5vdCBpbXBsZW1lbnQgYSBwcm9jZXNzIGZ1bmN0aW9uOgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgZW5hYmxpbmcgdGhlIGVmZmVjdCBoYXMgbm8gaW1wYWN0IG9uIGxhdGVuY3kgb3IKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIENQVSBsb2FkLgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgRWZmZWN0IGltcGxlbWVudGF0aW9ucyBzZXR0aW5nIHRoaXMgZmxhZyBkbyBub3QgaGF2ZQotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgdG8gaW1wbGVtZW50IGEgcHJvY2VzcyBmdW5jdGlvbi4KLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEluc2VydCBtb2RlCi0jZGVmaW5lIEVGRkVDVF9GTEFHX1RZUEVfU0hJRlQgICAgICAgICAgMAotI2RlZmluZSBFRkZFQ1RfRkxBR19UWVBFX1NJWkUgICAgICAgICAgIDMKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVFlQRV9NQVNLICAgICAgICAgICAoKCgxIDw8IEVGRkVDVF9GTEFHX1RZUEVfU0laRSkgLTEpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgRUZGRUNUX0ZMQUdfVFlQRV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVFlQRV9JTlNFUlQgICAgICAgICAoMCA8PCBFRkZFQ1RfRkxBR19UWVBFX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19UWVBFX0FVWElMSUFSWSAgICAgICgxIDw8IEVGRkVDVF9GTEFHX1RZUEVfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX1RZUEVfUkVQTEFDRSAgICAgICAgKDIgPDwgRUZGRUNUX0ZMQUdfVFlQRV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVFlQRV9QUkVfUFJPQyAgICAgICAoMyA8PCBFRkZFQ1RfRkxBR19UWVBFX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19UWVBFX1BPU1RfUFJPQyAgICAgICg0IDw8IEVGRkVDVF9GTEFHX1RZUEVfU0hJRlQpCi0KLS8vIEluc2VydCBwcmVmZXJlbmNlCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOU0VSVF9TSElGVCAgICAgICAgKEVGRkVDVF9GTEFHX1RZUEVfU0hJRlQgKyBFRkZFQ1RfRkxBR19UWVBFX1NJWkUpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOU0VSVF9TSVpFICAgICAgICAgMwotI2RlZmluZSBFRkZFQ1RfRkxBR19JTlNFUlRfTUFTSyAgICAgICAgICgoKDEgPDwgRUZGRUNUX0ZMQUdfSU5TRVJUX1NJWkUpIC0xKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IEVGRkVDVF9GTEFHX0lOU0VSVF9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfSU5TRVJUX0FOWSAgICAgICAgICAoMCA8PCBFRkZFQ1RfRkxBR19JTlNFUlRfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOU0VSVF9GSVJTVCAgICAgICAgKDEgPDwgRUZGRUNUX0ZMQUdfSU5TRVJUX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19JTlNFUlRfTEFTVCAgICAgICAgICgyIDw8IEVGRkVDVF9GTEFHX0lOU0VSVF9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfSU5TRVJUX0VYQ0xVU0lWRSAgICAoMyA8PCBFRkZFQ1RfRkxBR19JTlNFUlRfU0hJRlQpCi0KLQotLy8gVm9sdW1lIGNvbnRyb2wKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVk9MVU1FX1NISUZUICAgICAgICAoRUZGRUNUX0ZMQUdfSU5TRVJUX1NISUZUICsgRUZGRUNUX0ZMQUdfSU5TRVJUX1NJWkUpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX1ZPTFVNRV9TSVpFICAgICAgICAgMwotI2RlZmluZSBFRkZFQ1RfRkxBR19WT0xVTUVfTUFTSyAgICAgICAgICgoKDEgPDwgRUZGRUNUX0ZMQUdfVk9MVU1FX1NJWkUpIC0xKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IEVGRkVDVF9GTEFHX1ZPTFVNRV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVk9MVU1FX0NUUkwgICAgICAgICAoMSA8PCBFRkZFQ1RfRkxBR19WT0xVTUVfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX1ZPTFVNRV9JTkQgICAgICAgICAgKDIgPDwgRUZGRUNUX0ZMQUdfVk9MVU1FX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19WT0xVTUVfTk9ORSAgICAgICAgICgwIDw8IEVGRkVDVF9GTEFHX1ZPTFVNRV9TSElGVCkKLQotLy8gRGV2aWNlIGluZGljYXRpb24KLSNkZWZpbmUgRUZGRUNUX0ZMQUdfREVWSUNFX1NISUZUICAgICAgICAoRUZGRUNUX0ZMQUdfVk9MVU1FX1NISUZUICsgRUZGRUNUX0ZMQUdfVk9MVU1FX1NJWkUpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0RFVklDRV9TSVpFICAgICAgICAgMwotI2RlZmluZSBFRkZFQ1RfRkxBR19ERVZJQ0VfTUFTSyAgICAgICAgICgoKDEgPDwgRUZGRUNUX0ZMQUdfREVWSUNFX1NJWkUpIC0xKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IEVGRkVDVF9GTEFHX0RFVklDRV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfREVWSUNFX0lORCAgICAgICAgICAoMSA8PCBFRkZFQ1RfRkxBR19ERVZJQ0VfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0RFVklDRV9OT05FICAgICAgICAgKDAgPDwgRUZGRUNUX0ZMQUdfREVWSUNFX1NISUZUKQotCi0vLyBTYW1wbGUgaW5wdXQgbW9kZXMKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfSU5QVVRfU0hJRlQgICAgICAgICAoRUZGRUNUX0ZMQUdfREVWSUNFX1NISUZUICsgRUZGRUNUX0ZMQUdfREVWSUNFX1NJWkUpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOUFVUX1NJWkUgICAgICAgICAgMgotI2RlZmluZSBFRkZFQ1RfRkxBR19JTlBVVF9NQVNLICAgICAgICAgICgoKDEgPDwgRUZGRUNUX0ZMQUdfSU5QVVRfU0laRSkgLTEpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgRUZGRUNUX0ZMQUdfSU5QVVRfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOUFVUX0RJUkVDVCAgICAgICAgKDEgPDwgRUZGRUNUX0ZMQUdfSU5QVVRfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOUFVUX1BST1ZJREVSICAgICAgKDIgPDwgRUZGRUNUX0ZMQUdfSU5QVVRfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOUFVUX0JPVEggICAgICAgICAgKDMgPDwgRUZGRUNUX0ZMQUdfSU5QVVRfU0hJRlQpCi0KLS8vIFNhbXBsZSBvdXRwdXQgbW9kZXMKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfT1VUUFVUX1NISUZUICAgICAgICAoRUZGRUNUX0ZMQUdfSU5QVVRfU0hJRlQgKyBFRkZFQ1RfRkxBR19JTlBVVF9TSVpFKQotI2RlZmluZSBFRkZFQ1RfRkxBR19PVVRQVVRfU0laRSAgICAgICAgIDIKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfT1VUUFVUX01BU0sgICAgICAgICAoKCgxIDw8IEVGRkVDVF9GTEFHX09VVFBVVF9TSVpFKSAtMSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBFRkZFQ1RfRkxBR19PVVRQVVRfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX09VVFBVVF9ESVJFQ1QgICAgICAgKDEgPDwgRUZGRUNUX0ZMQUdfT1VUUFVUX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19PVVRQVVRfUFJPVklERVIgICAgICgyIDw8IEVGRkVDVF9GTEFHX09VVFBVVF9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfT1VUUFVUX0JPVEggICAgICAgICAoMyA8PCBFRkZFQ1RfRkxBR19PVVRQVVRfU0hJRlQpCi0KLS8vIEhhcmR3YXJlIGFjY2VsZXJhdGlvbiBtb2RlCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0hXX0FDQ19TSElGVCAgICAgICAgKEVGRkVDVF9GTEFHX09VVFBVVF9TSElGVCArIEVGRkVDVF9GTEFHX09VVFBVVF9TSVpFKQotI2RlZmluZSBFRkZFQ1RfRkxBR19IV19BQ0NfU0laRSAgICAgICAgIDIKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfSFdfQUNDX01BU0sgICAgICAgICAoKCgxIDw8IEVGRkVDVF9GTEFHX0hXX0FDQ19TSVpFKSAtMSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBFRkZFQ1RfRkxBR19IV19BQ0NfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0hXX0FDQ19TSU1QTEUgICAgICAgKDEgPDwgRUZGRUNUX0ZMQUdfSFdfQUNDX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19IV19BQ0NfVFVOTkVMICAgICAgICgyIDw8IEVGRkVDVF9GTEFHX0hXX0FDQ19TSElGVCkKLQotLy8gQXVkaW8gbW9kZSBpbmRpY2F0aW9uCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0FVRElPX01PREVfU0hJRlQgICAgKEVGRkVDVF9GTEFHX0hXX0FDQ19TSElGVCArIEVGRkVDVF9GTEFHX0hXX0FDQ19TSVpFKQotI2RlZmluZSBFRkZFQ1RfRkxBR19BVURJT19NT0RFX1NJWkUgICAgIDIKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfQVVESU9fTU9ERV9NQVNLICAgICAoKCgxIDw8IEVGRkVDVF9GTEFHX0FVRElPX01PREVfU0laRSkgLTEpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgRUZGRUNUX0ZMQUdfQVVESU9fTU9ERV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfQVVESU9fTU9ERV9JTkQgICAgICAoMSA8PCBFRkZFQ1RfRkxBR19BVURJT19NT0RFX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19BVURJT19NT0RFX05PTkUgICAgICgwIDw8IEVGRkVDVF9GTEFHX0FVRElPX01PREVfU0hJRlQpCi0KLS8vIEF1ZGlvIHNvdXJjZSBpbmRpY2F0aW9uCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0FVRElPX1NPVVJDRV9TSElGVCAgKEVGRkVDVF9GTEFHX0FVRElPX01PREVfU0hJRlQgKyBFRkZFQ1RfRkxBR19BVURJT19NT0RFX1NJWkUpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0FVRElPX1NPVVJDRV9TSVpFICAgMgotI2RlZmluZSBFRkZFQ1RfRkxBR19BVURJT19TT1VSQ0VfTUFTSyAgICgoKDEgPDwgRUZGRUNUX0ZMQUdfQVVESU9fU09VUkNFX1NJWkUpIC0xKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBFRkZFQ1RfRkxBR19BVURJT19TT1VSQ0VfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0FVRElPX1NPVVJDRV9JTkQgICAgKDEgPDwgRUZGRUNUX0ZMQUdfQVVESU9fU09VUkNFX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19BVURJT19TT1VSQ0VfTk9ORSAgICgwIDw8IEVGRkVDVF9GTEFHX0FVRElPX1NPVVJDRV9TSElGVCkKLQotLy8gRWZmZWN0IG9mZmxvYWQgaW5kaWNhdGlvbgotI2RlZmluZSBFRkZFQ1RfRkxBR19PRkZMT0FEX1NISUZUICAgICAgIChFRkZFQ1RfRkxBR19BVURJT19TT1VSQ0VfU0hJRlQgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZGRUNUX0ZMQUdfQVVESU9fU09VUkNFX1NJWkUpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX09GRkxPQURfU0laRSAgICAgICAgMQotI2RlZmluZSBFRkZFQ1RfRkxBR19PRkZMT0FEX01BU0sgICAgICAgICgoKDEgPDwgRUZGRUNUX0ZMQUdfT0ZGTE9BRF9TSVpFKSAtMSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgRUZGRUNUX0ZMQUdfT0ZGTE9BRF9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfT0ZGTE9BRF9TVVBQT1JURUQgICAoMSA8PCBFRkZFQ1RfRkxBR19PRkZMT0FEX1NISUZUKQotCi0vLyBFZmZlY3QgaGFzIG5vIHByb2Nlc3MgaW5kaWNhdGlvbgotI2RlZmluZSBFRkZFQ1RfRkxBR19OT19QUk9DRVNTX1NISUZUICAgICAgIChFRkZFQ1RfRkxBR19PRkZMT0FEX1NISUZUICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGRkVDVF9GTEFHX09GRkxPQURfU0laRSkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfTk9fUFJPQ0VTU19TSVpFICAgICAgICAxCi0jZGVmaW5lIEVGRkVDVF9GTEFHX05PX1BST0NFU1NfTUFTSyAgICAgICAgKCgoMSA8PCBFRkZFQ1RfRkxBR19OT19QUk9DRVNTX1NJWkUpIC0xKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBFRkZFQ1RfRkxBR19OT19QUk9DRVNTX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19OT19QUk9DRVNTICAgICAgICAgICgxIDw8IEVGRkVDVF9GTEFHX05PX1BST0NFU1NfU0hJRlQpCi0KICNkZWZpbmUgRUZGRUNUX01BS0VfQVBJX1ZFUlNJT04oTSwgbSkgICgoKE0pPDwxNikgfCAoKG0pICYgMHhGRkZGKSkKICNkZWZpbmUgRUZGRUNUX0FQSV9WRVJTSU9OX01BSk9SKHYpICAgICgodik+PjE2KQogI2RlZmluZSBFRkZFQ1RfQVBJX1ZFUlNJT05fTUlOT1IodikgICAgKChtKSAmIDB4RkZGRikKIAogCi0KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vICAgICAgRWZmZWN0IGNvbnRyb2wgaW50ZXJmYWNlCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC0yODgsMTUgKzY4LDYgQEAKIC8vIHR5cGUgYW5kIHJldHVybiBpdHMgYWRkcmVzcyBhcyBlZmZlY3RfaGFuZGxlX3QKIHR5cGVkZWYgc3RydWN0IGVmZmVjdF9pbnRlcmZhY2VfcyAqKmVmZmVjdF9oYW5kbGVfdDsKIAotCi0vLyBGb3J3YXJkIGRlZmluaXRpb24gb2YgdHlwZSBhdWRpb19idWZmZXJfdAotdHlwZWRlZiBzdHJ1Y3QgYXVkaW9fYnVmZmVyX3MgYXVkaW9fYnVmZmVyX3Q7Ci0KLQotCi0KLQotCiAvLyBFZmZlY3QgY29udHJvbCBpbnRlcmZhY2UgZGVmaW5pdGlvbgogc3RydWN0IGVmZmVjdF9pbnRlcmZhY2VfcyB7CiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTQyOCw0OTkgKzE5OSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fYnVmZmVyX3QgKm91dEJ1ZmZlcik7CiB9OwogCi0KLS8vCi0vLy0tLSBTdGFuZGFyZGl6ZWQgY29tbWFuZCBjb2RlcyBmb3IgY29tbWFuZCgpIGZ1bmN0aW9uCi0vLwotZW51bSBlZmZlY3RfY29tbWFuZF9lIHsKLSAgIEVGRkVDVF9DTURfSU5JVCwgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgZWZmZWN0IGVuZ2luZQotICAgRUZGRUNUX0NNRF9TRVRfQ09ORklHLCAgICAgICAgICAgLy8gY29uZmlndXJlIGVmZmVjdCBlbmdpbmUgKHNlZSBlZmZlY3RfY29uZmlnX3QpCi0gICBFRkZFQ1RfQ01EX1JFU0VULCAgICAgICAgICAgICAgICAvLyByZXNldCBlZmZlY3QgZW5naW5lCi0gICBFRkZFQ1RfQ01EX0VOQUJMRSwgICAgICAgICAgICAgICAvLyBlbmFibGUgZWZmZWN0IHByb2Nlc3MKLSAgIEVGRkVDVF9DTURfRElTQUJMRSwgICAgICAgICAgICAgIC8vIGRpc2FibGUgZWZmZWN0IHByb2Nlc3MKLSAgIEVGRkVDVF9DTURfU0VUX1BBUkFNLCAgICAgICAgICAgIC8vIHNldCBwYXJhbWV0ZXIgaW1tZWRpYXRlbHkgKHNlZSBlZmZlY3RfcGFyYW1fdCkKLSAgIEVGRkVDVF9DTURfU0VUX1BBUkFNX0RFRkVSUkVELCAgIC8vIHNldCBwYXJhbWV0ZXIgZGVmZXJyZWQKLSAgIEVGRkVDVF9DTURfU0VUX1BBUkFNX0NPTU1JVCwgICAgIC8vIGNvbW1pdCBwcmV2aW91cyBzZXQgcGFyYW1ldGVyIGRlZmVycmVkCi0gICBFRkZFQ1RfQ01EX0dFVF9QQVJBTSwgICAgICAgICAgICAvLyBnZXQgcGFyYW1ldGVyCi0gICBFRkZFQ1RfQ01EX1NFVF9ERVZJQ0UsICAgICAgICAgICAvLyBzZXQgYXVkaW8gZGV2aWNlIChzZWUgYXVkaW8uaCwgYXVkaW9fZGV2aWNlc190KQotICAgRUZGRUNUX0NNRF9TRVRfVk9MVU1FLCAgICAgICAgICAgLy8gc2V0IHZvbHVtZQotICAgRUZGRUNUX0NNRF9TRVRfQVVESU9fTU9ERSwgICAgICAgLy8gc2V0IHRoZSBhdWRpbyBtb2RlIChub3JtYWwsIHJpbmcsIC4uLikKLSAgIEVGRkVDVF9DTURfU0VUX0NPTkZJR19SRVZFUlNFLCAgIC8vIGNvbmZpZ3VyZSBlZmZlY3QgZW5naW5lIHJldmVyc2Ugc3RyZWFtKHNlZSBlZmZlY3RfY29uZmlnX3QpCi0gICBFRkZFQ1RfQ01EX1NFVF9JTlBVVF9ERVZJQ0UsICAgICAvLyBzZXQgY2FwdHVyZSBkZXZpY2UgKHNlZSBhdWRpby5oLCBhdWRpb19kZXZpY2VzX3QpCi0gICBFRkZFQ1RfQ01EX0dFVF9DT05GSUcsICAgICAgICAgICAvLyByZWFkIGVmZmVjdCBlbmdpbmUgY29uZmlndXJhdGlvbgotICAgRUZGRUNUX0NNRF9HRVRfQ09ORklHX1JFVkVSU0UsICAgLy8gcmVhZCBjb25maWd1cmUgZWZmZWN0IGVuZ2luZSByZXZlcnNlIHN0cmVhbSBjb25maWd1cmF0aW9uCi0gICBFRkZFQ1RfQ01EX0dFVF9GRUFUVVJFX1NVUFBPUlRFRF9DT05GSUdTLC8vIGdldCBhbGwgc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zIGZvciBhIGZlYXR1cmUuCi0gICBFRkZFQ1RfQ01EX0dFVF9GRUFUVVJFX0NPTkZJRywgICAvLyBnZXQgY3VycmVudCBmZWF0dXJlIGNvbmZpZ3VyYXRpb24KLSAgIEVGRkVDVF9DTURfU0VUX0ZFQVRVUkVfQ09ORklHLCAgIC8vIHNldCBjdXJyZW50IGZlYXR1cmUgY29uZmlndXJhdGlvbgotICAgRUZGRUNUX0NNRF9TRVRfQVVESU9fU09VUkNFLCAgICAgLy8gc2V0IHRoZSBhdWRpbyBzb3VyY2UgKHNlZSBhdWRpby5oLCBhdWRpb19zb3VyY2VfdCkKLSAgIEVGRkVDVF9DTURfT0ZGTE9BRCwgICAgICAgICAgICAgIC8vIHNldCBpZiBlZmZlY3QgdGhyZWFkIGlzIGFuIG9mZmxvYWQgb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VuZCB0aGUgaW9IYW5kbGUgb2YgdGhlIGVmZmVjdCB0aHJlYWQKLSAgIEVGRkVDVF9DTURfRklSU1RfUFJPUFJJRVRBUlkgPSAweDEwMDAwIC8vIGZpcnN0IHByb3ByaWV0YXJ5IGNvbW1hbmQgY29kZQotfTsKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9JTklUCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBJbml0aWFsaXplIGVmZmVjdCBlbmdpbmU6IEFsbCBjb25maWd1cmF0aW9ucyByZXR1cm4gdG8gZGVmYXVsdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogMAotLy8gIGRhdGE6IE4vQQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihpbnQpCi0vLyAgZGF0YTogc3RhdHVzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX1NFVF9DT05GSUcKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIEFwcGx5IG5ldyBhdWRpbyBwYXJhbWV0ZXJzIGNvbmZpZ3VyYXRpb25zIGZvciBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihlZmZlY3RfY29uZmlnX3QpCi0vLyAgZGF0YTogZWZmZWN0X2NvbmZpZ190Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKGludCkKLS8vICBkYXRhOiBzdGF0dXMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfUkVTRVQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIFJlc2V0IHRoZSBlZmZlY3QgZW5naW5lLiBLZWVwIGNvbmZpZ3VyYXRpb24gYnV0IHJlc2V0cyBzdGF0ZSBhbmQgYnVmZmVyIGNvbnRlbnQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IDAKLS8vICBkYXRhOiBOL0EKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX0VOQUJMRQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgRW5hYmxlIHRoZSBwcm9jZXNzLiBDYWxsZWQgYnkgdGhlIGZyYW1ld29yayBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgdG8gcHJvY2VzcygpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKGludCkKLS8vICBkYXRhOiBzdGF0dXMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfRElTQUJMRQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgRGlzYWJsZSB0aGUgcHJvY2Vzcy4gQ2FsbGVkIGJ5IHRoZSBmcmFtZXdvcmsgYWZ0ZXIgdGhlIGxhc3QgY2FsbCB0byBwcm9jZXNzKCkKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IDAKLS8vICBkYXRhOiBOL0EKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YoaW50KQotLy8gIGRhdGE6IHN0YXR1cwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9TRVRfUEFSQU0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIFNldCBhIHBhcmFtZXRlciBhbmQgYXBwbHkgaXQgaW1tZWRpYXRlbHkKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihlZmZlY3RfcGFyYW1fdCkgKyBzaXplIG9mIHBhcmFtIGFuZCB2YWx1ZQotLy8gIGRhdGE6IGVmZmVjdF9wYXJhbV90ICsgcGFyYW0gKyB2YWx1ZS4gU2VlIGVmZmVjdF9wYXJhbV90IGRlZmluaXRpb24gYmVsb3cgZm9yIHZhbHVlIG9mZnNldAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihpbnQpCi0vLyAgZGF0YTogc3RhdHVzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX1NFVF9QQVJBTV9ERUZFUlJFRAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgU2V0IGEgcGFyYW1ldGVyIGJ1dCBhcHBseSBpdCBvbmx5IHdoZW4gcmVjZWl2aW5nIEVGRkVDVF9DTURfU0VUX1BBUkFNX0NPTU1JVCBjb21tYW5kCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YoZWZmZWN0X3BhcmFtX3QpICsgc2l6ZSBvZiBwYXJhbSBhbmQgdmFsdWUKLS8vICBkYXRhOiBlZmZlY3RfcGFyYW1fdCArIHBhcmFtICsgdmFsdWUuIFNlZSBlZmZlY3RfcGFyYW1fdCBkZWZpbml0aW9uIGJlbG93IGZvciB2YWx1ZSBvZmZzZXQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX1NFVF9QQVJBTV9DT01NSVQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIEFwcGx5IGFsbCBwcmV2aW91c2x5IHJlY2VpdmVkIEVGRkVDVF9DTURfU0VUX1BBUkFNX0RFRkVSUkVEIGNvbW1hbmRzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKGludCkKLS8vICBkYXRhOiBzdGF0dXMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfR0VUX1BBUkFNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBHZXQgYSBwYXJhbWV0ZXIgdmFsdWUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihlZmZlY3RfcGFyYW1fdCkgKyBzaXplIG9mIHBhcmFtCi0vLyAgZGF0YTogZWZmZWN0X3BhcmFtX3QgKyBwYXJhbQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihlZmZlY3RfcGFyYW1fdCkgKyBzaXplIG9mIHBhcmFtIGFuZCB2YWx1ZQotLy8gIGRhdGE6IGVmZmVjdF9wYXJhbV90ICsgcGFyYW0gKyB2YWx1ZS4gU2VlIGVmZmVjdF9wYXJhbV90IGRlZmluaXRpb24gYmVsb3cgZm9yIHZhbHVlIG9mZnNldAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9TRVRfREVWSUNFCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBTZXQgdGhlIHJlbmRlcmluZyBkZXZpY2UgdGhlIGF1ZGlvIG91dHB1dCBwYXRoIGlzIGNvbm5lY3RlZCB0by4gU2VlIGF1ZGlvLmgsIGF1ZGlvX2RldmljZXNfdAotLy8gIGZvciBkZXZpY2UgdmFsdWVzLgotLy8gIFRoZSBlZmZlY3QgaW1wbGVtZW50YXRpb24gbXVzdCBzZXQgRUZGRUNUX0ZMQUdfREVWSUNFX0lORCBmbGFnIGluIGl0cyBkZXNjcmlwdG9yIHRvIHJlY2VpdmUgdGhpcwotLy8gIGNvbW1hbmQgd2hlbiB0aGUgZGV2aWNlIGNoYW5nZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZih1aW50MzJfdCkKLS8vICBkYXRhOiB1aW50MzJfdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IDAKLS8vICBkYXRhOiBOL0EKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfU0VUX1ZPTFVNRQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgU2V0IGFuZCBnZXQgdm9sdW1lLiBVc2VkIGJ5IGF1ZGlvIGZyYW1ld29yayB0byBkZWxlZ2F0ZSB2b2x1bWUgY29udHJvbCB0byBlZmZlY3QgZW5naW5lLgotLy8gIFRoZSBlZmZlY3QgaW1wbGVtZW50YXRpb24gbXVzdCBzZXQgRUZGRUNUX0ZMQUdfVk9MVU1FX0lORCBvciBFRkZFQ1RfRkxBR19WT0xVTUVfQ1RSTCBmbGFnIGluCi0vLyAgaXRzIGRlc2NyaXB0b3IgdG8gcmVjZWl2ZSB0aGlzIGNvbW1hbmQgYmVmb3JlIGV2ZXJ5IGNhbGwgdG8gcHJvY2VzcygpIGZ1bmN0aW9uCi0vLyAgSWYgRUZGRUNUX0ZMQUdfVk9MVU1FX0NUUkwgZmxhZyBpcyBzZXQgaW4gdGhlIGVmZmVjdCBkZXNjcmlwdG9yLCB0aGUgZWZmZWN0IGVuZ2luZSBtdXN0IHJldHVybgotLy8gIHRoZSB2b2x1bWUgdGhhdCBzaG91bGQgYmUgYXBwbGllZCBiZWZvcmUgdGhlIGVmZmVjdCBpcyBwcm9jZXNzZWQuIFRoZSBvdmVyYWxsIHZvbHVtZSAodGhlIHZvbHVtZQotLy8gIGFjdHVhbGx5IGFwcGxpZWQgYnkgdGhlIGVmZmVjdCBlbmdpbmUgbXVsdGlwbGllZCBieSB0aGUgcmV0dXJuZWQgdmFsdWUpIHNob3VsZCBtYXRjaCB0aGUgdmFsdWUKLS8vICBpbmRpY2F0ZWQgaW4gdGhlIGNvbW1hbmQuCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBuICogc2l6ZW9mKHVpbnQzMl90KQotLy8gIGRhdGE6IHZvbHVtZSBmb3IgZWFjaCBjaGFubmVsIGRlZmluZWQgaW4gZWZmZWN0X2NvbmZpZ190IGZvciBvdXRwdXQgYnVmZmVyIGV4cHJlc3NlZCBpbgotLy8gICAgICA4LjI0IGZpeGVkIHBvaW50IGZvcm1hdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IG4gKiBzaXplb2YodWludDMyX3QpIC8gMAotLy8gIGRhdGE6IC0gaWYgRUZGRUNUX0ZMQUdfVk9MVU1FX0NUUkwgaXMgc2V0IGluIGVmZmVjdCBkZXNjcmlwdG9yOgotLy8gICAgICAgICAgICAgIHZvbHVtZSBmb3IgZWFjaCBjaGFubmVsIGRlZmluZWQgaW4gZWZmZWN0X2NvbmZpZ190IGZvciBvdXRwdXQgYnVmZmVyIGV4cHJlc3NlZCBpbgotLy8gICAgICAgICAgICAgIDguMjQgZml4ZWQgcG9pbnQgZm9ybWF0Ci0vLyAgICAgICAgLSBpZiBFRkZFQ1RfRkxBR19WT0xVTUVfQ1RSTCBpcyBub3Qgc2V0IGluIGVmZmVjdCBkZXNjcmlwdG9yOgotLy8gICAgICAgICAgICAgIE4vQQotLy8gIEl0IGlzIGxlZ2FsIHRvIHJlY2VpdmUgYSBudWxsIHBvaW50ZXIgYXMgcFJlcGx5RGF0YSBpbiB3aGljaCBjYXNlIHRoZSBlZmZlY3QgZnJhbWV3b3JrIGhhcwotLy8gIGRlbGVnYXRlZCB2b2x1bWUgY29udHJvbCB0byBhbm90aGVyIGVmZmVjdAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9TRVRfQVVESU9fTU9ERQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgU2V0IHRoZSBhdWRpbyBtb2RlLiBUaGUgZWZmZWN0IGltcGxlbWVudGF0aW9uIG11c3Qgc2V0IEVGRkVDVF9GTEFHX0FVRElPX01PREVfSU5EIGZsYWcgaW4gaXRzCi0vLyAgZGVzY3JpcHRvciB0byByZWNlaXZlIHRoaXMgY29tbWFuZCB3aGVuIHRoZSBhdWRpbyBtb2RlIGNoYW5nZXMuCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YodWludDMyX3QpCi0vLyAgZGF0YTogYXVkaW9fbW9kZV90Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogMAotLy8gIGRhdGE6IE4vQQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9TRVRfQ09ORklHX1JFVkVSU0UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIEFwcGx5IG5ldyBhdWRpbyBwYXJhbWV0ZXJzIGNvbmZpZ3VyYXRpb25zIGZvciBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgb2YgcmV2ZXJzZSBzdHJlYW0uCi0vLyAgQW4gZXhhbXBsZSBvZiByZXZlcnNlIHN0cmVhbSBpcyB0aGUgZWNobyByZWZlcmVuY2Ugc3VwcGxpZWQgdG8gYW4gQWNvdXN0aWMgRWNobyBDYW5jZWxlci4KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihlZmZlY3RfY29uZmlnX3QpCi0vLyAgZGF0YTogZWZmZWN0X2NvbmZpZ190Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKGludCkKLS8vICBkYXRhOiBzdGF0dXMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfU0VUX0lOUFVUX0RFVklDRQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgU2V0IHRoZSBjYXB0dXJlIGRldmljZSB0aGUgYXVkaW8gaW5wdXQgcGF0aCBpcyBjb25uZWN0ZWQgdG8uIFNlZSBhdWRpby5oLCBhdWRpb19kZXZpY2VzX3QKLS8vICBmb3IgZGV2aWNlIHZhbHVlcy4KLS8vICBUaGUgZWZmZWN0IGltcGxlbWVudGF0aW9uIG11c3Qgc2V0IEVGRkVDVF9GTEFHX0RFVklDRV9JTkQgZmxhZyBpbiBpdHMgZGVzY3JpcHRvciB0byByZWNlaXZlIHRoaXMKLS8vICBjb21tYW5kIHdoZW4gdGhlIGRldmljZSBjaGFuZ2VzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YodWludDMyX3QpCi0vLyAgZGF0YTogdWludDMyX3QKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX0dFVF9DT05GSUcKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIFJlYWQgYXVkaW8gcGFyYW1ldGVycyBjb25maWd1cmF0aW9ucyBmb3IgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKGVmZmVjdF9jb25maWdfdCkKLS8vICBkYXRhOiBlZmZlY3RfY29uZmlnX3QKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfR0VUX0NPTkZJR19SRVZFUlNFCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBSZWFkIGF1ZGlvIHBhcmFtZXRlcnMgY29uZmlndXJhdGlvbnMgZm9yIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBvZiByZXZlcnNlIHN0cmVhbQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogMAotLy8gIGRhdGE6IE4vQQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihlZmZlY3RfY29uZmlnX3QpCi0vLyAgZGF0YTogZWZmZWN0X2NvbmZpZ190Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX0dFVF9GRUFUVVJFX1NVUFBPUlRFRF9DT05GSUdTCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBRdWVyaWVzIGZvciBzdXBwb3J0ZWQgY29uZmlndXJhdGlvbnMgZm9yIGEgcGFydGljdWxhciBmZWF0dXJlIChlLmcuIGdldCB0aGUgc3VwcG9ydGVkCi0vLyBjb21iaW5hdGlvbnMgb2YgbWFpbiBhbmQgYXV4aWxpYXJ5IGNoYW5uZWxzIGZvciBhIG5vaXNlIHN1cHByZXNzb3IpLgotLy8gVGhlIGNvbW1hbmQgcGFyYW1ldGVyIGlzIHRoZSBmZWF0dXJlIGlkZW50aWZpZXIgKFNlZSBlZmZlY3RfZmVhdHVyZV9lIGZvciBhIGxpc3Qgb2YgZGVmaW5lZAotLy8gZmVhdHVyZXMpIGZvbGxvd2VkIGJ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgdG8gcmV0dXJuLgotLy8gVGhlIHJlcGx5IGlzIGNvbXBvc2VkIG9mOgotLy8gIC0gc3RhdHVzICh1aW50MzJfdCk6Ci0vLyAgICAgICAgICAtIDAgaWYgZmVhdHVyZSBpcyBzdXBwb3J0ZWQKLS8vICAgICAgICAgIC0gLUVOT1NZUyBpZiB0aGUgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkLAotLy8gICAgICAgICAgLSAtRU5PTUVNIGlmIHRoZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBidXQgdGhlIHRvdGFsIG51bWJlciBvZiBzdXBwb3J0ZWQgY29uZmlndXJhdGlvbnMKLS8vICAgICAgICAgIGV4Y2VlZHMgdGhlIG1heGltdW0gbnVtYmVyIGluZGljYXRlZCBieSB0aGUgY2FsbGVyLgotLy8gIC0gdG90YWwgbnVtYmVyIG9mIHN1cHBvcnRlZCBjb25maWd1cmF0aW9ucyAodWludDMyX3QpCi0vLyAgLSBhbiBhcnJheSBvZiBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3JzLgotLy8gVGhlIGFjdHVhbCBudW1iZXIgb2YgZGVzY3JpcHRvcnMgcmV0dXJuZWQgbXVzdCBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIG51bWJlciBpbmRpY2F0ZWQgYnkKLS8vIHRoZSBjYWxsZXIuCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiAyIHggc2l6ZW9mKHVpbnQzMl90KQotLy8gIGRhdGE6IGVmZmVjdF9mZWF0dXJlX2UgKyBtYXhpbXVtIG51bWJlciBvZiBjb25maWd1cmF0aW9ucyB0byByZXR1cm4KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiAyIHggc2l6ZW9mKHVpbnQzMl90KSArIG4geCBzaXplb2YgKDxjb25maWcgZGVzY3JpcHRvcj4pCi0vLyAgZGF0YTogc3RhdHVzICsgdG90YWwgbnVtYmVyIG9mIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCArIGFycmF5IG9mIG4gY29uZmlnIGRlc2NyaXB0b3JzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX0dFVF9GRUFUVVJFX0NPTkZJRwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgUmV0cmlldmVzIGN1cnJlbnQgY29uZmlndXJhdGlvbiBmb3IgYSBnaXZlbiBmZWF0dXJlLgotLy8gVGhlIHJlcGx5IHN0YXR1cyBpczoKLS8vICAgICAgLSAwIGlmIGZlYXR1cmUgaXMgc3VwcG9ydGVkCi0vLyAgICAgIC0gLUVOT1NZUyBpZiB0aGUgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkLAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKHVpbnQzMl90KQotLy8gIGRhdGE6IGVmZmVjdF9mZWF0dXJlX2UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mICg8Y29uZmlnIGRlc2NyaXB0b3I+KQotLy8gIGRhdGE6IHN0YXR1cyArIGNvbmZpZyBkZXNjcmlwdG9yCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX1NFVF9GRUFUVVJFX0NPTkZJRwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgU2V0cyBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZm9yIGEgZ2l2ZW4gZmVhdHVyZS4KLS8vIFRoZSByZXBseSBzdGF0dXMgaXM6Ci0vLyAgICAgIC0gMCBpZiBmZWF0dXJlIGlzIHN1cHBvcnRlZAotLy8gICAgICAtIC1FTk9TWVMgaWYgdGhlIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCwKLS8vICAgICAgLSAtRUlOVkFMIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YgKDxjb25maWcgZGVzY3JpcHRvcj4pCi0vLyAgZGF0YTogZWZmZWN0X2ZlYXR1cmVfZSArIGNvbmZpZyBkZXNjcmlwdG9yCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKHVpbnQzMl90KQotLy8gIGRhdGE6IHN0YXR1cwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9TRVRfQVVESU9fU09VUkNFCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBTZXQgdGhlIGF1ZGlvIHNvdXJjZSB0aGUgY2FwdHVyZSBwYXRoIGlzIGNvbmZpZ3VyZWQgZm9yIChDYW1jb3JkZXIsIHZvaWNlIHJlY29nbml0aW9uLi4uKS4KLS8vICBTZWUgYXVkaW8uaCwgYXVkaW9fc291cmNlX3QgZm9yIHZhbHVlcy4KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZih1aW50MzJfdCkKLS8vICBkYXRhOiB1aW50MzJfdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IDAKLS8vICBkYXRhOiBOL0EKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfT0ZGTE9BRAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgMS5pbmRpY2F0ZSBpZiB0aGUgcGxheWJhY2sgdGhyZWFkIHRoZSBlZmZlY3QgaXMgYXR0YWNoZWQgdG8gaXMgb2ZmbG9hZGVkIG9yIG5vdAotLy8gIDIudXBkYXRlIHRoZSBpbyBoYW5kbGUgb2YgdGhlIHBsYXliYWNrIHRocmVhZCB0aGUgZWZmZWN0IGlzIGF0dGFjaGVkIHRvCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YoZWZmZWN0X29mZmxvYWRfcGFyYW1fdCkKLS8vICBkYXRhOiBlZmZlY3Rfb2ZmbG9hZF9wYXJhbV90Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKHVpbnQzMl90KQotLy8gIGRhdGE6IHVpbnQzMl90Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX0ZJUlNUX1BST1BSSUVUQVJZCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBBbGwgcHJvcHJpZXRhcnkgZWZmZWN0IGNvbW1hbmRzIG11c3QgdXNlIGNvbW1hbmQgY29kZXMgYWJvdmUgdGhpcyB2YWx1ZS4gVGhlIHNpemUgYW5kIGZvcm1hdCBvZgotLy8gIGNvbW1hbmQgYW5kIHJlc3BvbnNlIGZpZWxkcyBpcyBmcmVlIGluIHRoaXMgY2FzZQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0KLS8vIEF1ZGlvIGJ1ZmZlciBkZXNjcmlwdG9yIHVzZWQgYnkgcHJvY2VzcygpLCBidWZmZXJQcm92aWRlcigpIGZ1bmN0aW9ucyBhbmQgYnVmZmVyX2NvbmZpZ190Ci0vLyBzdHJ1Y3R1cmUuIE11bHRpLWNoYW5uZWwgYXVkaW8gaXMgYWx3YXlzIGludGVybGVhdmVkLiBUaGUgY2hhbm5lbCBvcmRlciBpcyBmcm9tIExTQiB0byBNU0Igd2l0aAotLy8gcmVnYXJkIHRvIHRoZSBjaGFubmVsIG1hc2sgZGVmaW5pdGlvbiBpbiBhdWRpby5oLCBhdWRpb19jaGFubmVsX21hc2tfdCBlLmcgOgotLy8gU3RlcmVvOiBsZWZ0LCByaWdodAotLy8gNSBwb2ludCAxOiBmcm9udCBsZWZ0LCBmcm9udCByaWdodCwgZnJvbnQgY2VudGVyLCBsb3cgZnJlcXVlbmN5LCBiYWNrIGxlZnQsIGJhY2sgcmlnaHQKLS8vIFRoZSBidWZmZXIgc2l6ZSBpcyBleHByZXNzZWQgaW4gZnJhbWUgY291bnQsIGEgZnJhbWUgYmVpbmcgY29tcG9zZWQgb2Ygc2FtcGxlcyBmb3IgYWxsCi0vLyBjaGFubmVscyBhdCBhIGdpdmVuIHRpbWUuIEZyYW1lIHNpemUgZm9yIHVuc3BlY2lmaWVkIGZvcm1hdCAoQVVESU9fRk9STUFUX09USEVSKSBpcyA4IGJpdCBieQotLy8gZGVmaW5pdGlvbgotc3RydWN0IGF1ZGlvX2J1ZmZlcl9zIHsKLSAgICBzaXplX3QgICBmcmFtZUNvdW50OyAgICAgICAgLy8gbnVtYmVyIG9mIGZyYW1lcyBpbiBidWZmZXIKLSAgICB1bmlvbiB7Ci0gICAgICAgIHZvaWQqICAgICAgIHJhdzsgICAgICAgIC8vIHJhdyBwb2ludGVyIHRvIHN0YXJ0IG9mIGJ1ZmZlcgotICAgICAgICBpbnQzMl90KiAgICBzMzI7ICAgICAgICAvLyBwb2ludGVyIHRvIHNpZ25lZCAzMiBiaXQgZGF0YSBhdCBzdGFydCBvZiBidWZmZXIKLSAgICAgICAgaW50MTZfdCogICAgczE2OyAgICAgICAgLy8gcG9pbnRlciB0byBzaWduZWQgMTYgYml0IGRhdGEgYXQgc3RhcnQgb2YgYnVmZmVyCi0gICAgICAgIHVpbnQ4X3QqICAgIHU4OyAgICAgICAgIC8vIHBvaW50ZXIgdG8gdW5zaWduZWQgOCBiaXQgZGF0YSBhdCBzdGFydCBvZiBidWZmZXIKLSAgICB9OwotfTsKLQotLy8gVGhlIGJ1ZmZlcl9wcm92aWRlcl9zIHN0cnVjdHVyZSBjb250YWlucyBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZAotLy8gYnkgdGhlIGVmZmVjdCBlbmdpbmUgcHJvY2VzcygpIGZ1bmN0aW9uIHRvIHF1ZXJ5IGFuZCByZWxlYXNlIGlucHV0Ci0vLyBvciBvdXRwdXQgYXVkaW8gYnVmZmVyLgotLy8gVGhlIGdldEJ1ZmZlcigpIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byByZXRyaWV2ZSBhIGJ1ZmZlciB3aGVyZSBkYXRhCi0vLyBzaG91bGQgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gYnkgcHJvY2VzcygpIGZ1bmN0aW9uLgotLy8gVGhlIHJlbGVhc2VCdWZmZXIoKSBmdW5jdGlvbiBNVVNUIGJlIGNhbGxlZCB3aGVuIHRoZSBidWZmZXIgcmV0cmlldmVkCi0vLyB3aXRoIGdldEJ1ZmZlcigpIGlzIG5vdCBuZWVkZWQgYW55bW9yZS4KLS8vIFRoZSBwcm9jZXNzIGZ1bmN0aW9uIHNob3VsZCB1c2UgdGhlIGJ1ZmZlciBwcm92aWRlciBtZWNoYW5pc20gdG8gcmV0cmlldmUKLS8vIGlucHV0IG9yIG91dHB1dCBidWZmZXIgaWYgdGhlIGluQnVmZmVyIG9yIG91dEJ1ZmZlciBwYXNzZWQgYXMgYXJndW1lbnQgaXMgTlVMTAotLy8gYW5kIHRoZSBidWZmZXIgY29uZmlndXJhdGlvbiAoYnVmZmVyX2NvbmZpZ190KSBnaXZlbiBieSB0aGUgRUZGRUNUX0NNRF9TRVRfQ09ORklHCi0vLyBjb21tYW5kIGRpZCBub3Qgc3BlY2lmeSBhbiBhdWRpbyBidWZmZXIuCi0KLXR5cGVkZWYgaW50MzJfdCAoKiBidWZmZXJfZnVuY3Rpb25fdCkodm9pZCAqY29va2llLCBhdWRpb19idWZmZXJfdCAqYnVmZmVyKTsKLQotdHlwZWRlZiBzdHJ1Y3QgYnVmZmVyX3Byb3ZpZGVyX3MgewotICAgIGJ1ZmZlcl9mdW5jdGlvbl90IGdldEJ1ZmZlcjsgICAgICAgLy8gcmV0cmlldmUgbmV4dCBidWZmZXIKLSAgICBidWZmZXJfZnVuY3Rpb25fdCByZWxlYXNlQnVmZmVyOyAgIC8vIHJlbGVhc2UgdXNlZCBidWZmZXIKLSAgICB2b2lkICAgICAgICpjb29raWU7ICAgICAgICAgICAgICAgIC8vIGZvciB1c2UgYnkgY2xpZW50IG9mIGJ1ZmZlciBwcm92aWRlciBmdW5jdGlvbnMKLX0gYnVmZmVyX3Byb3ZpZGVyX3Q7Ci0KLQotLy8gVGhlIGJ1ZmZlcl9jb25maWdfcyBzdHJ1Y3R1cmUgc3BlY2lmaWVzIHRoZSBpbnB1dCBvciBvdXRwdXQgYXVkaW8gZm9ybWF0Ci0vLyB0byBiZSB1c2VkIGJ5IHRoZSBlZmZlY3QgZW5naW5lLiBJdCBpcyBwYXJ0IG9mIHRoZSBlZmZlY3RfY29uZmlnX3QKLS8vIHN0cnVjdHVyZSB0aGF0IGRlZmluZXMgYm90aCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlciBjb25maWd1cmF0aW9ucyBhbmQgaXMKLS8vIHBhc3NlZCBieSB0aGUgRUZGRUNUX0NNRF9TRVRfQ09ORklHIG9yIEVGRkVDVF9DTURfU0VUX0NPTkZJR19SRVZFUlNFIGNvbW1hbmQuCi10eXBlZGVmIHN0cnVjdCBidWZmZXJfY29uZmlnX3MgewotICAgIGF1ZGlvX2J1ZmZlcl90ICBidWZmZXI7ICAgICAvLyBidWZmZXIgZm9yIHVzZSBieSBwcm9jZXNzKCkgZnVuY3Rpb24gaWYgbm90IHBhc3NlZCBleHBsaWNpdGx5Ci0gICAgdWludDMyX3QgICBzYW1wbGluZ1JhdGU7ICAgIC8vIHNhbXBsaW5nIHJhdGUKLSAgICB1aW50MzJfdCAgIGNoYW5uZWxzOyAgICAgICAgLy8gY2hhbm5lbCBtYXNrIChzZWUgYXVkaW9fY2hhbm5lbF9tYXNrX3QgaW4gYXVkaW8uaCkKLSAgICBidWZmZXJfcHJvdmlkZXJfdCBidWZmZXJQcm92aWRlcjsgICAvLyBidWZmZXIgcHJvdmlkZXIKLSAgICB1aW50OF90ICAgIGZvcm1hdDsgICAgICAgICAgLy8gQXVkaW8gZm9ybWF0IChzZWUgYXVkaW9fZm9ybWF0X3QgaW4gYXVkaW8uaCkKLSAgICB1aW50OF90ICAgIGFjY2Vzc01vZGU7ICAgICAgLy8gcmVhZC93cml0ZSBvciBhY2N1bXVsYXRlIGluIGJ1ZmZlciAoZWZmZWN0X2J1ZmZlcl9hY2Nlc3NfZSkKLSAgICB1aW50MTZfdCAgIG1hc2s7ICAgICAgICAgICAgLy8gaW5kaWNhdGVzIHdoaWNoIG9mIHRoZSBhYm92ZSBmaWVsZHMgaXMgdmFsaWQKLX0gYnVmZmVyX2NvbmZpZ190OwotCi0vLyBWYWx1ZXMgZm9yICJhY2Nlc3NNb2RlIiBmaWVsZCBvZiBidWZmZXJfY29uZmlnX3Q6Ci0vLyAgIG92ZXJ3cml0ZSwgcmVhZCBvbmx5LCBhY2N1bXVsYXRlIChyZWFkL21vZGlmeS93cml0ZSkKLWVudW0gZWZmZWN0X2J1ZmZlcl9hY2Nlc3NfZSB7Ci0gICAgRUZGRUNUX0JVRkZFUl9BQ0NFU1NfV1JJVEUsCi0gICAgRUZGRUNUX0JVRkZFUl9BQ0NFU1NfUkVBRCwKLSAgICBFRkZFQ1RfQlVGRkVSX0FDQ0VTU19BQ0NVTVVMQVRFCi0KLX07Ci0KLS8vIGZlYXR1cmUgaWRlbnRpZmllcnMgZm9yIEVGRkVDVF9DTURfR0VUX0ZFQVRVUkVfU1VQUE9SVEVEX0NPTkZJR1MgY29tbWFuZAotZW51bSBlZmZlY3RfZmVhdHVyZV9lIHsKLSAgICBFRkZFQ1RfRkVBVFVSRV9BVVhfQ0hBTk5FTFMsIC8vIHN1cHBvcnRzIGF1eGlsaWFyeSBjaGFubmVscyAoZS5nLiBkdWFsIG1pYyBub2lzZSBzdXBwcmVzc29yKQotICAgIEVGRkVDVF9GRUFUVVJFX0NOVAotfTsKLQotLy8gRUZGRUNUX0ZFQVRVUkVfQVVYX0NIQU5ORUxTIGZlYXR1cmUgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9yLiBEZXNjcmliZSBhIGNvbWJpbmF0aW9uCi0vLyBvZiBtYWluIGFuZCBhdXhpbGlhcnkgY2hhbm5lbHMgc3VwcG9ydGVkCi10eXBlZGVmIHN0cnVjdCBjaGFubmVsX2NvbmZpZ19zIHsKLSAgICBhdWRpb19jaGFubmVsX21hc2tfdCBtYWluX2NoYW5uZWxzOyAvLyBjaGFubmVsIG1hc2sgZm9yIG1haW4gY2hhbm5lbHMKLSAgICBhdWRpb19jaGFubmVsX21hc2tfdCBhdXhfY2hhbm5lbHM7ICAvLyBjaGFubmVsIG1hc2sgZm9yIGF1eGlsaWFyeSBjaGFubmVscwotfSBjaGFubmVsX2NvbmZpZ190OwotCi0KLS8vIFZhbHVlcyBmb3IgYml0IGZpZWxkICJtYXNrIiBpbiBidWZmZXJfY29uZmlnX3QuIElmIGEgYml0IGlzIHNldCwgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQKLS8vIGluIGJ1ZmZlcl9jb25maWdfdCBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGV4ZWN1dGluZyB0aGUgRUZGRUNUX0NNRF9TRVRfQ09ORklHIGNvbW1hbmQKLSNkZWZpbmUgRUZGRUNUX0NPTkZJR19CVUZGRVIgICAgMHgwMDAxICAvLyBidWZmZXIgZmllbGQgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQKLSNkZWZpbmUgRUZGRUNUX0NPTkZJR19TTVBfUkFURSAgMHgwMDAyICAvLyBzYW1wbGluZ1JhdGUgZmllbGQgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQKLSNkZWZpbmUgRUZGRUNUX0NPTkZJR19DSEFOTkVMUyAgMHgwMDA0ICAvLyBjaGFubmVscyBmaWVsZCBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudAotI2RlZmluZSBFRkZFQ1RfQ09ORklHX0ZPUk1BVCAgICAweDAwMDggIC8vIGZvcm1hdCBmaWVsZCBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudAotI2RlZmluZSBFRkZFQ1RfQ09ORklHX0FDQ19NT0RFICAweDAwMTAgIC8vIGFjY2Vzc01vZGUgZmllbGQgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQKLSNkZWZpbmUgRUZGRUNUX0NPTkZJR19QUk9WSURFUiAgMHgwMDIwICAvLyBidWZmZXJQcm92aWRlciBmaWVsZCBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudAotI2RlZmluZSBFRkZFQ1RfQ09ORklHX0FMTCAoRUZGRUNUX0NPTkZJR19CVUZGRVIgfCBFRkZFQ1RfQ09ORklHX1NNUF9SQVRFIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZGRUNUX0NPTkZJR19DSEFOTkVMUyB8IEVGRkVDVF9DT05GSUdfRk9STUFUIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZGRUNUX0NPTkZJR19BQ0NfTU9ERSB8IEVGRkVDVF9DT05GSUdfUFJPVklERVIpCi0KLQotLy8gZWZmZWN0X2NvbmZpZ19zIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIGZvcm1hdCBvZiB0aGUgcENtZERhdGEgYXJndW1lbnQgb2YgRUZGRUNUX0NNRF9TRVRfQ09ORklHCi0vLyBjb21tYW5kIHRvIGNvbmZpZ3VyZSBhdWRpbyBwYXJhbWV0ZXJzIGFuZCBidWZmZXJzIGZvciBlZmZlY3QgZW5naW5lIGlucHV0IGFuZCBvdXRwdXQuCi10eXBlZGVmIHN0cnVjdCBlZmZlY3RfY29uZmlnX3MgewotICAgIGJ1ZmZlcl9jb25maWdfdCAgIGlucHV0Q2ZnOwotICAgIGJ1ZmZlcl9jb25maWdfdCAgIG91dHB1dENmZzsKLX0gZWZmZWN0X2NvbmZpZ190OwotCi0KLS8vIGVmZmVjdF9wYXJhbV9zIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIGZvcm1hdCBvZiB0aGUgcENtZERhdGEgYXJndW1lbnQgb2YgRUZGRUNUX0NNRF9TRVRfUEFSQU0KLS8vIGNvbW1hbmQgYW5kIHBDbWREYXRhIGFuZCBwUmVwbHlEYXRhIG9mIEVGRkVDVF9DTURfR0VUX1BBUkFNIGNvbW1hbmQuCi0vLyBwc2l6ZSBhbmQgdnNpemUgcmVwcmVzZW50IHRoZSBhY3R1YWwgc2l6ZSBvZiBwYXJhbWV0ZXIgYW5kIHZhbHVlLgotLy8KLS8vIE5PVEU6IHRoZSBzdGFydCBvZiB2YWx1ZSBmaWVsZCBpbnNpZGUgdGhlIGRhdGEgZmllbGQgaXMgYWx3YXlzIG9uIGEgMzIgYml0IGJvdW5kYXJ5OgotLy8KLS8vICArLS0tLS0tLS0tLS0rCi0vLyAgfCBzdGF0dXMgICAgfCBzaXplb2YoaW50KQotLy8gICstLS0tLS0tLS0tLSsKLS8vICB8IHBzaXplICAgICB8IHNpemVvZihpbnQpCi0vLyAgKy0tLS0tLS0tLS0tKwotLy8gIHwgdnNpemUgICAgIHwgc2l6ZW9mKGludCkKLS8vICArLS0tLS0tLS0tLS0rCi0vLyAgfCAgICAgICAgICAgfCAgIHwgICAgICAgICAgIHwKLS8vICB+IHBhcmFtZXRlciB+ICAgPiBwc2l6ZSAgICAgfAotLy8gIHwgICAgICAgICAgIHwgICB8ICAgICAgICAgICA+ICAoKHBzaXplIC0gMSkvc2l6ZW9mKGludCkgKyAxKSAqIHNpemVvZihpbnQpCi0vLyAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgIHwKLS8vICB8IHBhZGRpbmcgICB8ICAgICAgICAgICAgICAgfAotLy8gICstLS0tLS0tLS0tLSsKLS8vICB8ICAgICAgICAgICB8ICAgfAotLy8gIH4gdmFsdWUgICAgIH4gICA+IHZzaXplCi0vLyAgfCAgICAgICAgICAgfCAgIHwKLS8vICArLS0tLS0tLS0tLS0rCi0KLXR5cGVkZWYgc3RydWN0IGVmZmVjdF9wYXJhbV9zIHsKLSAgICBpbnQzMl90ICAgICBzdGF0dXM7ICAgICAvLyBUcmFuc2FjdGlvbiBzdGF0dXMgKHVudXNlZCBmb3IgY29tbWFuZCwgdXNlZCBmb3IgcmVwbHkpCi0gICAgdWludDMyX3QgICAgcHNpemU7ICAgICAgLy8gUGFyYW1ldGVyIHNpemUKLSAgICB1aW50MzJfdCAgICB2c2l6ZTsgICAgICAvLyBWYWx1ZSBzaXplCi0gICAgY2hhciAgICAgICAgZGF0YVtdOyAgICAgLy8gU3RhcnQgb2YgUGFyYW1ldGVyICsgVmFsdWUgZGF0YQotfSBlZmZlY3RfcGFyYW1fdDsKLQotLy8gTWF4aW11bSBlZmZlY3RfcGFyYW1fdCBzaXplCi0jZGVmaW5lIEVGRkVDVF9QQVJBTV9TSVpFX01BWCAgICAgICA2NTUzNgotCi0vLyBzdHJ1Y3R1cmUgdXNlZCBieSBFRkZFQ1RfQ01EX09GRkxPQUQgY29tbWFuZAotdHlwZWRlZiBzdHJ1Y3QgZWZmZWN0X29mZmxvYWRfcGFyYW1fcyB7Ci0gICAgYm9vbCBpc09mZmxvYWQ7ICAgICAgICAgLy8gdHJ1ZSBpZiB0aGUgcGxheWJhY2sgdGhyZWFkIHRoZSBlZmZlY3QgaXMgYXR0YWNoZWQgdG8gaXMgb2ZmbG9hZGVkCi0gICAgaW50IGlvSGFuZGxlOyAgICAgICAgICAgLy8gaW8gaGFuZGxlIG9mIHRoZSBwbGF5YmFjayB0aHJlYWQgdGhlIGVmZmVjdCBpcyBhdHRhY2hlZCB0bwotfSBlZmZlY3Rfb2ZmbG9hZF9wYXJhbV90OwotCi0KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vICAgICAgRWZmZWN0IGxpYnJhcnkgaW50ZXJmYWNlCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2NhbWVyYTMuaCBiL2luY2x1ZGUvaGFyZHdhcmUvY2FtZXJhMy5oCmluZGV4IGE3ZGYwZWUuLmNlYzJhYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvY2FtZXJhMy5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvY2FtZXJhMy5oCkBAIC0xNDc5LDYgKzE0NzksMTMgQEAKICAgICAgKiAgICAgIGFuZHJvaWQubGVucy5vcHRpY2FsU3RhYmlsaXphdGlvbk1vZGUgKGlmIGl0IGlzIHN1cHBvcnRlZCkKICAgICAgKiAgICAgIGFuZHJvaWQuc2NhbGVyLmNyb3BSZWdpb24KICAgICAgKiAgICAgIGFuZHJvaWQuc3RhdGlzdGljcy5mYWNlRGV0ZWN0TW9kZSAoaWYgaXQgaXMgc3VwcG9ydGVkKQorICAgICAqICAgNi4gVG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgZGF0YSBwYXNzZWQgYWNyb3NzIHByb2Nlc3MgYm91bmRhcmllcyBhdAorICAgICAqICAgICAgaGlnaCBmcmFtZSByYXRlLCB3aXRoaW4gb25lIGJhdGNoLCBjYW1lcmEgZnJhbWV3b3JrIG9ubHkgcHJvcGFnYXRlcworICAgICAqICAgICAgdGhlIGxhc3Qgc2h1dHRlciBub3RpZnkgYW5kIHRoZSBsYXN0IGNhcHR1cmUgcmVzdWx0cyAoaW5jbHVkaW5nIHBhcnRpYWwKKyAgICAgKiAgICAgIHJlc3VsdHMgYW5kIGZpbmFsIHJlc3VsdCkgdG8gdGhlIGFwcC4gVGhlIHNodXR0ZXIgbm90aWZpZXMgYW5kIGNhcHR1cmUKKyAgICAgKiAgICAgIHJlc3VsdHMgZm9yIHRoZSBvdGhlciByZXF1ZXN0cyBpbiB0aGUgYmF0Y2ggYXJlIGRlcml2ZWQgYnkKKyAgICAgKiAgICAgIHRoZSBjYW1lcmEgZnJhbWV3b3JrLiBBcyBhIHJlc3VsdCwgdGhlIEhBTCBjYW4gcmV0dXJuIGVtcHR5IG1ldGFkYXRhCisgICAgICogICAgICBleGNlcHQgZm9yIHRoZSBsYXN0IHJlc3VsdCBpbiB0aGUgYmF0Y2guCiAgICAgICoKICAgICAgKiBGb3IgbW9yZSBkZXRhaWxzIGFib3V0IGhpZ2ggc3BlZWQgc3RyZWFtIHJlcXVpcmVtZW50cywgc2VlCiAgICAgICogYW5kcm9pZC5jb250cm9sLmF2YWlsYWJsZUhpZ2hTcGVlZFZpZGVvQ29uZmlndXJhdGlvbnMgYW5kIENPTlNUUkFJTkVEX0hJR0hfU1BFRURfVklERU8KQEAgLTE1OTcsNiArMTYwNCwxMyBAQAogICAgICAqICAgdmFsdWUgb2YgdGhpcyBpcyAwLgogICAgICAqICAgRm9yIGFsbCBzdHJlYW1zIHBhc3NlZCB2aWEgY29uZmlndXJlX3N0cmVhbXMoKSwgdGhlIEhBTCBtdXN0IHdyaXRlCiAgICAgICogICBvdmVyIHRoaXMgZmllbGQgd2l0aCBpdHMgdXNhZ2UgZmxhZ3MuCisgICAgICoKKyAgICAgKiAgIEZyb20gQW5kcm9pZCBPLCB0aGUgdXNhZ2UgZmxhZyBmb3IgYW4gb3V0cHV0IHN0cmVhbSBtYXkgYmUgYml0d2lzZQorICAgICAqICAgY29tYmluYXRpb24gb2YgdXNhZ2UgZmxhZ3MgZm9yIG11bHRpcGxlIGNvbnN1bWVycywgZm9yIHRoZSBwdXJwb3NlIG9mCisgICAgICogICBzaGFyaW5nIG9uZSBjYW1lcmEgc3RyZWFtIGJldHdlZW4gdGhvc2UgY29uc3VtZXJzLiBUaGUgSEFMIG11c3QgZmFpbAorICAgICAqICAgY29uZmlndXJlX3N0cmVhbXMgY2FsbCB3aXRoIC1FSU5WQUwgaWYgdGhlIGNvbWJpbmVkIGZsYWdzIGNhbm5vdCBiZQorICAgICAqICAgc3VwcG9ydGVkIGR1ZSB0byBpbWNvbXBhdGlibGUgYnVmZmVyIGZvcm1hdCwgZGF0YVNwYWNlLCBvciBvdGhlciBoYXJkd2FyZQorICAgICAqICAgbGltaXRhdGlvbnMuCiAgICAgICovCiAgICAgdWludDMyX3QgdXNhZ2U7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvY2FtZXJhX2NvbW1vbi5oIGIvaW5jbHVkZS9oYXJkd2FyZS9jYW1lcmFfY29tbW9uLmgKaW5kZXggYzc0ZDdiYi4uN2JhZmE4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oYXJkd2FyZS9jYW1lcmFfY29tbW9uLmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9jYW1lcmFfY29tbW9uLmgKQEAgLTE0Myw4ICsxNDMsOCBAQAogI2RlZmluZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzFfMCBIQVJEV0FSRV9ERVZJQ0VfQVBJX1ZFUlNJT04oMSwgMCkgLy8gREVQUkVDQVRFRAogI2RlZmluZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzJfMCBIQVJEV0FSRV9ERVZJQ0VfQVBJX1ZFUlNJT04oMiwgMCkgLy8gTk8gTE9OR0VSIFNVUFBPUlRFRAogI2RlZmluZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzJfMSBIQVJEV0FSRV9ERVZJQ0VfQVBJX1ZFUlNJT04oMiwgMSkgLy8gTk8gTE9OR0VSIFNVUFBPUlRFRAotI2RlZmluZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfMCBIQVJEV0FSRV9ERVZJQ0VfQVBJX1ZFUlNJT04oMywgMCkKLSNkZWZpbmUgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzEgSEFSRFdBUkVfREVWSUNFX0FQSV9WRVJTSU9OKDMsIDEpCisjZGVmaW5lIENBTUVSQV9ERVZJQ0VfQVBJX1ZFUlNJT05fM18wIEhBUkRXQVJFX0RFVklDRV9BUElfVkVSU0lPTigzLCAwKSAvLyBOTyBMT05HRVIgU1VQUE9SVEVECisjZGVmaW5lIENBTUVSQV9ERVZJQ0VfQVBJX1ZFUlNJT05fM18xIEhBUkRXQVJFX0RFVklDRV9BUElfVkVSU0lPTigzLCAxKSAvLyBOTyBMT05HRVIgU1VQUE9SVEVECiAjZGVmaW5lIENBTUVSQV9ERVZJQ0VfQVBJX1ZFUlNJT05fM18yIEhBUkRXQVJFX0RFVklDRV9BUElfVkVSU0lPTigzLCAyKQogI2RlZmluZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfMyBIQVJEV0FSRV9ERVZJQ0VfQVBJX1ZFUlNJT04oMywgMykKICNkZWZpbmUgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzQgSEFSRFdBUkVfREVWSUNFX0FQSV9WRVJTSU9OKDMsIDQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2ZpbmdlcnByaW50LmggYi9pbmNsdWRlL2hhcmR3YXJlL2ZpbmdlcnByaW50LmgKaW5kZXggYjQ0NjViYS4uODZjZWQ5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oYXJkd2FyZS9maW5nZXJwcmludC5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvZmluZ2VycHJpbnQuaApAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBGSU5HRVJQUklOVF9NT0RVTEVfQVBJX1ZFUlNJT05fMV8wIEhBUkRXQVJFX01PRFVMRV9BUElfVkVSU0lPTigxLCAwKQogI2RlZmluZSBGSU5HRVJQUklOVF9NT0RVTEVfQVBJX1ZFUlNJT05fMl8wIEhBUkRXQVJFX01PRFVMRV9BUElfVkVSU0lPTigyLCAwKQogI2RlZmluZSBGSU5HRVJQUklOVF9NT0RVTEVfQVBJX1ZFUlNJT05fMl8xIEhBUkRXQVJFX01PRFVMRV9BUElfVkVSU0lPTigyLCAxKQorI2RlZmluZSBGSU5HRVJQUklOVF9NT0RVTEVfQVBJX1ZFUlNJT05fM18wIEhBUkRXQVJFX01PRFVMRV9BUElfVkVSU0lPTigzLCAwKQogI2RlZmluZSBGSU5HRVJQUklOVF9IQVJEV0FSRV9NT0RVTEVfSUQgImZpbmdlcnByaW50IgogCiB0eXBlZGVmIGVudW0gZmluZ2VycHJpbnRfbXNnX3R5cGUgewpAQCAtNTEsNiArNTIsNyBAQAogICAgIEZJTkdFUlBSSU5UX0VSUk9SX05PX1NQQUNFID0gNCwgLyogTm8gc3BhY2UgYXZhaWxhYmxlIHRvIHN0b3JlIGEgdGVtcGxhdGUgKi8KICAgICBGSU5HRVJQUklOVF9FUlJPUl9DQU5DRUxFRCA9IDUsIC8qIFRoZSBjdXJyZW50IG9wZXJhdGlvbiBjYW4ndCBwcm9jZWVkLiBTZWUgYWJvdmUuICovCiAgICAgRklOR0VSUFJJTlRfRVJST1JfVU5BQkxFX1RPX1JFTU9WRSA9IDYsIC8qIGZpbmdlcnByaW50IHdpdGggZ2l2ZW4gaWQgY2FuJ3QgYmUgcmVtb3ZlZCAqLworICAgIEZJTkdFUlBSSU5UX0VSUk9SX0xPQ0tPVVQgPSA3LCAvKiB0aGUgZmluZ2VycHJpbnQgaGFyZHdhcmUgaXMgaW4gbG9ja291dCBkdWUgdG8gdG9vIG1hbnkgYXR0ZW1wdHMgKi8KICAgICBGSU5HRVJQUklOVF9FUlJPUl9WRU5ET1JfQkFTRSA9IDEwMDAgLyogdmVuZG9yLXNwZWNpZmljIGVycm9yIG1lc3NhZ2VzIHN0YXJ0IGhlcmUgKi8KIH0gZmluZ2VycHJpbnRfZXJyb3JfdDsKIApAQCAtNjksNiArNzEsOCBAQAogICAgIEZJTkdFUlBSSU5UX0FDUVVJUkVEX0lNQUdFUl9ESVJUWSA9IDMsIC8qIHNlbnNvciBuZWVkcyB0byBiZSBjbGVhbmVkICovCiAgICAgRklOR0VSUFJJTlRfQUNRVUlSRURfVE9PX1NMT1cgPSA0LCAvKiBtb3N0bHkgc3dpcGUtdHlwZSBzZW5zb3JzOyBub3QgZW5vdWdoIGRhdGEgY29sbGVjdGVkICovCiAgICAgRklOR0VSUFJJTlRfQUNRVUlSRURfVE9PX0ZBU1QgPSA1LCAvKiBmb3Igc3dpcGUgYW5kIGFyZWEgc2Vuc29yczsgdGVsbCB1c2VyIHRvIHNsb3cgZG93biovCisgICAgRklOR0VSUFJJTlRfQUNRVUlSRURfREVURUNURUQgPSA2LCAvKiB3aGVuIHRoZSBmaW5nZXIgaXMgZmlyc3QgZGV0ZWN0ZWQuIFVzZWQgdG8gb3B0aW1pemUgd2FrZXVwLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvdWxkIGJlIGZvbGxvd2VkIGJ5IG9uZSBvZiB0aGUgYWJvdmUgbWVzc2FnZXMgKi8KICAgICBGSU5HRVJQUklOVF9BQ1FVSVJFRF9WRU5ET1JfQkFTRSA9IDEwMDAgLyogdmVuZG9yLXNwZWNpZmljIGFjcXVpc2l0aW9uIG1lc3NhZ2VzIHN0YXJ0IGhlcmUgKi8KIH0gZmluZ2VycHJpbnRfYWNxdWlyZWRfaW5mb190OwogCkBAIC04NSwxNCArODksMTMgQEAKICAgICB1aW50NjRfdCBtc2c7IC8qIFZlbmRvciBzcGVjaWZpYyBtZXNzYWdlLiBVc2VkIGZvciB1c2VyIGd1aWRhbmNlICovCiB9IGZpbmdlcnByaW50X2Vucm9sbF90OwogCi10eXBlZGVmIHN0cnVjdCBmaW5nZXJwcmludF9lbnVtZXJhdGVkIHsKK3R5cGVkZWYgc3RydWN0IGZpbmdlcnByaW50X2l0ZXJhdG9yIHsKICAgICBmaW5nZXJwcmludF9maW5nZXJfaWRfdCBmaW5nZXI7CiAgICAgdWludDMyX3QgcmVtYWluaW5nX3RlbXBsYXRlczsKLX0gZmluZ2VycHJpbnRfZW51bWVyYXRlZF90OworfSBmaW5nZXJwcmludF9pdGVyYXRvcl90OwogCi10eXBlZGVmIHN0cnVjdCBmaW5nZXJwcmludF9yZW1vdmVkIHsKLSAgICBmaW5nZXJwcmludF9maW5nZXJfaWRfdCBmaW5nZXI7Ci19IGZpbmdlcnByaW50X3JlbW92ZWRfdDsKK3R5cGVkZWYgZmluZ2VycHJpbnRfaXRlcmF0b3JfdCBmaW5nZXJwcmludF9lbnVtZXJhdGVkX3Q7Cit0eXBlZGVmIGZpbmdlcnByaW50X2l0ZXJhdG9yX3QgZmluZ2VycHJpbnRfcmVtb3ZlZF90OwogCiB0eXBlZGVmIHN0cnVjdCBmaW5nZXJwcmludF9hY3F1aXJlZCB7CiAgICAgZmluZ2VycHJpbnRfYWNxdWlyZWRfaW5mb190IGFjcXVpcmVkX2luZm87IC8qIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbWFnZSAqLwpAQCAtMjA3LDEyICsyMTAsMTMgQEAKICAgICAvKgogICAgICAqIEVudW1lcmF0ZSBhbGwgdGhlIGZpbmdlcnByaW50IHRlbXBsYXRlcyBmb3VuZCBpbiB0aGUgZGlyZWN0b3J5IHNldCBieQogICAgICAqIHNldF9hY3RpdmVfZ3JvdXAoKQotICAgICAqIEZvciBlYWNoIHRlbXBsYXRlIGZvdW5kIG5vdGlmeSgpIHdpbGwgYmUgY2FsbGVkIHdpdGg6CisgICAgICogRm9yIGVhY2ggdGVtcGxhdGUgZm91bmQgYSBub3RpZnkoKSB3aWxsIGJlIGNhbGxlZCB3aXRoOgogICAgICAqIGZpbmdlcnByaW50X21zZy50eXBlID09IEZJTkdFUlBSSU5UX1RFTVBMQVRFX0VOVU1FUkFURUQKICAgICAgKiBmaW5nZXJwcmludF9tc2cuZGF0YS5lbnVtZXJhdGVkLmZpbmdlciBpbmRpY2F0aW5nIGEgdGVtcGxhdGUgaWQKICAgICAgKiBmaW5nZXJwcmludF9tc2cuZGF0YS5lbnVtZXJhdGVkLnJlbWFpbmluZ190ZW1wbGF0ZXMgaW5kaWNhdGluZyBob3cgbWFueSBtb3JlCiAgICAgICogZW51bWVyYXRpb24gbWVzc2FnZXMgdG8gZXhwZWN0LgotICAgICAqCisgICAgICogTm90ZTogSWYgdGhlcmUgYXJlIG5vIGZpbmdlcnByaW50cywgdGhlbiB0aGlzIHNob3VsZCByZXR1cm4gMCBhbmQgdGhlIGZpcnN0IGZpbmdlcnByaW50CisgICAgICogICAgICAgICAgICAgICAgICBlbnVtZXJhdGVkIHNob3VsZCBoYXZlIGZpbmdlcmlkPTAgYW5kIHJlbWFpbmluZz0wCiAgICAgICogRnVuY3Rpb24gcmV0dXJuOiAwIGlmIGVudW1lcmF0ZSByZXF1ZXN0IGlzIGFjY2VwdGVkCiAgICAgICogICAgICAgICAgICAgICAgICBvciBhIG5lZ2F0aXZlIG51bWJlciBpbiBjYXNlIG9mIGVycm9yLCBnZW5lcmFsbHkgZnJvbSB0aGUgZXJybm8uaCBzZXQuCiAgICAgICovCkBAIC0yMjIsOSArMjI2LDE0IEBACiAgICAgICogRmluZ2VycHJpbnQgcmVtb3ZlIHJlcXVlc3Q6CiAgICAgICogRGVsZXRlcyBhIGZpbmdlcnByaW50IHRlbXBsYXRlLgogICAgICAqIFdvcmtzIG9ubHkgd2l0aGluIHRoZSBwYXRoIHNldCBieSBzZXRfYWN0aXZlX2dyb3VwKCkuCi0gICAgICogbm90aWZ5KCkgd2lsbCBiZSBjYWxsZWQgd2l0aCBkZXRhaWxzIG9uIHRoZSB0ZW1wbGF0ZSBkZWxldGVkLgotICAgICAqIGZpbmdlcnByaW50X21zZy50eXBlID09IEZJTkdFUlBSSU5UX1RFTVBMQVRFX1JFTU9WRUQgYW5kCi0gICAgICogZmluZ2VycHJpbnRfbXNnLmRhdGEucmVtb3ZlZC5maW5nZXIgaW5kaWNhdGluZyB0aGUgdGVtcGxhdGUgaWQgcmVtb3ZlZC4KKyAgICAgKiBUaGUgZmlkIHBhcmFtZXRlciBjYW4gYmUgdXNlZCBhcyBhIHdpZGNhcmQ6CisgICAgICogICAqIGZpZCA9PSAwIC0tIGRlbGV0ZSBhbGwgdGhlIHRlbXBsYXRlcyBpbiB0aGUgZ3JvdXAuCisgICAgICogICAqIGZpZCAhPSAwIC0tIGRlbGV0ZSB0aGlzIHNwZWNpZmljIHRlbXBsYXRlIGZyb20gdGhlIGdyb3VwLgorICAgICAqIEZvciBlYWNoIHRlbXBsYXRlIGZvdW5kIGEgbm90aWZ5KCkgd2lsbCBiZSBjYWxsZWQgd2l0aDoKKyAgICAgKiBmaW5nZXJwcmludF9tc2cudHlwZSA9PSBGSU5HRVJQUklOVF9URU1QTEFURV9SRU1PVkVECisgICAgICogZmluZ2VycHJpbnRfbXNnLmRhdGEucmVtb3ZlZC5maW5nZXIgaW5kaWNhdGluZyBhIHRlbXBsYXRlIGlkIGRlbGV0ZWQKKyAgICAgKiBmaW5nZXJwcmludF9tc2cuZGF0YS5yZW1vdmVkLnJlbWFpbmluZ190ZW1wbGF0ZXMgaW5kaWNhdGluZyBob3cgbWFueSBtb3JlCisgICAgICogdGVtcGxhdGVzIHdpbGwgYmUgZGVsZXRlZCBieSB0aGlzIG9wZXJhdGlvbi4KICAgICAgKgogICAgICAqIEZ1bmN0aW9uIHJldHVybjogMCBpZiBmaW5nZXJwcmludCB0ZW1wbGF0ZShzKSBjYW4gYmUgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQKICAgICAgKiAgICAgICAgICAgICAgICAgIG9yIGEgbmVnYXRpdmUgbnVtYmVyIGluIGNhc2Ugb2YgZXJyb3IsIGdlbmVyYWxseSBmcm9tIHRoZSBlcnJuby5oIHNldC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvZnVzZWRfbG9jYXRpb24uaCBiL2luY2x1ZGUvaGFyZHdhcmUvZnVzZWRfbG9jYXRpb24uaAppbmRleCA3MzM2MGExLi41NTBlMTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2Z1c2VkX2xvY2F0aW9uLmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9mdXNlZF9sb2NhdGlvbi5oCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlIDxoYXJkd2FyZS9oYXJkd2FyZS5oPgogCisjaW5jbHVkZSAiZ25zcy1iYXNlLmgiCiAKIC8qKgogICogVGhpcyBoZWFkZXIgZmlsZSBkZWZpbmVzIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIEZ1c2VkIExvY2F0aW9uIFByb3ZpZGVyLgpAQCAtMTAzLDE2ICsxMDQsNiBAQAogI2RlZmluZSBGTFBfU1RBVFVTX0xPQ0FUSU9OX1VOQVZBSUxBQkxFICAgICAgIDEKIAogLyoqCi0gKiBUaGlzIGNvbnN0YW50IGlzIHVzZWQgd2l0aCB0aGUgYmF0Y2hlZCBsb2NhdGlvbnMKLSAqIEFQSXMuIEJhdGNoaW5nIGlzIG1hbmRhdG9yeSB3aGVuIEZMUCBpbXBsZW1lbnRhdGlvbgotICogaXMgc3VwcG9ydGVkLiBJZiB0aGUgZmxhZyBpcyBzZXQsIHRoZSBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbgotICogd2lsbCB3YWtlIHVwIHRoZSBhcHBsaWNhdGlvbiBwcm9jZXNzb3Igd2hlbiB0aGUgRklGTyBpcyBmdWxsLAotICogSWYgdGhlIGZsYWcgaXMgbm90IHNldCwgdGhlIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uIHdpbGwgZHJvcAotICogdGhlIG9sZGVzdCBkYXRhIHdoZW4gdGhlIEZJRk8gaXMgZnVsbC4KLSAqLwotI2RlZmluZSBGTFBfQkFUQ0hfV0FLRVVQX09OX0ZJRk9fRlVMTCAgICAgICAgMHgwMDAwMDAxCi0KLS8qKgogICogV2hpbGUgYmF0Y2hpbmcsIHRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgbm90IGNhbGwgdGhlCiAgKiBmbHBfbG9jYXRpb25fY2FsbGJhY2sgb24gZXZlcnkgbG9jYXRpb24gZml4LiBIb3dldmVyLAogICogc29tZXRpbWVzIGluIGhpZ2ggcG93ZXIgbW9kZSwgdGhlIHN5c3RlbSBtaWdodCBuZWVkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2duc3MtYmFzZS5oIGIvaW5jbHVkZS9oYXJkd2FyZS9nbnNzLWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTYwMjBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9nbnNzLWJhc2UuaApAQCAtMCwwICsxLDI3NSBAQAorLy8gVGhpcyBmaWxlIGlzIGF1dG9nZW5lcmF0ZWQgYnkgaGlkbC1nZW4uIERvIG5vdCBlZGl0IG1hbnVhbGx5LgorLy8gU291cmNlOiBhbmRyb2lkLmhhcmR3YXJlLmduc3NAMS4wCisvLyBSb290OiBhbmRyb2lkLmhhcmR3YXJlOmhhcmR3YXJlL2ludGVyZmFjZXMKKworI2lmbmRlZiBISURMX0dFTkVSQVRFRF9BTkRST0lEX0hBUkRXQVJFX0dOU1NfVjFfMF9FWFBPUlRFRF9DT05TVEFOVFNfSF8KKyNkZWZpbmUgSElETF9HRU5FUkFURURfQU5EUk9JRF9IQVJEV0FSRV9HTlNTX1YxXzBfRVhQT1JURURfQ09OU1RBTlRTX0hfCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZW51bSB7CisgICAgR05TU19NQVhfU1ZTX0NPVU5UID0gNjR1LCAvLyA2NAorfTsKKworZW51bSB7CisgICAgR05TU19DT05TVEVMTEFUSU9OX1VOS05PV04gPSAwLAorICAgIEdOU1NfQ09OU1RFTExBVElPTl9HUFMgPSAxLAorICAgIEdOU1NfQ09OU1RFTExBVElPTl9TQkFTID0gMiwKKyAgICBHTlNTX0NPTlNURUxMQVRJT05fR0xPTkFTUyA9IDMsCisgICAgR05TU19DT05TVEVMTEFUSU9OX1FaU1MgPSA0LAorICAgIEdOU1NfQ09OU1RFTExBVElPTl9CRUlET1UgPSA1LAorICAgIEdOU1NfQ09OU1RFTExBVElPTl9HQUxJTEVPID0gNiwKK307CisKK2VudW0geworICAgIEdQU19MT0NBVElPTl9IQVNfTEFUX0xPTkcgPSAxLCAvLyAweDAwMDEKKyAgICBHUFNfTE9DQVRJT05fSEFTX0FMVElUVURFID0gMiwgLy8gMHgwMDAyCisgICAgR1BTX0xPQ0FUSU9OX0hBU19TUEVFRCA9IDQsIC8vIDB4MDAwNAorICAgIEdQU19MT0NBVElPTl9IQVNfQkVBUklORyA9IDgsIC8vIDB4MDAwOAorICAgIEdQU19MT0NBVElPTl9IQVNfSE9SSVpPTlRBTF9BQ0NVUkFDWSA9IDE2LCAvLyAweDAwMTAKKyAgICBHUFNfTE9DQVRJT05fSEFTX1ZFUlRJQ0FMX0FDQ1VSQUNZID0gMzIsIC8vIDB4MDAyMAorICAgIEdQU19MT0NBVElPTl9IQVNfU1BFRURfQUNDVVJBQ1kgPSA2NCwgLy8gMHgwMDQwCisgICAgR1BTX0xPQ0FUSU9OX0hBU19CRUFSSU5HX0FDQ1VSQUNZID0gMTI4LCAvLyAweDAwODAKK307CisKK2VudW0geworICAgIEFQTl9JUF9JTlZBTElEID0gMCwKKyAgICBBUE5fSVBfSVBWNCA9IDEsCisgICAgQVBOX0lQX0lQVjYgPSAyLAorICAgIEFQTl9JUF9JUFY0VjYgPSAzLAorfTsKKworZW51bSB7CisgICAgQUdQU19UWVBFX1NVUEwgPSAxLAorICAgIEFHUFNfVFlQRV9DMksgPSAyLAorfTsKKworZW51bSB7CisgICAgR05TU19SRVFVRVNUX0FHTlNTX0RBVEFfQ09OTiA9IDEsCisgICAgR05TU19SRUxFQVNFX0FHTlNTX0RBVEFfQ09OTiA9IDIsCisgICAgR05TU19BR05TU19EQVRBX0NPTk5FQ1RFRCA9IDMsCisgICAgR05TU19BR05TU19EQVRBX0NPTk5fRE9ORSA9IDQsCisgICAgR05TU19BR05TU19EQVRBX0NPTk5fRkFJTEVEID0gNSwKK307CisKK2VudW0geworICAgIEFHUFNfU0VUSURfVFlQRV9OT05FID0gMCwKKyAgICBBR1BTX1NFVElEX1RZUEVfSU1TSSA9IDEsCisgICAgQUdQU19TRVRJRF9UWVBFX01TSVNETSA9IDIsCit9OworCitlbnVtIHsKKyAgICBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfTU9CSUxFID0gMCwKKyAgICBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfV0lGSSA9IDEsCisgICAgQUdQU19SSUxfTkVUV09SS19UWVBFX01NUyA9IDIsCisgICAgQUdQU19SSUxfTkVUV09SS19UWVBFX1NVUEwgPSAzLAorICAgIEFHUFNfUklMX05FVFdPUktfVFlQRV9EVU4gPSA0LAorICAgIEFHUFNfUklMX05FVFdPUktfVFlQRV9ISVBSSSA9IDUsCisgICAgQUdQU19SSUxfTkVUV09SS19UWVBFX1dJTUFYID0gNiwKK307CisKK2VudW0geworICAgIEFHUFNfUkVGX0xPQ0FUSU9OX1RZUEVfR1NNX0NFTExJRCA9IDEsCisgICAgQUdQU19SRUZfTE9DQVRJT05fVFlQRV9VTVRTX0NFTExJRCA9IDIsCisgICAgQUdQU19SRUZfTE9DQVRJT05fVFlQRV9MVEVfQ0VMTElEID0gNCwKK307CisKK2VudW0geworICAgIEFHUFNfUklMX1JFUVVFU1RfU0VUSURfSU1TSSA9IDF1LCAvLyAoMSA8PCAwTCkKKyAgICBBR1BTX1JJTF9SRVFVRVNUX1NFVElEX01TSVNETiA9IDJ1LCAvLyAoMSA8PCAxTCkKK307CisKK2VudW0geworICAgIEdQU19QT1NJVElPTl9NT0RFX1NUQU5EQUxPTkUgPSAwLAorICAgIEdQU19QT1NJVElPTl9NT0RFX01TX0JBU0VEID0gMSwKKyAgICBHUFNfUE9TSVRJT05fTU9ERV9NU19BU1NJU1RFRCA9IDIsCit9OworCitlbnVtIHsKKyAgICBHUFNfUE9TSVRJT05fUkVDVVJSRU5DRV9QRVJJT0RJQyA9IDB1LCAvLyAwCisgICAgR1BTX1BPU0lUSU9OX1JFQ1VSUkVOQ0VfU0lOR0xFID0gMXUsIC8vIDEKK307CisKK2VudW0geworICAgIEdQU19ERUxFVEVfRVBIRU1FUklTID0gMSwgLy8gMHgwMDAxCisgICAgR1BTX0RFTEVURV9BTE1BTkFDID0gMiwgLy8gMHgwMDAyCisgICAgR1BTX0RFTEVURV9QT1NJVElPTiA9IDQsIC8vIDB4MDAwNAorICAgIEdQU19ERUxFVEVfVElNRSA9IDgsIC8vIDB4MDAwOAorICAgIEdQU19ERUxFVEVfSU9OTyA9IDE2LCAvLyAweDAwMTAKKyAgICBHUFNfREVMRVRFX1VUQyA9IDMyLCAvLyAweDAwMjAKKyAgICBHUFNfREVMRVRFX0hFQUxUSCA9IDY0LCAvLyAweDAwNDAKKyAgICBHUFNfREVMRVRFX1NWRElSID0gMTI4LCAvLyAweDAwODAKKyAgICBHUFNfREVMRVRFX1NWU1RFRVIgPSAyNTYsIC8vIDB4MDEwMAorICAgIEdQU19ERUxFVEVfU0FEQVRBID0gNTEyLCAvLyAweDAyMDAKKyAgICBHUFNfREVMRVRFX1JUSSA9IDEwMjQsIC8vIDB4MDQwMAorICAgIEdQU19ERUxFVEVfQ0VMTERCX0lORk8gPSAzMjc2OCwgLy8gMHg4MDAwCisgICAgR1BTX0RFTEVURV9BTEwgPSA2NTUzNSwgLy8gMHhGRkZGCit9OworCitlbnVtIHsKKyAgICBGTFBfQkFUQ0hfV0FLRVVQX09OX0ZJRk9fRlVMTCA9IDEsIC8vIDB4MDEKK307CisKK2VudW0geworICAgIEdQU19DQVBBQklMSVRZX1NDSEVEVUxJTkcgPSAxdSwgLy8gKDEgPDwgMCkKKyAgICBHUFNfQ0FQQUJJTElUWV9NU0IgPSAydSwgLy8gKDEgPDwgMSkKKyAgICBHUFNfQ0FQQUJJTElUWV9NU0EgPSA0dSwgLy8gKDEgPDwgMikKKyAgICBHUFNfQ0FQQUJJTElUWV9TSU5HTEVfU0hPVCA9IDh1LCAvLyAoMSA8PCAzKQorICAgIEdQU19DQVBBQklMSVRZX09OX0RFTUFORF9USU1FID0gMTZ1LCAvLyAoMSA8PCA0KQorICAgIEdQU19DQVBBQklMSVRZX0dFT0ZFTkNJTkcgPSAzMnUsIC8vICgxIDw8IDUpCisgICAgR1BTX0NBUEFCSUxJVFlfTUVBU1VSRU1FTlRTID0gNjR1LCAvLyAoMSA8PCA2KQorICAgIEdQU19DQVBBQklMSVRZX05BVl9NRVNTQUdFUyA9IDEyOHUsIC8vICgxIDw8IDcpCit9OworCitlbnVtIHsKKyAgICBHUFNfU1RBVFVTX05PTkUgPSAwLAorICAgIEdQU19TVEFUVVNfU0VTU0lPTl9CRUdJTiA9IDEsCisgICAgR1BTX1NUQVRVU19TRVNTSU9OX0VORCA9IDIsCisgICAgR1BTX1NUQVRVU19FTkdJTkVfT04gPSAzLAorICAgIEdQU19TVEFUVVNfRU5HSU5FX09GRiA9IDQsCit9OworCitlbnVtIHsKKyAgICBHTlNTX1NWX0ZMQUdTX05PTkUgPSAwLAorICAgIEdOU1NfU1ZfRkxBR1NfSEFTX0VQSEVNRVJJU19EQVRBID0gMSwgLy8gKDEgPDwgMCkKKyAgICBHTlNTX1NWX0ZMQUdTX0hBU19BTE1BTkFDX0RBVEEgPSAyLCAvLyAoMSA8PCAxKQorICAgIEdOU1NfU1ZfRkxBR1NfVVNFRF9JTl9GSVggPSA0LCAvLyAoMSA8PCAyKQorICAgIEdOU1NfU1ZfRkxBR1NfSEFTX0NBUlJJRVJfRlJFUVVFTkNZID0gOCwgLy8gKDEgPDwgMykKK307CisKK2VudW0geworICAgIEdQU19HRU9GRU5DRV9FTlRFUkVEID0gMSwgLy8gKDEgPDwgMEwpCisgICAgR1BTX0dFT0ZFTkNFX0VYSVRFRCA9IDIsIC8vICgxIDw8IDFMKQorICAgIEdQU19HRU9GRU5DRV9VTkNFUlRBSU4gPSA0LCAvLyAoMSA8PCAyTCkKK307CisKK2VudW0geworICAgIEdQU19HRU9GRU5DRV9VTkFWQUlMQUJMRSA9IDEsIC8vICgxIDw8IDBMKQorICAgIEdQU19HRU9GRU5DRV9BVkFJTEFCTEUgPSAyLCAvLyAoMSA8PCAxTCkKK307CisKK2VudW0geworICAgIEdQU19HRU9GRU5DRV9PUEVSQVRJT05fU1VDQ0VTUyA9IDAsCisgICAgR1BTX0dFT0ZFTkNFX0VSUk9SX1RPT19NQU5ZX0dFT0ZFTkNFUyA9IC0xMDAsIC8vICgtMTAwKQorICAgIEdQU19HRU9GRU5DRV9FUlJPUl9JRF9FWElTVFMgPSAtMTAxLCAvLyAoLTEwMSkKKyAgICBHUFNfR0VPRkVOQ0VfRVJST1JfSURfVU5LTk9XTiA9IC0xMDIsIC8vICgtMTAyKQorICAgIEdQU19HRU9GRU5DRV9FUlJPUl9JTlZBTElEX1RSQU5TSVRJT04gPSAtMTAzLCAvLyAoLTEwMykKKyAgICBHUFNfR0VPRkVOQ0VfRVJST1JfR0VORVJJQyA9IC0xNDksIC8vICgtMTQ5KQorfTsKKworZW51bSB7CisgICAgR1BTX01FQVNVUkVNRU5UX1NVQ0NFU1MgPSAwLAorICAgIEdQU19NRUFTVVJFTUVOVF9FUlJPUl9BTFJFQURZX0lOSVQgPSAtMTAwLCAvLyAoLTEwMCkKKyAgICBHUFNfTUVBU1VSRU1FTlRfRVJST1JfR0VORVJJQyA9IC0xMDEsIC8vICgtMTAxKQorfTsKKworZW51bSB7CisgICAgR05TU19DTE9DS19IQVNfTEVBUF9TRUNPTkQgPSAxLCAvLyAoMSA8PCAwKQorICAgIEdOU1NfQ0xPQ0tfSEFTX1RJTUVfVU5DRVJUQUlOVFkgPSAyLCAvLyAoMSA8PCAxKQorICAgIEdOU1NfQ0xPQ0tfSEFTX0ZVTExfQklBUyA9IDQsIC8vICgxIDw8IDIpCisgICAgR05TU19DTE9DS19IQVNfQklBUyA9IDgsIC8vICgxIDw8IDMpCisgICAgR05TU19DTE9DS19IQVNfQklBU19VTkNFUlRBSU5UWSA9IDE2LCAvLyAoMSA8PCA0KQorICAgIEdOU1NfQ0xPQ0tfSEFTX0RSSUZUID0gMzIsIC8vICgxIDw8IDUpCisgICAgR05TU19DTE9DS19IQVNfRFJJRlRfVU5DRVJUQUlOVFkgPSA2NCwgLy8gKDEgPDwgNikKK307CisKK2VudW0geworICAgIEdOU1NfTUVBU1VSRU1FTlRfSEFTX1NOUiA9IDF1LCAvLyAoMSA8PCAwKQorICAgIEdOU1NfTUVBU1VSRU1FTlRfSEFTX0NBUlJJRVJfRlJFUVVFTkNZID0gNTEydSwgLy8gKDEgPDwgOSkKKyAgICBHTlNTX01FQVNVUkVNRU5UX0hBU19DQVJSSUVSX0NZQ0xFUyA9IDEwMjR1LCAvLyAoMSA8PCAxMCkKKyAgICBHTlNTX01FQVNVUkVNRU5UX0hBU19DQVJSSUVSX1BIQVNFID0gMjA0OHUsIC8vICgxIDw8IDExKQorICAgIEdOU1NfTUVBU1VSRU1FTlRfSEFTX0NBUlJJRVJfUEhBU0VfVU5DRVJUQUlOVFkgPSA0MDk2dSwgLy8gKDEgPDwgMTIpCisgICAgR05TU19NRUFTVVJFTUVOVF9IQVNfQVVUT01BVElDX0dBSU5fQ09OVFJPTCA9IDgxOTJ1LCAvLyAoMSA8PCAxMykKK307CisKK2VudW0geworICAgIEdOU1NfTVVMVElQQVRIX0lORElDQVRPUl9VTktOT1dOID0gMCwKKyAgICBHTlNTX01VTFRJUEFUSF9JTkRJQ0FUT1JfUFJFU0VOVCA9IDEsCisgICAgR05TU19NVUxUSVBBVEhfSU5ESUNBVElPUl9OT1RfUFJFU0VOVCA9IDIsCit9OworCitlbnVtIHsKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX1VOS05PV04gPSAwdSwgLy8gMAorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfQ09ERV9MT0NLID0gMXUsIC8vICgxIDw8IDApCisgICAgR05TU19NRUFTVVJFTUVOVF9TVEFURV9CSVRfU1lOQyA9IDJ1LCAvLyAoMSA8PCAxKQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfU1VCRlJBTUVfU1lOQyA9IDR1LCAvLyAoMSA8PCAyKQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfVE9XX0RFQ09ERUQgPSA4dSwgLy8gKDEgPDwgMykKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX01TRUNfQU1CSUdVT1VTID0gMTZ1LCAvLyAoMSA8PCA0KQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfU1lNQk9MX1NZTkMgPSAzMnUsIC8vICgxIDw8IDUpCisgICAgR05TU19NRUFTVVJFTUVOVF9TVEFURV9HTE9fU1RSSU5HX1NZTkMgPSA2NHUsIC8vICgxIDw8IDYpCisgICAgR05TU19NRUFTVVJFTUVOVF9TVEFURV9HTE9fVE9EX0RFQ09ERUQgPSAxMjh1LCAvLyAoMSA8PCA3KQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfQkRTX0QyX0JJVF9TWU5DID0gMjU2dSwgLy8gKDEgPDwgOCkKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0JEU19EMl9TVUJGUkFNRV9TWU5DID0gNTEydSwgLy8gKDEgPDwgOSkKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0dBTF9FMUJDX0NPREVfTE9DSyA9IDEwMjR1LCAvLyAoMSA8PCAxMCkKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0dBTF9FMUNfMk5EX0NPREVfTE9DSyA9IDIwNDh1LCAvLyAoMSA8PCAxMSkKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0dBTF9FMUJfUEFHRV9TWU5DID0gNDA5NnUsIC8vICgxIDw8IDEyKQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfU0JBU19TWU5DID0gODE5MnUsIC8vICgxIDw8IDEzKQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfVE9XX0tOT1dOID0gMTYzODR1LCAvLyAoMSA8PCAxNCkKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0dMT19UT0RfS05PV04gPSAzMjc2OHUsIC8vICgxIDw8IDE1KQorfTsKKworZW51bSB7CisgICAgR05TU19BRFJfU1RBVEVfVU5LTk9XTiA9IDAsCisgICAgR05TU19BRFJfU1RBVEVfVkFMSUQgPSAxLCAvLyAoMSA8PCAwKQorICAgIEdOU1NfQURSX1NUQVRFX1JFU0VUID0gMiwgLy8gKDEgPDwgMSkKKyAgICBHTlNTX0FEUl9TVEFURV9DWUNMRV9TTElQID0gNCwgLy8gKDEgPDwgMikKK307CisKK2VudW0geworICAgIEdQU19OQVZJR0FUSU9OX01FU1NBR0VfU1VDQ0VTUyA9IDAsCisgICAgR1BTX05BVklHQVRJT05fTUVTU0FHRV9FUlJPUl9BTFJFQURZX0lOSVQgPSAtMTAwLCAvLyAoLTEwMCkKKyAgICBHUFNfTkFWSUdBVElPTl9NRVNTQUdFX0VSUk9SX0dFTkVSSUMgPSAtMTAxLCAvLyAoLTEwMSkKK307CisKK2VudW0geworICAgIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfVU5LTk9XTiA9IDAsCisgICAgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HTlNTX0wxQ0EgPSAyNTcsIC8vIDB4MDEwMQorICAgIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR05TU19MMkNOQVYgPSAyNTgsIC8vIDB4MDEwMgorICAgIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR05TU19MNUNOQVYgPSAyNTksIC8vIDB4MDEwMworICAgIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR05TU19DTkFWMiA9IDI2MCwgLy8gMHgwMTA0CisgICAgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HTE9fTDFDQSA9IDc2OSwgLy8gMHgwMzAxCisgICAgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9CRFNfRDEgPSAxMjgxLCAvLyAweDA1MDEKKyAgICBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0JEU19EMiA9IDEyODIsIC8vIDB4MDUwMgorICAgIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR0FMX0kgPSAxNTM3LCAvLyAweDA2MDEKKyAgICBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0dBTF9GID0gMTUzOCwgLy8gMHgwNjAyCit9OworCit0eXBlZGVmIGVudW0geworICAgIE5BVl9NRVNTQUdFX1NUQVRVU19QQVJJVFlfUEFTU0VEID0gMSwgLy8gKDEgPDwgMCkKKyAgICBOQVZfTUVTU0FHRV9TVEFUVVNfUEFSSVRZX1JFQlVJTFQgPSAyLCAvLyAoMSA8PCAxKQorICAgIE5BVl9NRVNTQUdFX1NUQVRVU19VTktOT1dOID0gMCwKK30gbmF2aWdhdGlvbl9tZXNzYWdlX3N0YXR1czsKKworZW51bSB7CisgICAgR1BTX05JX1RZUEVfVk9JQ0UgPSAxLAorICAgIEdQU19OSV9UWVBFX1VNVFNfU1VQTCA9IDIsCisgICAgR1BTX05JX1RZUEVfVU1UU19DVFJMX1BMQU5FID0gMywKK307CisKK2VudW0geworICAgIEdQU19OSV9ORUVEX05PVElGWSA9IDF1LCAvLyAweDAwMDEKKyAgICBHUFNfTklfTkVFRF9WRVJJRlkgPSAydSwgLy8gMHgwMDAyCisgICAgR1BTX05JX1BSSVZBQ1lfT1ZFUlJJREUgPSA0dSwgLy8gMHgwMDA0Cit9OworCitlbnVtIHsKKyAgICBHUFNfTklfUkVTUE9OU0VfQUNDRVBUID0gMSwKKyAgICBHUFNfTklfUkVTUE9OU0VfREVOWSA9IDIsCisgICAgR1BTX05JX1JFU1BPTlNFX05PUkVTUCA9IDMsCit9OworCitlbnVtIHsKKyAgICBHUFNfRU5DX05PTkUgPSAwLAorICAgIEdQU19FTkNfU1VQTF9HU01fREVGQVVMVCA9IDEsCisgICAgR1BTX0VOQ19TVVBMX1VURjggPSAyLAorICAgIEdQU19FTkNfU1VQTF9VQ1MyID0gMywKKyAgICBHUFNfRU5DX1VOS05PV04gPSAtMSwgLy8gKC0xKQorfTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmICAvLyBISURMX0dFTkVSQVRFRF9BTkRST0lEX0hBUkRXQVJFX0dOU1NfVjFfMF9FWFBPUlRFRF9DT05TVEFOVFNfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvZ3BzLmggYi9pbmNsdWRlL2hhcmR3YXJlL2dwcy5oCmluZGV4IGFjZjYwMWIuLjRlMTA4YjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvZ3BzLmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9ncHMuaApAQCAtMjYsOCArMjYsNDIgQEAKIAogI2luY2x1ZGUgPGhhcmR3YXJlL2hhcmR3YXJlLmg+CiAKKyNpbmNsdWRlICJnbnNzLWJhc2UuaCIKKwogX19CRUdJTl9ERUNMUwogCisvKgorICogRW51bXMgZGVmaW5lZCBpbiBISURMIGluIGhhcmR3YXJlL2ludGVyZmFjZXMgYXJlIGF1dG8tZ2VuZXJhdGVkIGFuZCBwcmVzZW50CisgKiBpbiBnbnNzLWJhc2UuaC4KKyAqLworCisvKiBmb3IgY29tcGF0aWJpbGl0eSAqLworCisvKiogTWF4aW11bSBudW1iZXIgb2YgU1ZzIGZvciBncHNfc3Zfc3RhdHVzX2NhbGxiYWNrKCkuICovCisjZGVmaW5lIEdOU1NfTUFYX1NWUyBHTlNTX01BWF9TVlNfQ09VTlQKKy8qKiBNYXhpbXVtIG51bWJlciBvZiBNZWFzdXJlbWVudHMgaW4gZ25zc19tZWFzdXJlbWVudF9jYWxsYmFjaygpLiAqLworI2RlZmluZSBHTlNTX01BWF9NRUFTVVJFTUVOVCBHTlNTX01BWF9TVlNfQ09VTlQKKworI2RlZmluZSBHUFNfUkVRVUVTVF9BR1BTX0RBVEFfQ09OTiBHTlNTX1JFUVVFU1RfQUdOU1NfREFUQV9DT05OCisjZGVmaW5lIEdQU19SRUxFQVNFX0FHUFNfREFUQV9DT05OIEdOU1NfUkVMRUFTRV9BR05TU19EQVRBX0NPTk4KKyNkZWZpbmUgR1BTX0FHUFNfREFUQV9DT05ORUNURUQgR05TU19BR05TU19EQVRBX0NPTk5FQ1RFRAorI2RlZmluZSBHUFNfQUdQU19EQVRBX0NPTk5fRE9ORSBHTlNTX0FHTlNTX0RBVEFfQ09OTl9ET05FCisjZGVmaW5lIEdQU19BR1BTX0RBVEFfQ09OTl9GQUlMRUQgR05TU19BR05TU19EQVRBX0NPTk5fRkFJTEVECisjZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFlQRV9NT0JJTEVfTU1TIEFHUFNfUklMX05FVFdPUktfVFlQRV9NTVMKKyNkZWZpbmUgQUdQU19SSUxfTkVUV09SS19UWVBFX01PQklMRV9TVVBMIEFHUFNfUklMX05FVFdPUktfVFlQRV9TVVBMCisjZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFRZUEVfTU9CSUxFX0RVTiBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfRFVOCisjZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFRZUEVfTU9CSUxFX0hJUFJJIEFHUFNfUklMX05FVFdPUktfVFlQRV9ISVBSSQorI2RlZmluZSBBR1BTX1JJTF9ORVRXT1JLX1RUWVBFX1dJTUFYIEFHUFNfUklMX05FVFdPUktfVFlQRV9XSU1BWAorI2RlZmluZSBHTlNTX01VTFRJUEFUSF9JTkRJQ0FUT1JfTk9UX1BSRVNFTlQgR05TU19NVUxUSVBBVEhfSU5ESUNBVElPUl9OT1RfUFJFU0VOVAorI2RlZmluZSBBR1BTX1NFVElEX1RZUEVfTVNJU0ROIEFHUFNfU0VUSURfVFlQRV9NU0lTRE0KKyNkZWZpbmUgR1BTX01FQVNVUkVNRU5UX09QRVJBVElPTl9TVUNDRVNTIEdQU19NRUFTVVJFTUVOVF9TVUNDRVNTCisjZGVmaW5lIEdQU19OQVZJR0FUSU9OX01FU1NBR0VfT1BFUkFUSU9OX1NVQ0NFU1MgR1BTX05BVklHQVRJT05fTUVTU0FHRV9TVUNDRVNTCisjZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR1BTX0wxQ0EgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HTlNTX0wxQ0EKKyNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HUFNfTDJDTkFWIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR05TU19MMkNOQVYKKyNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HUFNfTDVDTkFWIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR05TU19MNUNOQVYKKyNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HUFNfQ05BVjIgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HTlNTX0NOQVYyCisjZGVmaW5lIEdQU19MT0NBVElPTl9IQVNfQUNDVVJBQ1kgR1BTX0xPQ0FUSU9OX0hBU19IT1JJWk9OVEFMX0FDQ1VSQUNZCisKIC8qKgogICogVGhlIGlkIG9mIHRoaXMgbW9kdWxlCiAgKi8KQEAgLTM5LDEyNyArNzMsMzQgQEAKIAogLyoqIE1heGltdW0gbnVtYmVyIG9mIFNWcyBmb3IgZ3BzX3N2X3N0YXR1c19jYWxsYmFjaygpLiAqLwogI2RlZmluZSBHUFNfTUFYX1NWUyAzMgotLyoqIE1heGltdW0gbnVtYmVyIG9mIFNWcyBmb3IgZ3BzX3N2X3N0YXR1c19jYWxsYmFjaygpLiAqLwotI2RlZmluZSBHTlNTX01BWF9TVlMgNjQKIAogLyoqIE1heGltdW0gbnVtYmVyIG9mIE1lYXN1cmVtZW50cyBpbiBncHNfbWVhc3VyZW1lbnRfY2FsbGJhY2soKS4gKi8KICNkZWZpbmUgR1BTX01BWF9NRUFTVVJFTUVOVCAgIDMyCiAKLS8qKiBNYXhpbXVtIG51bWJlciBvZiBNZWFzdXJlbWVudHMgaW4gZ25zc19tZWFzdXJlbWVudF9jYWxsYmFjaygpLiAqLwotI2RlZmluZSBHTlNTX01BWF9NRUFTVVJFTUVOVCAgIDY0Ci0KIC8qKiBSZXF1ZXN0ZWQgb3BlcmF0aW9uYWwgbW9kZSBmb3IgR1BTIG9wZXJhdGlvbi4gKi8KIHR5cGVkZWYgdWludDMyX3QgR3BzUG9zaXRpb25Nb2RlOwotLyogSU1QT1JUQU5UOiBOb3RlIHRoYXQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgbXVzdCBtYXRjaAotICogY29uc3RhbnRzIGluIEdwc0xvY2F0aW9uUHJvdmlkZXIuamF2YS4gKi8KLS8qKiBNb2RlIGZvciBydW5uaW5nIEdQUyBzdGFuZGFsb25lIChubyBhc3Npc3RhbmNlKS4gKi8KLSNkZWZpbmUgR1BTX1BPU0lUSU9OX01PREVfU1RBTkRBTE9ORSAgICAwCi0vKiogQUdQUyBNUy1CYXNlZCBtb2RlLiAqLwotI2RlZmluZSBHUFNfUE9TSVRJT05fTU9ERV9NU19CQVNFRCAgICAgIDEKLS8qKgotICogQUdQUyBNUy1Bc3Npc3RlZCBtb2RlLiBUaGlzIG1vZGUgaXMgbm90IG1haW50YWluZWQgYnkgdGhlIHBsYXRmb3JtIGFueW1vcmUuCi0gKiBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byB1c2UgR1BTX1BPU0lUSU9OX01PREVfTVNfQkFTRUQgaW5zdGVhZC4KLSAqLwotI2RlZmluZSBHUFNfUE9TSVRJT05fTU9ERV9NU19BU1NJU1RFRCAgIDIKIAogLyoqIFJlcXVlc3RlZCByZWN1cnJlbmNlIG1vZGUgZm9yIEdQUyBvcGVyYXRpb24uICovCiB0eXBlZGVmIHVpbnQzMl90IEdwc1Bvc2l0aW9uUmVjdXJyZW5jZTsKLS8qIElNUE9SVEFOVDogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgdmFsdWVzIG11c3QgbWF0Y2gKLSAqIGNvbnN0YW50cyBpbiBHcHNMb2NhdGlvblByb3ZpZGVyLmphdmEuICovCi0vKiogUmVjZWl2ZSBHUFMgZml4ZXMgb24gYSByZWN1cnJpbmcgYmFzaXMgYXQgYSBzcGVjaWZpZWQgcGVyaW9kLiAqLwotI2RlZmluZSBHUFNfUE9TSVRJT05fUkVDVVJSRU5DRV9QRVJJT0RJQyAgICAwCi0vKiogUmVxdWVzdCBhIHNpbmdsZSBzaG90IEdQUyBmaXguICovCi0jZGVmaW5lIEdQU19QT1NJVElPTl9SRUNVUlJFTkNFX1NJTkdMRSAgICAgIDEKIAogLyoqIEdQUyBzdGF0dXMgZXZlbnQgdmFsdWVzLiAqLwogdHlwZWRlZiB1aW50MTZfdCBHcHNTdGF0dXNWYWx1ZTsKLS8qIElNUE9SVEFOVDogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgdmFsdWVzIG11c3QgbWF0Y2gKLSAqIGNvbnN0YW50cyBpbiBHcHNMb2NhdGlvblByb3ZpZGVyLmphdmEuICovCi0vKiogR1BTIHN0YXR1cyB1bmtub3duLiAqLwotI2RlZmluZSBHUFNfU1RBVFVTX05PTkUgICAgICAgICAgICAgMAotLyoqIEdQUyBoYXMgYmVndW4gbmF2aWdhdGluZy4gKi8KLSNkZWZpbmUgR1BTX1NUQVRVU19TRVNTSU9OX0JFR0lOICAgIDEKLS8qKiBHUFMgaGFzIHN0b3BwZWQgbmF2aWdhdGluZy4gKi8KLSNkZWZpbmUgR1BTX1NUQVRVU19TRVNTSU9OX0VORCAgICAgIDIKLS8qKiBHUFMgaGFzIHBvd2VyZWQgb24gYnV0IGlzIG5vdCBuYXZpZ2F0aW5nLiAqLwotI2RlZmluZSBHUFNfU1RBVFVTX0VOR0lORV9PTiAgICAgICAgMwotLyoqIEdQUyBpcyBwb3dlcmVkIG9mZi4gKi8KLSNkZWZpbmUgR1BTX1NUQVRVU19FTkdJTkVfT0ZGICAgICAgIDQKIAogLyoqIEZsYWdzIHRvIGluZGljYXRlIHdoaWNoIHZhbHVlcyBhcmUgdmFsaWQgaW4gYSBHcHNMb2NhdGlvbi4gKi8KIHR5cGVkZWYgdWludDE2X3QgR3BzTG9jYXRpb25GbGFnczsKLS8qIElNUE9SVEFOVDogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgdmFsdWVzIG11c3QgbWF0Y2gKLSAqIGNvbnN0YW50cyBpbiBHcHNMb2NhdGlvblByb3ZpZGVyLmphdmEuICovCi0vKiogR3BzTG9jYXRpb24gaGFzIHZhbGlkIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUuICovCi0jZGVmaW5lIEdQU19MT0NBVElPTl9IQVNfTEFUX0xPTkcgICAweDAwMDEKLS8qKiBHcHNMb2NhdGlvbiBoYXMgdmFsaWQgYWx0aXR1ZGUuICovCi0jZGVmaW5lIEdQU19MT0NBVElPTl9IQVNfQUxUSVRVREUgICAweDAwMDIKLS8qKiBHcHNMb2NhdGlvbiBoYXMgdmFsaWQgc3BlZWQuICovCi0jZGVmaW5lIEdQU19MT0NBVElPTl9IQVNfU1BFRUQgICAgICAweDAwMDQKLS8qKiBHcHNMb2NhdGlvbiBoYXMgdmFsaWQgYmVhcmluZy4gKi8KLSNkZWZpbmUgR1BTX0xPQ0FUSU9OX0hBU19CRUFSSU5HICAgIDB4MDAwOAotLyoqIEdwc0xvY2F0aW9uIGhhcyB2YWxpZCBhY2N1cmFjeS4gKi8KLSNkZWZpbmUgR1BTX0xPQ0FUSU9OX0hBU19BQ0NVUkFDWSAgIDB4MDAxMAotCi0vKiogRmxhZ3MgZm9yIHRoZSBncHNfc2V0X2NhcGFiaWxpdGllcyBjYWxsYmFjay4gKi8KLQotLyoqCi0gKiBHUFMgSEFMIHNjaGVkdWxlcyBmaXhlcyBmb3IgR1BTX1BPU0lUSU9OX1JFQ1VSUkVOQ0VfUEVSSU9ESUMgbW9kZS4gSWYgdGhpcyBpcwotICogbm90IHNldCwgdGhlbiB0aGUgZnJhbWV3b3JrIHdpbGwgdXNlIDEwMDBtcyBmb3IgbWluX2ludGVydmFsIGFuZCB3aWxsIHN0YXJ0Ci0gKiBhbmQgY2FsbCBzdGFydCgpIGFuZCBzdG9wKCkgdG8gc2NoZWR1bGUgdGhlIEdQUy4KLSAqLwotI2RlZmluZSBHUFNfQ0FQQUJJTElUWV9TQ0hFRFVMSU5HICAgICAgICgxIDw8IDApCi0vKiogR1BTIHN1cHBvcnRzIE1TLUJhc2VkIEFHUFMgbW9kZSAqLwotI2RlZmluZSBHUFNfQ0FQQUJJTElUWV9NU0IgICAgICAgICAgICAgICgxIDw8IDEpCi0vKiogR1BTIHN1cHBvcnRzIE1TLUFzc2lzdGVkIEFHUFMgbW9kZSAqLwotI2RlZmluZSBHUFNfQ0FQQUJJTElUWV9NU0EgICAgICAgICAgICAgICgxIDw8IDIpCi0vKiogR1BTIHN1cHBvcnRzIHNpbmdsZS1zaG90IGZpeGVzICovCi0jZGVmaW5lIEdQU19DQVBBQklMSVRZX1NJTkdMRV9TSE9UICAgICAgKDEgPDwgMykKLS8qKiBHUFMgc3VwcG9ydHMgb24gZGVtYW5kIHRpbWUgaW5qZWN0aW9uICovCi0jZGVmaW5lIEdQU19DQVBBQklMSVRZX09OX0RFTUFORF9USU1FICAgKDEgPDwgNCkKLS8qKiBHUFMgc3VwcG9ydHMgR2VvZmVuY2luZyAgKi8KLSNkZWZpbmUgR1BTX0NBUEFCSUxJVFlfR0VPRkVOQ0lORyAgICAgICAoMSA8PCA1KQotLyoqIEdQUyBzdXBwb3J0cyBNZWFzdXJlbWVudHMuICovCi0jZGVmaW5lIEdQU19DQVBBQklMSVRZX01FQVNVUkVNRU5UUyAgICAgKDEgPDwgNikKLS8qKiBHUFMgc3VwcG9ydHMgTmF2aWdhdGlvbiBNZXNzYWdlcyAqLwotI2RlZmluZSBHUFNfQ0FQQUJJTElUWV9OQVZfTUVTU0FHRVMgICAgICgxIDw8IDcpCiAKIC8qKgogICogRmxhZ3MgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIGFpZGluZyBkYXRhIHRvIGRlbGV0ZSB3aGVuIGNhbGxpbmcKICAqIGRlbGV0ZV9haWRpbmdfZGF0YSgpLgogICovCiB0eXBlZGVmIHVpbnQxNl90IEdwc0FpZGluZ0RhdGE7Ci0vKiBJTVBPUlRBTlQ6IE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIHZhbHVlcyBtdXN0IG1hdGNoCi0gKiBjb25zdGFudHMgaW4gR3BzTG9jYXRpb25Qcm92aWRlci5qYXZhLiAqLwotI2RlZmluZSBHUFNfREVMRVRFX0VQSEVNRVJJUyAgICAgICAgMHgwMDAxCi0jZGVmaW5lIEdQU19ERUxFVEVfQUxNQU5BQyAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgR1BTX0RFTEVURV9QT1NJVElPTiAgICAgICAgIDB4MDAwNAotI2RlZmluZSBHUFNfREVMRVRFX1RJTUUgICAgICAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIEdQU19ERUxFVEVfSU9OTyAgICAgICAgICAgICAweDAwMTAKLSNkZWZpbmUgR1BTX0RFTEVURV9VVEMgICAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZSBHUFNfREVMRVRFX0hFQUxUSCAgICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIEdQU19ERUxFVEVfU1ZESVIgICAgICAgICAgICAweDAwODAKLSNkZWZpbmUgR1BTX0RFTEVURV9TVlNURUVSICAgICAgICAgIDB4MDEwMAotI2RlZmluZSBHUFNfREVMRVRFX1NBREFUQSAgICAgICAgICAgMHgwMjAwCi0jZGVmaW5lIEdQU19ERUxFVEVfUlRJICAgICAgICAgICAgICAweDA0MDAKLSNkZWZpbmUgR1BTX0RFTEVURV9DRUxMREJfSU5GTyAgICAgIDB4ODAwMAotI2RlZmluZSBHUFNfREVMRVRFX0FMTCAgICAgICAgICAgICAgMHhGRkZGCiAKIC8qKiBBR1BTIHR5cGUgKi8KIHR5cGVkZWYgdWludDE2X3QgQUdwc1R5cGU7Ci0jZGVmaW5lIEFHUFNfVFlQRV9TVVBMICAgICAgICAgIDEKLSNkZWZpbmUgQUdQU19UWVBFX0MySyAgICAgICAgICAgMgogCiB0eXBlZGVmIHVpbnQxNl90IEFHcHNTZXRJRFR5cGU7Ci0jZGVmaW5lIEFHUFNfU0VUSURfVFlQRV9OT05FICAgIDAKLSNkZWZpbmUgQUdQU19TRVRJRF9UWVBFX0lNU0kgICAgMQotI2RlZmluZSBBR1BTX1NFVElEX1RZUEVfTVNJU0ROICAyCiAKIHR5cGVkZWYgdWludDE2X3QgQXBuSXBUeXBlOwotI2RlZmluZSBBUE5fSVBfSU5WQUxJRCAgICAgICAgICAwCi0jZGVmaW5lIEFQTl9JUF9JUFY0ICAgICAgICAgICAgIDEKLSNkZWZpbmUgQVBOX0lQX0lQVjYgICAgICAgICAgICAgMgotI2RlZmluZSBBUE5fSVBfSVBWNFY2ICAgICAgICAgICAzCiAKIC8qKgogICogU3RyaW5nIGxlbmd0aCBjb25zdGFudHMKQEAgLTE3MSw3MSArMTEyLDMxIEBACiAgKiBHcHNOaVR5cGUgY29uc3RhbnRzCiAgKi8KIHR5cGVkZWYgdWludDMyX3QgR3BzTmlUeXBlOwotI2RlZmluZSBHUFNfTklfVFlQRV9WT0lDRSAgICAgICAgICAgICAgMQotI2RlZmluZSBHUFNfTklfVFlQRV9VTVRTX1NVUEwgICAgICAgICAgMgotI2RlZmluZSBHUFNfTklfVFlQRV9VTVRTX0NUUkxfUExBTkUgICAgMwogCiAvKioKICAqIEdwc05pTm90aWZ5RmxhZ3MgY29uc3RhbnRzCiAgKi8KIHR5cGVkZWYgdWludDMyX3QgR3BzTmlOb3RpZnlGbGFnczsKLS8qKiBOSSByZXF1aXJlcyBub3RpZmljYXRpb24gKi8KLSNkZWZpbmUgR1BTX05JX05FRURfTk9USUZZICAgICAgICAgIDB4MDAwMQotLyoqIE5JIHJlcXVpcmVzIHZlcmlmaWNhdGlvbiAqLwotI2RlZmluZSBHUFNfTklfTkVFRF9WRVJJRlkgICAgICAgICAgMHgwMDAyCi0vKiogTkkgcmVxdWlyZXMgcHJpdmFjeSBvdmVycmlkZSwgbm8gbm90aWZpY2F0aW9uL21pbmltYWwgdHJhY2UgKi8KLSNkZWZpbmUgR1BTX05JX1BSSVZBQ1lfT1ZFUlJJREUgICAgIDB4MDAwNAogCiAvKioKICAqIEdQUyBOSSByZXNwb25zZXMsIHVzZWQgdG8gZGVmaW5lIHRoZSByZXNwb25zZSBpbgogICogTkkgc3RydWN0dXJlcwogICovCiB0eXBlZGVmIGludCBHcHNVc2VyUmVzcG9uc2VUeXBlOwotI2RlZmluZSBHUFNfTklfUkVTUE9OU0VfQUNDRVBUICAgICAgICAgMQotI2RlZmluZSBHUFNfTklfUkVTUE9OU0VfREVOWSAgICAgICAgICAgMgotI2RlZmluZSBHUFNfTklfUkVTUE9OU0VfTk9SRVNQICAgICAgICAgMwogCiAvKioKICAqIE5JIGRhdGEgZW5jb2Rpbmcgc2NoZW1lCiAgKi8KIHR5cGVkZWYgaW50IEdwc05pRW5jb2RpbmdUeXBlOwotI2RlZmluZSBHUFNfRU5DX05PTkUgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHUFNfRU5DX1NVUExfR1NNX0RFRkFVTFQgICAgICAgMQotI2RlZmluZSBHUFNfRU5DX1NVUExfVVRGOCAgICAgICAgICAgICAgMgotI2RlZmluZSBHUFNfRU5DX1NVUExfVUNTMiAgICAgICAgICAgICAgMwotI2RlZmluZSBHUFNfRU5DX1VOS05PV04gICAgICAgICAgICAgICAgLTEKIAogLyoqIEFHUFMgc3RhdHVzIGV2ZW50IHZhbHVlcy4gKi8KIHR5cGVkZWYgdWludDE2X3QgQUdwc1N0YXR1c1ZhbHVlOwotLyoqIEdQUyByZXF1ZXN0cyBkYXRhIGNvbm5lY3Rpb24gZm9yIEFHUFMuICovCi0jZGVmaW5lIEdQU19SRVFVRVNUX0FHUFNfREFUQV9DT05OICAxCi0vKiogR1BTIHJlbGVhc2VzIHRoZSBBR1BTIGRhdGEgY29ubmVjdGlvbi4gKi8KLSNkZWZpbmUgR1BTX1JFTEVBU0VfQUdQU19EQVRBX0NPTk4gIDIKLS8qKiBBR1BTIGRhdGEgY29ubmVjdGlvbiBpbml0aWF0ZWQgKi8KLSNkZWZpbmUgR1BTX0FHUFNfREFUQV9DT05ORUNURUQgICAgIDMKLS8qKiBBR1BTIGRhdGEgY29ubmVjdGlvbiBjb21wbGV0ZWQgKi8KLSNkZWZpbmUgR1BTX0FHUFNfREFUQV9DT05OX0RPTkUgICAgIDQKLS8qKiBBR1BTIGRhdGEgY29ubmVjdGlvbiBmYWlsZWQgKi8KLSNkZWZpbmUgR1BTX0FHUFNfREFUQV9DT05OX0ZBSUxFRCAgIDUKIAogdHlwZWRlZiB1aW50MTZfdCBBR3BzUmVmTG9jYXRpb25UeXBlOwotI2RlZmluZSBBR1BTX1JFRl9MT0NBVElPTl9UWVBFX0dTTV9DRUxMSUQgICAxCi0jZGVmaW5lIEFHUFNfUkVGX0xPQ0FUSU9OX1RZUEVfVU1UU19DRUxMSUQgIDIKLSNkZWZpbmUgQUdQU19SRUZfTE9DQVRJT05fVFlQRV9NQUMgICAgICAgICAgMwotI2RlZmluZSBBR1BTX1JFRl9MT0NBVElPTl9UWVBFX0xURV9DRUxMSUQgICA0CiAKIC8qIERlcHJlY2F0ZWQsIHRvIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgQW5kcm9pZCByZWxlYXNlLiAqLwogI2RlZmluZSBBR1BTX1JFR19MT0NBVElPTl9UWVBFX01BQyAgICAgICAgICAzCiAKLS8qKiBOZXR3b3JrIHR5cGVzIGZvciB1cGRhdGVfbmV0d29ya19zdGF0ZSAidHlwZSIgcGFyYW1ldGVyICovCi0jZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFlQRV9NT0JJTEUgICAgICAgIDAKLSNkZWZpbmUgQUdQU19SSUxfTkVUV09SS19UWVBFX1dJRkkgICAgICAgICAgMQotI2RlZmluZSBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfTU9CSUxFX01NUyAgICAyCi0jZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFlQRV9NT0JJTEVfU1VQTCAgIDMKLSNkZWZpbmUgQUdQU19SSUxfTkVUV09SS19UVFlQRV9NT0JJTEVfRFVOICAgNAotI2RlZmluZSBBR1BTX1JJTF9ORVRXT1JLX1RUWVBFX01PQklMRV9ISVBSSSA1Ci0jZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFRZUEVfV0lNQVggICAgICAgIDYKLQogLyogVGhlIGZvbGxvd2luZyB0eXBlZGVmIHRvZ2V0aGVyIHdpdGggaXRzIGNvbnN0YW50cyBiZWxvdyBhcmUgZGVwcmVjYXRlZCwgYW5kCiAgKiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS4gKi8KIHR5cGVkZWYgdWludDE2X3QgR3BzQ2xvY2tGbGFnczsKQEAgLTI1MSwyMCArMTUyLDYgQEAKICAqIEZsYWdzIHRvIGluZGljYXRlIHdoYXQgZmllbGRzIGluIEduc3NDbG9jayBhcmUgdmFsaWQuCiAgKi8KIHR5cGVkZWYgdWludDE2X3QgR25zc0Nsb2NrRmxhZ3M7Ci0vKiogQSB2YWxpZCAnbGVhcCBzZWNvbmQnIGlzIHN0b3JlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfQ0xPQ0tfSEFTX0xFQVBfU0VDT05EICAgICAgICAgICAgICAgKDE8PDApCi0vKiogQSB2YWxpZCAndGltZSB1bmNlcnRhaW50eScgaXMgc3RvcmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19DTE9DS19IQVNfVElNRV9VTkNFUlRBSU5UWSAgICAgICAgICAoMTw8MSkKLS8qKiBBIHZhbGlkICdmdWxsIGJpYXMnIGlzIHN0b3JlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfQ0xPQ0tfSEFTX0ZVTExfQklBUyAgICAgICAgICAgICAgICAgKDE8PDIpCi0vKiogQSB2YWxpZCAnYmlhcycgaXMgc3RvcmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19DTE9DS19IQVNfQklBUyAgICAgICAgICAgICAgICAgICAgICAoMTw8MykKLS8qKiBBIHZhbGlkICdiaWFzIHVuY2VydGFpbnR5JyBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX0NMT0NLX0hBU19CSUFTX1VOQ0VSVEFJTlRZICAgICAgICAgICgxPDw0KQotLyoqIEEgdmFsaWQgJ2RyaWZ0JyBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX0NMT0NLX0hBU19EUklGVCAgICAgICAgICAgICAgICAgICAgICgxPDw1KQotLyoqIEEgdmFsaWQgJ2RyaWZ0IHVuY2VydGFpbnR5JyBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX0NMT0NLX0hBU19EUklGVF9VTkNFUlRBSU5UWSAgICAgICAgICgxPDw2KQogCiAvKiBUaGUgZm9sbG93aW5nIHR5cGVkZWYgdG9nZXRoZXIgd2l0aCBpdHMgY29uc3RhbnRzIGJlbG93IGFyZSBkZXByZWNhdGVkLCBhbmQKICAqIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiAqLwpAQCAtMzAwLDE2ICsxODcsNiBAQAogICogRmxhZ3MgdG8gaW5kaWNhdGUgd2hhdCBmaWVsZHMgaW4gR25zc01lYXN1cmVtZW50IGFyZSB2YWxpZC4KICAqLwogdHlwZWRlZiB1aW50MzJfdCBHbnNzTWVhc3VyZW1lbnRGbGFnczsKLS8qKiBBIHZhbGlkICdzbnInIGlzIHN0b3JlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfSEFTX1NOUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTw8MCkKLS8qKiBBIHZhbGlkICdjYXJyaWVyIGZyZXF1ZW5jeScgaXMgc3RvcmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9IQVNfQ0FSUklFUl9GUkVRVUVOQ1kgICAgICAgICAgICAgICAgICgxPDw5KQotLyoqIEEgdmFsaWQgJ2NhcnJpZXIgY3ljbGVzJyBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX0hBU19DQVJSSUVSX0NZQ0xFUyAgICAgICAgICAgICAgICAgICAgKDE8PDEwKQotLyoqIEEgdmFsaWQgJ2NhcnJpZXIgcGhhc2UnIGlzIHN0b3JlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfSEFTX0NBUlJJRVJfUEhBU0UgICAgICAgICAgICAgICAgICAgICAoMTw8MTEpCi0vKiogQSB2YWxpZCAnY2FycmllciBwaGFzZSB1bmNlcnRhaW50eScgaXMgc3RvcmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9IQVNfQ0FSUklFUl9QSEFTRV9VTkNFUlRBSU5UWSAgICAgICAgICgxPDwxMikKIAogLyogVGhlIGZvbGxvd2luZyB0eXBlZGVmIHRvZ2V0aGVyIHdpdGggaXRzIGNvbnN0YW50cyBiZWxvdyBhcmUgZGVwcmVjYXRlZCwgYW5kCiAgKiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS4gKi8KQEAgLTMzMSwxMiArMjA4LDYgQEAKICAqIGluZGljYXRvci4KICAqLwogdHlwZWRlZiB1aW50OF90IEduc3NNdWx0aXBhdGhJbmRpY2F0b3I7Ci0vKiogVGhlIGluZGljYXRvciBpcyBub3QgYXZhaWxhYmxlIG9yIHVua25vd24uICovCi0jZGVmaW5lIEdOU1NfTVVMVElQQVRIX0lORElDQVRPUl9VTktOT1dOICAgICAgICAgICAgICAgICAwCi0vKiogVGhlIG1lYXN1cmVtZW50IGlzIGluZGljYXRlZCB0byBiZSBhZmZlY3RlZCBieSBtdWx0aXBhdGguICovCi0jZGVmaW5lIEdOU1NfTVVMVElQQVRIX0lORElDQVRPUl9QUkVTRU5UICAgICAgICAgICAgICAgICAxCi0vKiogVGhlIG1lYXN1cmVtZW50IGlzIGluZGljYXRlZCB0byBiZSBub3QgYWZmZWN0ZWQgYnkgbXVsdGlwYXRoLiAqLwotI2RlZmluZSBHTlNTX01VTFRJUEFUSF9JTkRJQ0FUT1JfTk9UX1BSRVNFTlQgICAgICAgICAgICAgMgogCiAvKiBUaGUgZm9sbG93aW5nIHR5cGVkZWYgdG9nZXRoZXIgd2l0aCBpdHMgY29uc3RhbnRzIGJlbG93IGFyZSBkZXByZWNhdGVkLCBhbmQKICAqIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiAqLwpAQCAtMzYzLDIxICsyMzQsNiBAQAogICogc2V0IHRvIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfVU5LTk9XTigwKS4KICAqLwogdHlwZWRlZiB1aW50MzJfdCBHbnNzTWVhc3VyZW1lbnRTdGF0ZTsKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9VTktOT1dOICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9DT0RFX0xPQ0sgICAgICAgICAgICAgKDE8PDApCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfQklUX1NZTkMgICAgICAgICAgICAgICgxPDwxKQotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX1NVQkZSQU1FX1NZTkMgICAgICAgICAoMTw8MikKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9UT1dfREVDT0RFRCAgICAgICAgICAgKDE8PDMpCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfTVNFQ19BTUJJR1VPVVMgICAgICAgICgxPDw0KQotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX1NZTUJPTF9TWU5DICAgICAgICAgICAoMTw8NSkKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9HTE9fU1RSSU5HX1NZTkMgICAgICAgKDE8PDYpCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfR0xPX1RPRF9ERUNPREVEICAgICAgICgxPDw3KQotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0JEU19EMl9CSVRfU1lOQyAgICAgICAoMTw8OCkKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9CRFNfRDJfU1VCRlJBTUVfU1lOQyAgKDE8PDkpCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfR0FMX0UxQkNfQ09ERV9MT0NLICAgICgxPDwxMCkKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9HQUxfRTFDXzJORF9DT0RFX0xPQ0sgKDE8PDExKQotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0dBTF9FMUJfUEFHRV9TWU5DICAgICAoMTw8MTIpCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfU0JBU19TWU5DICAgICAgICAgICAgICgxPDwxMykKIAogLyogVGhlIGZvbGxvd2luZyB0eXBlZGVmIHRvZ2V0aGVyIHdpdGggaXRzIGNvbnN0YW50cyBiZWxvdyBhcmUgZGVwcmVjYXRlZCwgYW5kCiAgKiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS4gKi8KQEAgLTM5MSwxMCArMjQ3LDYgQEAKICAqIEZsYWdzIGluZGljYXRpbmcgdGhlIEFjY3VtdWxhdGVkIERlbHRhIFJhbmdlJ3Mgc3RhdGVzLgogICovCiB0eXBlZGVmIHVpbnQxNl90IEduc3NBY2N1bXVsYXRlZERlbHRhUmFuZ2VTdGF0ZTsKLSNkZWZpbmUgR05TU19BRFJfU1RBVEVfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHTlNTX0FEUl9TVEFURV9WQUxJRCAgICAgICAgICAgICAgICAgICAgICgxPDwwKQotI2RlZmluZSBHTlNTX0FEUl9TVEFURV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICgxPDwxKQotI2RlZmluZSBHTlNTX0FEUl9TVEFURV9DWUNMRV9TTElQICAgICAgICAgICAgICAgICgxPDwyKQogCiAvKiBUaGUgZm9sbG93aW5nIHR5cGVkZWYgdG9nZXRoZXIgd2l0aCBpdHMgY29uc3RhbnRzIGJlbG93IGFyZSBkZXByZWNhdGVkLCBhbmQKICAqIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiAqLwpAQCAtNDE0LDI2ICsyNjYsNiBAQAogICovCiB0eXBlZGVmIGludDE2X3QgR25zc05hdmlnYXRpb25NZXNzYWdlVHlwZTsKIAotI2RlZmluZSBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX1VOS05PV04gICAgICAgMAotLyoqIEdQUyBMMSBDL0EgbWVzc2FnZSBjb250YWluZWQgaW4gdGhlIHN0cnVjdHVyZS4gICovCi0jZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR1BTX0wxQ0EgICAgICAweDAxMDEKLS8qKiBHUFMgTDItQ05BViBtZXNzYWdlIGNvbnRhaW5lZCBpbiB0aGUgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0dQU19MMkNOQVYgICAgMHgwMTAyCi0vKiogR1BTIEw1LUNOQVYgbWVzc2FnZSBjb250YWluZWQgaW4gdGhlIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HUFNfTDVDTkFWICAgIDB4MDEwMwotLyoqIEdQUyBDTkFWLTIgbWVzc2FnZSBjb250YWluZWQgaW4gdGhlIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HUFNfQ05BVjIgICAgIDB4MDEwNAotLyoqIEdsb25hc3MgTDEgQ0EgbWVzc2FnZSBjb250YWluZWQgaW4gdGhlIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HTE9fTDFDQSAgICAgIDB4MDMwMQotLyoqIEJlaWRvdSBEMSBtZXNzYWdlIGNvbnRhaW5lZCBpbiB0aGUgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0JEU19EMSAgICAgICAgMHgwNTAxCi0vKiogQmVpZG91IEQyIG1lc3NhZ2UgY29udGFpbmVkIGluIHRoZSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfQkRTX0QyICAgICAgICAweDA1MDIKLS8qKiBHYWxpbGVvIEkvTkFWIG1lc3NhZ2UgY29udGFpbmVkIGluIHRoZSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR0FMX0kgICAgICAgICAweDA2MDEKLS8qKiBHYWxpbGVvIEYvTkFWIG1lc3NhZ2UgY29udGFpbmVkIGluIHRoZSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR0FMX0YgICAgICAgICAweDA2MDIKLQogLyoqCiAgKiBTdGF0dXMgb2YgTmF2aWdhdGlvbiBNZXNzYWdlCiAgKiBXaGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBwcm9wZXJseSB3aXRob3V0IGFueSBwYXJpdHkgZXJyb3IgaW4gaXRzIG5hdmlnYXRpb24gd29yZHMsIHRoZQpAQCAtNDQ0LDkgKzI3Niw2IEBACiAgKiBjb3JyZWN0ZWQuCiAgKi8KIHR5cGVkZWYgdWludDE2X3QgTmF2aWdhdGlvbk1lc3NhZ2VTdGF0dXM7Ci0jZGVmaW5lIE5BVl9NRVNTQUdFX1NUQVRVU19VTktOT1dOICAgICAgICAgICAgICAwCi0jZGVmaW5lIE5BVl9NRVNTQUdFX1NUQVRVU19QQVJJVFlfUEFTU0VEICAgKDE8PDApCi0jZGVmaW5lIE5BVl9NRVNTQUdFX1NUQVRVU19QQVJJVFlfUkVCVUlMVCAgKDE8PDEpCiAKIC8qIFRoaXMgY29uc3RhbnQgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCByZWxlYXNlLiAqLwogI2RlZmluZSBOQVZfTUVTU0FHRV9TVEFUVVNfVU5LT05XICAgICAgICAgICAgICAwCkBAIC00NTUsMjIgKzI4NCwxMSBAQAogICogRmxhZ3MgdGhhdCBpbmRpY2F0ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2F0ZWxsaXRlCiAgKi8KIHR5cGVkZWYgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEduc3NTdkZsYWdzOwotI2RlZmluZSBHTlNTX1NWX0ZMQUdTX05PTkUgICAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBHTlNTX1NWX0ZMQUdTX0hBU19FUEhFTUVSSVNfREFUQSAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgR05TU19TVl9GTEFHU19IQVNfQUxNQU5BQ19EQVRBICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIEdOU1NfU1ZfRkxBR1NfVVNFRF9JTl9GSVggICAgICAgICAgICAgICAoMSA8PCAyKQogCiAvKioKICAqIENvbnN0ZWxsYXRpb24gdHlwZSBvZiBHbnNzU3ZJbmZvCiAgKi8KIHR5cGVkZWYgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICBHbnNzQ29uc3RlbGxhdGlvblR5cGU7Ci0jZGVmaW5lIEdOU1NfQ09OU1RFTExBVElPTl9VTktOT1dOICAgICAgMAotI2RlZmluZSBHTlNTX0NPTlNURUxMQVRJT05fR1BTICAgICAgICAgIDEKLSNkZWZpbmUgR05TU19DT05TVEVMTEFUSU9OX1NCQVMgICAgICAgICAyCi0jZGVmaW5lIEdOU1NfQ09OU1RFTExBVElPTl9HTE9OQVNTICAgICAgMwotI2RlZmluZSBHTlNTX0NPTlNURUxMQVRJT05fUVpTUyAgICAgICAgIDQKLSNkZWZpbmUgR05TU19DT05TVEVMTEFUSU9OX0JFSURPVSAgICAgICA1Ci0jZGVmaW5lIEdOU1NfQ09OU1RFTExBVElPTl9HQUxJTEVPICAgICAgNgogCiAvKioKICAqIE5hbWUgZm9yIHRoZSBHUFMgWFRSQSBpbnRlcmZhY2UuCkBAIC01MjIsNyArMzQwLDYgQEAKICAqLwogI2RlZmluZSBHTlNTX0NPTkZJR1VSQVRJT05fSU5URVJGQUNFICAgICAiZ25zc19jb25maWd1cmF0aW9uIgogCi0KIC8qKiBSZXByZXNlbnRzIGEgbG9jYXRpb24uICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgLyoqIHNldCB0byBzaXplb2YoR3BzTG9jYXRpb24pICovCkBAIC0xMTI2LDkgKzk0Myw2IEBACiAgICAgY29uc3QgR3BzSW50ZXJmYWNlKiAoKmdldF9ncHNfaW50ZXJmYWNlKShzdHJ1Y3QgZ3BzX2RldmljZV90KiBkZXYpOwogfTsKIAotI2RlZmluZSBBR1BTX1JJTF9SRVFVRVNUX1NFVElEX0lNU0kgICAgICgxPDwwTCkKLSNkZWZpbmUgQUdQU19SSUxfUkVRVUVTVF9TRVRJRF9NU0lTRE4gICAoMTw8MUwpCi0KICNkZWZpbmUgQUdQU19SSUxfUkVRVUVTVF9SRUZMT0NfQ0VMTElEICAoMTw8MEwpCiAjZGVmaW5lIEFHUFNfUklMX1JFUVVFU1RfUkVGTE9DX01BQyAgICAgKDE8PDFMKQogCkBAIC0xMjUxLDE5ICsxMDY1LDYgQEAKICAqIHN1YnN5c3RlbSBrbm93cyBhYm91dCB0aGUgR2VvZmVuY2UuCiAgKgogICovCi0jZGVmaW5lIEdQU19HRU9GRU5DRV9FTlRFUkVEICAgICAoMTw8MEwpCi0jZGVmaW5lIEdQU19HRU9GRU5DRV9FWElURUQgICAgICAoMTw8MUwpCi0jZGVmaW5lIEdQU19HRU9GRU5DRV9VTkNFUlRBSU4gICAoMTw8MkwpCi0KLSNkZWZpbmUgR1BTX0dFT0ZFTkNFX1VOQVZBSUxBQkxFICgxPDwwTCkKLSNkZWZpbmUgR1BTX0dFT0ZFTkNFX0FWQUlMQUJMRSAgICgxPDwxTCkKLQotI2RlZmluZSBHUFNfR0VPRkVOQ0VfT1BFUkFUSU9OX1NVQ0NFU1MgICAgICAgICAgIDAKLSNkZWZpbmUgR1BTX0dFT0ZFTkNFX0VSUk9SX1RPT19NQU5ZX0dFT0ZFTkNFUyAtMTAwCi0jZGVmaW5lIEdQU19HRU9GRU5DRV9FUlJPUl9JRF9FWElTVFMgICAgICAgICAgLTEwMQotI2RlZmluZSBHUFNfR0VPRkVOQ0VfRVJST1JfSURfVU5LTk9XTiAgICAgICAgIC0xMDIKLSNkZWZpbmUgR1BTX0dFT0ZFTkNFX0VSUk9SX0lOVkFMSURfVFJBTlNJVElPTiAtMTAzCi0jZGVmaW5lIEdQU19HRU9GRU5DRV9FUlJPUl9HRU5FUklDICAgICAgICAgICAgLTE0OQogCiAvKioKICAqIFRoZSBjYWxsYmFjayBhc3NvY2lhdGVkIHdpdGggdGhlIGdlb2ZlbmNlLgpAQCAtMTk3MiwxMCArMTc3Myw2IEBACiAgICAgZ25zc19tZWFzdXJlbWVudF9jYWxsYmFjayBnbnNzX21lYXN1cmVtZW50X2NhbGxiYWNrOwogfSBHcHNNZWFzdXJlbWVudENhbGxiYWNrczsKIAotI2RlZmluZSBHUFNfTUVBU1VSRU1FTlRfT1BFUkFUSU9OX1NVQ0NFU1MgICAgICAgICAgMAotI2RlZmluZSBHUFNfTUVBU1VSRU1FTlRfRVJST1JfQUxSRUFEWV9JTklUICAgICAgLTEwMAotI2RlZmluZSBHUFNfTUVBU1VSRU1FTlRfRVJST1JfR0VORVJJQyAgICAgICAgICAgLTEwMQotCiAvKioKICAqIEV4dGVuZGVkIGludGVyZmFjZSBmb3IgR1BTIE1lYXN1cmVtZW50cyBzdXBwb3J0LgogICovCkBAIC0yMTQ3LDEwICsxOTQ0LDYgQEAKICAgICBnbnNzX25hdmlnYXRpb25fbWVzc2FnZV9jYWxsYmFjayBnbnNzX25hdmlnYXRpb25fbWVzc2FnZV9jYWxsYmFjazsKIH0gR3BzTmF2aWdhdGlvbk1lc3NhZ2VDYWxsYmFja3M7CiAKLSNkZWZpbmUgR1BTX05BVklHQVRJT05fTUVTU0FHRV9PUEVSQVRJT05fU1VDQ0VTUyAgICAgICAgICAgICAwCi0jZGVmaW5lIEdQU19OQVZJR0FUSU9OX01FU1NBR0VfRVJST1JfQUxSRUFEWV9JTklUICAgICAgICAgLTEwMAotI2RlZmluZSBHUFNfTkFWSUdBVElPTl9NRVNTQUdFX0VSUk9SX0dFTkVSSUMgICAgICAgICAgICAgIC0xMDEKLQogLyoqCiAgKiBFeHRlbmRlZCBpbnRlcmZhY2UgZm9yIEdQUyBuYXZpZ2F0aW9uIG1lc3NhZ2UgcmVwb3J0aW5nIHN1cHBvcnQuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvZ3JhbGxvYzEuaCBiL2luY2x1ZGUvaGFyZHdhcmUvZ3JhbGxvYzEuaAppbmRleCBhMWEyZDY5Li40ODQ1MDEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2dyYWxsb2MxLmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9ncmFsbG9jMS5oCkBAIC0zNiw3ICszNiwxOSBAQAogICAgICAqIGFsbG9jYXRlIG1heSBiZSBOVUxMLCB3aGljaCBpbnN0cnVjdHMgdGhlIGRldmljZSB0byByZXBvcnQgd2hldGhlciB0aGUKICAgICAgKiBnaXZlbiBhbGxvY2F0aW9uIGlzIHBvc3NpYmxlIG9yIG5vdC4gKi8KICAgICBHUkFMTE9DMV9DQVBBQklMSVRZX1RFU1RfQUxMT0NBVEUgPSAxLAotICAgIEdSQUxMT0MxX0xBU1RfQ0FQQUJJTElUWSA9IDEsCisKKyAgICAvKiBJZiB0aGlzIGNhcGFiaWxpdHkgaXMgc3VwcG9ydGVkLCB0aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cworICAgICAqIGFsbG9jYXRpbmcgYnVmZmVycyB3aXRoIG1vcmUgdGhhbiBvbmUgaW1hZ2UgbGF5ZXIuICovCisgICAgR1JBTExPQzFfQ0FQQUJJTElUWV9MQVlFUkVEX0JVRkZFUlMgPSAyLAorCisgICAgLyogSWYgdGhpcyBjYXBhYmlsaXR5IGlzIHN1cHBvcnRlZCwgdGhlbiB0aGUgaW1wbGVtZW50YXRpb24gYWx3YXlzIGNsb3NlcworICAgICAqIGFuZCBkZWxldGVzIGEgYnVmZmVyIGhhbmRsZSB3aGVuZXZlciB0aGUgbGFzdCByZWZlcmVuY2UgaXMgcmVtb3ZlZC4KKyAgICAgKgorICAgICAqIFN1cHBvcnRpbmcgdGhpcyBjYXBhYmlsaXR5IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkLiAgSXQgd2lsbCBiZWNvbWUKKyAgICAgKiBtYW5kYXRvcnkgaW4gZnV0dXJlIHJlbGVhc2VzLiAqLworICAgIEdSQUxMT0MxX0NBUEFCSUxJVFlfUkVMRUFTRV9JTVBMWV9ERUxFVEUgPSAzLAorCisgICAgR1JBTExPQzFfTEFTVF9DQVBBQklMSVRZID0gMywKIH0gZ3JhbGxvYzFfY2FwYWJpbGl0eV90OwogCiB0eXBlZGVmIGVudW0gewpAQCAtNzEsNyArODMsNyBAQAogICAgIEdSQUxMT0MxX0NPTlNVTUVSX1VTQUdFX0ZPUkVJR05fQlVGRkVSUyA9IDFVTEwgPDwgMjEsCiAKICAgICAvKiAxVUxMIDw8IDIyICovCi0gICAgLyogMVVMTCA8PCAyMyAqLworICAgIEdSQUxMT0MxX0NPTlNVTUVSX1VTQUdFX0dQVV9EQVRBX0JVRkZFUiA9IDFVTEwgPDwgMjMsCiAgICAgLyogMVVMTCA8PCAyNCAqLwogICAgIC8qIDFVTEwgPDwgMjUgKi8KICAgICAvKiAxVUxMIDw8IDI2ICovCkBAIC0xNDEsNyArMTUzLDkgQEAKICAgICBHUkFMTE9DMV9GVU5DVElPTl9MT0NLID0gMTgsCiAgICAgR1JBTExPQzFfRlVOQ1RJT05fTE9DS19GTEVYID0gMTksCiAgICAgR1JBTExPQzFfRlVOQ1RJT05fVU5MT0NLID0gMjAsCi0gICAgR1JBTExPQzFfTEFTVF9GVU5DVElPTiA9IDIwLAorICAgIEdSQUxMT0MxX0ZVTkNUSU9OX1NFVF9MQVlFUl9DT1VOVCA9IDIxLAorICAgIEdSQUxMT0MxX0ZVTkNUSU9OX0dFVF9MQVlFUl9DT1VOVCA9IDIyLAorICAgIEdSQUxMT0MxX0xBU1RfRlVOQ1RJT04gPSAyMiwKIH0gZ3JhbGxvYzFfZnVuY3Rpb25fZGVzY3JpcHRvcl90OwogCiB0eXBlZGVmIGVudW0gewpAQCAtMTg4LDcgKzIwMiw3IEBACiAgICAgLyogMVVMTCA8PCAyMCAqLwogICAgIC8qIDFVTEwgPDwgMjEgKi8KICAgICBHUkFMTE9DMV9QUk9EVUNFUl9VU0FHRV9WSURFT19ERUNPREVSID0gMVVMTCA8PCAyMiwKLSAgICAvKiAxVUxMIDw8IDIzICovCisgICAgR1JBTExPQzFfUFJPRFVDRVJfVVNBR0VfU0VOU09SX0RJUkVDVF9EQVRBID0gMVVMTCA8PCAyMywKICAgICAvKiAxVUxMIDw8IDI0ICovCiAgICAgLyogMVVMTCA8PCAyNSAqLwogICAgIC8qIDFVTEwgPDwgMjYgKi8KQEAgLTQ0MCw2ICs0NTQsMzAgQEAKICAgICAgICAgZ3JhbGxvYzFfZGV2aWNlX3QqIGRldmljZSwgZ3JhbGxvYzFfYnVmZmVyX2Rlc2NyaXB0b3JfdCBkZXNjcmlwdG9yLAogICAgICAgICBpbnQzMl90IC8qYW5kcm9pZF9waXhlbF9mb3JtYXRfdCovIGZvcm1hdCk7CiAKKy8qIHNldExheWVyQ291bnQoLi4uLCBsYXllckNvdW50KQorICogRnVuY3Rpb24gZGVzY3JpcHRvcjogR1JBTExPQzFfRlVOQ1RJT05fU0VUX0xBWUVSX0NPVU5UCisgKiBNdXN0IGJlIHByb3ZpZGVkIGJ5IGFsbCBncmFsbG9jMSBkZXZpY2VzIHRoYXQgcHJvdmlkZSB0aGUKKyAqIEdSQUxMT0MxX0NBUEFCSUxJVFlfTEFZRVJFRF9CVUZGRVJTIGNhcGFiaWxpdHkuCisgKgorICogU2V0cyB0aGUgbnVtYmVyIG9mIGxheWVycyBpbiB0aGUgYnVmZmVyLgorICoKKyAqIEEgYnVmZmVyIHdpdGggbXVsdGlwbGUgbGF5ZXJzIG1heSBiZSB1c2VkIGFzIHRoZSBiYWNraW5nIHN0b3JlIG9mIGFuIGFycmF5CisgKiB0ZXh0dXJlLiBBbGwgbGF5ZXJzIG9mIGEgYnVmZmVyIHNoYXJlIHRoZSBzYW1lIGNoYXJhY3RlcmlzdGljcyAoZS5nLiwKKyAqIGRpbWVuc2lvbnMsIGZvcm1hdCwgdXNhZ2UpLiBEZXZpY2VzIHRoYXQgZG8gbm90IHN1cHBvcnQKKyAqIEdSQUxMT0MxX0NBUEFCSUxJVFlfTEFZRVJFRF9CVUZGRVJTIG11c3QgYWxsb2NhdGUgb25seSBidWZmZXJzIHdpdGggYSBzaW5nbGUKKyAqIGxheWVyLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgIGxheWVyQ291bnQgLSB0aGUgZGVzaXJlZCBudW1iZXIgb2YgbGF5ZXJzLCBtdXN0IGJlIG5vbi16ZXJvCisgKgorICogUmV0dXJucyBHUkFMTE9DMV9FUlJPUl9OT05FIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yczoKKyAqICAgR1JBTExPQzFfRVJST1JfQkFEX0RFU0NSSVBUT1IgLSB0aGUgYnVmZmVyIGRlc2NyaXB0b3IgaXMgaW52YWxpZAorICogICBHUkFMTE9DMV9FUlJPUl9CQURfVkFMVUUgLSB0aGUgbGF5ZXIgY291bnQgaXMgaW52YWxpZAorICovCit0eXBlZGVmIGludDMyX3QgLypncmFsbG9jMV9lcnJvcl90Ki8gKCpHUkFMTE9DMV9QRk5fU0VUX0xBWUVSX0NPVU5UKSgKKyAgICAgICAgZ3JhbGxvYzFfZGV2aWNlX3QqIGRldmljZSwgZ3JhbGxvYzFfYnVmZmVyX2Rlc2NyaXB0b3JfdCBkZXNjcmlwdG9yLAorICAgICAgICB1aW50MzJfdCBsYXllckNvdW50KTsKKwogLyogc2V0UHJvZHVjZXJVc2FnZSguLi4sIHVzYWdlKQogICogRnVuY3Rpb24gZGVzY3JpcHRvcjogR1JBTExPQzFfRlVOQ1RJT05fU0VUX1BST0RVQ0VSX1VTQUdFCiAgKiBNdXN0IGJlIHByb3ZpZGVkIGJ5IGFsbCBncmFsbG9jMSBkZXZpY2VzCkBAIC01NjQsNiArNjAyLDI4IEBACiAgICAgICAgIGdyYWxsb2MxX2RldmljZV90KiBkZXZpY2UsIGJ1ZmZlcl9oYW5kbGVfdCBkZXNjcmlwdG9yLAogICAgICAgICBpbnQzMl90KiBvdXRGb3JtYXQpOwogCisvKiBnZXRMYXllckNvdW50KC4uLiwgb3V0TGF5ZXJDb3VudCkKKyAqIEZ1bmN0aW9uIGRlc2NyaXB0b3I6IEdSQUxMT0MxX0ZVTkNUSU9OX0dFVF9MQVlFUl9DT1VOVAorICogTXVzdCBiZSBwcm92aWRlZCBieSBhbGwgZ3JhbGxvYzEgZGV2aWNlcyB0aGF0IHByb3ZpZGUgdGhlCisgKiBHUkFMTE9DMV9DQVBBQklMSVRZX0xBWUVSRURfQlVGRkVSUyBjYXBhYmlsaXR5LgorICoKKyAqIEdldHMgdGhlIG51bWJlciBvZiBsYXllcnMgb2YgdGhlIGJ1ZmZlci4KKyAqCisgKiBTZWUgc2V0TGF5ZXJDb3VudCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHZhbHVlLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgIG91dExheWVyQ291bnQgLSB0aGUgbnVtYmVyIG9mIGxheWVycyBpbiB0aGUgaW1hZ2UsIG11c3QgYmUgbm9uLU5VTEwKKyAqCisgKiBSZXR1cm5zIEdSQUxMT0MxX0VSUk9SX05PTkUgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3JzOgorICogICBHUkFMTE9DMV9FUlJPUl9CQURfSEFORExFIC0gdGhlIGJ1ZmZlciBoYW5kbGUgaXMgaW52YWxpZAorICogICBHUkFMTE9DMV9FUlJPUl9VTlNVUFBPUlRFRCAtIHRoZSBkZXZpY2UgaXMgdW5hYmxlIHRvIHJldHJpZXZlIHRoZQorICogICAgICAgbGF5ZXIgY291bnQgZnJvbSB0aGUgYnVmZmVyOyBzZWUgbm90ZSBbMV0gaW4gdGhpcyBzZWN0aW9uJ3MgaGVhZGVyIGZvcgorICogICAgICAgbW9yZSBpbmZvcm1hdGlvbgorICovCit0eXBlZGVmIGludDMyX3QgLypncmFsbG9jMV9lcnJvcl90Ki8gKCpHUkFMTE9DMV9QRk5fR0VUX0xBWUVSX0NPVU5UKSgKKyAgICAgICAgZ3JhbGxvYzFfZGV2aWNlX3QqIGRldmljZSwgYnVmZmVyX2hhbmRsZV90IGJ1ZmZlciwKKyAgICAgICAgdWludDMyX3QqIG91dExheWVyQ291bnQpOworCiAvKiBnZXRQcm9kdWNlclVzYWdlKC4uLiwgb3V0VXNhZ2UpCiAgKiBGdW5jdGlvbiBkZXNjcmlwdG9yOiBHUkFMTE9DMV9GVU5DVElPTl9HRVRfUFJPRFVDRVJfVVNBR0UKICAqIE11c3QgYmUgcHJvdmlkZWQgYnkgYWxsIGdyYWxsb2MxIGRldmljZXMKQEAgLTY5Niw2ICs3NTYsMTIgQEAKICAqIHJlZmVycmluZyB0byBhIHBhcnRpY3VsYXIgYmFja2luZyBzdG9yZSBpcyBmcmVlZCwgdGhhdCBiYWNraW5nIHN0b3JlIHNob3VsZAogICogYWxzbyBiZSBmcmVlZC4KICAqCisgKiBXaGVuIEdSQUxMT0MxX0NBUEFCSUxJVFlfUkVMRUFTRV9JTVBMWV9ERUxFVEUgaXMgc3VwcG9ydGVkLAorICogbmF0aXZlX2hhbmRsZV9jbG9zZSBhbmQgbmF0aXZlX2hhbmRsZV9kZWxldGUgbXVzdCBhbHdheXMgYmUgY2FsbGVkIGJ5IHRoZQorICogaW1wbGVtZW50YXRpb24gd2hlbmV2ZXIgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIHJlbW92ZWQuICBPdGhlcndpc2UsIGEgY2FsbAorICogdG8gcmVsZWFzZSgpIHdpbGwgYmUgZm9sbG93ZWQgYnkgbmF0aXZlX2hhbmRsZV9jbG9zZSBhbmQgbmF0aXZlX2hhbmRsZV9kZWxldGUKKyAqIGJ5IHRoZSBjYWxsZXIgd2hlbiB0aGUgYnVmZmVyIGlzIG5vdCBhbGxvY2F0ZWQgbG9jYWxseSB0aHJvdWdoIGFsbG9jYXRlKCkuCisgKgogICogUGFyYW1ldGVyczoKICAqICAgYnVmZmVyIC0gdGhlIGJ1ZmZlciBmcm9tIHdoaWNoIGEgcmVmZXJlbmNlIHNob3VsZCBiZSByZW1vdmVkCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oYXJkd2FyZS9od2NvbXBvc2VyLmggYi9pbmNsdWRlL2hhcmR3YXJlL2h3Y29tcG9zZXIuaAppbmRleCA3ZWNhN2MxLi45ZWIxYWFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2h3Y29tcG9zZXIuaAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL2h3Y29tcG9zZXIuaApAQCAtNDgxLDYgKzQ4MSw3IEBACiAgICAgc3RydWN0IGh3X21vZHVsZV90IGNvbW1vbjsKIH0gaHdjX21vZHVsZV90OwogCisjZGVmaW5lIEhXQ19FUlJPUiAoLTEpCiB0eXBlZGVmIHN0cnVjdCBod2NfY29tcG9zZXJfZGV2aWNlXzEgewogICAgIC8qKgogICAgICAqIENvbW1vbiBtZXRob2RzIG9mIHRoZSBoYXJkd2FyZSBjb21wb3NlciBkZXZpY2UuICBUaGlzICptdXN0KiBiZSB0aGUgZmlyc3QgbWVtYmVyIG9mCkBAIC03MTQsOSArNzE1LDkgQEAKICAgICAgKiAoKmdldEFjdGl2ZUNvbmZpZykoKSByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY29uZmlndXJhdGlvbiB0aGF0IGlzCiAgICAgICogY3VycmVudGx5IGFjdGl2ZSBvbiB0aGUgY29ubmVjdGVkIGRpc3BsYXkuIFRoZSBpbmRleCBpcyByZWxhdGl2ZSB0bwogICAgICAqIHRoZSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gaGFuZGxlcyByZXR1cm5lZCBieSBnZXREaXNwbGF5Q29uZmlncy4gSWYgdGhlcmUKLSAgICAgKiBpcyBubyBhY3RpdmUgY29uZmlndXJhdGlvbiwgLTEgc2hhbGwgYmUgcmV0dXJuZWQuCisgICAgICogaXMgbm8gYWN0aXZlIGNvbmZpZ3VyYXRpb24sIEhXQ19FUlJPUiBzaGFsbCBiZSByZXR1cm5lZC4KICAgICAgKgotICAgICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gaW5kZXggb24gc3VjY2VzcyBvciAtMSBvbiBlcnJvci4KKyAgICAgKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIGluZGV4IG9uIHN1Y2Nlc3Mgb3IgSFdDX0VSUk9SIG9uIGVycm9yLgogICAgICAqCiAgICAgICogVGhpcyBmaWVsZCBpcyBSRVFVSVJFRCBmb3IgSFdDX0RFVklDRV9BUElfVkVSU0lPTl8xXzQgYW5kIGxhdGVyLgogICAgICAqIEl0IHNoYWxsIGJlIE5VTEwgZm9yIHByZXZpb3VzIHZlcnNpb25zLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oYXJkd2FyZS9od2NvbXBvc2VyMi5oIGIvaW5jbHVkZS9oYXJkd2FyZS9od2NvbXBvc2VyMi5oCmluZGV4IDM1ZWVkYjAuLmQ1YTBkNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvaHdjb21wb3NlcjIuaAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL2h3Y29tcG9zZXIyLmgKQEAgLTk0LDYgKzk0LDE2IEBACiAgICAgICogdGhlIGNsaWVudC4gVGhpcyB3aWxsIHByZXZlbnQgdGhlIGNsaWVudCBmcm9tIGFwcGx5aW5nIHRoZSBjb2xvcgogICAgICAqIHRyYW5zZm9ybSBkdXJpbmcgaXRzIGNvbXBvc2l0aW9uIHN0ZXAuICovCiAgICAgSFdDMl9DQVBBQklMSVRZX1NLSVBfQ0xJRU5UX0NPTE9SX1RSQU5TRk9STSA9IDIsCisKKyAgICAvKiBTcGVjaWZpZXMgdGhhdCB0aGUgcHJlc2VudCBmZW5jZSBtdXN0IG5vdCBiZSB1c2VkIGFzIGFuIGFjY3VyYXRlCisgICAgICogcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdHVhbCBwcmVzZW50IHRpbWUgb2YgYSBmcmFtZS4KKyAgICAgKiBUaGlzIGNhcGFiaWxpdHkgbXVzdCBuZXZlciBiZSBzZXQgYnkgSFdDMiBkZXZpY2VzLgorICAgICAqIFRoaXMgY2FwYWJpbGl0eSBtYXkgYmUgc2V0IGZvciBIV0MxIGRldmljZXMgdGhhdCB1c2UgdGhlCisgICAgICogSFdDMk9uMUFkYXB0ZXIgd2hlcmUgZW11bGF0aW9uIG9mIHRoZSBwcmVzZW50IGZlbmNlIHVzaW5nIHRoZSByZXRpcmUKKyAgICAgKiBmZW5jZSBpcyBub3QgZmVhc2libGUuCisgICAgICogSW4gdGhlIGZ1dHVyZSwgQ1RTIHRlc3RzIHdpbGwgcmVxdWlyZSBwcmVzZW50IHRpbWUgdG8gYmUgcmVsaWFibGUuCisgICAgICovCisgICAgSFdDMl9DQVBBQklMSVRZX1BSRVNFTlRfRkVOQ0VfSVNfTk9UX1JFTElBQkxFID0gMywKIH0gaHdjMl9jYXBhYmlsaXR5X3Q7CiAKIC8qIFBvc3NpYmxlIGNvbXBvc2l0aW9uIHR5cGVzIGZvciBhIGdpdmVuIGxheWVyICovCkBAIC0zMzUsNiArMzQ1LDggQEAKICAgICAgICAgY2FzZSBIV0MyX0NBUEFCSUxJVFlfU0lERUJBTkRfU1RSRUFNOiByZXR1cm4gIlNpZGViYW5kU3RyZWFtIjsKICAgICAgICAgY2FzZSBIV0MyX0NBUEFCSUxJVFlfU0tJUF9DTElFTlRfQ09MT1JfVFJBTlNGT1JNOgogICAgICAgICAgICAgICAgIHJldHVybiAiU2tpcENsaWVudENvbG9yVHJhbnNmb3JtIjsKKyAgICAgICAgY2FzZSBIV0MyX0NBUEFCSUxJVFlfUFJFU0VOVF9GRU5DRV9JU19OT1RfUkVMSUFCTEU6CisgICAgICAgICAgICAgICAgcmV0dXJuICJQcmVzZW50RmVuY2VJc05vdFJlbGlhYmxlIjsKICAgICAgICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3duIjsKICAgICB9CiB9CkBAIC01NTEsNiArNTYzLDcgQEAKICAgICBJbnZhbGlkID0gSFdDMl9DQVBBQklMSVRZX0lOVkFMSUQsCiAgICAgU2lkZWJhbmRTdHJlYW0gPSBIV0MyX0NBUEFCSUxJVFlfU0lERUJBTkRfU1RSRUFNLAogICAgIFNraXBDbGllbnRDb2xvclRyYW5zZm9ybSA9IEhXQzJfQ0FQQUJJTElUWV9TS0lQX0NMSUVOVF9DT0xPUl9UUkFOU0ZPUk0sCisgICAgUHJlc2VudEZlbmNlSXNOb3RSZWxpYWJsZSA9IEhXQzJfQ0FQQUJJTElUWV9QUkVTRU5UX0ZFTkNFX0lTX05PVF9SRUxJQUJMRSwKIH07CiBUT19TVFJJTkcoaHdjMl9jYXBhYmlsaXR5X3QsIENhcGFiaWxpdHksIGdldENhcGFiaWxpdHlOYW1lKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2h3Y29tcG9zZXJfZGVmcy5oIGIvaW5jbHVkZS9oYXJkd2FyZS9od2NvbXBvc2VyX2RlZnMuaAppbmRleCAxOGIzMGJjLi4xZTgxZTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2h3Y29tcG9zZXJfZGVmcy5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvaHdjb21wb3Nlcl9kZWZzLmgKQEAgLTEzNiw5ICsxMzYsOSBAQAogICovCiBlbnVtIHsKICAgICAvKgotICAgICAqIEhXQ19TS0lQX0xBWUVSIGlzIHNldCBieSBTdXJmYWNlRmxuZ2VyIHRvIGluZGljYXRlIHRoYXQgdGhlIEhBTAorICAgICAqIEhXQ19TS0lQX0xBWUVSIGlzIHNldCBieSBTdXJmYWNlRmxpbmdlciB0byBpbmRpY2F0ZSB0aGF0IHRoZSBIQUwKICAgICAgKiBzaGFsbCBub3QgY29uc2lkZXIgdGhpcyBsYXllciBmb3IgY29tcG9zaXRpb24gYXMgaXQgd2lsbCBiZSBoYW5kbGVkCi0gICAgICogYnkgU3VyZmFjZUZsaW5nZXIgKGp1c3QgYXMgaWYgY29tcG9zaXRpb25UeXBlIHdhcyBzZXQgdG8gSFdDX09WRVJMQVkpLgorICAgICAqIGJ5IFN1cmZhY2VGbGluZ2VyIChqdXN0IGFzIGlmIGNvbXBvc2l0aW9uVHlwZSB3YXMgc2V0IHRvIEhXQ19GUkFNRUJVRkZFUikuCiAgICAgICovCiAgICAgSFdDX1NLSVBfTEFZRVIgPSAweDAwMDAwMDAxLAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2tleW1hc3Rlcl9kZWZzLmggYi9pbmNsdWRlL2hhcmR3YXJlL2tleW1hc3Rlcl9kZWZzLmgKaW5kZXggMGY5YmMyNy4uN2QxYjM0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oYXJkd2FyZS9rZXltYXN0ZXJfZGVmcy5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUva2V5bWFzdGVyX2RlZnMuaApAQCAtMTM1LDYgKzEzNSwyNiBAQAogICAgIEtNX1RBR19PU19QQVRDSExFVkVMID0gS01fVUlOVCB8IDcwNiwgICAgICAgICAgLyogUGF0Y2ggbGV2ZWwgb2Ygc3lzdGVtIChrZXltYXN0ZXIyKSAqLwogICAgIEtNX1RBR19VTklRVUVfSUQgPSBLTV9CWVRFUyB8IDcwNywgICAgICAgICAgICAgLyogVXNlZCB0byBwcm92aWRlIHVuaXF1ZSBJRCBpbiBhdHRlc3RhdGlvbiAqLwogICAgIEtNX1RBR19BVFRFU1RBVElPTl9DSEFMTEVOR0UgPSBLTV9CWVRFUyB8IDcwOCwgLyogVXNlZCB0byBwcm92aWRlIGNoYWxsZW5nZSBpbiBhdHRlc3RhdGlvbiAqLworICAgIEtNX1RBR19BVFRFU1RBVElPTl9BUFBMSUNBVElPTl9JRCA9IEtNX0JZVEVTIHwgNzA5LCAvKiBVc2VkIHRvIGlkZW50aWZ5IHRoZSBzZXQgb2YgcG9zc2libGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYXBwbGljYXRpb25zIG9mIHdoaWNoIG9uZSBoYXMgaW5pdGlhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGEga2V5IGF0dGVzdGF0aW9uICovCisgICAgS01fVEFHX0FUVEVTVEFUSU9OX0lEX0JSQU5EID0gS01fQllURVMgfCA3MTAsICAvKiBVc2VkIHRvIHByb3ZpZGUgdGhlIGRldmljZSdzIGJyYW5kIG5hbWUgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIGF0dGVzdGF0aW9uICovCisgICAgS01fVEFHX0FUVEVTVEFUSU9OX0lEX0RFVklDRSA9IEtNX0JZVEVTIHwgNzExLCAvKiBVc2VkIHRvIHByb3ZpZGUgdGhlIGRldmljZSdzIGRldmljZSBuYW1lIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiBhdHRlc3RhdGlvbiAqLworICAgIEtNX1RBR19BVFRFU1RBVElPTl9JRF9QUk9EVUNUID0gS01fQllURVMgfCA3MTIsIC8qIFVzZWQgdG8gcHJvdmlkZSB0aGUgZGV2aWNlJ3MgcHJvZHVjdCBuYW1lIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgaW5jbHVkZWQgaW4gYXR0ZXN0YXRpb24gKi8KKyAgICBLTV9UQUdfQVRURVNUQVRJT05fSURfU0VSSUFMID0gS01fQllURVMgfCA3MTMsIC8qIFVzZWQgdG8gcHJvdmlkZSB0aGUgZGV2aWNlJ3Mgc2VyaWFsIG51bWJlciB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgaW5jbHVkZWQgaW4gYXR0ZXN0YXRpb24gKi8KKyAgICBLTV9UQUdfQVRURVNUQVRJT05fSURfSU1FSSA9IEtNX0JZVEVTIHwgNzE0LCAgIC8qIFVzZWQgdG8gcHJvdmlkZSB0aGUgZGV2aWNlJ3MgSU1FSSB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZWQgaW4gYXR0ZXN0YXRpb24gKi8KKyAgICBLTV9UQUdfQVRURVNUQVRJT05fSURfTUVJRCA9IEtNX0JZVEVTIHwgNzE1LCAgIC8qIFVzZWQgdG8gcHJvdmlkZSB0aGUgZGV2aWNlJ3MgTUVJRCB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZWQgaW4gYXR0ZXN0YXRpb24gKi8KKyAgICBLTV9UQUdfQVRURVNUQVRJT05fSURfTUFOVUZBQ1RVUkVSID0gS01fQllURVMgfCA3MTYsIC8qIFVzZWQgdG8gcHJvdmlkZSB0aGUgZGV2aWNlJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnVmYWN0dXJlciBuYW1lIHRvIGJlIGluY2x1ZGVkIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlc3RhdGlvbiAqLworICAgIEtNX1RBR19BVFRFU1RBVElPTl9JRF9NT0RFTCA9IEtNX0JZVEVTIHwgNzE3LCAgLyogVXNlZCB0byBwcm92aWRlIHRoZSBkZXZpY2UncyBtb2RlbCBuYW1lIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiBhdHRlc3RhdGlvbiAqLwogCiAgICAgLyogVGFncyB1c2VkIG9ubHkgdG8gcHJvdmlkZSBkYXRhIHRvIG9yIHJlY2VpdmUgZGF0YSBmcm9tIG9wZXJhdGlvbnMgKi8KICAgICBLTV9UQUdfQVNTT0NJQVRFRF9EQVRBID0gS01fQllURVMgfCAxMDAwLCAvKiBVc2VkIHRvIHByb3ZpZGUgYXNzb2NpYXRlZCBkYXRhIGZvciBBRUFEIG1vZGVzLiAqLwpAQCAtNDI3LDYgKzQ0Nyw4IEBACiAgICAgS01fRVJST1JfS0VZX1JFUVVJUkVTX1VQR1JBREUgPSAtNjIsCiAgICAgS01fRVJST1JfQVRURVNUQVRJT05fQ0hBTExFTkdFX01JU1NJTkcgPSAtNjMsCiAgICAgS01fRVJST1JfS0VZTUFTVEVSX05PVF9DT05GSUdVUkVEID0gLTY0LAorICAgIEtNX0VSUk9SX0FUVEVTVEFUSU9OX0FQUExJQ0FUSU9OX0lEX01JU1NJTkcgPSAtNjUsCisgICAgS01fRVJST1JfQ0FOTk9UX0FUVEVTVF9JRFMgPSAtNjYsCiAKICAgICBLTV9FUlJPUl9VTklNUExFTUVOVEVEID0gLTEwMCwKICAgICBLTV9FUlJPUl9WRVJTSU9OX01JU01BVENIID0gLTEwMSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvc2Vuc29ycy1iYXNlLmggYi9pbmNsdWRlL2hhcmR3YXJlL3NlbnNvcnMtYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZjYyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL3NlbnNvcnMtYmFzZS5oCkBAIC0wLDAgKzEsMTM3IEBACisvLyBUaGlzIGZpbGUgaXMgYXV0b2dlbmVyYXRlZCBieSBoaWRsLWdlbi4gRG8gbm90IGVkaXQgbWFudWFsbHkuCisvLyBTb3VyY2U6IGFuZHJvaWQuaGFyZHdhcmUuc2Vuc29yc0AxLjAKKy8vIFJvb3Q6IGFuZHJvaWQuaGFyZHdhcmU6aGFyZHdhcmUvaW50ZXJmYWNlcworCisjaWZuZGVmIEhJRExfR0VORVJBVEVEX0FORFJPSURfSEFSRFdBUkVfU0VOU09SU19WMV8wX0VYUE9SVEVEX0NPTlNUQU5UU19IXworI2RlZmluZSBISURMX0dFTkVSQVRFRF9BTkRST0lEX0hBUkRXQVJFX1NFTlNPUlNfVjFfMF9FWFBPUlRFRF9DT05TVEFOVFNfSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitlbnVtIHsKKyAgICBTRU5TT1JfSEFMX05PUk1BTF9NT0RFID0gMCwKKyAgICBTRU5TT1JfSEFMX0RBVEFfSU5KRUNUSU9OX01PREUgPSAxLAorfTsKKworZW51bSB7CisgICAgU0VOU09SX1RZUEVfTUVUQV9EQVRBID0gMCwKKyAgICBTRU5TT1JfVFlQRV9BQ0NFTEVST01FVEVSID0gMSwKKyAgICBTRU5TT1JfVFlQRV9NQUdORVRJQ19GSUVMRCA9IDIsCisgICAgU0VOU09SX1RZUEVfT1JJRU5UQVRJT04gPSAzLAorICAgIFNFTlNPUl9UWVBFX0dZUk9TQ09QRSA9IDQsCisgICAgU0VOU09SX1RZUEVfTElHSFQgPSA1LAorICAgIFNFTlNPUl9UWVBFX1BSRVNTVVJFID0gNiwKKyAgICBTRU5TT1JfVFlQRV9URU1QRVJBVFVSRSA9IDcsCisgICAgU0VOU09SX1RZUEVfUFJPWElNSVRZID0gOCwKKyAgICBTRU5TT1JfVFlQRV9HUkFWSVRZID0gOSwKKyAgICBTRU5TT1JfVFlQRV9MSU5FQVJfQUNDRUxFUkFUSU9OID0gMTAsCisgICAgU0VOU09SX1RZUEVfUk9UQVRJT05fVkVDVE9SID0gMTEsCisgICAgU0VOU09SX1RZUEVfUkVMQVRJVkVfSFVNSURJVFkgPSAxMiwKKyAgICBTRU5TT1JfVFlQRV9BTUJJRU5UX1RFTVBFUkFUVVJFID0gMTMsCisgICAgU0VOU09SX1RZUEVfTUFHTkVUSUNfRklFTERfVU5DQUxJQlJBVEVEID0gMTQsCisgICAgU0VOU09SX1RZUEVfR0FNRV9ST1RBVElPTl9WRUNUT1IgPSAxNSwKKyAgICBTRU5TT1JfVFlQRV9HWVJPU0NPUEVfVU5DQUxJQlJBVEVEID0gMTYsCisgICAgU0VOU09SX1RZUEVfU0lHTklGSUNBTlRfTU9USU9OID0gMTcsCisgICAgU0VOU09SX1RZUEVfU1RFUF9ERVRFQ1RPUiA9IDE4LAorICAgIFNFTlNPUl9UWVBFX1NURVBfQ09VTlRFUiA9IDE5LAorICAgIFNFTlNPUl9UWVBFX0dFT01BR05FVElDX1JPVEFUSU9OX1ZFQ1RPUiA9IDIwLAorICAgIFNFTlNPUl9UWVBFX0hFQVJUX1JBVEUgPSAyMSwKKyAgICBTRU5TT1JfVFlQRV9USUxUX0RFVEVDVE9SID0gMjIsCisgICAgU0VOU09SX1RZUEVfV0FLRV9HRVNUVVJFID0gMjMsCisgICAgU0VOU09SX1RZUEVfR0xBTkNFX0dFU1RVUkUgPSAyNCwKKyAgICBTRU5TT1JfVFlQRV9QSUNLX1VQX0dFU1RVUkUgPSAyNSwKKyAgICBTRU5TT1JfVFlQRV9XUklTVF9USUxUX0dFU1RVUkUgPSAyNiwKKyAgICBTRU5TT1JfVFlQRV9ERVZJQ0VfT1JJRU5UQVRJT04gPSAyNywKKyAgICBTRU5TT1JfVFlQRV9QT1NFXzZET0YgPSAyOCwKKyAgICBTRU5TT1JfVFlQRV9TVEFUSU9OQVJZX0RFVEVDVCA9IDI5LAorICAgIFNFTlNPUl9UWVBFX01PVElPTl9ERVRFQ1QgPSAzMCwKKyAgICBTRU5TT1JfVFlQRV9IRUFSVF9CRUFUID0gMzEsCisgICAgU0VOU09SX1RZUEVfRFlOQU1JQ19TRU5TT1JfTUVUQSA9IDMyLAorICAgIFNFTlNPUl9UWVBFX0FERElUSU9OQUxfSU5GTyA9IDMzLAorICAgIFNFTlNPUl9UWVBFX0xPV19MQVRFTkNZX09GRkJPRFlfREVURUNUID0gMzQsCisgICAgU0VOU09SX1RZUEVfQUNDRUxFUk9NRVRFUl9VTkNBTElCUkFURUQgPSAzNSwKKyAgICBTRU5TT1JfVFlQRV9ERVZJQ0VfUFJJVkFURV9CQVNFID0gNjU1MzYsIC8vIDB4MTAwMDAKK307CisKK2VudW0geworICAgIFNFTlNPUl9GTEFHX1dBS0VfVVAgPSAxdSwgLy8gMQorICAgIFNFTlNPUl9GTEFHX0NPTlRJTlVPVVNfTU9ERSA9IDB1LCAvLyAwCisgICAgU0VOU09SX0ZMQUdfT05fQ0hBTkdFX01PREUgPSAydSwgLy8gMgorICAgIFNFTlNPUl9GTEFHX09ORV9TSE9UX01PREUgPSA0dSwgLy8gNAorICAgIFNFTlNPUl9GTEFHX1NQRUNJQUxfUkVQT1JUSU5HX01PREUgPSA2dSwgLy8gNgorICAgIFNFTlNPUl9GTEFHX0RBVEFfSU5KRUNUSU9OID0gMTZ1LCAvLyAweDEwCisgICAgU0VOU09SX0ZMQUdfRFlOQU1JQ19TRU5TT1IgPSAzMnUsIC8vIDB4MjAKKyAgICBTRU5TT1JfRkxBR19BRERJVElPTkFMX0lORk8gPSA2NHUsIC8vIDB4NDAKKyAgICBTRU5TT1JfRkxBR19ESVJFQ1RfQ0hBTk5FTF9BU0hNRU0gPSAxMDI0dSwgLy8gMHg0MDAKKyAgICBTRU5TT1JfRkxBR19ESVJFQ1RfQ0hBTk5FTF9HUkFMTE9DID0gMjA0OHUsIC8vIDB4ODAwCisgICAgU0VOU09SX0ZMQUdfTUFTS19SRVBPUlRJTkdfTU9ERSA9IDE0dSwgLy8gMHhFCisgICAgU0VOU09SX0ZMQUdfTUFTS19ESVJFQ1RfUkVQT1JUID0gODk2dSwgLy8gMHgzODAKKyAgICBTRU5TT1JfRkxBR19NQVNLX0RJUkVDVF9DSEFOTkVMID0gMzA3MnUsIC8vIDB4QzAwCit9OworCit0eXBlZGVmIGVudW0geworICAgIFNFTlNPUl9GTEFHX1NISUZUX1JFUE9SVElOR19NT0RFID0gMSwKKyAgICBTRU5TT1JfRkxBR19TSElGVF9EQVRBX0lOSkVDVElPTiA9IDQsCisgICAgU0VOU09SX0ZMQUdfU0hJRlRfRFlOQU1JQ19TRU5TT1IgPSA1LAorICAgIFNFTlNPUl9GTEFHX1NISUZUX0FERElUSU9OQUxfSU5GTyA9IDYsCisgICAgU0VOU09SX0ZMQUdfU0hJRlRfRElSRUNUX1JFUE9SVCA9IDcsCisgICAgU0VOU09SX0ZMQUdfU0hJRlRfRElSRUNUX0NIQU5ORUwgPSAxMCwKK30gc2Vuc29yX2ZsYWdfc2hpZnRfdDsKKworZW51bSB7CisgICAgU0VOU09SX1NUQVRVU19OT19DT05UQUNUID0gLTEsIC8vICgtMSkKKyAgICBTRU5TT1JfU1RBVFVTX1VOUkVMSUFCTEUgPSAwLAorICAgIFNFTlNPUl9TVEFUVVNfQUNDVVJBQ1lfTE9XID0gMSwKKyAgICBTRU5TT1JfU1RBVFVTX0FDQ1VSQUNZX01FRElVTSA9IDIsCisgICAgU0VOU09SX1NUQVRVU19BQ0NVUkFDWV9ISUdIID0gMywKK307CisKK2VudW0geworICAgIE1FVEFfREFUQV9GTFVTSF9DT01QTEVURSA9IDF1LCAvLyAxCit9OworCit0eXBlZGVmIGVudW0geworICAgIEFJTkZPX0JFR0lOID0gMHUsIC8vIDAKKyAgICBBSU5GT19FTkQgPSAxdSwgLy8gMQorICAgIEFJTkZPX1VOVFJBQ0tFRF9ERUxBWSA9IDY1NTM2dSwgLy8gMHgxMDAwMAorICAgIEFJTkZPX0lOVEVSTkFMX1RFTVBFUkFUVVJFID0gNjU1Mzd1LCAvLyA2NTUzNworICAgIEFJTkZPX1ZFQzNfQ0FMSUJSQVRJT04gPSA2NTUzOHUsIC8vIDY1NTM4CisgICAgQUlORk9fU0VOU09SX1BMQUNFTUVOVCA9IDY1NTM5dSwgLy8gNjU1MzkKKyAgICBBSU5GT19TQU1QTElORyA9IDY1NTQwdSwgLy8gNjU1NDAKKyAgICBBSU5GT19DSEFOTkVMX05PSVNFID0gMTMxMDcydSwgLy8gMHgyMDAwMAorICAgIEFJTkZPX0NIQU5ORUxfU0FNUExFUiA9IDEzMTA3M3UsIC8vIDEzMTA3MworICAgIEFJTkZPX0NIQU5ORUxfRklMVEVSID0gMTMxMDc0dSwgLy8gMTMxMDc0CisgICAgQUlORk9fQ0hBTk5FTF9MSU5FQVJfVFJBTlNGT1JNID0gMTMxMDc1dSwgLy8gMTMxMDc1CisgICAgQUlORk9fQ0hBTk5FTF9OT05MSU5FQVJfTUFQID0gMTMxMDc2dSwgLy8gMTMxMDc2CisgICAgQUlORk9fQ0hBTk5FTF9SRVNBTVBMRVIgPSAxMzEwNzd1LCAvLyAxMzEwNzcKKyAgICBBSU5GT19MT0NBTF9HRU9NQUdORVRJQ19GSUVMRCA9IDE5NjYwOHUsIC8vIDB4MzAwMDAKKyAgICBBSU5GT19MT0NBTF9HUkFWSVRZID0gMTk2NjA5dSwgLy8gMTk2NjA5CisgICAgQUlORk9fRE9DS19TVEFURSA9IDE5NjYxMHUsIC8vIDE5NjYxMAorICAgIEFJTkZPX0hJR0hfUEVSRk9STUFOQ0VfTU9ERSA9IDE5NjYxMXUsIC8vIDE5NjYxMQorICAgIEFJTkZPX01BR05FVElDX0ZJRUxEX0NBTElCUkFUSU9OID0gMTk2NjEydSwgLy8gMTk2NjEyCisgICAgQUlORk9fQ1VTVE9NX1NUQVJUID0gMjY4NDM1NDU2dSwgLy8gMHgxMDAwMDAwMAorICAgIEFJTkZPX0RFQlVHR0lOR19TVEFSVCA9IDEwNzM3NDE4MjR1LCAvLyAweDQwMDAwMDAwCit9IGFkZGl0aW9uYWxfaW5mb190eXBlX3Q7CisKK3R5cGVkZWYgZW51bSB7CisgICAgU0VOU09SX0RJUkVDVF9SQVRFX1NUT1AgPSAwLAorICAgIFNFTlNPUl9ESVJFQ1RfUkFURV9OT1JNQUwgPSAxLAorICAgIFNFTlNPUl9ESVJFQ1RfUkFURV9GQVNUID0gMiwKKyAgICBTRU5TT1JfRElSRUNUX1JBVEVfVkVSWV9GQVNUID0gMywKK30gZGlyZWN0X3JhdGVfbGV2ZWxfdDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBTRU5TT1JfRElSRUNUX01FTV9UWVBFX0FTSE1FTSA9IDEsCisgICAgU0VOU09SX0RJUkVDVF9NRU1fVFlQRV9HUkFMTE9DID0gMiwKK30gZGlyZWN0X21lbV90eXBlX3Q7CisKK3R5cGVkZWYgZW51bSB7CisgICAgU0VOU09SX0RJUkVDVF9GTVRfU0VOU09SU19FVkVOVCA9IDEsCit9IGRpcmVjdF9mb3JtYXRfdDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmICAvLyBISURMX0dFTkVSQVRFRF9BTkRST0lEX0hBUkRXQVJFX1NFTlNPUlNfVjFfMF9FWFBPUlRFRF9DT05TVEFOVFNfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvc2Vuc29ycy5oIGIvaW5jbHVkZS9oYXJkd2FyZS9zZW5zb3JzLmgKaW5kZXggMzIyYWJlNi4uZGRlOTk3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oYXJkd2FyZS9zZW5zb3JzLmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9zZW5zb3JzLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxoYXJkd2FyZS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGN1dGlscy9uYXRpdmVfaGFuZGxlLmg+CiAKKyNpbmNsdWRlICJzZW5zb3JzLWJhc2UuaCIKKwogX19CRUdJTl9ERUNMUwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01NCwxNCArNTYsMTUgQEAKICNkZWZpbmUgU0VOU09SU19IQVJEV0FSRV9QT0xMICAgICAgICJwb2xsIgogCiAvKioKLSAqIEhhbmRsZXMgbXVzdCBiZSBoaWdoZXIgdGhhbiBTRU5TT1JTX0hBTkRMRV9CQVNFIGFuZCBtdXN0IGJlIHVuaXF1ZS4KLSAqIEEgSGFuZGxlIGlkZW50aWZpZXMgYSBnaXZlbiBzZW5zb3JzLiBUaGUgaGFuZGxlIGlzIHVzZWQgdG8gYWN0aXZhdGUKLSAqIGFuZC9vciBkZWFjdGl2YXRlIHNlbnNvcnMuCi0gKiBJbiB0aGlzIHZlcnNpb24gb2YgdGhlIEFQSSB0aGVyZSBjYW4gb25seSBiZSAyNTYgaGFuZGxlcy4KKyAqIFNlbnNvciBoYW5kbGUgaXMgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiBJTlQzMl9NQVguCisgKgorICogKioqKiBEZXByZWNhdGVkICoqKioKKyAqIERlZmluZWQgdmFsdWVzIGJlbG93IGFyZSBrZXB0IGZvciBjb2RlIGNvbXBhdGliaWxpdHkuIE5vdGUgc2Vuc29yIGhhbmRsZSBjYW4gYmUgYXMgbGFyZ2UgYXMKKyAqIElOVDMyX01BWC4KICAqLwogI2RlZmluZSBTRU5TT1JTX0hBTkRMRV9CQVNFICAgICAgICAgICAgIDAKLSNkZWZpbmUgU0VOU09SU19IQU5ETEVfQklUUyAgICAgICAgICAgICA4Ci0jZGVmaW5lIFNFTlNPUlNfSEFORExFX0NPVU5UICAgICAgICAgICAgKDE8PFNFTlNPUlNfSEFORExFX0JJVFMpCisjZGVmaW5lIFNFTlNPUlNfSEFORExFX0JJVFMgICAgICAgICAgICAgMzEKKyNkZWZpbmUgU0VOU09SU19IQU5ETEVfQ09VTlQgICAgICAgICAgICAoMXVsbDw8U0VOU09SU19IQU5ETEVfQklUUykKIAogCiAvKgpAQCAtODIsNyArODUsNyBAQAogICovCiBlbnVtIHsKICAgICAvKiBhIHByZXZpb3VzIGZsdXNoIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkICovCi0gICAgTUVUQV9EQVRBX0ZMVVNIX0NPTVBMRVRFID0gMSwKKyAgICAvLyBNRVRBX0RBVEFfRkxVU0hfQ09NUExFVEUgPSAxLAogICAgIE1FVEFfREFUQV9WRVJTSU9OICAgLyogYWx3YXlzIGxhc3QsIGxlYXZlIGF1dG8tYXNzaWduZWQgKi8KIH07CiAKQEAgLTk0LDI3ICs5NywxMSBAQAogI2RlZmluZSBTRU5TT1JfUEVSTUlTU0lPTl9CT0RZX1NFTlNPUlMgImFuZHJvaWQucGVybWlzc2lvbi5CT0RZX1NFTlNPUlMiCiAKIC8qCi0gKiBBdmFpbGFiaWxpdHk6IFNFTlNPUlNfREVWSUNFX0FQSV9WRVJTSU9OXzFfNAotICogU2Vuc29yIEhBTCBtb2RlcyB1c2VkIGluIHNldF9vcGVyYXRpb25fbW9kZSBtZXRob2QKKyAqIHNlbnNvciBmbGFncyBsZWdhY3kgbmFtZXMKKyAqCisgKiBwbGVhc2UgdXNlIFNFTlNPUl9GTEFHXyogZGlyZWN0bHkgZm9yIG5ldyBpbXBsZW1lbnRhdGlvbi4KKyAqIEBzZWUgc2Vuc29yX3QKICAqLwotZW51bSB7Ci0gICAgLyoKLSAgICAgKiBPcGVyYXRpbmcgbW9kZXMgZm9yIHRoZSBIQUwuCi0gICAgICovCi0KLSAgICAvKgotICAgICAqIE5vcm1hbCBtb2RlIG9wZXJhdGlvbi4gVGhpcyBpcyB0aGUgZGVmYXVsdCBzdGF0ZSBvZiBvcGVyYXRpb24uCi0gICAgICogVGhlIEhBTCBzaGFsbCBpbml0aWFsaXplIGludG8gdGhpcyBtb2RlIG9uIGRldmljZSBzdGFydHVwLgotICAgICAqLwotICAgIFNFTlNPUl9IQUxfTk9STUFMX01PREUgICAgICAgID0gMCwKLQotICAgIC8qCi0gICAgICogRGF0YSBJbmplY3Rpb24gbW9kZS4gSW4gdGhpcyBtb2RlLCB0aGUgZGV2aWNlIHNoYWxsIG5vdCBzb3VyY2UgZGF0YSBmcm9tIHRoZQotICAgICAqIHBoeXNpY2FsIHNlbnNvcnMgYXMgaXQgd291bGQgaW4gbm9ybWFsIG1vZGUuIEluc3RlYWQgc2Vuc29yIGRhdGEgaXMKLSAgICAgKiBpbmplY3RlZCBieSB0aGUgc2Vuc29yIHNlcnZpY2UuCi0gICAgICovCi0gICAgU0VOU09SX0hBTF9EQVRBX0lOSkVDVElPTl9NT0RFICAgICAgPSAweDEKLX07CiAKICNkZWZpbmUgU0VOU09SX0ZMQUdfTUFTSyhuYml0LCBzaGlmdCkgICAoKCgxPDwobmJpdCkpLTEpPDwoc2hpZnQpKQogI2RlZmluZSBTRU5TT1JfRkxBR19NQVNLXzEoc2hpZnQpICAgICAgIFNFTlNPUl9GTEFHX01BU0soMSwgc2hpZnQpCkBAIC0xMjIsNzQ5ICsxMDksODIgQEAKIC8qCiAgKiBNYXNrIGFuZCBzaGlmdCBmb3IgcmVwb3J0aW5nIG1vZGUgc2Vuc29yIGZsYWdzIGRlZmluZWQgYWJvdmUuCiAgKi8KLSNkZWZpbmUgUkVQT1JUSU5HX01PREVfU0hJRlQgICAgICAgICAgICAoMSkKKyNkZWZpbmUgUkVQT1JUSU5HX01PREVfU0hJRlQgICAgICAgICAgICBTRU5TT1JfRkxBR19TSElGVF9SRVBPUlRJTkdfTU9ERQogI2RlZmluZSBSRVBPUlRJTkdfTU9ERV9OQklUICAgICAgICAgICAgICgzKQotI2RlZmluZSBSRVBPUlRJTkdfTU9ERV9NQVNLICAgICAgICAgICAgIFNFTlNPUl9GTEFHX01BU0soUkVQT1JUSU5HX01PREVfTkJJVCwgUkVQT1JUSU5HX01PREVfU0hJRlQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMHhFCisjZGVmaW5lIFJFUE9SVElOR19NT0RFX01BU0sgICAgICAgICAgICAgU0VOU09SX0ZMQUdfTUFTS19SRVBPUlRJTkdfTU9ERQogCiAvKgogICogTWFzayBhbmQgc2hpZnQgZm9yIGRhdGFfaW5qZWN0aW9uIG1vZGUgc2Vuc29yIGZsYWdzIGRlZmluZWQgYWJvdmUuCiAgKi8KLSNkZWZpbmUgREFUQV9JTkpFQ1RJT05fU0hJRlQgICAgICAgICAgICAoNCkKLSNkZWZpbmUgREFUQV9JTkpFQ1RJT05fTUFTSyAgICAgICAgICAgICBTRU5TT1JfRkxBR19NQVNLXzEoREFUQV9JTkpFQ1RJT05fU0hJRlQpIC8vMHgxMAorI2RlZmluZSBEQVRBX0lOSkVDVElPTl9TSElGVCAgICAgICAgICAgIFNFTlNPUl9GTEFHX1NISUZUX0RBVEFfSU5KRUNUSU9OCisjZGVmaW5lIERBVEFfSU5KRUNUSU9OX01BU0sgICAgICAgICAgICAgU0VOU09SX0ZMQUdfREFUQV9JTkpFQ1RJT04KIAogLyoKICAqIE1hc2sgYW5kIHNoaWZ0IGZvciBkeW5hbWljIHNlbnNvciBmbGFnLgogICovCi0jZGVmaW5lIERZTkFNSUNfU0VOU09SX1NISUZUICAgICAgICAgICAgKDUpCi0jZGVmaW5lIERZTkFNSUNfU0VOU09SX01BU0sgICAgICAgICAgICAgU0VOU09SX0ZMQUdfTUFTS18xKERZTkFNSUNfU0VOU09SX1NISUZUKSAvLzB4MjAKKyNkZWZpbmUgRFlOQU1JQ19TRU5TT1JfU0hJRlQgICAgICAgICAgICBTRU5TT1JfRkxBR19TSElGVF9EWU5BTUlDX1NFTlNPUgorI2RlZmluZSBEWU5BTUlDX1NFTlNPUl9NQVNLICAgICAgICAgICAgIFNFTlNPUl9GTEFHX0RZTkFNSUNfU0VOU09SCiAKIC8qCiAgKiBNYXNrIGFuZCBzaGlmdCBmb3Igc2Vuc29yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gc3VwcG9ydC4KICAqLwotI2RlZmluZSBBRERJVElPTkFMX0lORk9fU0hJRlQgICAgICAgICAgICg2KQotI2RlZmluZSBBRERJVElPTkFMX0lORk9fTUFTSyAgICAgICAgICAgIFNFTlNPUl9GTEFHX01BU0tfMShBRERJVElPTkFMX0lORk9fU0hJRlQpIC8vMHg0MAorI2RlZmluZSBBRERJVElPTkFMX0lORk9fU0hJRlQgICAgICAgICAgIFNFTlNPUl9GTEFHX1NISUZUX0FERElUSU9OQUxfSU5GTworI2RlZmluZSBBRERJVElPTkFMX0lORk9fTUFTSyAgICAgICAgICAgIFNFTlNPUl9GTEFHX0FERElUSU9OQUxfSU5GTwogCiAvKgotICogQXZhaWxhYmlsaXR5OiBTRU5TT1JTX0RFVklDRV9BUElfVkVSU0lPTl8xXzMKLSAqIFNlbnNvciBmbGFncyB1c2VkIGluIHNlbnNvcl90LmZsYWdzLgorICogTGVnYWN5IGFsaWFzIG9mIFNFTlNPUl9UWVBFX01BR05FVElDX0ZJRUxELgorICoKKyAqIFByZXZpb3VzbHksIHRoZSB0eXBlIG9mIGEgc2Vuc29yIG1lYXN1cmluZyBsb2NhbCBtYWduZXRpYyBmaWVsZCBpcyBuYW1lZAorICogU0VOU09SX1RZUEVfR0VPTUFHTkVUSUNfRklFTEQgYW5kIFNFTlNPUl9UWVBFX01BR05FVElDX0ZJRUxEIGlzIGl0cyBhbGlhcy4KKyAqIFNFTlNPUl9UWVBFX01BR05FVElDX0ZJRUxEIGlzIHJlZGVmaW5lZCBhcyBwcmltYXJ5IG5hbWUgdG8gYXZvaWQgY29uZnVzaW9uLgorICogU0VOU09SX1RZUEVfR0VPTUFHTkVUSUNfRklFTEQgaXMgdGhlIGFsaWFzIGFuZCBpcyBkZXByZWNhdGluZy4gTmV3IGltcGxlbWVudGF0aW9uIG11c3Qgbm90IHVzZQorICogU0VOU09SX1RZUEVfR0VPTUFHTkVUSUNfRklFTEQuCiAgKi8KLWVudW0gewotICAgIC8qCi0gICAgICogV2hldGhlciB0aGlzIHNlbnNvciB3YWtlcyB1cCB0aGUgQVAgZnJvbSBzdXNwZW5kIG1vZGUgd2hlbiBkYXRhIGlzIGF2YWlsYWJsZS4gIFdoZW5ldmVyCi0gICAgICogc2Vuc29yIGV2ZW50cyBhcmUgZGVsaXZlcmVkIGZyb20gYSB3YWtlX3VwIHNlbnNvciwgdGhlIGRyaXZlciBuZWVkcyB0byBob2xkIGEgd2FrZV9sb2NrIHRpbGwKLSAgICAgKiB0aGUgZXZlbnRzIGFyZSByZWFkIGJ5IHRoZSBTZW5zb3JTZXJ2aWNlIGkuZSB0aWxsIHNlbnNvcnNfcG9sbF9kZXZpY2VfdC5wb2xsKCkgaXMgY2FsbGVkIHRoZQotICAgICAqIG5leHQgdGltZS4gT25jZSBwb2xsIGlzIGNhbGxlZCBhZ2FpbiBpdCBtZWFucyBldmVudHMgaGF2ZSBiZWVuIHJlYWQgYnkgdGhlIFNlbnNvclNlcnZpY2UsIHRoZQotICAgICAqIGRyaXZlciBjYW4gc2FmZWx5IHJlbGVhc2UgdGhlIHdha2VfbG9jay4gU2Vuc29yU2VydmljZSB3aWxsIGNvbnRpbnVlIHRvIGhvbGQgYSB3YWtlX2xvY2sgdGlsbAotICAgICAqIHRoZSBhcHAgYWN0dWFsbHkgcmVhZHMgdGhlIGV2ZW50cy4KLSAgICAgKi8KLSAgICBTRU5TT1JfRkxBR19XQUtFX1VQID0gMVUgPDwgMCwKLSAgICAvKgotICAgICAqIFJlcG9ydGluZyBtb2RlcyBmb3IgdmFyaW91cyBzZW5zb3JzLiBFYWNoIHNlbnNvciB3aWxsIGhhdmUgZXhhY3RseSBvbmUgb2YgdGhlc2UgbW9kZXMgc2V0LgotICAgICAqIFRoZSBsZWFzdCBzaWduaWZpY2FudCAybmQsIDNyZCBhbmQgNHRoIGJpdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IGZvdXIgcG9zc2libGUgcmVwb3J0aW5nCi0gICAgICogbW9kZXMuCi0gICAgICovCi0gICAgU0VOU09SX0ZMQUdfQ09OVElOVU9VU19NT0RFICAgICAgICA9IDAsICAgIC8vIDAwMDAKLSAgICBTRU5TT1JfRkxBR19PTl9DSEFOR0VfTU9ERSAgICAgICAgID0gMHgyLCAgLy8gMDAxMAotICAgIFNFTlNPUl9GTEFHX09ORV9TSE9UX01PREUgICAgICAgICAgPSAweDQsICAvLyAwMTAwCi0gICAgU0VOU09SX0ZMQUdfU1BFQ0lBTF9SRVBPUlRJTkdfTU9ERSA9IDB4NiwgIC8vIDAxMTAKLQotICAgIC8qCi0gICAgICogU2V0IHRoaXMgZmxhZyBpZiB0aGUgc2Vuc29yIHN1cHBvcnRzIGRhdGFfaW5qZWN0aW9uIG1vZGUgYW5kIGFsbG93cyBkYXRhIHRvIGJlIGluamVjdGVkCi0gICAgICogZnJvbSB0aGUgU2Vuc29yU2VydmljZS4gV2hlbiBpbiBkYXRhX2luamVjdGlvbiBPTkxZIHNlbnNvcnMgd2l0aCB0aGlzIGZsYWcgc2V0IGFyZSBpbmplY3RlZAotICAgICAqIHNlbnNvciBkYXRhIGFuZCBvbmx5IHNlbnNvcnMgd2l0aCB0aGlzIGZsYWcgc2V0IGFyZSBhY3RpdmF0ZWQuIEVnOiBBY2NlbGVyb21ldGVyIGFuZCBTdGVwCi0gICAgICogQ291bnRlciBzZW5zb3JzIGNhbiBiZSBzZXQgd2l0aCB0aGlzIGZsYWcgYW5kIFNlbnNvclNlcnZpY2Ugd2lsbCBpbmplY3QgYWNjZWxlcm9tZXRlciBkYXRhCi0gICAgICogYW5kIHJlYWQgdGhlIGNvcnJlc3BvbmRpbmcgc3RlcCBjb3VudHMuCi0gICAgICovCi0gICAgU0VOU09SX0ZMQUdfU1VQUE9SVFNfREFUQV9JTkpFQ1RJT04gPSBEQVRBX0lOSkVDVElPTl9NQVNLLCAvLyAxIDAwMDAKLQotICAgIC8qCi0gICAgICogU2V0IHRoaXMgZmxhZyBpZiB0aGUgc2Vuc29yIGlzIGEgZHluYW1pY2FsbHkgY29ubmVjdGVkIHNlbnNvci4gU2VlCi0gICAgICogZHluYW1pY19zZW5zb3JfbWV0YV9ldmVudF90IGFuZCBTRU5TT1JfVFlQRV9EWU5BTUlDX1NFTlNPUl9NRVRBIGZvciBkZXRhaWxzLgotICAgICAqLwotICAgIFNFTlNPUl9GTEFHX0RZTkFNSUNfU0VOU09SID0gRFlOQU1JQ19TRU5TT1JfTUFTSywKLQotICAgIC8qCi0gICAgICogU2V0IHRoaXMgZmxhZyBpZiBzZW5zb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyBzdXBwb3J0ZWQuIFNlZSBTRU5TT1JfVFlQRV9BRERJVElPTkFMX0lORk8KLSAgICAgKiBhbmQgYWRkaXRpb25hbF9pbmZvX2V2ZW50X3QgZm9yIGRldGFpbHMuCi0gICAgICovCi0gICAgU0VOU09SX0ZMQUdfQURESVRJT05BTF9JTkZPID0gQURESVRJT05BTF9JTkZPX01BU0sKLX07Ci0KKyNkZWZpbmUgU0VOU09SX1RZUEVfR0VPTUFHTkVUSUNfRklFTEQgICBTRU5TT1JfVFlQRV9NQUdORVRJQ19GSUVMRAogCiAvKgotICogU2Vuc29yIHR5cGUKKyAqIFNlbnNvciBzdHJpbmcgdHlwZXMgZm9yIEFuZHJvaWQgZGVmaW5lZCBzZW5zb3IgdHlwZXMuCiAgKgotICogRWFjaCBzZW5zb3IgaGFzIGEgdHlwZSB3aGljaCBkZWZpbmVzIHdoYXQgdGhpcyBzZW5zb3IgbWVhc3VyZXMgYW5kIGhvdwotICogbWVhc3VyZXMgYXJlIHJlcG9ydGVkLiBTZWUgdGhlIEJhc2Ugc2Vuc29ycyBhbmQgQ29tcG9zaXRlIHNlbnNvcnMgbGlzdHMKLSAqIGZvciBjb21wbGV0ZSBkZXNjcmlwdGlvbnM6Ci0gKiBodHRwOi8vc291cmNlLmFuZHJvaWQuY29tL2RldmljZXMvc2Vuc29ycy9iYXNlX3RyaWdnZXJzLmh0bWwKLSAqIGh0dHA6Ly9zb3VyY2UuYW5kcm9pZC5jb20vZGV2aWNlcy9zZW5zb3JzL2NvbXBvc2l0ZV9zZW5zb3JzLmh0bWwKKyAqIEZvciBBbmRyb2lkIGRlZmluZWQgc2Vuc29yIHR5cGVzLCBzdHJpbmcgdHlwZSB3aWxsIGJlIG92ZXJyaWRlIGluIHNlbnNvciBzZXJ2aWNlIGFuZCB0aHVzIG5vCisgKiBsb25nZXIgbmVlZGVkIHRvIGJlIGFkZGVkIHRvIHNlbnNvcl90IGRhdGEgc3RydWN0dXJlLgogICoKLSAqIERldmljZSBtYW51ZmFjdHVyZXJzIChPRU1zKSBjYW4gZGVmaW5lIHRoZWlyIG93biBzZW5zb3IgdHlwZXMsIGZvcgotICogdGhlaXIgcHJpdmF0ZSB1c2UgYnkgYXBwbGljYXRpb25zIG9yIHNlcnZpY2VzIHByb3ZpZGVkIGJ5IHRoZW0uIFN1Y2gKLSAqIHNlbnNvciB0eXBlcyBhcmUgc3BlY2lmaWMgdG8gYW4gT0VNIGFuZCBjYW4ndCBiZSBleHBvc2VkIGluIHRoZSBTREsuCi0gKiBUaGVzZSB0eXBlcyBtdXN0IHN0YXJ0IGF0IFNFTlNPUl9UWVBFX0RFVklDRV9QUklWQVRFX0JBU0UuCi0gKgotICogQWxsIHNlbnNvcnMgZGVmaW5lZCBvdXRzaWRlIG9mIHRoZSBkZXZpY2UgcHJpdmF0ZSByYW5nZSBtdXN0IGNvcnJlc3BvbmQgdG8KLSAqIGEgdHlwZSBkZWZpbmVkIGluIHRoaXMgZmlsZSwgYW5kIG11c3Qgc2F0aXNmeSB0aGUgY2hhcmFjdGVyaXN0aWNzIGxpc3RlZCBpbgotICogdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBzZW5zb3IgdHlwZS4KLSAqCi0gKiBTdGFydGluZyB3aXRoIHZlcnNpb24gU0VOU09SU19ERVZJQ0VfQVBJX1ZFUlNJT05fMV8yLCBlYWNoIHNlbnNvciBhbHNvCi0gKiBoYXMgYSBzdHJpbmdUeXBlLgotICogIC0gU3RyaW5nVHlwZSBvZiBzZW5zb3JzIGluc2lkZSBvZiB0aGUgZGV2aWNlIHByaXZhdGUgcmFuZ2UgTVVTVCBiZSBwcmVmaXhlZAotICogICAgYnkgdGhlIHNlbnNvciBwcm92aWRlcidzIG9yIE9FTSByZXZlcnNlIGRvbWFpbiBuYW1lLiBJbiBwYXJ0aWN1bGFyLCB0aGV5Ci0gKiAgICBjYW5ub3QgdXNlIHRoZSAiYW5kcm9pZC5zZW5zb3IiIHByZWZpeC4KLSAqICAtIFN0cmluZ1R5cGUgb2Ygc2Vuc29ycyBvdXRzaWRlIG9mIHRoZSBkZXZpY2UgcHJpdmF0ZSByYW5nZSBNVVNUIGNvcnJlc3BvbmQKLSAqICAgIHRvIHRoZSBvbmUgZGVmaW5lZCBpbiB0aGlzIGZpbGUgKHN0YXJ0aW5nIHdpdGggImFuZHJvaWQuc2Vuc29yIikuCi0gKiAgICBGb3IgZXhhbXBsZSwgYWNjZWxlcm9tZXRlcnMgbXVzdCBoYXZlCi0gKiAgICAgIHR5cGU9U0VOU09SX1RZUEVfQUNDRUxFUk9NRVRFUiBhbmQKLSAqICAgICAgc3RyaW5nVHlwZT1TRU5TT1JfU1RSSU5HX1RZUEVfQUNDRUxFUk9NRVRFUgotICoKLSAqIFdoZW4gYW5kcm9pZCBpbnRyb2R1Y2VzIGEgbmV3IHNlbnNvciB0eXBlIHRoYXQgY2FuIHJlcGxhY2UgYW4gT0VNLWRlZmluZWQKLSAqIHNlbnNvciB0eXBlLCB0aGUgT0VNIG11c3QgdXNlIHRoZSBvZmZpY2lhbCBzZW5zb3IgdHlwZSBhbmQgc3RyaW5nVHlwZSBvbgotICogdmVyc2lvbnMgb2YgdGhlIEhBTCB0aGF0IHN1cHBvcnQgdGhpcyBuZXcgb2ZmaWNpYWwgc2Vuc29yIHR5cGUuCi0gKgotICogRXhhbXBsZSAobWFkZSB1cCk6IFN1cHBvc2UgR29vZ2xlJ3MgR2xhc3MgdGVhbSB3YW50cyB0byBzdXJmYWNlIGEgc2Vuc29yCi0gKiBkZXRlY3RpbmcgdGhhdCBHbGFzcyBpcyBvbiBhIGhlYWQuCi0gKiAgLSBTdWNoIGEgc2Vuc29yIGlzIG5vdCBvZmZpY2lhbGx5IHN1cHBvcnRlZCBpbiBhbmRyb2lkIEtpdEthdAotICogIC0gR2xhc3MgZGV2aWNlcyBsYXVuY2hpbmcgb24gS2l0S2F0IGNhbiBpbXBsZW1lbnQgYSBzZW5zb3Igd2l0aAotICogICAgdHlwZSA9IDB4MTAwMDEgYW5kIHN0cmluZ1R5cGUgPSAiY29tLmdvb2dsZS5nbGFzcy5vbmhlYWRkZXRlY3RvciIKLSAqICAtIEluIEwgYW5kcm9pZCByZWxlYXNlLCBpZiBhbmRyb2lkIGRlY2lkZXMgdG8gZGVmaW5lCi0gKiAgICBTRU5TT1JfVFlQRV9PTl9IRUFEX0RFVEVDVE9SIGFuZCBTVFJJTkdfU0VOU09SX1RZUEVfT05fSEVBRF9ERVRFQ1RPUiwKLSAqICAgIHRob3NlIHR5cGVzIHNob3VsZCByZXBsYWNlIHRoZSBHbGFzcy10ZWFtLXNwZWNpZmljIHR5cGVzIGluIGFsbCBmdXR1cmUKLSAqICAgIGxhdW5jaGVzLgotICogIC0gV2hlbiBsYXVuY2hpbmcgR2xhc3Mgb24gdGhlIEwgcmVsZWFzZSwgR29vZ2xlIHNob3VsZCBub3cgdXNlIHRoZSBvZmZpY2lhbAotICogICAgdHlwZSAoU0VOU09SX1RZUEVfT05fSEVBRF9ERVRFQ1RPUikgYW5kIHN0cmluZ1R5cGUuCi0gKiAgLSBUaGlzIHdheSwgYWxsIGFwcGxpY2F0aW9ucyBjYW4gbm93IHVzZSB0aGlzIHNlbnNvci4KKyAqIFRoZXNlIGRlZmluaXRpb25zIGFyZSBnb2luZyB0byBiZSByZW1vdmVkIHNvb24uCiAgKi8KLQotLyoKLSAqIEJhc2UgZm9yIGRldmljZSBtYW51ZmFjdHVyZXJzIHByaXZhdGUgc2Vuc29yIHR5cGVzLgotICogVGhlc2Ugc2Vuc29yIHR5cGVzIGNhbid0IGJlIGV4cG9zZWQgaW4gdGhlIFNESy4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9ERVZJQ0VfUFJJVkFURV9CQVNFICAgICAweDEwMDAwCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9NRVRBX0RBVEEKLSAqIHJlcG9ydGluZy1tb2RlOiBuL2EKLSAqIHdha2UtdXAgc2Vuc29yOiBuL2EKLSAqCi0gKiBOTyBTRU5TT1IgT0YgVEhBVCBUWVBFIE1VU1QgQkUgUkVUVVJORUQgKCpnZXRfc2Vuc29yc19saXN0KSgpCi0gKgotICogU0VOU09SX1RZUEVfTUVUQV9EQVRBIGlzIGEgc3BlY2lhbCB0b2tlbiB1c2VkIHRvIHBvcHVsYXRlIHRoZQotICogc2Vuc29yc19tZXRhX2RhdGFfZXZlbnQgc3RydWN0dXJlLiBJdCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYSBwaHlzaWNhbAotICogc2Vuc29yLiBzZW5zb3JzX21ldGFfZGF0YV9ldmVudCBhcmUgc3BlY2lhbCwgdGhleSBleGlzdCBvbmx5IGluc2lkZQotICogdGhlIEhBTCBhbmQgYXJlIGdlbmVyYXRlZCBzcG9udGFuZW91c2x5LCBhcyBvcHBvc2VkIHRvIGJlIHJlbGF0ZWQgdG8KLSAqIGEgcGh5c2ljYWwgc2Vuc29yLgotICoKLSAqICAgc2Vuc29yc19tZXRhX2RhdGFfZXZlbnRfdC52ZXJzaW9uIG11c3QgYmUgTUVUQV9EQVRBX1ZFUlNJT04KLSAqICAgc2Vuc29yc19tZXRhX2RhdGFfZXZlbnRfdC5zZW5zb3IgbXVzdCBiZSAwCi0gKiAgIHNlbnNvcnNfbWV0YV9kYXRhX2V2ZW50X3QudHlwZSBtdXN0IGJlIFNFTlNPUl9UWVBFX01FVEFfREFUQQotICogICBzZW5zb3JzX21ldGFfZGF0YV9ldmVudF90LnJlc2VydmVkIG11c3QgYmUgMAotICogICBzZW5zb3JzX21ldGFfZGF0YV9ldmVudF90LnRpbWVzdGFtcCBtdXN0IGJlIDAKLSAqCi0gKiBUaGUgcGF5bG9hZCBpcyBhIG1ldGFfZGF0YV9ldmVudF90LCB3aGVyZToKLSAqIG1ldGFfZGF0YV9ldmVudF90LndoYXQgY2FuIHRha2UgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gKgotICogTUVUQV9EQVRBX0ZMVVNIX0NPTVBMRVRFCi0gKiAgIFRoaXMgZXZlbnQgaW5kaWNhdGVzIHRoYXQgYSBwcmV2aW91cyAoKmZsdXNoKSgpIGNhbGwgaGFzIGNvbXBsZXRlZCBmb3IgdGhlIHNlbnNvcgotICogICBoYW5kbGUgc3BlY2lmaWVkIGluIG1ldGFfZGF0YV9ldmVudF90LnNlbnNvci4KLSAqICAgc2VlICgqZmx1c2gpKCkgZm9yIG1vcmUgZGV0YWlscwotICoKLSAqIEFsbCBvdGhlciB2YWx1ZXMgZm9yIG1ldGFfZGF0YV9ldmVudF90LndoYXQgYXJlIHJlc2VydmVkIGFuZAotICogbXVzdCBub3QgYmUgdXNlZC4KLSAqCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfTUVUQV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgKDApCi0KLS8qCi0gICogV2FrZSB1cCBzZW5zb3JzLgotICAqIEVhY2ggc2Vuc29yIG1heSBoYXZlIGVpdGhlciBvciBib3RoIGEgd2FrZS11cCBhbmQgYSBub24td2FrZSB2YXJpYW50LgotICAqIFdoZW4gcmVnaXN0ZXJlZCBpbiBiYXRjaCBtb2RlLCB3YWtlLXVwIHNlbnNvcnMgd2lsbCB3YWtlIHVwIHRoZSBBUCB3aGVuCi0gICogdGhlaXIgRklGT3MgYXJlIGZ1bGwgb3Igd2hlbiB0aGUgYmF0Y2ggdGltZW91dCBleHBpcmVzLiBBIHNlcGFyYXRlIEZJRk8gaGFzCi0gICogdG8gYmUgbWFpbnRhaW5lZCBmb3Igd2FrZSB1cCBzZW5zb3JzIGFuZCBub24gd2FrZSB1cCBzZW5zb3JzLiBUaGUgbm9uIHdha2UtdXAKLSAgKiBzZW5zb3JzIG5lZWQgdG8gb3ZlcndyaXRlIHRoZWlyIEZJRk9zIHdoZW4gdGhleSBhcmUgZnVsbCB0aWxsIHRoZSBBUCB3YWtlcyB1cAotICAqIGFuZCB0aGUgd2FrZS11cCBzZW5zb3JzIHdpbGwgd2FrZS11cCB0aGUgQVAgd2hlbiB0aGVpciBGSUZPcyBhcmUgZnVsbCBvciB3aGVuCi0gICogdGhlIGJhdGNoIHRpbWVvdXQgZXhwaXJlcyB3aXRob3V0IGxvc2luZyBldmVudHMuIFdha2UtdXAgYW5kIG5vbiB3YWtlLXVwIHZhcmlhbnRzCi0gICogb2YgZWFjaCBzZW5zb3IgY2FuIGJlIGFjdGl2YXRlZCBhdCBkaWZmZXJlbnQgcmF0ZXMgaW5kZXBlbmRlbnRseSBvZiBlYWNoIG90aGVyLgotICAqCi0gICogTm90ZTogUHJveGltaXR5IHNlbnNvciBhbmQgc2lnbmlmaWNhbnQgbW90aW9uIHNlbnNvciB3aGljaCB3ZXJlIGRlZmluZWQgaW4gcHJldmlvdXMKLSAgKiByZWxlYXNlcyBhcmUgYWxzbyB3YWtlLXVwIHNlbnNvcnMgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzIHN1Y2guIFdha2UtdXAgb25lLXNob3QKLSAgKiBzZW5zb3JzIGxpa2UgU0lHTklGSUNBTlRfTU9USU9OIGNhbm5vdCBiZSBiYXRjaGVkLCBoZW5jZSB0aGUgdGV4dCBhYm91dCBiYXRjaCBhYm92ZQotICAqIGRvZXNuJ3QgYXBwbHkgdG8gdGhlbS4gU2VlIHRoZSBkZWZpbml0aW9ucyBvZiBTRU5TT1JfVFlQRV9QUk9YSU1JVFkgYW5kCi0gICogU0VOU09SX1RZUEVfU0lHTklGSUNBTlRfTU9USU9OIGZvciBtb3JlIGluZm8uCi0gICoKLSAgKiBTZXQgU0VOU09SX0ZMQUdfV0FLRV9VUCBmbGFnIGZvciBhbGwgd2FrZS11cCBzZW5zb3JzLgotICAqCi0gICogRm9yIGV4YW1wbGUsIEEgZGV2aWNlIGNhbiBoYXZlIHR3byBzZW5zb3JzIGJvdGggb2YgU0VOU09SX1RZUEVfQUNDRUxFUk9NRVRFUiBhbmQKLSAgKiBvbmUgb2YgdGhlbSBjYW4gYmUgYSB3YWtlX3VwIHNlbnNvciAod2l0aCBTRU5TT1JfRkxBR19XQUtFX1VQIGZsYWcgc2V0KSBhbmQgdGhlIG90aGVyCi0gICogY2FuIGJlIGEgcmVndWxhciBub24gd2FrZV91cCBzZW5zb3IuIEJvdGggb2YgdGhlc2Ugc2Vuc29ycyBtdXN0IGJlIGFjdGl2YXRlZC9kZWFjdGl2YXRlZAotICAqIGluZGVwZW5kZW50bHkgb2YgdGhlIG90aGVyLgotICAqLwotCi0vKgotICogU0VOU09SX1RZUEVfQUNDRUxFUk9NRVRFUgotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiAgQWxsIHZhbHVlcyBhcmUgaW4gU0kgdW5pdHMgKG0vc14yKSBhbmQgbWVhc3VyZSB0aGUgYWNjZWxlcmF0aW9uIG9mIHRoZQotICogIGRldmljZSBtaW51cyB0aGUgZm9yY2Ugb2YgZ3Jhdml0eS4KLSAqCi0gKiAgSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqICB2ZXJzaW9uIGlmIHRoZSBzeXN0ZW0gcG9zc2Vzc2VzIGEgd2FrZSB1cCBmaWZvLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0FDQ0VMRVJPTUVURVIgICAgICAgICAgICAgICAgICAgICgxKQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfQUNDRUxFUk9NRVRFUiAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuYWNjZWxlcm9tZXRlciIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX0dFT01BR05FVElDX0ZJRUxECi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqICBBbGwgdmFsdWVzIGFyZSBpbiBtaWNyby1UZXNsYSAodVQpIGFuZCBtZWFzdXJlIHRoZSBnZW9tYWduZXRpYwotICogIGZpZWxkIGluIHRoZSBYLCBZIGFuZCBaIGF4aXMuCi0gKgotICogIEltcGxlbWVudCB0aGUgbm9uLXdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvciBhbmQgaW1wbGVtZW50IHRoZSB3YWtlLXVwCi0gKiAgdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9HRU9NQUdORVRJQ19GSUVMRCAgICAgICAgICAgICAgICAoMikKLSNkZWZpbmUgU0VOU09SX1RZUEVfTUFHTkVUSUNfRklFTEQgIFNFTlNPUl9UWVBFX0dFT01BR05FVElDX0ZJRUxECi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9NQUdORVRJQ19GSUVMRCAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5tYWduZXRpY19maWVsZCIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX09SSUVOVEFUSU9OCi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqIEFsbCB2YWx1ZXMgYXJlIGFuZ2xlcyBpbiBkZWdyZWVzLgotICoKLSAqIE9yaWVudGF0aW9uIHNlbnNvcnMgcmV0dXJuIHNlbnNvciBldmVudHMgZm9yIGFsbCAzIGF4ZXMgYXQgYSBjb25zdGFudAotICogcmF0ZSBkZWZpbmVkIGJ5IHNldERlbGF5KCkuCi0gKgotICogSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqIHZlcnNpb24gaWYgdGhlIHN5c3RlbSBwb3NzZXNzZXMgYSB3YWtlIHVwIGZpZm8uCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfT1JJRU5UQVRJT04gICAgICAgICAgICAgICAgICAgICAgKDMpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9PUklFTlRBVElPTiAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5vcmllbnRhdGlvbiIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX0dZUk9TQ09QRQotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiAgQWxsIHZhbHVlcyBhcmUgaW4gcmFkaWFucy9zZWNvbmQgYW5kIG1lYXN1cmUgdGhlIHJhdGUgb2Ygcm90YXRpb24KLSAqICBhcm91bmQgdGhlIFgsIFkgYW5kIFogYXhpcy4KLSAqCi0gKiAgSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqICB2ZXJzaW9uIGlmIHRoZSBzeXN0ZW0gcG9zc2Vzc2VzIGEgd2FrZSB1cCBmaWZvLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0dZUk9TQ09QRSAgICAgICAgICAgICAgICAgICAgICAgICg0KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfR1lST1NDT1BFICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuZ3lyb3Njb3BlIgotCi0vKgotICogU0VOU09SX1RZUEVfTElHSFQKLSAqIHJlcG9ydGluZy1tb2RlOiBvbi1jaGFuZ2UKLSAqCi0gKiBUaGUgbGlnaHQgc2Vuc29yIHZhbHVlIGlzIHJldHVybmVkIGluIFNJIGx1eCB1bml0cy4KLSAqCi0gKiBCb3RoIHdha2UtdXAgYW5kIG5vbiB3YWtlLXVwIHZlcnNpb25zIGFyZSB1c2VmdWwuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfTElHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9MSUdIVCAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5saWdodCIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX1BSRVNTVVJFCi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqIFRoZSBwcmVzc3VyZSBzZW5zb3IgcmV0dXJuIHRoZSBhdGhtb3NwaGVyaWMgcHJlc3N1cmUgaW4gaGVjdG9wYXNjYWwgKGhQYSkKLSAqCi0gKiBJbXBsZW1lbnQgdGhlIG5vbi13YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IgYW5kIGltcGxlbWVudCB0aGUgd2FrZS11cAotICogdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9QUkVTU1VSRSAgICAgICAgICAgICAgICAgICAgICAgICAoNikKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1BSRVNTVVJFICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnByZXNzdXJlIgotCi0vKiBTRU5TT1JfVFlQRV9URU1QRVJBVFVSRSBpcyBkZXByZWNhdGVkIGluIHRoZSBIQUwgKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUgICAgICAgICAgICAgICAgICAgICAgKDcpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9URU1QRVJBVFVSRSAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci50ZW1wZXJhdHVyZSIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX1BST1hJTUlUWQotICogcmVwb3J0aW5nLW1vZGU6IG9uLWNoYW5nZQotICoKLSAqIFRoZSBwcm94aW1pdHkgc2Vuc29yIHdoaWNoIHR1cm5zIHRoZSBzY3JlZW4gb2ZmIGFuZCBiYWNrIG9uIGR1cmluZyBjYWxscyBpcyB0aGUKLSAqIHdha2UtdXAgcHJveGltaXR5IHNlbnNvci4gSW1wbGVtZW50IHdha2UtdXAgcHJveGltaXR5IHNlbnNvciBiZWZvcmUgaW1wbGVtZW50aW5nCi0gKiBhIG5vbiB3YWtlLXVwIHByb3hpbWl0eSBzZW5zb3IuIEZvciB0aGUgd2FrZS11cCBwcm94aW1pdHkgc2Vuc29yIHNldCB0aGUgZmxhZwotICogU0VOU09SX0ZMQUdfV0FLRV9VUC4KLSAqIFRoZSB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgZGlzdGFuY2UgdG8gdGhlIG5lYXJlc3Qgb2JqZWN0IGluIGNlbnRpbWV0ZXJzLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX1BST1hJTUlUWSAgICAgICAgICAgICAgICAgICAgICAgICg4KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfUFJPWElNSVRZICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IucHJveGltaXR5IgotCi0vKgotICogU0VOU09SX1RZUEVfR1JBVklUWQotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiBBIGdyYXZpdHkgb3V0cHV0IGluZGljYXRlcyB0aGUgZGlyZWN0aW9uIG9mIGFuZCBtYWduaXR1ZGUgb2YgZ3Jhdml0eSBpbgotICogdGhlIGRldmljZXMncyBjb29yZGluYXRlcy4KLSAqCi0gKiBJbXBsZW1lbnQgdGhlIG5vbi13YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IgYW5kIGltcGxlbWVudCB0aGUgd2FrZS11cAotICogdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9HUkFWSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAoOSkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dSQVZJVFkgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmdyYXZpdHkiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9MSU5FQVJfQUNDRUxFUkFUSU9OCi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqIEluZGljYXRlcyB0aGUgbGluZWFyIGFjY2VsZXJhdGlvbiBvZiB0aGUgZGV2aWNlIGluIGRldmljZSBjb29yZGluYXRlcywKLSAqIG5vdCBpbmNsdWRpbmcgZ3Jhdml0eS4KLSAqCi0gKiBJbXBsZW1lbnQgdGhlIG5vbi13YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IgYW5kIGltcGxlbWVudCB0aGUgd2FrZS11cAotICogdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9MSU5FQVJfQUNDRUxFUkFUSU9OICAgICAgICAgICAgICgxMCkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0xJTkVBUl9BQ0NFTEVSQVRJT04gICAgICAiYW5kcm9pZC5zZW5zb3IubGluZWFyX2FjY2VsZXJhdGlvbiIKLQotCi0vKgotICogU0VOU09SX1RZUEVfUk9UQVRJT05fVkVDVE9SCi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqIFRoZSByb3RhdGlvbiB2ZWN0b3Igc3ltYm9saXplcyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGRldmljZSByZWxhdGl2ZSB0byB0aGUKLSAqIEVhc3QtTm9ydGgtVXAgY29vcmRpbmF0ZXMgZnJhbWUuCi0gKgotICogSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqIHZlcnNpb24gaWYgdGhlIHN5c3RlbSBwb3NzZXNzZXMgYSB3YWtlIHVwIGZpZm8uCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfUk9UQVRJT05fVkVDVE9SICAgICAgICAgICAgICAgICAoMTEpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9ST1RBVElPTl9WRUNUT1IgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnJvdGF0aW9uX3ZlY3RvciIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX1JFTEFUSVZFX0hVTUlESVRZCi0gKiByZXBvcnRpbmctbW9kZTogb24tY2hhbmdlCi0gKgotICogQSByZWxhdGl2ZSBodW1pZGl0eSBzZW5zb3IgbWVhc3VyZXMgcmVsYXRpdmUgYW1iaWVudCBhaXIgaHVtaWRpdHkgYW5kCi0gKiByZXR1cm5zIGEgdmFsdWUgaW4gcGVyY2VudC4KLSAqCi0gKiBCb3RoIHdha2UtdXAgYW5kIG5vbiB3YWtlLXVwIHZlcnNpb25zIGFyZSB1c2VmdWwuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfUkVMQVRJVkVfSFVNSURJVFkgICAgICAgICAgICAgICAoMTIpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9SRUxBVElWRV9IVU1JRElUWSAgICAgICAgImFuZHJvaWQuc2Vuc29yLnJlbGF0aXZlX2h1bWlkaXR5IgotCi0vKgotICogU0VOU09SX1RZUEVfQU1CSUVOVF9URU1QRVJBVFVSRQotICogcmVwb3J0aW5nLW1vZGU6IG9uLWNoYW5nZQotICoKLSAqIFRoZSBhbWJpZW50IChyb29tKSB0ZW1wZXJhdHVyZSBpbiBkZWdyZWUgQ2Vsc2l1cy4KLSAqCi0gKiBCb3RoIHdha2UtdXAgYW5kIG5vbiB3YWtlLXVwIHZlcnNpb25zIGFyZSB1c2VmdWwuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfQU1CSUVOVF9URU1QRVJBVFVSRSAgICAgICAgICAgICAoMTMpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9BTUJJRU5UX1RFTVBFUkFUVVJFICAgICAgImFuZHJvaWQuc2Vuc29yLmFtYmllbnRfdGVtcGVyYXR1cmUiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9NQUdORVRJQ19GSUVMRF9VTkNBTElCUkFURUQKLSAqIHJlcG9ydGluZy1tb2RlOiBjb250aW51b3VzCi0gKgotICogIFNpbWlsYXIgdG8gU0VOU09SX1RZUEVfTUFHTkVUSUNfRklFTEQsIGJ1dCB0aGUgaGFyZCBpcm9uIGNhbGlicmF0aW9uIGlzCi0gKiAgcmVwb3J0ZWQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBtZWFzdXJlbWVudC4KLSAqCi0gKiAgSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqICB2ZXJzaW9uIGlmIHRoZSBzeXN0ZW0gcG9zc2Vzc2VzIGEgd2FrZSB1cCBmaWZvLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX01BR05FVElDX0ZJRUxEX1VOQ0FMSUJSQVRFRCAgICAgKDE0KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfTUFHTkVUSUNfRklFTERfVU5DQUxJQlJBVEVEICJhbmRyb2lkLnNlbnNvci5tYWduZXRpY19maWVsZF91bmNhbGlicmF0ZWQiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9HQU1FX1JPVEFUSU9OX1ZFQ1RPUgotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiAgU2ltaWxhciB0byBTRU5TT1JfVFlQRV9ST1RBVElPTl9WRUNUT1IsIGJ1dCBub3QgdXNpbmcgdGhlIGdlb21hZ25ldGljCi0gKiAgZmllbGQuCi0gKgotICogIEltcGxlbWVudCB0aGUgbm9uLXdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvciBhbmQgaW1wbGVtZW50IHRoZSB3YWtlLXVwCi0gKiAgdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9HQU1FX1JPVEFUSU9OX1ZFQ1RPUiAgICAgICAgICAgICgxNSkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dBTUVfUk9UQVRJT05fVkVDVE9SICAgICAiYW5kcm9pZC5zZW5zb3IuZ2FtZV9yb3RhdGlvbl92ZWN0b3IiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9HWVJPU0NPUEVfVU5DQUxJQlJBVEVECi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqICBBbGwgdmFsdWVzIGFyZSBpbiByYWRpYW5zL3NlY29uZCBhbmQgbWVhc3VyZSB0aGUgcmF0ZSBvZiByb3RhdGlvbgotICogIGFyb3VuZCB0aGUgWCwgWSBhbmQgWiBheGlzLgotICoKLSAqICBJbXBsZW1lbnQgdGhlIG5vbi13YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IgYW5kIGltcGxlbWVudCB0aGUgd2FrZS11cAotICogIHZlcnNpb24gaWYgdGhlIHN5c3RlbSBwb3NzZXNzZXMgYSB3YWtlIHVwIGZpZm8uCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfR1lST1NDT1BFX1VOQ0FMSUJSQVRFRCAgICAgICAgICAoMTYpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9HWVJPU0NPUEVfVU5DQUxJQlJBVEVEICAgImFuZHJvaWQuc2Vuc29yLmd5cm9zY29wZV91bmNhbGlicmF0ZWQiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9TSUdOSUZJQ0FOVF9NT1RJT04KLSAqIHJlcG9ydGluZy1tb2RlOiBvbmUtc2hvdAotICoKLSAqIEEgc2Vuc29yIG9mIHRoaXMgdHlwZSB0cmlnZ2VycyBhbiBldmVudCBlYWNoIHRpbWUgc2lnbmlmaWNhbnQgbW90aW9uCi0gKiBpcyBkZXRlY3RlZCBhbmQgYXV0b21hdGljYWxseSBkaXNhYmxlcyBpdHNlbGYuCi0gKiBGb3IgU2lnbmlmaWNhbnQgTW90aW9uIHNlbnNvciB0byBiZSB1c2VmdWwsIGl0IG11c3QgYmUgZGVmaW5lZCBhcyBhCi0gKiB3YWtlLXVwIHNlbnNvci4gKHNldCBTRU5TT1JfRkxBR19XQUtFX1VQKS4gSW1wbGVtZW50IHRoZSB3YWtlLXVwIHNpZ25pZmljYW50IG1vdGlvbgotICogc2Vuc29yLiBBIG5vbiB3YWtlLXVwIHZlcnNpb24gaXMgbm90IHVzZWZ1bC4KLSAqIFRoZSBvbmx5IGFsbG93ZWQgdmFsdWUgdG8gcmV0dXJuIGlzIDEuMC4KLSAqLwotCi0jZGVmaW5lIFNFTlNPUl9UWVBFX1NJR05JRklDQU5UX01PVElPTiAgICAgICAgICAgICAgKDE3KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfU0lHTklGSUNBTlRfTU9USU9OICAgICAgICJhbmRyb2lkLnNlbnNvci5zaWduaWZpY2FudF9tb3Rpb24iCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9TVEVQX0RFVEVDVE9SCi0gKiByZXBvcnRpbmctbW9kZTogc3BlY2lhbAotICoKLSAqIEEgc2Vuc29yIG9mIHRoaXMgdHlwZSB0cmlnZ2VycyBhbiBldmVudCBlYWNoIHRpbWUgYSBzdGVwIGlzIHRha2VuCi0gKiBieSB0aGUgdXNlci4gVGhlIG9ubHkgYWxsb3dlZCB2YWx1ZSB0byByZXR1cm4gaXMgMS4wIGFuZCBhbiBldmVudAotICogaXMgZ2VuZXJhdGVkIGZvciBlYWNoIHN0ZXAuCi0gKgotICogQm90aCB3YWtlLXVwIGFuZCBub24gd2FrZS11cCB2ZXJzaW9ucyBhcmUgdXNlZnVsLgotICovCi0KLSNkZWZpbmUgU0VOU09SX1RZUEVfU1RFUF9ERVRFQ1RPUiAgICAgICAgICAgICAgICAgICAoMTgpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9TVEVQX0RFVEVDVE9SICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnN0ZXBfZGV0ZWN0b3IiCi0KLQotLyoKLSAqIFNFTlNPUl9UWVBFX1NURVBfQ09VTlRFUgotICogcmVwb3J0aW5nLW1vZGU6IG9uLWNoYW5nZQotICoKLSAqIEEgc2Vuc29yIG9mIHRoaXMgdHlwZSByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RlcHMgdGFrZW4gYnkgdGhlIHVzZXIgc2luY2UKLSAqIHRoZSBsYXN0IHJlYm9vdCB3aGlsZSBhY3RpdmF0ZWQuIFRoZSB2YWx1ZSBpcyByZXR1cm5lZCBhcyBhIHVpbnQ2NF90IGFuZCBpcwotICogcmVzZXQgdG8gemVybyBvbmx5IG9uIGEgc3lzdGVtIC8gYW5kcm9pZCByZWJvb3QuCi0gKgotICogSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqIHZlcnNpb24gaWYgdGhlIHN5c3RlbSBwb3NzZXNzZXMgYSB3YWtlIHVwIGZpZm8uCi0gKi8KLQotI2RlZmluZSBTRU5TT1JfVFlQRV9TVEVQX0NPVU5URVIgICAgICAgICAgICAgICAgICAgICgxOSkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1NURVBfQ09VTlRFUiAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iuc3RlcF9jb3VudGVyIgotCi0vKgotICogU0VOU09SX1RZUEVfR0VPTUFHTkVUSUNfUk9UQVRJT05fVkVDVE9SCi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqICBTaW1pbGFyIHRvIFNFTlNPUl9UWVBFX1JPVEFUSU9OX1ZFQ1RPUiwgYnV0IHVzaW5nIGEgbWFnbmV0b21ldGVyIGluc3RlYWQKLSAqICBvZiB1c2luZyBhIGd5cm9zY29wZS4KLSAqCi0gKiBJbXBsZW1lbnQgdGhlIG5vbi13YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IgYW5kIGltcGxlbWVudCB0aGUgd2FrZS11cAotICogdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9HRU9NQUdORVRJQ19ST1RBVElPTl9WRUNUT1IgICAgICgyMCkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dFT01BR05FVElDX1JPVEFUSU9OX1ZFQ1RPUiAiYW5kcm9pZC5zZW5zb3IuZ2VvbWFnbmV0aWNfcm90YXRpb25fdmVjdG9yIgotCi0vKgotICogU0VOU09SX1RZUEVfSEVBUlRfUkFURQotICogcmVwb3J0aW5nLW1vZGU6IG9uLWNoYW5nZQotICoKLSAqICBBIHNlbnNvciBvZiB0aGlzIHR5cGUgcmV0dXJucyB0aGUgY3VycmVudCBoZWFydCByYXRlLgotICogIFRoZSBldmVudHMgY29udGFpbiB0aGUgY3VycmVudCBoZWFydCByYXRlIGluIGJlYXRzIHBlciBtaW51dGUgKEJQTSkgYW5kIHRoZQotICogIHN0YXR1cyBvZiB0aGUgc2Vuc29yIGR1cmluZyB0aGUgbWVhc3VyZW1lbnQuIFNlZSBoZWFydF9yYXRlX2V2ZW50X3QgZm9yIG1vcmUKLSAqICBkZXRhaWxzLgotICoKLSAqICBCZWNhdXNlIHRoaXMgc2Vuc29yIGlzIG9uLWNoYW5nZSwgZXZlbnRzIG11c3QgYmUgZ2VuZXJhdGVkIHdoZW4gYW5kIG9ubHkKLSAqICB3aGVuIGhlYXJ0X3JhdGUuYnBtIG9yIGhlYXJ0X3JhdGUuc3RhdHVzIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdAotICogIGV2ZW50LiBJbiBwYXJ0aWN1bGFyLCB1cG9uIHRoZSBmaXJzdCBhY3RpdmF0aW9uLCB1bmxlc3MgdGhlIGRldmljZSBpcyBrbm93bgotICogIHRvIG5vdCBiZSBvbiB0aGUgYm9keSwgdGhlIHN0YXR1cyBmaWVsZCBvZiB0aGUgZmlyc3QgZXZlbnQgbXVzdCBiZSBzZXQgdG8KLSAqICBTRU5TT1JfU1RBVFVTX1VOUkVMSUFCTEUuIFRoZSBldmVudCBzaG91bGQgYmUgZ2VuZXJhdGVkIG5vIGZhc3RlciB0aGFuIGV2ZXJ5Ci0gKiAgcGVyaW9kX25zIHBhc3NlZCB0byBzZXREZWxheSgpIG9yIHRvIGJhdGNoKCkuCi0gKiAgU2VlIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBvbi1jaGFuZ2UgcmVwb3J0aW5nIG1vZGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogIHNlbnNvcl90LnJlcXVpcmVkUGVybWlzc2lvbiBtdXN0IGJlIHNldCB0byBTRU5TT1JfUEVSTUlTU0lPTl9CT0RZX1NFTlNPUlMuCi0gKgotICogIEJvdGggd2FrZS11cCBhbmQgbm9uIHdha2UtdXAgdmVyc2lvbnMgYXJlIHVzZWZ1bC4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9IRUFSVF9SQVRFICAgICAgICAgICAgICAgICAgICAgICgyMSkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0hFQVJUX1JBVEUgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuaGVhcnRfcmF0ZSIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX1dBS0VfVVBfVElMVF9ERVRFQ1RPUgotICogcmVwb3J0aW5nLW1vZGU6IHNwZWNpYWwgKHNldERlbGF5IGhhcyBubyBpbXBhY3QpCi0gKgotICogQSBzZW5zb3Igb2YgdGhpcyB0eXBlIGdlbmVyYXRlcyBhbiBldmVudCBlYWNoIHRpbWUgYSB0aWx0IGV2ZW50IGlzIGRldGVjdGVkLiBBIHRpbHQgZXZlbnQKLSAqIHNob3VsZCBiZSBnZW5lcmF0ZWQgaWYgdGhlIGRpcmVjdGlvbiBvZiB0aGUgMi1zZWNvbmRzIHdpbmRvdyBhdmVyYWdlIGdyYXZpdHkgY2hhbmdlZCBieSBhdCBsZWFzdAotICogMzUgZGVncmVlcyBzaW5jZSB0aGUgYWN0aXZhdGlvbiBvciB0aGUgbGFzdCB0cmlnZ2VyIG9mIHRoZSBzZW5zb3IuCi0gKiAgICAgcmVmZXJlbmNlX2VzdGltYXRlZF9ncmF2aXR5ID0gYXZlcmFnZSBvZiBhY2NlbGVyb21ldGVyIG1lYXN1cmVtZW50cyBvdmVyIHRoZSBmaXJzdAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIHNlY29uZCBhZnRlciBhY3RpdmF0aW9uIG9yIHRoZSBlc3RpbWF0ZWQgZ3Jhdml0eSBhdCB0aGUgbGFzdAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLgotICogICAgIGN1cnJlbnRfZXN0aW1hdGVkX2dyYXZpdHkgPSBhdmVyYWdlIG9mIGFjY2VsZXJvbWV0ZXIgbWVhc3VyZW1lbnRzIG92ZXIgdGhlIGxhc3QgMiBzZWNvbmRzLgotICogICAgIHRyaWdnZXIgd2hlbiBhbmdsZSAocmVmZXJlbmNlX2VzdGltYXRlZF9ncmF2aXR5LCBjdXJyZW50X2VzdGltYXRlZF9ncmF2aXR5KSA+IDM1IGRlZ3JlZXMKLSAqCi0gKiBMYXJnZSBhY2NlbGVyYXRpb25zIHdpdGhvdXQgYSBjaGFuZ2UgaW4gcGhvbmUgb3JpZW50YXRpb24gc2hvdWxkIG5vdCB0cmlnZ2VyIGEgdGlsdCBldmVudC4KLSAqIEZvciBleGFtcGxlLCBhIHNoYXJwIHR1cm4gb3Igc3Ryb25nIGFjY2VsZXJhdGlvbiB3aGlsZSBkcml2aW5nIGEgY2FyIHNob3VsZCBub3QgdHJpZ2dlciBhIHRpbHQKLSAqIGV2ZW50LCBldmVuIHRob3VnaCB0aGUgYW5nbGUgb2YgdGhlIGF2ZXJhZ2UgYWNjZWxlcmF0aW9uIG1pZ2h0IHZhcnkgYnkgbW9yZSB0aGFuIDM1IGRlZ3JlZXMuCi0gKgotICogVHlwaWNhbGx5LCB0aGlzIHNlbnNvciBpcyBpbXBsZW1lbnRlZCB3aXRoIHRoZSBoZWxwIG9mIG9ubHkgYW4gYWNjZWxlcm9tZXRlci4gT3RoZXIgc2Vuc29ycyBjYW4KLSAqIGJlIHVzZWQgYXMgd2VsbCBpZiB0aGV5IGRvIG5vdCBpbmNyZWFzZSB0aGUgcG93ZXIgY29uc3VtcHRpb24gc2lnbmlmaWNhbnRseS4gVGhpcyBpcyBhIGxvdyBwb3dlcgotICogc2Vuc29yIHRoYXQgc2hvdWxkIGFsbG93IHRoZSBBUCB0byBnbyBpbnRvIHN1c3BlbmQgbW9kZS4gRG8gbm90IGVtdWxhdGUgdGhpcyBzZW5zb3IgaW4gdGhlIEhBTC4KLSAqIExpa2Ugb3RoZXIgd2FrZSB1cCBzZW5zb3JzLCB0aGUgZHJpdmVyIGlzIGV4cGVjdGVkIHRvIGEgaG9sZCBhIHdha2VfbG9jayB3aXRoIGEgdGltZW91dCBvZiAyMDAgbXMKLSAqIHdoaWxlIHJlcG9ydGluZyB0aGlzIGV2ZW50LiBUaGUgb25seSBhbGxvd2VkIHJldHVybiB2YWx1ZSBpcyAxLjAuCi0gKgotICogSW1wbGVtZW50IG9ubHkgdGhlIHdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvci4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9USUxUX0RFVEVDVE9SICAgICAgICAgICAgICAgICAgICAgICgyMikKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1RJTFRfREVURUNUT1IgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IudGlsdF9kZXRlY3RvciIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX1dBS0VfR0VTVFVSRQotICogcmVwb3J0aW5nLW1vZGU6IG9uZS1zaG90Ci0gKgotICogQSBzZW5zb3IgZW5hYmxpbmcgd2FraW5nIHVwIHRoZSBkZXZpY2UgYmFzZWQgb24gYSBkZXZpY2Ugc3BlY2lmaWMgbW90aW9uLgotICoKLSAqIFdoZW4gdGhpcyBzZW5zb3IgdHJpZ2dlcnMsIHRoZSBkZXZpY2UgYmVoYXZlcyBhcyBpZiB0aGUgcG93ZXIgYnV0dG9uIHdhcwotICogcHJlc3NlZCwgdHVybmluZyB0aGUgc2NyZWVuIG9uLiBUaGlzIGJlaGF2aW9yICh0dXJuaW5nIG9uIHRoZSBzY3JlZW4gd2hlbgotICogdGhpcyBzZW5zb3IgdHJpZ2dlcnMpIG1pZ2h0IGJlIGRlYWN0aXZhdGVkIGJ5IHRoZSB1c2VyIGluIHRoZSBkZXZpY2UKLSAqIHNldHRpbmdzLiBDaGFuZ2VzIGluIHNldHRpbmdzIGRvIG5vdCBpbXBhY3QgdGhlIGJlaGF2aW9yIG9mIHRoZSBzZW5zb3I6Ci0gKiBvbmx5IHdoZXRoZXIgdGhlIGZyYW1ld29yayB0dXJucyB0aGUgc2NyZWVuIG9uIHdoZW4gaXQgdHJpZ2dlcnMuCi0gKgotICogVGhlIGFjdHVhbCBnZXN0dXJlIHRvIGJlIGRldGVjdGVkIGlzIG5vdCBzcGVjaWZpZWQsIGFuZCBjYW4gYmUgY2hvc2VuIGJ5Ci0gKiB0aGUgbWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UuCi0gKiBUaGlzIHNlbnNvciBtdXN0IGJlIGxvdyBwb3dlciwgYXMgaXQgaXMgbGlrZWx5IHRvIGJlIGFjdGl2YXRlZCAyNC83LgotICogVGhlIG9ubHkgYWxsb3dlZCB2YWx1ZSB0byByZXR1cm4gaXMgMS4wLgotICoKLSAqIEltcGxlbWVudCBvbmx5IHRoZSB3YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfV0FLRV9HRVNUVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyMykKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1dBS0VfR0VTVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci53YWtlX2dlc3R1cmUiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9HTEFOQ0VfR0VTVFVSRQotICogcmVwb3J0aW5nLW1vZGU6IG9uZS1zaG90Ci0gKgotICogQSBzZW5zb3IgZW5hYmxpbmcgYnJpZWZseSB0dXJuaW5nIHRoZSBzY3JlZW4gb24gdG8gZW5hYmxlIHRoZSB1c2VyIHRvCi0gKiBnbGFuY2UgY29udGVudCBvbiBzY3JlZW4gYmFzZWQgb24gYSBzcGVjaWZpYyBtb3Rpb24uICBUaGUgZGV2aWNlIHNob3VsZAotICogdHVybiB0aGUgc2NyZWVuIG9mZiBhZnRlciBhIGZldyBtb21lbnRzLgotICoKLSAqIFdoZW4gdGhpcyBzZW5zb3IgdHJpZ2dlcnMsIHRoZSBkZXZpY2UgdHVybnMgdGhlIHNjcmVlbiBvbiBtb21lbnRhcmlseQotICogdG8gYWxsb3cgdGhlIHVzZXIgdG8gZ2xhbmNlIG5vdGlmaWNhdGlvbnMgb3Igb3RoZXIgY29udGVudCB3aGlsZSB0aGUKLSAqIGRldmljZSByZW1haW5zIGxvY2tlZCBpbiBhIG5vbi1pbnRlcmFjdGl2ZSBzdGF0ZSAoZG96aW5nKS4gVGhpcyBiZWhhdmlvcgotICogKGJyaWVmbHkgdHVybmluZyBvbiB0aGUgc2NyZWVuIHdoZW4gdGhpcyBzZW5zb3IgdHJpZ2dlcnMpIG1pZ2h0IGJlIGRlYWN0aXZhdGVkCi0gKiBieSB0aGUgdXNlciBpbiB0aGUgZGV2aWNlIHNldHRpbmdzLiBDaGFuZ2VzIGluIHNldHRpbmdzIGRvIG5vdCBpbXBhY3QgdGhlCi0gKiBiZWhhdmlvciBvZiB0aGUgc2Vuc29yOiBvbmx5IHdoZXRoZXIgdGhlIGZyYW1ld29yayBicmllZmx5IHR1cm5zIHRoZSBzY3JlZW4gb24KLSAqIHdoZW4gaXQgdHJpZ2dlcnMuCi0gKgotICogVGhlIGFjdHVhbCBnZXN0dXJlIHRvIGJlIGRldGVjdGVkIGlzIG5vdCBzcGVjaWZpZWQsIGFuZCBjYW4gYmUgY2hvc2VuIGJ5Ci0gKiB0aGUgbWFudWZhY3R1cmVyIG9mIHRoZSBkZXZpY2UuCi0gKiBUaGlzIHNlbnNvciBtdXN0IGJlIGxvdyBwb3dlciwgYXMgaXQgaXMgbGlrZWx5IHRvIGJlIGFjdGl2YXRlZCAyNC83LgotICogVGhlIG9ubHkgYWxsb3dlZCB2YWx1ZSB0byByZXR1cm4gaXMgMS4wLgotICoKLSAqIEltcGxlbWVudCBvbmx5IHRoZSB3YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfR0xBTkNFX0dFU1RVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyNCkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dMQU5DRV9HRVNUVVJFICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5nbGFuY2VfZ2VzdHVyZSIKLQotLyoqCi0gKiBTRU5TT1JfVFlQRV9QSUNLX1VQX0dFU1RVUkUKLSAqIHJlcG9ydGluZy1tb2RlOiBvbmUtc2hvdAotICoKLSAqIEEgc2Vuc29yIG9mIHRoaXMgdHlwZSB0cmlnZ2VycyB3aGVuIHRoZSBkZXZpY2UgaXMgcGlja2VkIHVwIHJlZ2FyZGxlc3Mgb2Ygd2hlcmV2ZXIgaXMgd2FzCi0gKiBiZWZvcmUgKGRlc2ssIHBvY2tldCwgYmFnKS4gVGhlIG9ubHkgYWxsb3dlZCByZXR1cm4gdmFsdWUgaXMgMS4wLgotICogVGhpcyBzZW5zb3IgZGUtYWN0aXZhdGVzIGl0c2VsZiBpbW1lZGlhdGVseSBhZnRlciBpdCB0cmlnZ2Vycy4KLSAqCi0gKiBJbXBsZW1lbnQgb25seSB0aGUgd2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX1BJQ0tfVVBfR0VTVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMjUpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9QSUNLX1VQX0dFU1RVUkUgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IucGlja191cF9nZXN0dXJlIgotCi0vKgotICogU0VOU09SX1RZUEVfV1JJU1RfVElMVF9HRVNUVVJFCi0gKiB0cmlnZ2VyLW1vZGU6IHNwZWNpYWwKLSAqIHdha2UtdXAgc2Vuc29yOiB5ZXMKLSAqCi0gKiBBIHNlbnNvciBvZiB0aGlzIHR5cGUgdHJpZ2dlcnMgYW4gZXZlbnQgZWFjaCB0aW1lIGEgdGlsdCBvZiB0aGUgd3Jpc3Qtd29ybgotICogZGV2aWNlIGlzIGRldGVjdGVkLgotICoKLSAqIFRoaXMgc2Vuc29yIG11c3QgYmUgbG93IHBvd2VyLCBhcyBpdCBpcyBsaWtlbHkgdG8gYmUgYWN0aXZhdGVkIDI0LzcuCi0gKiBUaGUgb25seSBhbGxvd2VkIHZhbHVlIHRvIHJldHVybiBpcyAxLjAuCi0gKgotICogSW1wbGVtZW50IG9ubHkgdGhlIHdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvci4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9XUklTVF9USUxUX0dFU1RVUkUgICAgICAgICAgICAgICAgICAgICAgICAgKDI2KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfV1JJU1RfVElMVF9HRVNUVVJFICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLndyaXN0X3RpbHRfZ2VzdHVyZSIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX0RFVklDRV9PUklFTlRBVElPTgotICogcmVwb3J0aW5nLW1vZGU6IG9uLWNoYW5nZQotICoKLSAqIFRoZSBjdXJyZW50IG9yaWVudGF0aW9uIG9mIHRoZSBkZXZpY2UuIFRoZSB2YWx1ZSBzaG91bGQgYmUgcmVwb3J0ZWQgaW4gdGhlCi0gKiBmaXJzdCBlbGVtZW50IG9mIHRoZSAnZGF0YScgbWVtYmVyIHZhcmlhYmxlIGluIHNlbnNvcnNfZXZlbnRfdC4gVGhlIG9ubHkKLSAqIHZhbHVlcyB0aGF0IGNhbiBiZSByZXBvcnRlZCBhcmUgKHBsZWFzZSByZWZlciB0byBBbmRyb2lkIFNlbnNvciBDb29yZGluYXRlCi0gKiBTeXN0ZW0gdG8gdW5kZXJzdGFuZCB0aGUgWCBhbmQgWSBheGlzIGRpcmVjdGlvbiB3aXRoIHJlc3BlY3QgdG8gZGVmYXVsdAotICogb3JpZW50YXRpb24pOgotICogIC0gMDogZGV2aWNlIGlzIGluIGRlZmF1bHQgb3JpZW50YXRpb24gKFkgYXhpcyBpcyB2ZXJ0aWNhbCBhbmQgcG9pbnRzIHVwKQotICogIC0gMTogZGV2aWNlIGlzIHJvdGF0ZWQgOTAgZGVncmVlcyBjb3VudGVyLWNsb2Nrd2lzZSBmcm9tIGRlZmF1bHQKLSAqICAgICAgIG9yaWVudGF0aW9uIChYIGF4aXMgaXMgdmVydGljYWwgYW5kIHBvaW50cyB1cCkKLSAqICAtIDI6IGRldmljZSBpcyByb3RhdGVkIDE4MCBkZWdyZWVzIGZyb20gZGVmYXVsdCBvcmllbnRhdGlvbiAoWSBheGlzIGlzCi0gKiAgICAgICB2ZXJ0aWNhbCBhbmQgcG9pbnRzIGRvd24pCi0gKiAgLSAzOiBkZXZpY2UgaXMgcm90YXRlZCA5MCBkZWdyZWVzIGNsb2Nrd2lzZSBmcm9tIGRlZmF1bHQgb3JpZW50YXRpb24gKFggYXhpcwotICogICAgICAgaXMgdmVydGljYWwgYW5kIHBvaW50cyBkb3duKQotICoKLSAqIE1vdmluZyB0aGUgZGV2aWNlIHRvIGFuIG9yaWVudGF0aW9uIHdoZXJlIHRoZSBaIGF4aXMgaXMgdmVydGljYWwgKGVpdGhlciB1cAotICogb3IgZG93bikgc2hvdWxkIG5vdCBjYXVzZSBhIG5ldyBldmVudCB0byBiZSByZXBvcnRlZC4KLSAqCi0gKiBUbyBpbXByb3ZlIHRoZSB1c2VyIGV4cGVyaWVuY2Ugb2YgdGhpcyBzZW5zb3IsIGl0IGlzIHJlY29tbWVuZGVkIHRvIGltcGxlbWVudAotICogc29tZSBwaHlzaWNhbCAoaS5lLiwgcm90YXRpb24gYW5nbGUpIGFuZCB0ZW1wb3JhbCAoaS5lLiwgZGVsYXkpIGh5c3RlcmVzaXMuCi0gKiBJbiBvdGhlciB3b3JkcywgbWlub3Igb3IgdHJhbnNpZW50IHJvdGF0aW9ucyBzaG91bGQgbm90IGNhdXNlIGEgbmV3IGV2ZW50IHRvCi0gKiBiZSByZXBvcnRlZC4KLSAqCi0gKiBUaGlzIHNlbnNvciBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCB3aXRoIHRoZSBoZWxwIG9mIGFuIGFjY2VsZXJvbWV0ZXIuCi0gKiBUaGlzIGlzIGEgbG93IHBvd2VyIHNlbnNvciB0aGF0IHNob3VsZCByZWR1Y2UgdGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzIG9mIHRoZQotICogQVAuIERvIG5vdCBlbXVsYXRlIHRoaXMgc2Vuc29yIGluIHRoZSBIQUwuCi0gKgotICogQm90aCB3YWtlLXVwIGFuZCBub24gd2FrZS11cCB2ZXJzaW9ucyBhcmUgdXNlZnVsLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0RFVklDRV9PUklFTlRBVElPTiAgICAgICAgICAgICAgICAgKDI3KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfREVWSUNFX09SSUVOVEFUSU9OICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5kZXZpY2Vfb3JpZW50YXRpb24iCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9QT1NFXzZET0YKLSAqIHRyaWdnZXItbW9kZTogY29udGludW91cwotICoKLSAqIEEgc2Vuc29yIG9mIHRoaXMgdHlwZSByZXR1cm5zIHRoZSBwb3NlIG9mIHRoZSBkZXZpY2UuCi0gKiBQb3NlIG9mIHRoZSBkZXZpY2UgaXMgZGVmaW5lZCBhcyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGRldmljZSBmcm9tIGEKLSAqIEVhcnRoIENlbnRlcmVkIEVhcnRoIEZpeGVkIGZyYW1lIGFuZCB0aGUgdHJhbnNsYXRpb24gZnJvbSBhbiBhcmJpdHJhcnkKLSAqIHBvaW50IGF0IHN1YnNjcmlwdGlvbi4KLSAqCi0gKiBUaGlzIHNlbnNvciBjYW4gYmUgaGlnaCBwb3dlci4gSXQgY2FuIHVzZSBhbnkgYW5kIGFsbCBvZiB0aGUgZm9sbG93aW5nCi0gKiAgICAgICAgICAgLiBBY2NlbGVyb21ldGVyCi0gKiAgICAgICAgICAgLiBHeXJvc2NvcGUKLSAqICAgICAgICAgICAuIENhbWVyYQotICogICAgICAgICAgIC4gRGVwdGggQ2FtZXJhCi0gKgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX1BPU0VfNkRPRiAgICAgICAgICAgICAgICAgICAgICAgICAoMjgpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9QT1NFXzZET0YgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IucG9zZV82ZG9mIgotCi0vKgotICogU0VOU09SX1RZUEVfU1RBVElPTkFSWV9ERVRFQ1QKLSAqIHRyaWdnZXIgbW9kZTogb25lIHNob3QKLSAqCi0gKiBBIHNlbnNvciBvZiB0aGlzIHR5cGUgcmV0dXJucyBhbiBldmVudCBpZiB0aGUgZGV2aWNlIGlzIHN0aWxsL3N0YXRpb25hcnkgZm9yCi0gKiBhIHdoaWxlLiBUaGUgcGVyaW9kIG9mIHRpbWUgdG8gbW9uaXRvciBmb3Igc3RhdGluYXJpdHkgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbgotICogNSBzZWNvbmRzLCBhbmQgbGVzcyB0aGFuIDEwIHNlY29uZHMuCi0gKgotICogU3RhdGlvbmFyaXR5IGhlcmUgcmVmZXJzIHRvIGFic29sdXRlIHN0YXRpb25hcml0eS4gZWc6IGRldmljZSBvbiBkZXNrLgotICoKLSAqIFRoZSBvbmx5IGFsbG93ZWQgdmFsdWUgdG8gcmV0dXJuIGlzIDEuMC4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9TVEFUSU9OQVJZX0RFVEVDVCAgICAgICAgICAgICAgICAgICAoMjkpCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9BQ0NFTEVST01FVEVSICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5hY2NlbGVyb21ldGVyIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfTUFHTkVUSUNfRklFTEQgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IubWFnbmV0aWNfZmllbGQiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9PUklFTlRBVElPTiAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5vcmllbnRhdGlvbiIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dZUk9TQ09QRSAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmd5cm9zY29wZSIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0xJR0hUICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmxpZ2h0IgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfUFJFU1NVUkUgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IucHJlc3N1cmUiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9URU1QRVJBVFVSRSAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci50ZW1wZXJhdHVyZSIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1BST1hJTUlUWSAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnByb3hpbWl0eSIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dSQVZJVFkgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmdyYXZpdHkiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9MSU5FQVJfQUNDRUxFUkFUSU9OICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5saW5lYXJfYWNjZWxlcmF0aW9uIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfUk9UQVRJT05fVkVDVE9SICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iucm90YXRpb25fdmVjdG9yIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfUkVMQVRJVkVfSFVNSURJVFkgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IucmVsYXRpdmVfaHVtaWRpdHkiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9BTUJJRU5UX1RFTVBFUkFUVVJFICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5hbWJpZW50X3RlbXBlcmF0dXJlIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfTUFHTkVUSUNfRklFTERfVU5DQUxJQlJBVEVEICAiYW5kcm9pZC5zZW5zb3IubWFnbmV0aWNfZmllbGRfdW5jYWxpYnJhdGVkIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfR0FNRV9ST1RBVElPTl9WRUNUT1IgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuZ2FtZV9yb3RhdGlvbl92ZWN0b3IiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9HWVJPU0NPUEVfVU5DQUxJQlJBVEVEICAgICAgICJhbmRyb2lkLnNlbnNvci5neXJvc2NvcGVfdW5jYWxpYnJhdGVkIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfU0lHTklGSUNBTlRfTU9USU9OICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iuc2lnbmlmaWNhbnRfbW90aW9uIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfU1RFUF9ERVRFQ1RPUiAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iuc3RlcF9kZXRlY3RvciIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1NURVBfQ09VTlRFUiAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnN0ZXBfY291bnRlciIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dFT01BR05FVElDX1JPVEFUSU9OX1ZFQ1RPUiAgImFuZHJvaWQuc2Vuc29yLmdlb21hZ25ldGljX3JvdGF0aW9uX3ZlY3RvciIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0hFQVJUX1JBVEUgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmhlYXJ0X3JhdGUiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9USUxUX0RFVEVDVE9SICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci50aWx0X2RldGVjdG9yIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfV0FLRV9HRVNUVVJFICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iud2FrZV9nZXN0dXJlIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfR0xBTkNFX0dFU1RVUkUgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuZ2xhbmNlX2dlc3R1cmUiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9QSUNLX1VQX0dFU1RVUkUgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5waWNrX3VwX2dlc3R1cmUiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9XUklTVF9USUxUX0dFU1RVUkUgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci53cmlzdF90aWx0X2dlc3R1cmUiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9ERVZJQ0VfT1JJRU5UQVRJT04gICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5kZXZpY2Vfb3JpZW50YXRpb24iCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9QT1NFXzZET0YgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5wb3NlXzZkb2YiCiAjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9TVEFUSU9OQVJZX0RFVEVDVCAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5zdGF0aW9uYXJ5X2RldGVjdCIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX01PVElPTl9ERVRFQ1QKLSAqIHRyaWdnZXIgbW9kZTogb25lIHNob3QKLSAqCi0gKiBBIHNlbnNvciBvZiB0aGlzIHR5cGUgcmV0dXJucyBhbiBldmVudCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBzdGlsbCBmb3IKLSAqIGEgd2hpbGUuIFRoZSBwZXJpb2Qgb2YgdGltZSB0byBtb25pdG9yIGZvciBzdGF0aW5hcml0eSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuCi0gKiA1IHNlY29uZHMsIGFuZCBsZXNzIHRoYW4gMTAgc2Vjb25kcy4KLSAqCi0gKiBNb3Rpb24gaGVyZSByZWZlcnMgdG8gYW55IG1lY2hhbmlzbSBpbiB3aGljaCB0aGUgZGV2aWNlIGlzIGNhdXNlcyB0byBiZQotICogbW92ZWQgaW4gaXRzIGluZXJ0aWFsIGZyYW1lLiBlZzogUGlja2luIHVwIHRoZSBkZXZpY2UgYW5kIHdhbGtpbmcgd2l0aCBpdAotICogdG8gYSBuZWFyYnkgcm9vbSBtYXkgdHJpZ2dlciBtb3Rpb24gd2hlcmV3YXMga2VlcGluZyB0aGUgZGV2aWNlIG9uIGEgdGFibGUKLSAqIG9uIGEgc21vb3RoIHRyYWluIG1vdmluZyBhdCBjb25zdGFudCB2ZWxvY2l0eSBtYXkgbm90IHRyaWdnZXIgbW90aW9uLgotICoKLSAqIFRoZSBvbmx5IGFsbG93ZWQgdmFsdWUgdG8gcmV0dXJuIGlzIDEuMC4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9NT1RJT05fREVURUNUICAgICAgICAgICAgICAgICAgICAgICAoMzApCiAjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9NT1RJT05fREVURUNUICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5tb3Rpb25fZGV0ZWN0IgotCi0vKgotICogU0VOU09SX1RZUEVfSEVBUlRfQkVBVAotICogdHJpZ2dlciBtb2RlOiBjb250aW51b3VzCi0gKgotICogQSBzZW5zb3Igb2YgdGhpcyB0eXBlIHJldHVybnMgYW4gZXZlbnQgZXZlcnl0aW1lIGEgaGVhciBiZWF0IHBlYWsgaXMKLSAqIGRldGVjdGVkLgotICoKLSAqIFBlYWsgaGVyZSBpZGVhbGx5IGNvcnJlc3BvbmRzIHRvIHRoZSBwb3NpdGl2ZSBwZWFrIGluIHRoZSBRUlMgY29tcGxleCBvZgotICogYW5kIEVDRyBzaWduYWwuCi0gKgotICogVGhlIHNlbnNvciBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgb3B0aW1pemVkIGZvciBsYXRlbmN5LiBBcyBhIGd1aWRlLCBhCi0gKiBsYXRlbmN5IG9mIHVwIHRvIDEwIHNlY29uZHMgaXMgYWNjZXB0YWJsZS4gSG93ZXZlciB0aGUgdGltZXN0YW1wIGF0dGFjaGVkCi0gKiB0byB0aGUgZXZlbnQgc2hvdWxkIGJlIGFjY3VyYXRlIGFuZCBzaG91bGQgY29ycmVzcG9uZCB0byB0aGUgdGltZSB0aGUgcGVhawotICogb2NjdXJlZC4KLSAqCi0gKiBUaGUgc2Vuc29yIGV2ZW50IGNvbnRhaW5zIGEgcGFyYW1ldGVyIGZvciB0aGUgY29uZmlkZW5jZSBpbiB0aGUgZGV0ZWN0aW9uCi0gKiBvZiB0aGUgcGVhayB3aGVyZSAwLjAgcmVwcmVzZW50IG5vIGluZm9ybWF0aW9uIGF0IGFsbCwgYW5kIDEuMCByZXByZXNlbnRzCi0gKiBjZXJ0YWludHkuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfSEVBUlRfQkVBVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDMxKQogI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfSEVBUlRfQkVBVCAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuaGVhcnRfYmVhdCIKLQotLyoqCi0gKiBTRU5TT1JfVFlQRV9EWU5BTUlDX1NFTlNPUl9NRVRBCi0gKiB0cmlnZ2VyLW1vZGU6IHNwZWNpYWwKLSAqIHdha2UtdXAgc2Vuc29yOiB5ZXMKLSAqCi0gKiBBIHNlbnNvciBldmVudCBvZiB0aGlzIHR5cGUgaXMgcmVjZWl2ZWQgd2hlbiBhIGR5bmFtaWMgc2Vuc29yIGlzIGFkZGVkIHRvIG9yIHJlbW92ZWQgZnJvbSB0aGUKLSAqIHN5c3RlbS4gQXQgbW9zdCBvbmUgc2Vuc29yIG9mIHRoaXMgdHlwZSBjYW4gYmUgcHJlc2VudCBpbiBvbmUgc2Vuc29yIEhBTCBpbXBsZW1lbnRhdGlvbiBhbmQKLSAqIHByZXNlbmNlIG9mIGEgc2Vuc29yIG9mIHRoaXMgdHlwZSBpbiBzZW5zb3IgSEFMIGltcGxlbWVudGF0aW9uIGluZGljYXRlcyB0aGF0IHRoaXMgc2Vuc29yIEhBTAotICogc3VwcG9ydHMgZHluYW1pYyBzZW5zb3IgZmVhdHVyZS4gT3BlcmF0aW9ucywgc3VjaCBhcyBiYXRjaCwgYWN0aXZhdGUgYW5kIHNldERlbGF5LCB0byB0aGlzCi0gKiBzcGVjaWFsIHB1cnBvc2Ugc2Vuc29yIHNob3VsZCBiZSB0cmVhdGVkIGFzIG5vLW9wIGFuZCByZXR1cm4gc3VjY2Vzc2Z1bC4KLSAqCi0gKiBBIGR5bmFtaWMgc2Vuc29yIGNvbm5lY3Rpb24gaW5kaWNhdGVzIGNvbm5lY3Rpb24gb2YgYSBwaHlzaWNhbCBkZXZpY2Ugb3IgaW5zdGFudGlhdGlvbiBvZiBhCi0gKiB2aXJ0dWFsIHNlbnNvciBiYWNrZWQgYnkgYWxnb3JpdGhtOyBhbmQgYSBkeW5hbWljIHNlbnNvciBkaXNjb25uZWN0aW9uIGluZGljYXRlcyB0aGUgdGhlCi0gKiBvcHBvc2l0ZS4gQSBzZW5zb3IgZXZlbnQgb2YgU0VOU09SX1RZUEVfRFlOQU1JQ19TRU5TT1JfTUVUQSB0eXBlIHNob3VsZCBiZSBkZWxpdmVyZWQgcmVnYXJkbGVzcwotICogb2YgdGhlIGFjdGl2YXRpb24gc3RhdHVzIG9mIHRoZSBzZW5zb3IgaW4gdGhlIGV2ZW50IG9mIGR5bmFtaWMgc2Vuc29yIGNvbm5lY3Rpb24gYW5kCi0gKiBkaXNjb25uZWN0aW9uLiBJbiB0aGUgc2Vuc29yIGV2ZW50LCBiZXNpZGVzIHRoZSBjb21tb24gZGF0YSBlbnRyaWVzLCAiZHluYW1pY19zZW5zb3JfbWV0YSIsIHdoaWNoCi0gKiBpbmNsdWRlcyBmaWVsZHMgZm9yIGNvbm5lY3Rpb24gc3RhdHVzLCBoYW5kbGUgb2YgdGhlIHNlbnNvciBpbnZvbHZlZCwgcG9pbnRlciB0byBzZW5zb3JfdAotICogc3RydWN0dXJlIGFuZCBhIHV1aWQgZmllbGQsIHNob3VsZCBiZSBwb3B1bGF0ZWQuCi0gKgotICogQXQgYSBkeW5hbWljIHNlbnNvciBjb25uZWN0aW9uIGV2ZW50LCBmaWVsZHMgb2Ygc2Vuc29yX3Qgc3RydWN0dXJlIHJlZmVyZW5jZWQgYnkgYSBwb2ludGVyIGluCi0gKiBkeW5hbWljX3NlbnNvcl9tZXRhIHNob3VsZCBiZSBmaWxsZWQgYXMgaWYgaXQgd2FzIHJlZ3VsYXIgc2Vuc29ycy4gU2Vuc29yIEhBTCBpcyByZXNwb25zaWJsZSBmb3IKLSAqIHJlY292ZXJ5IG9mIG1lbW9yeSBpZiB0aGUgY29ycmVzcG9uZGluZyBkYXRhIGlzIGR5bmFtaWNpYWxseSBhbGxvY2F0ZWQuIEhvd2V2ZXIsIHRoZSB0aGUgcG9pbnRlcgotICogbXVzdCBiZSB2YWxpZCB1bnRpbCB0aGUgZmlyc3QgYWN0aXZhdGUgY2FsbCB0byB0aGUgc2Vuc29yIHJlcG9ydGVkIGluIHRoaXMgY29ubmVjdGlvbiBldmVudC4gQXQgYQotICogZHluYW1pYyBzZW5zb3IgZGlzY29ubmVjdGlvbiwgdGhlIHNlbnNvcl90IHBvaW50ZXIgc2hvdWxkIGJlIE5VTEwuCi0gKgotICogVGhlIHNlbnNvciBoYW5kbGUgYXNzaWduZWQgdG8gZHluYW1pYyBzZW5zb3JzIHNob3VsZCBuZXZlciBiZSB0aGUgc2FtZSBhcyB0aGF0IG9mIGFueSByZWd1bGFyCi0gKiBzdGF0aWMgc2Vuc29ycywgYW5kIHNob3VsZCBiZSB1bmlxdWUgdW50aWwgbmV4dCBib290LiBJbiBhbm90aGVyIHdvcmQsIGlmIGEgaGFuZGxlIGggaXMgdXNlZCBmb3IKLSAqIGEgZHluYW1pYyBzZW5zb3IgQSwgdGhhdCBzYW1lIG51bWJlciBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHNhbWUgZHluYW1pYyBzZW5zb3IgQSBvciBhbm90aGVyCi0gKiBkeW5hbWljIHNlbnNvciBCIGV2ZW4gYWZ0ZXIgZGlzY29ubmVjdGlvbiBvZiBBIHVudGlsIHJlYm9vdC4KLSAqCi0gKiBUaGUgVVVJRCBmaWVsZCB3aWxsIGJlIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHRoZSBzZW5zb3IgaW4gYWRkaXRpb24gdG8gbmFtZSwgdmVuZG9yIGFuZCB2ZXJzaW9uCi0gKiBhbmQgdHlwZS4gRm9yIHBoeXNpY2FsIHNlbnNvcnMgb2YgdGhlIHNhbWUgbW9kZWwsIGFsbCBzZW5zb3JzIHdpbGwgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgaW4KLSAqIHNlbnNvcl90LCBidXQgdGhlIFVVSUQgc2hvdWxkIGJlIHVuaXF1ZSBhbmQgcGVyc2lzdGVudCBmb3IgZWFjaCBpbmRpdmlkdWFsIHVuaXQuIEFuIGFsbCB6ZXJvIFVVSUQKLSAqIGluZGljYXRlcyBpdCBpcyBub3QgcG9zc2libGUgdG8gZGlmZmVyZW50aWF0ZSBpbmRpdmlkdWFsIHNlbnNvciB1bml0LgotICoKLSAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIGltcGxlbWVudCB0aGlzIHR5cGUgYXMgd2FrZSB1cCBzZW5zb3IuCi0gKgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0RZTkFNSUNfU0VOU09SX01FVEEgICAgICAgICAgICAgICAgICAgICAgICAgKDMyKQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfRFlOQU1JQ19TRU5TT1JfTUVUQSAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5keW5hbWljX3NlbnNvcl9tZXRhIgotCi0vKioKLSAqIFNFTlNPUl9UWVBFX0FERElUSU9OQUxfSU5GTwotICogcmVwb3J0aW5nLW1vZGU6IE4vQQotICoKLSAqIFRoaXMgc2Vuc29yIHR5cGUgaXMgZm9yIGRlbGl2ZXJpbmcgYWRkaXRpb25hbCBzZW5zb3IgaW5mb3JtYXRpb24gYXNpZGUgZnJvbSBzZW5zb3IgZXZlbnQgZGF0YS4KLSAqIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbWF5IGluY2x1ZGUgc2Vuc29yIGZyb250LWVuZCBncm91cCBkZWxheSwgaW50ZXJuYWwgY2FsaWJyYXRpb24gcGFyYW1ldGVycywKLSAqIG5vaXNlIGxldmVsIG1ldHJpY3MsIGRldmljZSBpbnRlcm5hbCB0ZW1wZXJhdHVyZSwgZXRjLgotICoKLSAqIFRoaXMgdHlwZSB3aWxsIG5ldmVyIGJpbmQgdG8gYSBzZW5zb3IuIEluIG90aGVyIHdvcmRzLCBubyBzZW5zb3IgaW4gdGhlIHNlbnNvciBsaXN0IHNob3VsZCBiZSBvZgotICogdGhlIHR5cGUgU0VOU09SX1RZUEVfQURESVRJT05BTF9JTkZPLiBJZiBhIHNlbnNvciBIQUwgc3VwcG9ydHMgc2Vuc29yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIGZlYXR1cmUsIGl0IHJlcG9ydHMgc2Vuc29yX2V2ZW50X3Qgd2l0aCAic2Vuc29yIiBmaWVsZCBzZXQgdG8gaGFuZGxlIG9mIHRoZSByZXBvcnRpbmcgc2Vuc29yIGFuZAotICogInR5cGUiIGZpZWxkIHNldCB0byBTRU5TT1JfVFlQRV9BRERJVElPTkFMX0lORk8uIERlbGl2ZXJ5IG9mIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZXZlbnRzIGlzCi0gKiB0cmlnZ2VyZWQgdW5kZXIgdHdvIGNvbmRpdGlvbnM6IGFuIGVuYWJsZSBhY3RpdmF0ZSgpIGNhbGwgb3IgYSBmbHVzaCgpIGNhbGwgdG8gdGhlIGNvcnJlc3BvbmRpbmcKLSAqIHNlbnNvci4KLSAqCi0gKiBBIHNpbmdsZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlcG9ydCBjb25zaXN0cyBvZiBtdWx0aXBsZSBmcmFtZXMuIFNlcXVlbmNlcyBvZiB0aGVzZSBmcmFtZXMgYXJlCi0gKiBvcmRlcmVkIHVzaW5nIHRpbWVzdGFtcHMsIHdoaWNoIG1lYW5zIHRoZSB0aW1lc3RhbXBzIG9mIHNlcXVlbnRpYWwgZnJhbWVzIGhhdmUgdG8gYmUgYXQgbGVhc3QgMQotICogbmFub3NlY29uZCBhcGFydCBmcm9tIGVhY2ggb3RoZXIuIEVhY2ggZnJhbWUgaXMgYSBzZW5zb3JfZXZlbnRfdCBkZWxpdmVyZWQgdGhyb3VnaCB0aGUgSEFMCi0gKiBpbnRlcmZhY2UsIHdpdGggcmVsYXRlZCBkYXRhIHN0b3JlZCBpbiB0aGUgImFkZGl0aW9uYWxfaW5mbyIgZmllbGQsIHdoaWNoIGlzIG9mIHR5cGUKLSAqIGFkZGl0aW9uYWxfaW5mb19ldmVudF90LiAgVGhlICJ0eXBlIiBmaWVsZCBvZiBhZGRpdGlvbmFsX2luZm9fZXZlbnRfdCBkZW5vdGVzIHRoZSBuYXR1cmUgb2YgdGhlCi0gKiBwYXlsb2FkIGRhdGEgKHNlZSBhZGRpdGlvbmFsX2luZm9fdHlwZV90KS4gIFRoZSAic2VyaWFsIiBmaWVsZCBpcyB1c2VkIHRvIGtlZXAgdGhlIHNlcXVlbmNlIG9mCi0gKiBwYXlsb2FkIGRhdGEgdGhhdCBzcGFucyBtdWx0aXBsZSBmcmFtZXMuIFRoZSBmaXJzdCBmcmFtZSBvZiB0aGUgZW50aXJlIHJlcG9ydCBpcyBhbHdheXMgb2YgdHlwZQotICogQUlORk9fQkVHSU4sIGFuZCB0aGUgbGFzdCBmcmFtZSBpcyBhbHdheXMgQUlORk9fRU5ELgotICoKLSAqIEFsbCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZyYW1lcyBoYXZlIHRvIGJlIGRlbGl2ZXJlZCBhZnRlciBmbHVzaCBjb21wbGV0ZSBldmVudCBpZiBmbHVzaCgpIHdhcwotICogdHJpZ2dlcmluZyB0aGUgcmVwb3J0LgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0FERElUSU9OQUxfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgKDMzKQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfQURESVRJT05BTF9JTkZPICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5hZGRpdGlvbmFsX2luZm8iCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9EWU5BTUlDX1NFTlNPUl9NRVRBICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5keW5hbWljX3NlbnNvcl9tZXRhIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfQURESVRJT05BTF9JTkZPICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuYWRkaXRpb25hbF9pbmZvIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfTE9XX0xBVEVOQ1lfT0ZGQk9EWV9ERVRFQ1QgICAiYW5kcm9pZC5zZW5zb3IubG93X2xhdGVuY3lfb2ZmYm9keV9kZXRlY3QiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9BQ0NFTEVST01FVEVSX1VOQ0FMSUJSQVRFRCAgICJhbmRyb2lkLnNlbnNvci5hY2NlbGVyb21ldGVyX3VuY2FsaWJyYXRlZCIKIAogLyoqCiAgKiBWYWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGFjY2VsZXJvbWV0ZXIgaW4gdmFyaW91cyBsb2NhdGlvbnMgaW4gdGhlIHVuaXZlcnNlLgpAQCAtODc5LDE2ICsxOTksNiBAQAogLyoqIE1pbmltdW0gbWFnbmV0aWMgZmllbGQgb24gRWFydGgncyBzdXJmYWNlICovCiAjZGVmaW5lIE1BR05FVElDX0ZJRUxEX0VBUlRIX01JTiAgICAoMzAuMGYpCiAKLS8qKgotICogUG9zc2libGUgdmFsdWVzIG9mIHRoZSBzdGF0dXMgZmllbGQgb2Ygc2Vuc29yIGV2ZW50cy4KLSAqLwotI2RlZmluZSBTRU5TT1JfU1RBVFVTX05PX0NPTlRBQ1QgICAgICAgIC0xCi0jZGVmaW5lIFNFTlNPUl9TVEFUVVNfVU5SRUxJQUJMRSAgICAgICAgMAotI2RlZmluZSBTRU5TT1JfU1RBVFVTX0FDQ1VSQUNZX0xPVyAgICAgIDEKLSNkZWZpbmUgU0VOU09SX1NUQVRVU19BQ0NVUkFDWV9NRURJVU0gICAyCi0jZGVmaW5lIFNFTlNPUl9TVEFUVVNfQUNDVVJBQ1lfSElHSCAgICAgMwotCi0KIHN0cnVjdCBzZW5zb3JfdDsKIAogLyoqCkBAIC05MTMsNyArMjIzLDcgQEAKIH0gc2Vuc29yc192ZWNfdDsKIAogLyoqCi0gKiB1bmNhbGlicmF0ZWQgZ3lyb3Njb3BlIGFuZCBtYWduZXRvbWV0ZXIgZXZlbnQgZGF0YQorICogdW5jYWxpYnJhdGVkIGFjY2VsZXJvbWV0ZXIsIGd5cm9zY29wZSBhbmQgbWFnbmV0b21ldGVyIGV2ZW50IGRhdGEKICAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICB1bmlvbiB7CkBAIC05ODAsNzUgKzI5MCw2IEBACiAgICAgfTsKIH0gYWRkaXRpb25hbF9pbmZvX2V2ZW50X3Q7CiAKLXR5cGVkZWYgZW51bSBhZGRpdGlvbmFsX2luZm9fdHlwZSB7Ci0gICAgLy8KLSAgICBBSU5GT19CRUdJTiA9IDB4MCwgICAgICAgICAgICAgICAgICAgICAgLy8gTWFya3MgdGhlIGJlZ2lubmluZyBvZiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZyYW1lcwotICAgIEFJTkZPX0VORCAgID0gMHgxLCAgICAgICAgICAgICAgICAgICAgICAvLyBNYXJrcyB0aGUgZW5kIG9mIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZnJhbWVzCi0gICAgLy8gQmFzaWMgaW5mb3JtYXRpb24KLSAgICBBSU5GT19VTlRSQUNLRURfREVMQVkgPSAgMHgxMDAwMCwgICAgICAgLy8gRXN0aW1hdGlvbiBvZiB0aGUgZGVsYXkgdGhhdCBpcyBub3QgdHJhY2tlZCBieSBzZW5zb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGltZXN0YW1wcy4gVGhpcyBpbmNsdWRlcyBkZWxheSBpbnRyb2R1Y2VkIGJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbnNvciBmcm9udC1lbmQgZmlsdGVyaW5nLCBkYXRhIHRyYW5zcG9ydCwgZXRjLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdFsyXTogZGVsYXkgaW4gc2Vjb25kcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGVzdGltYXRlZCB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgIEFJTkZPX0lOVEVSTkFMX1RFTVBFUkFUVVJFLCAgICAgICAgICAgICAvLyBmbG9hdDogQ2Vsc2l1cyB0ZW1wZXJhdHVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICBBSU5GT19WRUMzX0NBTElCUkFUSU9OLCAgICAgICAgICAgICAgICAgLy8gRmlyc3QgdGhyZWUgcm93cyBvZiBhIGhvbW9nZW5lb3VzIG1hdHJpeCwgd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVwcmVzZW50cyBjYWxpYnJhdGlvbiB0byBhIHRocmVlLWVsZW1lbnQgdmVjdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJhdyBzZW5zb3IgcmVhZGluZy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXRbMTJdOiAzeDQgbWF0cml4IGluIHJvdyBtYWpvciBvcmRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgIEFJTkZPX1NFTlNPUl9QTEFDRU1FTlQsICAgICAgICAgICAgICAgICAvLyBMb2NhdGlvbiBhbmQgb3JpZW50YXRpb24gb2Ygc2Vuc29yIGVsZW1lbnQgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRldmljZSBmcmFtZTogb3JpZ2luIGlzIHRoZSBnZW9tZXRyaWMgY2VudGVyIG9mIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2JpbGUgZGV2aWNlIHNjcmVlbiBzdXJmYWNlOyB0aGUgYXhpcyBkZWZpbml0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRzIHRvIEFuZHJvaWQgc2Vuc29yIGRlZmluaXRpb25zLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdFsxMl06IDN4NCBtYXRyaXggaW4gcm93IG1ham9yIG9yZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgQUlORk9fU0FNUExJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0WzJdOiByYXcgc2FtcGxlIHBlcmlvZCBpbiBzZWNvbmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHNhbXBsaW5nIHBlcmlvZAotCi0gICAgLy8gU2FtcGxpbmcgY2hhbm5lbCBtb2RlbGluZyBpbmZvcm1hdGlvbgotICAgIEFJTkZPX0NIQU5ORUxfTk9JU0UgPSAweDIwMDAwLCAgICAgICAgICAvLyBpbnQzMl90OiBub2lzZSB0eXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0W25dOiBwYXJhbWV0ZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgQUlORk9fQ0hBTk5FTF9TQU1QTEVSLCAgICAgICAgICAgICAgICAgIC8vIGZsb2F0WzNdOiBzYW1wbGUgcGVyaW9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICBzdGFuZGFyZCBkZXZpYXRpb24gb2Ygc2FtcGxlIHBlcmlvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIHF1YW50aXphdGlvbiB1bml0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgQUlORk9fQ0hBTk5FTF9GSUxURVIsICAgICAgICAgICAgICAgICAgIC8vIFJlcHJlc2VudHMgYSBmaWx0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgXHN1bV9qIGFfaiB5W24tal0gPT0gXHN1bV9pIGJfaSB4W24taV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50MzJfdFszXTogbnVtYmVyIG9mIGZlZWRmb3J3YXJkIGNvZWZmaWNpZW50cywgTSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgbnVtYmVyIG9mIGZlZWRiYWNrIGNvZWZmaWNpZW50cywgTiwgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgRklSIGZpbHRlciwgTj0xLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBiaXQgbWFzayB0aGF0IHJlcHJlc2VudHMgd2hpY2ggZWxlbWVudCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIHdoaWNoIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCwgYml0IDAgPT0gMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIG1lYW5zIHRoaXMgZmlsdGVyIGFwcGxpZXMgdG8gdmVjdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgZWxlbWVudCAwLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdFtNK05dOiBmaWx0ZXIgY29lZmZpY2llbnRzIChiMCwgYjEsIC4uLiwgQk0tMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIHRoZW4gKGEwLCBhMSwgLi4uLCBhTi0xKSwgYTAgaXMgYWx3YXlzIDEuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIE11bHRpcGxlIGZyYW1lcyBtYXkgYmUgbmVlZGVkIGZvciBoaWdoZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgbnVtYmVyIG9mIHRhcHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgQUlORk9fQ0hBTk5FTF9MSU5FQVJfVFJBTlNGT1JNLCAgICAgICAgIC8vIGludDMyX3RbMl06IHNpemUgaW4gKHJvdywgY29sdW1uKSAuLi4gMXN0IGZyYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0W25dOiBtYXRyaXggZWxlbWVudCB2YWx1ZXMgaW4gcm93IG1ham9yIG9yZGVyLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgIEFJTkZPX0NIQU5ORUxfTk9OTElORUFSX01BUCwgICAgICAgICAgICAvLyBpbnQzMl90WzJdOiBleHRyYXBvbGF0ZSBtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgaW50ZXJwb2xhdGUgbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0W25dOiBtYXBwaW5nIGtleSBwb2ludHMgaW4gcGFpcnMsIChpbiwgb3V0KS4uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgKG1heSBiZSB1c2VkIHRvIG1vZGVsIHNhdHVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgQUlORk9fQ0hBTk5FTF9SRVNBTVBMRVIsICAgICAgICAgICAgICAgIC8vIGludDMyX3Q6ICByZXNhbXBsZSBtZXRob2QgKDAtdGggb3JkZXIsIDFzdCBvcmRlci4uLikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXRbMV06IHJlc2FtcGxlIHJhdGlvICh1cHNhbXBsaW5nIGlmIDwgMS4wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgZG93bnNhbXBsaW5nIGlmID4gMS4wKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLQotICAgIC8vIEN1c3RvbSBpbmZvcm1hdGlvbgotICAgIEFJTkZPX0NVU1RPTV9TVEFSVCA9ICAgIDB4MTAwMDAwMDAsICAgICAvLwotICAgIC8vIERlYnVnZ2luZwotICAgIEFJTkZPX0RFQlVHR0lOR19TVEFSVCA9IDB4NDAwMDAwMDAsICAgICAvLwotfSBhZGRpdGlvbmFsX2luZm9fdHlwZV90OwotCiAvKioKICAqIFVuaW9uIG9mIHRoZSB2YXJpb3VzIHR5cGVzIG9mIHNlbnNvciBkYXRhCiAgKiB0aGF0IGNhbiBiZSByZXR1cm5lZC4KQEAgLTExMDYsNiArMzQ3LDkgQEAKICAgICAgICAgICAgIC8qIHVuY2FsaWJyYXRlZCBtYWduZXRvbWV0ZXIgdmFsdWVzIGFyZSBpbiBtaWNyby1UZXNsYXMgKi8KICAgICAgICAgICAgIHVuY2FsaWJyYXRlZF9ldmVudF90IHVuY2FsaWJyYXRlZF9tYWduZXRpYzsKIAorICAgICAgICAgICAgLyogdW5jYWxpYnJhdGVkIGFjY2VsZXJvbWV0ZXIgdmFsdWVzIGFyZSBpbiAgbWV0ZXIgcGVyIHNlY29uZCBwZXIgc2Vjb25kIChtL3NeMikgKi8KKyAgICAgICAgICAgIHVuY2FsaWJyYXRlZF9ldmVudF90IHVuY2FsaWJyYXRlZF9hY2NlbGVyb21ldGVyOworCiAgICAgICAgICAgICAvKiBoZWFydCByYXRlIGRhdGEgY29udGFpbmluZyB2YWx1ZSBpbiBicG0gYW5kIHN0YXR1cyAqLwogICAgICAgICAgICAgaGVhcnRfcmF0ZV9ldmVudF90IGhlYXJ0X3JhdGU7CiAKQEAgLTEyMjgsMTMgKzQ3MiwxNCBAQAogICAgICAqLwogICAgIHVpbnQzMl90ICAgICAgICBmaWZvTWF4RXZlbnRDb3VudDsKIAotICAgIC8qIHR5cGUgb2YgdGhpcyBzZW5zb3IgYXMgYSBzdHJpbmcuIFNldCB0byBjb3JyZXNwb25kaW5nCi0gICAgICogU0VOU09SX1NUUklOR19UWVBFXyouCi0gICAgICogV2hlbiBkZWZpbmluZyBhbiBPRU0gc3BlY2lmaWMgc2Vuc29yIG9yIHNlbnNvciBtYW51ZmFjdHVyZXIgc3BlY2lmaWMKLSAgICAgKiBzZW5zb3IsIHVzZSB5b3VyIHJlc2VydmUgZG9tYWluIG5hbWUgYXMgYSBwcmVmaXguCi0gICAgICogZXg6IGNvbS5nb29nbGUuZ2xhc3Mub25oZWFkZGV0ZWN0b3IKLSAgICAgKiBGb3Igc2Vuc29ycyBvZiBrbm93biB0eXBlLCB0aGUgYW5kcm9pZCBmcmFtZXdvcmsgbWlnaHQgb3ZlcndyaXRlIHRoaXMKLSAgICAgKiBzdHJpbmcgYXV0b21hdGljYWxseS4KKyAgICAvKiB0eXBlIG9mIHRoaXMgc2Vuc29yIGFzIGEgc3RyaW5nLgorICAgICAqCisgICAgICogSWYgdHlwZSBpcyBPRU0gc3BlY2lmaWMgb3Igc2Vuc29yIG1hbnVmYWN0dXJlciBzcGVjaWZpYyB0eXBlCisgICAgICogKD49U0VOU09SX1RZUEVfREVWSUNFX1BSSVZBVEVfQkFTRSksIHRoaXMgc3RyaW5nIG11c3QgYmUgZGVmaW5lZCB3aXRoIHJlc2VydmVkIGRvbWFpbiBvZgorICAgICAqIHZlbmRvci9PRU0gYXMgYSBwcmVmaXgsIGUuZy4gY29tLmdvb2dsZS5nbGFzcy5vbmhlYWRkZXRlY3RvcgorICAgICAqCisgICAgICogRm9yIHNlbnNvcnMgb2YgQW5kcm9pZCBkZWZpbmVkIHR5cGVzLCBBbmRyb2lkIGZyYW1ld29yayB3aWxsIG92ZXJyaWRlIHRoaXMgdmFsdWUuIEl0IGlzIG9rIHRvCisgICAgICogbGVhdmUgaXQgcG9pbnRpbmcgdG8gYW4gZW1wdHkgc3RyaW5nLgogICAgICAqLwogICAgIGNvbnN0IGNoYXIqICAgIHN0cmluZ1R5cGU7CiAKQEAgLTEyODAsNiArNTI1LDIzIEBACiAgICAgdm9pZCogICAgICAgICAgIHJlc2VydmVkWzJdOwogfTsKIAorLyoqCisgKiBTaGFyZWQgbWVtb3J5IGluZm9ybWF0aW9uIGZvciBhIGRpcmVjdCBjaGFubmVsCisgKi8KK3N0cnVjdCBzZW5zb3JzX2RpcmVjdF9tZW1fdCB7CisgICAgaW50IHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW51bSBTRU5TT1JfRElSRUNUX01FTV8uLi4KKyAgICBpbnQgZm9ybWF0OyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbnVtIFNFTlNPUl9ESVJFQ1RfRk1UXy4uLgorICAgIHNpemVfdCBzaXplOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24sIGluIGJ5dGVzCisgICAgY29uc3Qgc3RydWN0IG5hdGl2ZV9oYW5kbGUgKmhhbmRsZTsgLy8gc2hhcmVkIG1lbW9yeSBoYW5kbGUsIHdoaWNoIGlzIGludGVycHJldGVkIGRpZmZlcmVudGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHR5cGUKK307CisKKy8qKgorICogRGlyZWN0IGNoYW5uZWwgcmVwb3J0IGNvbmZpZ3VyYXRpb24KKyAqLworc3RydWN0IHNlbnNvcnNfZGlyZWN0X2NmZ190IHsKKyAgICBpbnQgcmF0ZV9sZXZlbDsgICAgICAgICAgICAgLy8gZW51bSBTRU5TT1JfRElSRUNUX1JBVEVfLi4uCit9OwogCiAvKgogICogc2Vuc29yc19wb2xsX2RldmljZV90IGlzIHVzZWQgd2l0aCBTRU5TT1JTX0RFVklDRV9BUElfVkVSU0lPTl8wXzEKQEAgLTEzMzYsNyArNTk4LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGludCBzZW5zb3JfaGFuZGxlLCBpbnQ2NF90IHNhbXBsaW5nX3BlcmlvZF9ucyk7CiAKICAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBzZW5zb3IgZGF0YS4KKyAgICAgICAgICAgICAqIFdyaXRlIGFuIGFycmF5IG9mIHNlbnNvcl9ldmVudF90IHRvIGRhdGEuIFRoZSBzaXplIG9mIHRoZQorICAgICAgICAgICAgICogYXZhaWxhYmxlIGJ1ZmZlciBpcyBzcGVjaWZpZWQgYnkgY291bnQuIFJldHVybnMgbnVtYmVyIG9mCisgICAgICAgICAgICAgKiB2YWxpZCBzZW5zb3JfZXZlbnRfdC4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBibG9jayBpZiB0aGVyZSBpcyBubyBzZW5zb3IgZXZlbnQKKyAgICAgICAgICAgICAqIGF2YWlsYWJsZSB3aGVuIGJlaW5nIGNhbGxlZC4gVGh1cywgcmV0dXJuIHZhbHVlIHNob3VsZCBhbHdheXMgYmUKKyAgICAgICAgICAgICAqIHBvc2l0aXZlLgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpbnQgKCpwb2xsKShzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV90ICpkZXYsCiAgICAgICAgICAgICAgICAgICAgIHNlbnNvcnNfZXZlbnRfdCogZGF0YSwgaW50IGNvdW50KTsKQEAgLTEzODEsNyArNjQ5LDYxIEBACiAgICAgICovCiAgICAgaW50ICgqaW5qZWN0X3NlbnNvcl9kYXRhKShzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV8xICpkZXYsIGNvbnN0IHNlbnNvcnNfZXZlbnRfdCAqZGF0YSk7CiAKLSAgICB2b2lkICgqcmVzZXJ2ZWRfcHJvY3NbN10pKHZvaWQpOworICAgIC8qCisgICAgICogUmVnaXN0ZXIvdW5yZWdpc3RlciBkaXJlY3QgcmVwb3J0IGNoYW5uZWwuCisgICAgICoKKyAgICAgKiBBIEhBTCBkZWNsYXJlcyBzdXBwb3J0IGZvciBkaXJlY3QgcmVwb3J0IGJ5IHNldHRpbmcgbm9uLU5VTEwgdmFsdWVzIGZvciBib3RoCisgICAgICogcmVnaXN0ZXJfZGlyZWN0X2NoYW5uZWwgYW5kIGNvbmZpZ19kaXJlY3RfcmVwb3J0LgorICAgICAqCisgICAgICogVGhpcyBmdW5jdGlvbiBoYXMgdHdvIG9wZXJhdGlvbiBtb2RlczoKKyAgICAgKgorICAgICAqIFJlZ2lzdGVyOiBtZW0gIT0gTlVMTCwgcmVnaXN0ZXIgYSBjaGFubmVsIHVzaW5nIHN1cHBsaWVkIHNoYXJlZCBtZW1vcnkgaW5mb3JtYXRpb24uIEJ5IHRoZQorICAgICAqIHRpbWUgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBzZW5zb3JzIG11c3QgZmluaXNoIGluaXRpYWxpemluZyBzaGFyZWQgbWVtb3J5IGNvbnRlbnQKKyAgICAgKiAoZm9ybWF0IGRlcGVuZGVudCwgc2VlIFNFTlNPUl9ESVJFQ1RfRk1UXyopLgorICAgICAqICAgICAgUGFyYW1ldGVyczoKKyAgICAgKiAgICAgICAgICBtZW0gICAgICAgICAgICAgcG9pbnRzIHRvIGEgdmFsaWQgc3RydWN0IHNlbnNvcnNfZGlyZWN0X21lbV90LgorICAgICAqICAgICAgICAgIGNoYW5uZWxfaGFuZGxlICBpcyBpZ25vcmVkLgorICAgICAqICAgICAgUmV0dXJuIHZhbHVlOgorICAgICAqICAgICAgICAgIEEgaGFuZGxlIG9mIGNoYW5uZWwgKD4wLCA8SU5UMzJfTUFYKSB3aGVuIHN1Y2Nlc3MsIHdoaWNoIGxhdGVyIGNhbiBiZSByZWZlcnJlZCBpbgorICAgICAqICAgICAgICAgIHVucmVnaXN0ZXIgb3IgY29uZmlnX2RpcmVjdF9yZXBvcnQgY2FsbCwgb3IgZXJyb3IgY29kZSAoPDApIHdoZW4gZmFpbGVkCisgICAgICogVW5yZWdpc3RlcjogbWVtID09IE5VTEwsIHVucmVnaXN0ZXIgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgY2hhbm5lbC4KKyAgICAgKiAgICAgIFBhcmFtZXRlcnM6CisgICAgICogICAgICAgICAgbWVtICAgICAgICAgICAgIHNldCB0byBOVUxMCisgICAgICogICAgICAgICAgY2hhbm5lbF9oYW5kbGUgIGNvbnRhaW5zIGhhbmRsZSBvZiBjaGFubmVsIHRvIGJlIHVucmVnaXN0ZXJlZAorICAgICAqICAgICAgUmV0dXJuIHZhbHVlOgorICAgICAqICAgICAgICAgIDAsIGV2ZW4gaWYgdGhlIGNoYW5uZWxfaGFuZGxlIGlzIGludmFsaWQsIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSBhIG5vLW9wLgorICAgICAqLworICAgIGludCAoKnJlZ2lzdGVyX2RpcmVjdF9jaGFubmVsKShzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV8xICpkZXYsCisgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2Vuc29yc19kaXJlY3RfbWVtX3QqIG1lbSwgaW50IGNoYW5uZWxfaGFuZGxlKTsKKworICAgIC8qCisgICAgICogQ29uZmlndXJlIGRpcmVjdCBzZW5zb3IgZXZlbnQgcmVwb3J0IGluIGRpcmVjdCBjaGFubmVsLgorICAgICAqCisgICAgICogU3RhcnQsIG1vZGlmeSByYXRlIG9yIHN0b3AgZGlyZWN0IHJlcG9ydCBvZiBhIHNlbnNvciBpbiBhIGNlcnRhaW4gZGlyZWN0IGNoYW5uZWwuIEEgc3BlY2lhbAorICAgICAqIGNhc2UgaXMgc2V0dGluZyBzZW5zb3IgaGFuZGxlIC0xIHRvIHN0b3AgbWVhbnMgdG8gc3RvcCBhbGwgYWN0aXZlIHNlbnNvciByZXBvcnQgb24gdGhlCisgICAgICogY2hhbm5lbCBzcGVjaWZpZWQuCisgICAgICoKKyAgICAgKiBBIEhBTCBkZWNsYXJlcyBzdXBwb3J0IGZvciBkaXJlY3QgcmVwb3J0IGJ5IHNldHRpbmcgbm9uLU5VTEwgdmFsdWVzIGZvciBib3RoCisgICAgICogcmVnaXN0ZXJfZGlyZWN0X2NoYW5uZWwgYW5kIGNvbmZpZ19kaXJlY3RfcmVwb3J0LgorICAgICAqCisgICAgICogUGFyYW1ldGVyczoKKyAgICAgKiAgICAgIHNlbnNvcl9oYW5kbGUgICBzZW5zb3IgdG8gYmUgY29uZmlndXJlZC4gVGhlIHNlbnNvciBoYXMgdG8gc3VwcG9ydCBkaXJlY3QgcmVwb3J0CisgICAgICogICAgICAgICAgICAgICAgICAgICAgbW9kZSBieSBzZXR0aW5nIGZsYWdzIG9mIHNlbnNvcl90LiBBbHNvLCBkaXJlY3QgcmVwb3J0IG1vZGUgaXMgb25seQorICAgICAqICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgZm9yIGNvbnRpbnVvdXMgcmVwb3J0aW5nIG1vZGUgc2Vuc29ycy4KKyAgICAgKiAgICAgIGNoYW5uZWxfaGFuZGxlICBjaGFubmVsIGhhbmRsZSB0byBiZSBjb25maWd1cmVkLgorICAgICAqICAgICAgY29uZmlnICAgICAgICAgIGRpcmVjdCByZXBvcnQgcGFyYW1ldGVycywgc2VlIHNlbnNvcl9kaXJlY3RfY2ZnX3QuCisgICAgICogUmV0dXJuIHZhbHVlOgorICAgICAqICAgICAgLSB3aGVuIHNlbnNvciBpcyBzdGFydGVkIG9yIHNlbnNvciByYXRlIGxldmVsIGlzIGNoYW5nZWQ6IHJldHVybiBwb3NpdGl2ZSBpZGVudGlmaWVyIG9mCisgICAgICogICAgICAgIHNlbnNvciBpbiBzcGVjaWZpZWQgY2hhbm5lbCBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgcmV0dXJuIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgICAgICogICAgICAtIHdoZW4gc2Vuc29yIGlzIHN0b3BwZWQ6IHJldHVybiAwIGZvciBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgZm9yIGZhaWx1cmUuCisgICAgICovCisgICAgaW50ICgqY29uZmlnX2RpcmVjdF9yZXBvcnQpKHN0cnVjdCBzZW5zb3JzX3BvbGxfZGV2aWNlXzEgKmRldiwKKyAgICAgICAgICAgIGludCBzZW5zb3JfaGFuZGxlLCBpbnQgY2hhbm5lbF9oYW5kbGUsIGNvbnN0IHN0cnVjdCBzZW5zb3JzX2RpcmVjdF9jZmdfdCAqY29uZmlnKTsKKworICAgIC8qCisgICAgICogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgemVyby4KKyAgICAgKi8KKyAgICB2b2lkICgqcmVzZXJ2ZWRfcHJvY3NbNV0pKHZvaWQpOwogCiB9IHNlbnNvcnNfcG9sbF9kZXZpY2VfMV90OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL3ZlaGljbGUuaCBiL2luY2x1ZGUvaGFyZHdhcmUvdmVoaWNsZS5oCmluZGV4IGE1OTBmYmQuLjhiMjhlN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvdmVoaWNsZS5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvdmVoaWNsZS5oCkBAIC04Myw3ICs4Myw2IEBACiAKIC8qKgogICogSW52YWxpZCBwcm9wZXJ0eSB2YWx1ZSB1c2VkIGZvciBhcmd1bWVudCB3aGVyZSBpbnZhbGlkIHByb3BlcnR5IGdpdmVzIGRpZmZlcmVudCByZXN1bHQuCi0gKiBAcmFuZ2Vfc3RhcnQKICAqLwogI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0lOVkFMSUQgKDB4MCkKIApAQCAtMTIyLDcgKzEyMSw3IEBACiAgKiBAZGF0YV9tZW1iZXIgaW5mb19tb2RlbF95ZWFyCiAgKiBAdW5pdCBWRUhJQ0xFX1VOSVRfVFlQRV9ZRUFSCiAgKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9JTkZPX01PREVMX1lFQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDEwMykKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9JTkZPX01PREVMX1lFQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAxMDMpCiAKIC8qKgogICogRnVlbCBjYXBhY2l0eSBvZiB0aGUgdmVoaWNsZQpAQCAtMjUzLDcgKzI1Miw3IEBACiAKIAogCi0gLy89PT09IEhWQUMgUHJvcGVydGllcyA9PT09CisvLz09PT0gSFZBQyBQcm9wZXJ0aWVzID09PT0KIAogLyoqCiAgKiBGYW4gc3BlZWQgc2V0dGluZwpAQCAtMjYxLDggKzI2MCw3IEBACiAgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQogICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKICAqIEBkYXRhX21lbWJlciBodmFjLmZhbl9zcGVlZAotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkUKLSAqIEBkYXRhX2VudW0gVE9ETworICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCiAgKiBAYWxsb3dfb3V0X29mX3JhbmdlX3ZhbHVlIDogT0ZGCiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX0ZBTl9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDApCkBAIC0yNzMsOCArMjcxLDggQEAKICAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQogICogQGRhdGFfbWVtYmVyIGh2YWMuZmFuX2RpcmVjdGlvbgotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkUKLSAqIEBkYXRhX2VudW0gVE9ETworICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCisgKiBAZGF0YV9lbnVtIHZlaGljbGVfaHZhY19mYW5fZGlyZWN0aW9uCiAgKiBAYWxsb3dfb3V0X29mX3JhbmdlX3ZhbHVlIDogT0ZGCiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX0ZBTl9ESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDEpCkBAIC0yOTMsOSArMjkxLDkgQEAKIC8qKgogICogSFZBQyBjdXJyZW50IHRlbXBlcmF0dXJlLgogICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0ZMT0FUCi0gKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRXxWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfQ09OVElOVU9VUworICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKICAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCi0gKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCiAgKiBAZGF0YV9tZW1iZXIgaHZhYy50ZW1wZXJhdHVyZV9jdXJyZW50CiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX1RFTVBFUkFUVVJFX0NVUlJFTlQgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDIpCkBAIC0zMDMsOSArMzAxLDkgQEAKIC8qKgogICogSFZBQywgdGFyZ2V0IHRlbXBlcmF0dXJlIHNldC4KICAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9GTE9BVAotICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0V8VkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX0NPTlRJTlVPVVMKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfWk9ORQogICogQGRhdGFfbWVtYmVyIGh2YWMudGVtcGVyYXR1cmVfc2V0CiAgKiBAYWxsb3dfb3V0X29mX3JhbmdlX3ZhbHVlIDogTUlOIC8gTUFYIC8gT0ZGCiAgKi8KQEAgLTMxNiw3ICszMTQsNyBAQAogICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0JPT0xFQU4KICAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1dJTkRPVworICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9XSU5ET1cKICAqIEBkYXRhX21lbWJlciBodmFjLmRlZnJvc3Rfb24KICAqLwogI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0hWQUNfREVGUk9TVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDUwNCkKQEAgLTMyNyw3ICszMjUsNyBAQAogICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKICAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCiAgKiBAY29uZmlnX2ZsYWdzIFN1cHBvcnRlZCB6b25lcwotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfWk9ORQogICogQGRhdGFfbWVtYmVyIGh2YWMuYWNfb24KICAqLwogI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0hWQUNfQUNfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDUwNSkKQEAgLTMzNyw3ICszMzUsNyBAQAogICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0JPT0xFQU4KICAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfWk9ORQogICogQGRhdGFfbWVtYmVyIGh2YWMubWF4X2FjX29uCiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX01BWF9BQ19PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDYpCkBAIC0zNDcsNyArMzQ1LDcgQEAKICAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9CT09MRUFOCiAgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQogICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKLSAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1pPTkUKICAqIEBkYXRhX21lbWJlciBodmFjLm1heF9kZWZyb3N0X29uCiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX01BWF9ERUZST1NUX09OICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDcpCkBAIC0zNTcsNyArMzU1LDcgQEAKICAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9CT09MRUFOCiAgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQogICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKLSAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1pPTkUKICAqIEBkYXRhX21lbWJlciBodmFjLm1heF9yZWNpcmNfb24KICAqLwogI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0hWQUNfUkVDSVJDX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDUwOCkKQEAgLTM2NywxMiArMzY1LDk0IEBACiAgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfQk9PTEVBTgogICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKICAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCi0gKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCiAgKiBAZGF0YV9tZW1iZXIgaHZhYy5kdWFsX29uCiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX0RVQUxfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDkpCiAKIC8qKgorICogT24vb2ZmIGF1dG9tYXRpYyBtb2RlCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfQk9PTEVBTgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1pPTkUKKyAqIEBkYXRhX21lbWJlciBodmFjLmF1dG9fb24KKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0hWQUNfQVVUT19PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDUwQSkKKworLyoqCisgKiBTZWF0IHRlbXBlcmF0dXJlCisgKgorICogTmVnYXRpdmUgdmFsdWVzIGluZGljYXRlIGNvb2xpbmcuCisgKiAwIGluZGljYXRlcyBvZmYuCisgKiBQb3NpdGl2ZSB2YWx1ZXMgaW5kaWNhdGUgaGVhdGluZy4KKyAqCisgKiBTb21lIHZlaGljbGVzIG1heSBoYXZlIG11bHRpcGxlIGxldmVscyBvZiBoZWF0aW5nIGFuZCBjb29saW5nLiBUaGUgbWluL21heAorICogcmFuZ2UgZGVmaW5lcyB0aGUgYWxsb3dhYmxlIHJhbmdlIGFuZCBudW1iZXIgb2Ygc3RlcHMgaW4gZWFjaCBkaXJlY3Rpb24uCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX1NFQVRfVEVNUEVSQVRVUkUgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MEIpCisKKy8qKgorICogU2lkZSBNaXJyb3IgSGVhdAorICoKKyAqIEluY3JlYXNlIHZhbHVlcyBkZW5vdGUgaGlnaGVyIGhlYXRpbmcgbGV2ZWxzIGZvciBzaWRlIG1pcnJvcnMuCisgKiAwIGluZGljYXRlcyBoZWF0aW5nIGlzIHR1cm5lZCBvZmYuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSFZBQ19TSURFX01JUlJPUl9IRUFUICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwNTBDKQorCisvKioKKyAqIFN0ZWVyaW5nIFdoZWVsIFRlbXBlcmF0dXJlCisgKgorICogU2V0cyB0aGUgdGVtcGVyYXR1cmUgZm9yIHRoZSBzdGVlcmluZyB3aGVlbAorICogUG9zaXRpdmUgdmFsdWUgaW5kaWNhdGVzIGhlYXRpbmcuCisgKiBOZWdhdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgY29vbGluZy4KKyAqIDAgaW5kaWNhdGVzIHRlbXByZWF0dXJlIGNvbnRyb2wgaXMgb2ZmLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0hWQUNfU1RFRVJJTkdfV0hFRUxfVEVNUCAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDUwRCkKKworLyoqCisgKiBUZW1wZXJhdHVyZSB1bml0cworICoKKyAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0ZW1wZXJhdHVyZSBpcyBpbiBDZWxzaXVzLCBGYWhyZW5oZWl0LCBvciBhIGRpZmZlcmVudCB1bml0LgorICogVGhpcyBwYXJhbWV0ZXIgYWZmZWN0cyBhbGwgSFZBQyB0ZW1wZXJhdHVyZXMgaW4gdGhlIHN5c3RlbS4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRAorICogQGRhdGFfZW51bSB2ZWhpY2xlX3VuaXRfdHlwZQorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX1RFTVBFUkFUVVJFX1VOSVRTICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MEUpCisKKy8qKgorICogQWN0dWFsIGZhbiBzcGVlZAorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQUQKKyAqIEBkYXRhX21lbWJlciBodmFjLmZhbl9zcGVlZAorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCisgKiBAYWxsb3dfb3V0X29mX3JhbmdlX3ZhbHVlIDogT0ZGCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX0FDVFVBTF9GQU5fU1BFRURfUlBNICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MEYpCisKKworLyoqCiAgKiBSZXByZXNlbnRzIHBvd2VyIHN0YXRlIGZvciBIVkFDLiBTb21lIEhWQUMgcHJvcGVydGllcyB3aWxsIHJlcXVpcmUgbWF0Y2hpbmcgcG93ZXIgdG8gYmUgdHVybmVkIG9uCiAgKiB0byBnZXQgb3V0IG9mIE9GRiBzdGF0ZS4gRm9yIG5vbi16b25lZCBIVkFDIHByb3BlcnRpZXMsIFZFSElDTEVfQUxMX1pPTkUgY29ycmVzcG9uZHMgdG8KICAqIGdsb2JhbCBwb3dlciBzdGF0ZS4KQEAgLTM4MywxMiArNDYzLDMxIEBACiAgKiBAY29uZmlnX3N0cmluZyBsaXN0IG9mIEhWQUMgcHJvcGVydGllcyB3aG9zZSBwb3dlciBpcyBjb250cm9sbGVkIGJ5IHRoaXMgcHJvcGVydHkuIEZvcm1hdCBpcwogICogICAgICAgICAgICAgICAgaGV4YS1kZWNpbWFsIG51bWJlciAoMHguLi4pIHNlcGFyYXRlZCBieSBjb21tYSBsaWtlICIweDUwMCwweDUwMyIuIEFsbCB6b25lcwogICogICAgICAgICAgICAgICAgZGVmaW5lZCBpbiB0aGVzZSBhZmZlY3RlZCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBhdmFpbGFibGUgaW4gdGhlIHByb3BlcnR5LgotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfWk9ORQogICogQGRhdGFfbWVtYmVyIGh2YWMucG93ZXJfb24KICAqLwogI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0hWQUNfUE9XRVJfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDUxMCkKIAogLyoqCisgKiBGYW4gUG9zaXRpb25zIEF2YWlsYWJsZQorICoKKyAqIFRoaXMgaXMgYSBiaXQgbWFzayBvZiBmYW4gcG9zaXRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHpvbmUuICBFYWNoIGVudHJ5IGluCisgKiB2ZWhpY2xlX2h2YWNfZmFuX2RpcmVjdGlvbiBpcyBzZWxlY3RlZCBieSBiaXQgcG9zaXRpb24uICBGb3IgaW5zdGFuY2UsIGlmCisgKiBvbmx5IHRoZSBGQU5fRElSRUNUSU9OX0ZBQ0UgKDB4MSkgYW5kIEZBTl9ESVJFQ1RJT05fREVGUk9TVCAoMHg0KSBhcmUgYXZhaWxhYmxlLAorICogdGhlbiB0aGlzIHZhbHVlIHNoYWxsIGJlIHNldCB0byAweDEyLgorICoKKyAqIDB4MTIgPSAoMSA8PCAxKSB8ICgxIDw8IDQpCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX1NUQVRJQworICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQUQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCisgKiBAYWxsb3dfb3V0X29mX3JhbmdlX3ZhbHVlIDogT0ZGCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX0ZBTl9ESVJFQ1RJT05fQVZBSUxBQkxFICAgICAgICAgICAgICAgKDB4MDAwMDA1MTEpCisKKy8qKgogICogT3V0c2lkZSB0ZW1wZXJhdHVyZQogICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX0ZMT0FUCiAgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRXxWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfQ09OVElOVU9VUwpAQCAtMzk2LDggKzQ5NSw3IEBACiAgKiBAZGF0YV9tZW1iZXIgb3V0c2lkZV90ZW1wZXJhdHVyZQogICogQHVuaXQgVkVISUNMRV9VTklUX1RZUEVfQ0VMQ0lVUwogICovCi0KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9FTlZfT1VUU0lERV9URU1QRVJBVFVSRSAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDcwMykKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9FTlZfT1VUU0lERV9URU1QRVJBVFVSRSAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA3MDMpCiAKIAogLyoqCkBAIC00MDgsNyArNTA2LDcgQEAKICAqIEBkYXRhX21lbWJlciBjYWJpbl90ZW1wZXJhdHVyZQogICogQHVuaXQgVkVISUNMRV9VTklUX1RZUEVfQ0VMQ0lVUwogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRU5WX0NBQklOX1RFTVBFUkFUVVJFICAgICAgICAgICAgICAgICAgKDB4MDAwMDA3MDQpCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRU5WX0NBQklOX1RFTVBFUkFUVVJFICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwNzA0KQogCiAKIC8qCkBAIC00MzQsNyArNTMyLDcgQEAKICAqIEBjb25maWdfZmxhZ3MgTnVtYmVyIG9mIHByZXNldHMgc3VwcG9ydGVkCiAgKiBAZGF0YV9tZW1iZXIgaW50MzJfYXJyYXkKICAqLwotI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1JBRElPX1BSRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwODAxKQorI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1JBRElPX1BSRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDgwMSkKIAogLyoqCiAgKiBDb25zdGFudHMgcmVsZXZhbnQgdG8gcmFkaW8uCkBAIC00OTIsNyArNTkwLDEzIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgVkVISUNMRV9BVURJT19FWFRfRk9DVVNfQ0FSX1BFUk1BTkVOVCB3aGVuIGNhciBzaWRlIGlzIHBsYXlpbmcgc29tZXRoaW5nCiAgKiAgICAgICAgICAgICAgICAgICAgICAgcGVybWFuZW50LgogICogICAgICAgICAgICAgICAgICAgTE9TU19UUkFOU0lFTlQ6IGFsd2F5cyBzaG91bGQgYmUgVkVISUNMRV9BVURJT19FWFRfRk9DVVNfQ0FSX1RSQU5TSUVOVAotICogICBpbnQzMl9hcnJheVszXTogc2hvdWxkIGJlIHplcm8uCisgKiAgIGludDMyX2FycmF5WzNdOiBjb250ZXh0IHJlcXVlc3RlZCBieSBhbmRyb2lkIHNpZGUgd2hlbiByZXNwb25kaW5nIHRvIGZvY3VzIHJlcXVlc3QuCisgKiAgICAgICAgICAgICAgICAgICBXaGVuIGNhciBzaWRlIGlzIHRha2luZyBmb2N1cyBhd2F5LCB0aGlzIHNob3VsZCBiZSB6ZXJvLgorICoKKyAqIEEgZm9jdXMgcmVzcG9uc2Ugc2hvdWxkIGJlIHNlbnQgcGVyIGVhY2ggZm9jdXMgcmVxdWVzdCBldmVuIGlmIHRoZXJlIGlzIG5vIGNoYW5nZSBpbgorICogZm9jdXMgc3RhdGUuIFRoaXMgY2FuIGhhcHBlbiBpbiBjYXNlIGxpa2UgZm9jdXMgcmVxdWVzdCBvbmx5IGludm9sdmluZyBjb250ZXh0IGNoYW5nZQorICogd2hlcmUgYW5kcm9pZCBzaWRlIHN0aWxsIG5lZWRzIG1hdGNoaW5nIGZvY3VzIHJlc3BvbnNlIHRvIGNvbmZpcm0gdGhhdCBhdWRpbyBtb2R1bGUKKyAqIGhhcyBtYWRlIG5lY2Vzc2FyeSBjaGFuZ2VzLgogICoKICAqIElmIGNhciBkb2VzIG5vdCBzdXBwb3J0IFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRk9DVVMsIGZvY3VzIGlzIGFzc3VtZWQgdG8gYmUgZ3JhbnRlZCBhbHdheXMuCiAgKgpAQCAtNTAxLDcgKzYwNSw3IEBACiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQogICogQGRhdGFfbWVtYmVyIGludDMyX2FycmF5CiAgKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19GT0NVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDkwMCkKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19GT0NVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA5MDApCiAKIGVudW0gdmVoaWNsZV9hdWRpb19mb2N1c19yZXF1ZXN0IHsKICAgICBWRUhJQ0xFX0FVRElPX0ZPQ1VTX1JFUVVFU1RfR0FJTiA9IDB4MSwKQEAgLTYzOCwxMyArNzQyLDIzIEBACiAgICAgVkVISUNMRV9BVURJT19DT05URVhUX1NZU1RFTV9TT1VORF9GTEFHICAgICAgICAgICAgICAgPSAweDQwMCwKICAgICAvKiogUmFkaW8gaXMgcGxheWVkICovCiAgICAgVkVISUNMRV9BVURJT19DT05URVhUX1JBRElPX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgPSAweDgwMCwKKyAgICAvKiogRXh0IHNvdXJjZSBpcyBwbGF5ZWQuIFRoaXMgaXMgZm9yIHRhZ2dpbmcgZ2VuZXJpYyBleHQgc291cmNlcy4gKi8KKyAgICBWRUhJQ0xFX0FVRElPX0NPTlRFWFRfRVhUX1NPVVJDRV9GTEFHICAgICAgICAgICAgICAgICA9IDB4MTAwMCwKIH07CiAKIC8qKgogICogUHJvcGVydHkgdG8gY29udHJvbCBhdWRpbyB2b2x1bWUgb2YgZWFjaCBhdWRpbyBjb250ZXh0LgogICoKKyAqIHZlaGljbGVfcHJvcF9jb25maWdfdAorICogICBjb25maWdfYXJyYXlbMF0gOiBiaXQgZmxhZ3Mgb2YgYWxsIHN1cHBvcnRlZCBhdWRpbyBjb250ZXh0cy4gSWYgdGhpcyBpcyAwLAorICogICAgICAgICAgICAgICAgICAgICBhdWRpbyB2b2x1bWUgaXMgY29udHJvbGxlZCBwZXIgcGh5c2ljYWwgc3RyZWFtCisgKiAgIGNvbmZpZ19hcnJheVsxXSA6IGZsYWdzIGRlZmluZWQgaW4gdmVoaWNsZV9hdWRpb192b2x1bWVfY2FwYWJpbGl0eV9mbGFnIHRvCisgKiAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudCBhdWRpbyBtb2R1bGUncyBjYXBhYmlsaXR5LgorICoKICAqIERhdGEgdHlwZSBsb29rcyBsaWtlOgotICogICBpbnQzMl9hcnJheVswXSA6IHN0cmVhbSBjb250ZXh0IGFzIGRlZmluZWQgaW4gdmVoaWNsZV9hdWRpb19jb250ZXh0X2ZsYWcuCisgKiAgIGludDMyX2FycmF5WzBdIDogc3RyZWFtIGNvbnRleHQgYXMgZGVmaW5lZCBpbiB2ZWhpY2xlX2F1ZGlvX2NvbnRleHRfZmxhZy4gSWYgb25seSBwaHlzaWNhbAorICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSBpcyBzdXBwb3J0ZWQgKGNvbmZpZ19hcnJheVswXSA9PSAwKSwgdGhpcyB3aWxsIHJlcHJlc2VudCBwaHlzaWNhbAorICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSBudW1iZXIuCiAgKiAgIGludDMyX2FycmF5WzFdIDogdm9sdW1lIGxldmVsLCB2YWxpZCByYW5nZSBpcyAwIHRvIGludDMyX21heF92YWx1ZSBkZWZpbmVkIGluIGNvbmZpZy4KICAqICAgICAgICAgICAgICAgICAgICAwIHdpbGwgYmUgbXV0ZSBzdGF0ZS4gaW50MzJfbWluX3ZhbHVlIGluIGNvbmZpZyBzaG91bGQgYmUgYWx3YXlzIDAuCiAgKiAgIGludDMyX2FycmF5WzJdIDogT25lIG9mIHZlaGljbGVfYXVkaW9fdm9sdW1lX3N0YXRlLgpAQCAtNjU4LDcgKzc3MiwzNCBAQAogICogQGNvbmZpZ19mbGFncyBhbGwgYXVkaW8gY29udGV4dHMgc3VwcG9ydGVkLgogICogQGRhdGFfbWVtYmVyIGludDMyX2FycmF5CiAgKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19WT0xVTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDkwMSkKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19WT0xVTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA5MDEpCisKKworLyoqCisgKiBmbGFncyB0byByZXByZXNlbnQgY2FwYWJpbGl0eSBvZiBhdWRpbyB2b2x1bWUgcHJvcGVydHkuCisgKiB1c2VkIGluIGNvbmZpZ19hcnJheVsxXSBvZiB2ZWhpY2xlX3Byb3BfY29uZmlnX3QuCisgKi8KK2VudW0gdmVoaWNsZV9hdWRpb192b2x1bWVfY2FwYWJpbGl0eV9mbGFnIHsKKyAgICAvKioKKyAgICAgKiBFeHRlcm5hbCBhdWRpbyBtb2R1bGUgb3IgdmVoaWNsZSBoYWwgaGFzIHBlcnNpc3RlbnQgc3RvcmFnZQorICAgICAqIHRvIGtlZXAgdGhlIHZvbHVtZSBsZXZlbC4gVGhpcyBzaG91bGQgYmUgc2V0IG9ubHkgd2hlbiBwZXIgY29udGV4dAorICAgICAqIHZvbHVtZSBsZXZlbCBpcyBzdXBwcm90ZWQuIFdoZW4gdGhpcyBpcyBzZXQsIGF1ZGlvIHZvbHVtZSBsZXZlbCBwZXIKKyAgICAgKiBlYWNoIGNvbnRleHQgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgcHJvcGVydHkgd2hlbiBzeXN0ZW4gc3RhcnRzIHVwLgorICAgICAqIEFuZCBleHRlcm5hbCBhdWRpbyBtb2R1bGUgaXMgYWxzbyBleHBlY3RlZCB0byBhZGp1c3Qgdm9sdW1lIGF1dG9tYXRpY2FsbHkKKyAgICAgKiB3aGVuZXZlciB0aGVyZSBpcyBhbiBhdWRpbyBjb250ZXh0IGNoYW5nZS4KKyAgICAgKiBXaGVuIHRoaXMgZmxhZyBpcyBub3Qgc2V0LCBhbmRyb2lkIHNpZGUgd2lsbCBhc3N1bWUgdGhhdCB0aGVyZSBpcyBubworICAgICAqIHBlcnNpc3RlbnQgc3RvcmFnZSBhbmQgc3RvcmVkIHZhbHVlIGluIGFuZHJvaWQgc2lkZSB3aWxsIGJlIHVzZWQgdG8KKyAgICAgKiBpbml0aWFsaXplIHRoZSB2b2x1bWUgbGV2ZWwuIEFuZCBhbmRyb2lkIHNpZGUgd2lsbCBzZXQgdm9sdW1lIGxldmVsCisgICAgICogb2YgZWFjaCBwaHlzaWNhbCBzdHJlYW1zIHdoZW5ldmVyIHRoZXJlIGlzIGFuIGF1ZGlvIGNvbnRleHQgY2hhbmdlLgorICAgICAqLworICAgIFZFSElDTEVfQVVESU9fVk9MVU1FX0NBUEFCSUxJVFlfUEVSU0lTVEVOVF9TVE9SQUdFID0gMHgxLAorICAgIC8qKgorICAgICAqIFdoZW4gdGhpcyBmbGFnIGlzIHNldCwgdGhlIEgvVyBjYW4gc3VwcG9ydCBvbmx5IHNpbmdsZSBtYXN0ZXIgdm9sdW1lIGZvciBhbGwgc3RyZWFtcy4KKyAgICAgKiBUaGVyZSBpcyBubyB3YXkgdG8gc2V0IHZvbHVtZSBsZXZlbCBkaWZmZXJlbnRseSBwZXIgZWFjaCBzdHJlYW0gb3IgY29udGV4dC4KKyAgICAgKi8KKyAgICBWRUhJQ0xFX0FVRElPX1ZPTFVNRV9DQVBBQklMSVRZX01BU1RFUl9WT0xVTUVfT05MWSA9IDB4MiwKK307CisKIAogLyoqCiAgKiBlbnVtIHRvIHJlcHJlc2VudCBhdWRpbyB2b2x1bWUgc3RhdGUuCkBAIC02ODMsOCArODI0LDE4IEBACiAKIC8qKgogICogUHJvcGVydHkgZm9yIGhhbmRsaW5nIHZvbHVtZSBsaW1pdCBzZXQgYnkgdXNlci4gVGhpcyBsaW1pdHMgbWF4aW11bSB2b2x1bWUgdGhhdCBjYW4gYmUgc2V0Ci0gKiBwZXIgZWFjaCBjb250ZXh0LgotICogICBpbnQzMl9hcnJheVswXSA6IHN0cmVhbSBjb250ZXh0IGFzIGRlZmluZWQgaW4gdmVoaWNsZV9hdWRpb19jb250ZXh0X2ZsYWcuCisgKiBwZXIgZWFjaCBjb250ZXh0IG9yIHBoeXNpY2FsIHN0cmVhbS4KKyAqCisgKiB2ZWhpY2xlX3Byb3BfY29uZmlnX3QKKyAqICAgY29uZmlnX2FycmF5WzBdIDogYml0IGZsYWdzIG9mIGFsbCBzdXBwb3J0ZWQgYXVkaW8gY29udGV4dHMuIElmIHRoaXMgaXMgMCwKKyAqICAgICAgICAgICAgICAgICAgICAgYXVkaW8gdm9sdW1lIGlzIGNvbnRyb2xsZWQgcGVyIHBoeXNpY2FsIHN0cmVhbQorICogICBjb25maWdfYXJyYXlbMV0gOiBmbGFncyBkZWZpbmVkIGluIHZlaGljbGVfYXVkaW9fdm9sdW1lX2NhcGFiaWxpdHlfZmxhZyB0bworICogICAgICAgICAgICAgICAgICAgICByZXByZXNlbnQgYXVkaW8gbW9kdWxlJ3MgY2FwYWJpbGl0eS4KKyAqCisgKiBEYXRhIHR5cGUgbG9va3MgbGlrZToKKyAqICAgaW50MzJfYXJyYXlbMF0gOiBzdHJlYW0gY29udGV4dCBhcyBkZWZpbmVkIGluIHZlaGljbGVfYXVkaW9fY29udGV4dF9mbGFnLiBJZiBvbmx5IHBoeXNpY2FsCisgKiAgICAgICAgICAgICAgICAgICAgc3RyZWFtIGlzIHN1cHBvcnRlZCAoY29uZmlnX2FycmF5WzBdID09IDApLCB0aGlzIHdpbGwgcmVwcmVzZW50IHBoeXNpY2FsCisgKiAgICAgICAgICAgICAgICAgICAgc3RyZWFtIG51bWJlci4KICAqICAgaW50MzJfYXJyYXlbMV0gOiBtYXhpbXVtIHZvbHVtZSBzZXQgdG8gdGhlIHN0cmVhbS4gSWYgdGhlcmUgaXMgbm8gcmVzdHJpY3Rpb24sIHRoaXMgdmFsdWUKICAqICAgICAgICAgICAgICAgICAgICB3aWxsIGJlICBiaWdnZXIgdGhhbiBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX1ZPTFVNRSdzIG1heCB2YWx1ZS4KICAqCkBAIC02OTgsNyArODQ5LDcgQEAKICAqIEBjb25maWdfZmxhZ3MgYWxsIGF1ZGlvIGNvbnRleHRzIHN1cHBvcnRlZC4KICAqIEBkYXRhX21lbWJlciBpbnQzMl9hcnJheQogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fVk9MVU1FX0xJTUlUICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA5MDIpCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fVk9MVU1FX0xJTUlUICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwOTAyKQogCiAvKioKICAqIEluZGV4IGluIGludDMyX2FycmF5IGZvciBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX1ZPTFVNRV9MSU1JVCBwcm9wZXJ0eS4KQEAgLTcyNyw3ICs4NzgsNyBAQAogICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCiAgKiBAZGF0YV9tZW1iZXIgaW50MzJfYXJyYXkKICAqLwotI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX1JPVVRJTkdfUE9MSUNZICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwOTAzKQorI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX1JPVVRJTkdfUE9MSUNZICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDkwMykKIAogLyoqCiAgKiBJbmRleCBpbiBpbnQzMl9hcnJheSBmb3IgVkVISUNMRV9QUk9QRVJUWV9BVURJT19ST1VUSU5HX1BPTElDWSBwcm9wZXJ0eS4KQEAgLTc1MCw3ICs5MDEsNyBAQAogKiAgICAgICAgICAgICAgIHRoaXMuCiAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQogKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19IV19WQVJJQU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDkwNCkKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19IV19WQVJJQU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA5MDQpCiAKIC8qKgogICogRmxhZyB0byBiZSB1c2VkIGluIHZlaGljbGVfcHJvcF9jb25maWcuY29uZmlnX2ZsYWdzIGZvciBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0hXX1ZBUklBTlQuCkBAIC03NjYsNiArOTE3LDcwIEBACiAgICAgVkVISUNMRV9BVURJT19IV19WQVJJQU5UX0ZMQUdfSU5URVJOQUxfUkFESU9fRkxBRyA9IDB4MSwKIH07CiAKKy8qKiBhdWRpbyByb3V0aW5nIGZvciBBTS9GTS4gVGhpcyBzaG91bGQgYmUgYWxzbyBiZSB0aGUgdmFsdWUgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZQorICAgIHJhZGlvIG1vZHVsZSBpbiB0aGUgc3lzdGVtLiAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9SQURJT19BTV9GTSAiUkFESU9fQU1fRk0iCisvKiogU2hvdWxkIGJlIGFkZGVkIG9ubHkgd2hlbiB0aGVyZSBpcyBhIHNlcGFyYXRlIHJhZGlvIG1vZHVsZSB3aXRoIEhEIGNhcGFiaWxpdHkuICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRVhUX1JPVVRJTkdfU09VUkNFX1JBRElPX0FNX0ZNX0hEICJSQURJT19BTV9GTV9IRCIKKy8qKiBGb3IgZGlnaWFsIGF1ZGlvIGJyb2FkY2FzdGluZyB0eXBlIG9mIHJhZGlvICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRVhUX1JPVVRJTkdfU09VUkNFX1JBRElPX0RBQiAiUkFESU9fREFCIgorLyoqIEZvciBzYXRlbGxpdGUgdHlwZSBvZiByYWRpbyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9SQURJT19TQVRFTExJVEUgIlJBRElPX1NBVEVMTElURSIKKy8qKiBGb3IgQ0Qgb3IgRFZEICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRVhUX1JPVVRJTkdfU09VUkNFX0NEX0RWRCAiQ0RfRFZEIgorLyoqIEZvciAxc3QgYXV4aWxpYXJ5IGlucHV0ICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRVhUX1JPVVRJTkdfU09VUkNFX0FVWF9JTjAgIkFVWF9JTjAiCisvKiogRm9yIDJuZCBhdXhpbGlhcnkgaW5wdXQgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19FWFRfUk9VVElOR19TT1VSQ0VfQVVYX0lOMSAiQVVYX0lOMSIKKy8qKiBGb3IgbmF2aWdhdGlvbiBndWlkYW5jZSBmcm9tIG91dHNpZGUgYW5kcm9pZCAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9FWFRfTkFWX0dVSURBTkNFICJFWFRfTkFWX0dVSURBTkNFIgorLyoqIEZvciB2b2ljZSBjb21tYW5kIGZyb20gb3V0c2lkZSBhbmRyb2lkICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRVhUX1JPVVRJTkdfU09VUkNFX0VYVF9WT0lDRV9DT01NQU5EICJFWFRfVk9JQ0VfQ09NTUFORCIKKy8qKiBGb3Igdm9pY2UgY2FsbCBmcm9tIG91dHNpZGUgYW5kcm9pZCAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9FWFRfVk9JQ0VfQ0FMTCAiRVhUX1ZPSUNFX0NBTEwiCisvKiogRm9yIHNhZmV0eSBhbGVydCBmcm9tIG91dHNpZGUgYW5kcm9pZCAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9FWFRfU0FGRVRZX0FMRVJUICJFWFRfU0FGRVRZX0FMRVJUIgorCisvKioKKyogUHJvcGVydHkgdG8gcGFzcyBoaW50IG9uIGV4dGVybmFsIGF1ZGlvIHJvdXRpbmcuIFdoZW4gYW5kcm9pZCBzaWRlIHJlcXVlc3QgZm9jdXMKKyogd2l0aCBWRUhJQ0xFX0FVRElPX0VYVF9GT0NVU19DQVJfUExBWV9PTkxZX0ZMQUcgZmxhZywgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIHNldAorKiBiZWZvcmUgc2V0dGluZyBBVURJT19GT0NVUyBwcm9wZXJ0eSBhcyBhIGhpbnQgZm9yIGV4dGVybmFsIGF1ZGlvIHNvdXJjZSByb3V0aW5nLgorKiBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIHByb3BlcnR5IGFsb25lIHNob3VsZCBub3QgdHJpZ2dlciBhbnkgY2hhbmdlLgorKiBBdWRpbyByb3V0aW5nIHNob3VsZCBiZSBjaGFuZ2VkIG9ubHkgd2hlbiBBVURJT19GT0NVUyBwcm9wZXJ0eSBpcyBzZXQuIE5vdGUgdGhhdAorKiB0aGlzIHByb3BlcnR5IGFsbG93cyBwYXNzaW5nIGN1c3RvbSB2YWx1ZSBhcyBsb25nIGFzIGl0IGlzIGRlZmluZWQgaW4gY29uZmlnX3N0cmluZy4KKyogVGhpcyBhbGxvd3Mgc3VwcG9ydGluZyBub24tc3RhbmRhcmQgcm91dGluZyBvcHRpb25zIHRocm91Z2ggdGhpcyBwcm9wZXJ0eS4KKyogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHNlcGFyYXRlIG5hbWUgc3BhY2UgZm9yIGN1c3RvbSBwcm9wZXJ0eSB0byBwcmV2ZW50IGNvbmZsaWN0IGluIGZ1dHVyZQorKiBhbmRyb2lkIHJlbGVhc2VzLgorKiBFbmFibGluZyBlYWNoIGV4dGVybmFsIHJvdXRpbmcgb3B0aW9uIGlzIGRvbmUgYnkgZW5hYmxpbmcgZWFjaCBiaXQgZmxhZyBmb3IgdGhlIHJvdXRpbmcuCisqIFRoaXMgcHJvcGVydHkgY2FuIHN1cHBvcnQgdXAgdG8gMTI4IGV4dGVybmFsIHJvdXRpbmdzLgorKiBUbyBnaXZlIGZ1bGwgZmxleGliaWxpdHksIHRoZXJlIGlzIG5vIHN0YW5kYXJkIGRlZmluaXRpb24gZm9yIGVhY2ggYml0IGZsYWcgYW5kCisqIGFzc2lnbmluZyBlYWNoIGJpZyBmbGFnIHRvIHNwZWNpZmljIHJvdXRpbmcgdHlwZSBpcyBkZWNpZGVkIGJ5IGNvbmZpZ19zdHJpbmcuCisqIGNvbmZpZ19zdHJpbmcgaGFzIGZvcm1hdCBvZiBlYWNoIGVudHJ5IHNlcGFyYXRlZCBieSAnLCcKKyogYW5kIGVhY2ggZW50cnkgaGFzIGZvcm1hdCBvZiBiaXRGbGFnUG9zaXRvbjp0eXBlU3RyaW5nWzpwaHlzaWNhbFN0cmVhbU51bWJlcl0uCisqICBiaXRGbGFnUG9zaXRpb246IHJlcHJlc2VudHMgd2hpY2ggYmlnIGZsYWcgd2lsbCBiZSBzZXQgdG8gZW5hYmxlIHRoaXMgcm91dGluZy4gMCBtZWFucworKiAgICBMU0IgaW4gaW50MzJfYXJyYXlbMF0uIDMxIHdpbGwgYmUgTVNCIGluIGludDMyX2FycmF5WzBdLiAxMjcgd2lsbCBNU0IgaW4gaW50MzJfYXJyYXlbM10uCisqICB0eXBlU3RyaW5nOiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgZXh0ZXJuYWwgcm91dGluZy4gU29tZSB0eXBlcyBhcmUgYWxyZWFkeSBkZWZpbmVkCisqICAgIGluIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRVhUX1JPVVRJTkdfU09VUkNFXyogYW5kIHVzZSB0aGVtIGZpcnN0IGJlZm9yZSBhZGRpbmcgc29tZXRoaW5nCisqICAgIGN1c3RvbS4gQXBwbGljYXRpb25zIHdpbGwgZmluZCBlYWNoIHJvdXRpbmcgdXNpbmcgdGhpcyBzdHJpbmcuCisqICBwaHlzaWNhbFN0cmVhbU51bWJlcjogVGhpcyBwYXJ0IGlzIG9wdGlvbmFsIGFuZCByZXByZXNlbnRzIHBoeXNpY2FsIHN0cmVhbSB0byBhbmRyb2lkCisqICAgIHdoaWNoIHdpbGwgYmUgZGlzYWJsZWQgd2hlbiB0aGlzIHJvdXRpbmcgaXMgZW5hYmxlZC4gSWYgbm90IHNwZWNpZmllZCwgdGhpcyByb3V0aW5nCisqICAgIHNob3VsZCBub3QgYWZmZWN0IHBoeXNpY2FsIHN0cmVhbXMgdG8gYW5kcm9pZC4KKyogQXMgYW4gZXhhbXBsZSwgbGV0J3MgYXNzdW1lIGEgc3lzdGVtIHdpdGggdHdvIHBoeXNpY2FsIHN0cmVhbXMsIDAgZm9yIG1lZGlhIGFuZCAxIGZvcgorKiBuYXYgZ3VpZGFuY2UuIEFuZCBsZXQncyBhc3N1bWUgZXh0ZXJuYWwgcm91dGluZyBvcHRpb24gb2YgYW0gZm0gcmFkaW8sIGV4dGVybmFsIG5hdmlnYXRpb24KKyogZ3VpZGFuY2UsIHNhdGVsbGl0ZSByYWRpbywgYW5kIG9uZSBjdXN0b20uIExldCdzIGFzc3VtZSB0aGF0IHJhZGlvIGFuZCBzYXRlbGxpdGUgcmVwbGFjZXMKKyogcGh5c2ljYWwgc3RyZWFtIDAgYW5kIGV4dGVybmFsIG5hdmlnYXRpb24gcmVwbGFjZXMgcGh5c2ljYWwgc3RyZWFtIDEuIEFuZCBiaXQgZmxhZyB3aWxsIGJlCisqIGFzc2lnbmVkIGluIHRoZSBvcmRlciBsaXN0ZWQgYWJvdmUuIFRoaXMgY29uZmlndXJhdGlvbiB3aWxsIGxvb2sgbGlrZSB0aGlzIGluIGNvbmZpZ19zdHJpbmc6CisqICAiMDpSQURJT19BTV9GTTowLDE6RVhUX05BVl9HVUlEQU5DRToxLDI6UkFESU9fU0FURUxMSVRFOjAsMzpjb20udGVzdC5TT01FVEhJTkdfQ1VTVE9NIgorKiBXaGVuIGFuZHJvaWQgcmVxdWVzdHMgUkFESU9fQU1fRk0sIGludDMyX2FycmF5WzBdIHdpbGwgYmUgc2V0IHRvIDB4MS4KKyogV2hlbiBhbmRyb2lkIHJlcXVlc3RzIFJBRElPX1NBVEVMTElURSArIEVYVF9OQVZfR1VJREFOQ0UsIGludDMyX2FycmF5WzBdIHdpbGwgYmUgc2V0IHRvIDB4MnwweDQuCisqCisqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9JTlQzMl9WRUM0CisqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyogQGNvbmZpZ19zdHJpbmcgTGlzdCBvZiBhbGwgYXZhaWFibGUgZXh0ZXJuYWwgc291cmNlIGluIHRoZSBzeXN0ZW0uCisqIEBkYXRhX21lbWJlciBpbnQzMl9hcnJheQorKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19FWFRfUk9VVElOR19ISU5UICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA5MDUpCiAKIC8qKgogICogUHJvcGVydHkgdG8gY29udHJvbCBwb3dlciBzdGF0ZSBvZiBhcHBsaWNhdGlvbiBwcm9jZXNzb3IuCkBAIC03ODgsNyArMTAwMyw3IEBACiAgKiBAY29uZmlnX2ZsYWdzIEFkZGl0aW9uYWwgaW5mbyBvbiBwb3dlciBzdGF0ZS4gU2hvdWxkIHVzZSB2ZWhpY2xlX2FwX3Bvd2VyX3N0YXRlX2NvbmZpZ19mbGFnLgogICogQGRhdGFfbWVtYmVyIGludDMyX2FycmF5CiAgKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BUF9QT1dFUl9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEEwMCkKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BUF9QT1dFUl9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBBMDApCiAKIGVudW0gdmVoaWNsZV9hcF9wb3dlcl9zdGF0ZV9jb25maWdfZmxhZyB7CiAgICAgLyoqCkBAIC04OTUsNyArMTExMCw3IEBACiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRHxWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKICAqIEBkYXRhX21lbWJlciBpbnQzMgogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRElTUExBWV9CUklHSFRORVNTICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBBMDEpCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRElTUExBWV9CUklHSFRORVNTICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQTAxKQogCiAKIC8qKgpAQCAtOTk5LDcgKzEyMTQsNyBAQAogICogQGNvbmZpZ19hcnJheSAwOnZlaGljbGVfaW5zdHVtZW50X2NsdXN0ZXJfdHlwZSAxOmh3IHR5cGUKICAqIEBkYXRhX21lbWJlciBpbnQzMl9hcnJheQogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSU5TVFJVTUVOVF9DTFVTVEVSX0lORk8gICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEEyMCkKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9JTlNUUlVNRU5UX0NMVVNURVJfSU5GTyAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBBMjApCiAKIC8qKgogICogUmVwcmVzZW50cyBpbnN0cnVtZW50IGNsdXN0ZXIgdHlwZSBhdmFpbGFibGUgaW4gc3lzdGVtCkBAIC0xMDE5LDYgKzEyMzQsNjI0IEBACiB9OwogCiAvKioKKyAqIEN1cnJlbnQgZGF0ZSBhbmQgdGltZSwgZW5jb2RlZCBhcyBVbml4IHRpbWUuCisgKiBUaGlzIHZhbHVlIGRlbm90ZXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlIDEvMS8xOTcwLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9JTlQ2NAorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9TRVQKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAZGF0YV9tZW1iZXIgaW50NjRfdmFsdWUKKyAqIEB1bml0IFZFSElDTEVfVU5JVF9UWVBFX1NFQ1MKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1VOSVhfVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEEzMCkKKworLyoqCisgKiBDdXJyZW50IHRpbWUgb25seS4KKyAqIFNvbWUgdmVoaWNsZXMgbWF5IG5vdCBrZWVwIHRyYWNrIG9mIGRhdGUuICBUaGlzIHByb3BlcnR5IG9ubHkgYWZmZWN0cyB0aGUgY3VycmVudCB0aW1lLCBpbgorICogc2Vjb25kcyBkdXJpbmcgdGhlIGRheS4gIFRodXMsIHRoZSBtYXggdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIDg2LDQwMCAoMjQgKiA2MCAqIDYwKQorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9TRVQKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqIEB1bml0IFZFSElDTEVfVU5JVF9UWVBFX1NFQ1MKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0NVUlJFTlRfVElNRV9JTl9TRUNPTkRTICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEEzMSkKKworCisvLz09PT0gQ2FyIENhYmluIFByb3BlcnRpZXMgPT09PQorLyoqCisgKiBNb3N0IENhciBDYWJpbiBwcm9wZXJ0aWVzIGhhdmUgYm90aCBhIE1PVkUgYW5kIFBPU0lUSU9OIHBhcmFtZXRlciBhc3NvY2lhdGVkIHdpdGggdGhlbS4KKyAqCisgKiBUaGUgTU9WRSBwYXJhbWV0ZXIgd2lsbCBzdGFydCBtb3ZpbmcgdGhlIGRldmljZSBpbiB0aGUgaW5kaWNhdGVkIGRpcmVjdGlvbi4gIFRoZSBtYWduaXR1ZGUKKyAqIGluZGljYXRlcyB0aGUgcmVsYXRpdmUgc3BlZWQuICBGb3IgaW5zdGFuY2UsIHNldHRpbmcgdGhlIFdJTkRPV19NT1ZFIHBhcmFtZXRlciB0byArMSB3aWxsIHJvbGwKKyAqIHRoZSB3aW5kb3cgdXAuICBTZXR0aW5nIGl0IHRvICsyIChpZiBhdmFpbGFibGUpIHdpbGwgcm9sbCBpdCB1cCBmYXN0ZXIuCisgKgorICogVGhlIFBPU0lUSU9OIHBhcmFtZXRlciB3aWxsIG1vdmUgdGhlIGRldmljZSB0byB0aGUgZGVzaXJlZCBwb3NpdGlvbi4gIEZvciBpbnN0YW5jZSwgaWYgdGhlCisgKiBXSU5ET1dfUE9TIGhhcyBhIHJhbmdlIG9mIDAtMTAwLCB0aGVuIHNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gNTAgd2lsbCBvcGVuIHRoZSB3aW5kb3cgaGFsZndheS4KKyAqIERlcGVuZGluZyB1cG9uIHRoZSBpbml0aWFsIHBvc2l0aW9uLCB0aGUgd2luZG93IG1heSBtb3ZlIHVwIG9yIGRvd24gdG8gdGhlIDUwJSB2YWx1ZS4KKyAqCisgKiBPRU1zIG1heSBjaG9vc2UgdG8gaW1wbGVtZW50IG9uZSBvciBib3RoIG9mIHRoZSBNT1ZFL1BPU0lUSU9OIHBhcmFtZXRlcnMgZGVwZW5kaW5nIHVwb24gdGhlCisgKiBjYXBhYmlsaXR5IG9mIHRoZSBoYXJkd2FyZS4KKyAqLworCisvLyBEb29ycworLyoqCisgKiBEb29yIHBvc2l0aW9uCisgKgorICogVGhpcyBpcyBhbiBpbnRlZ2VyIGluIGNhc2UgYSBkb29yIG1heSBiZSBzZXQgdG8gYSBwYXJ0aWN1bGFyIHBvc2l0aW9uLiAgTWF4CisgKiB2YWx1ZSBpbmRpY2F0ZXMgZnVsbHkgb3BlbiwgbWluIHZhbHVlICgwKSBpbmRpY2F0ZXMgZnVsbHkgY2xvc2VkLgorICoKKyAqIFNvbWUgdmVoaWNsZXMgKG1pbml2YW5zKSBjYW4gb3BlbiB0aGUgZG9vciBlbGVjdHJvbmljYWxseS4gIEhlbmNlLCB0aGUgYWJpbGl0eQorICogdG8gd3JpdGUgdGhpcyBwcm9wZXJ0eS4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRHxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX0RPT1IKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRE9PUl9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjAwKQorCisvKioKKyAqIERvb3IgbW92ZQorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFfFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfRE9PUgorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9ET09SX01PVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCMDEpCisKKworLyoqCisgKiBEb29yIGxvY2sKKyAqCisgKiAndHJ1ZScgaW5kaWNhdGVzIGRvb3IgaXMgbG9ja2VkCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0JPT0xFQU4KKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9ET09SCisgKiBAZGF0YV9tZW1iZXIgYm9vbGVhbl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRE9PUl9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjAyKQorCisvLyBNaXJyb3JzCisvKioKKyAqIE1pcnJvciBaIFBvc2l0aW9uCisgKgorICogUG9zaXRpdmUgdmFsdWUgaW5kaWNhdGVzIHRpbHQgdXB3YXJkcywgbmVnYXRpdmUgdmFsdWUgaXMgZG93bndhcmRzCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfTUlSUk9SCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX01JUlJPUl9aX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI0MCkKKworLyoqCisgKiBNaXJyb3IgWiBNb3ZlCisgKgorICogUG9zaXRpdmUgdmFsdWUgaW5kaWNhdGVzIHRpbHQgdXB3YXJkcywgbmVnYXRpdmUgdmFsdWUgaXMgZG93bndhcmRzCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9NSVJST1IKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfTUlSUk9SX1pfTU9WRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjQxKQorCisvKioKKyAqIE1pcnJvciBZIFBvc2l0aW9uCisgKgorICogUG9zaXRpdmUgdmFsdWUgaW5kaWNhdGUgdGlsdCByaWdodCwgbmVnYXRpdmUgdmFsdWUgaXMgbGVmdAorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX01JUlJPUgorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9NSVJST1JfWV9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCNDIpCisKKy8qKgorICogTWlycm9yIFkgTW92ZQorICoKKyAqIFBvc2l0aXZlIHZhbHVlIGluZGljYXRlIHRpbHQgcmlnaHQsIG5lZ2F0aXZlIHZhbHVlIGlzIGxlZnQKKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX01JUlJPUgorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9NSVJST1JfWV9NT1ZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCNDMpCisKKy8qKgorICogTWlycm9yIExvY2sKKyAqCisgKiBUcnVlIGluZGljYXRlcyBtaXJyb3IgcG9zaXRpb25zIGFyZSBsb2NrZWQgYW5kIG5vdCBjaGFuZ2VhYmxlCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX0JPT0xFQU4KKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQGRhdGFfbWVtYmVyIGJvb2xlYW5fdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX01JUlJPUl9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI0NCkKKworLyoqCisgKiBNaXJyb3IgRm9sZAorICoKKyAqIFRydWUgaW5kaWNhdGVzIG1pcnJvcnMgYXJlIGZvbGRlZAorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9CT09MRUFOCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEBkYXRhX21lbWJlciBib29sZWFuX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9NSVJST1JfRk9MRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCNDUpCisKKy8vIFNlYXRzCisvKioKKyAqIFNlYXQgbWVtb3J5IHNlbGVjdAorICoKKyAqIFRoaXMgcGFyYW1ldGVyIHNlbGVjdHMgdGhlIG1lbW9yeSBwcmVzZXQgdG8gdXNlIHRvIHNlbGVjdCB0aGUgc2VhdCBwb3NpdGlvbi4KKyAqIFRoZSBtaW5WYWx1ZSBpcyBhbHdheXMgMCwgYW5kIHRoZSBtYXhWYWx1ZSBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2Ygc2VhdAorICogcG9zaXRpb25zIGF2YWlsYWJsZS4KKyAqCisgKiBGb3IgaW5zdGFuY2UsIGlmIHRoZSBkcml2ZXIncyBzZWF0IGhhcyAzIG1lbW9yeSBwcmVzZXRzLCB0aGUgbWF4VmFsdWUgd2lsbCBiZSAzLgorICogV2hlbiB0aGUgdXNlciB3YW50cyB0byBzZWxlY3QgYSBwcmVzZXQsIHRoZSBkZXNpcmVkIHByZXNldCBudW1iZXIgKDEsIDIsIG9yIDMpCisgKiBpcyBzZXQuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9NRU1PUllfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjgwKQorCisvKioKKyAqIFNlYXQgbWVtb3J5IHNldAorICoKKyAqIFRoaXMgc2V0dGluZyBhbGxvd3MgdGhlIHVzZXIgdG8gc2F2ZSB0aGUgY3VycmVudCBzZWF0IHBvc2l0aW9uIHNldHRpbmdzIGludG8KKyAqIHRoZSBzZWxlY3RlZCBwcmVzZXQgc2xvdC4gIFRoZSBtYXhWYWx1ZSBmb3IgZWFjaCBzZWF0IHBvc2l0aW9uIHNoYWxsIG1hdGNoCisgKiB0aGUgbWF4VmFsdWUgZm9yIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9NRU1PUllfU0VMRUNULgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfTUVNT1JZX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4MSkKKworLyoqCisgKiBTZWF0YmVsdCBidWNrbGVkCisgKgorICogVHJ1ZSBpbmRpY2F0ZXMgYmVsdCBpcyBidWNrbGVkLgorICoKKyAqIFdyaXRlIGFjY2VzcyBpbmRpY2F0ZXMgYXV0b21hdGljIHNlYXQgYnVja2xpbmcgY2FwYWJpbGl0aWVzLiAgVGhlcmUgYXJlIG5vIGtub3duIGNhcnMgYXQgdGhpcworICogdGltZSwgYnV0IHlvdSBuZXZlciBrbm93Li4uCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0JPT0xFQU4KKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRHxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBib29sZWFuX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0JFTFRfQlVDS0xFRCAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCODIpCisKKy8qKgorICogU2VhdGJlbHQgaGVpZ2h0IHBvc2l0aW9uCisgKgorICogQWRqdXN0cyB0aGUgc2hvdWxkZXIgYmVsdCBhbmNob3IgcG9pbnQuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIGhpZ2hlc3QgcG9zaXRpb24KKyAqIE1pbiB2YWx1ZSBpbmRpY2F0ZXMgbG93ZXN0IHBvc2l0aW9uCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0JFTFRfSEVJR0hUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCODMpCisKKy8qKgorICogU2VhdGJlbHQgaGVpZ2h0IG1vdmUKKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9CRUxUX0hFSUdIVF9NT1ZFICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjg0KQorCisvKioKKyAqIFNlYXQgZm9yZS9hZnQgcG9zaXRpb24KKyAqCisgKiBTZXRzIHRoZSBzZWF0IHBvc2l0aW9uIGZvcndhcmQgKGNsb3NlciB0byBzdGVlcmluZyB3aGVlbCkgYW5kIGJhY2t3YXJkcy4KKyAqIE1heCB2YWx1ZSBpbmRpY2F0ZXMgY2xvc2VzdCB0byB3aGVlbCwgbWluIHZhbHVlIGluZGljYXRlcyBtb3N0IHJlYXJ3YXJkCisgKiBwb3NpdGlvbi4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfRk9SRV9BRlRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4NSkKKworLyoqCisgKiBTZWF0IGZvcmUvYWZ0IG1vdmUKKyAqCisgKiBNb3ZlcyB0aGUgc2VhdCBwb3NpdGlvbiBmb3J3YXJkIGFuZCBhZnQuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfRk9SRV9BRlRfTU9WRSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4NikKKworLyoqCisgKiBTZWF0IGJhY2tyZXN0IGFuZ2xlIDEgcG9zaXRpb24KKyAqCisgKiBCYWNrcmVzdCBhbmdsZSAxIGlzIHRoZSBhY3R1YXRvciBjbG9zZXN0IHRvIHRoZSBib3R0b20gb2YgdGhlIHNlYXQuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIGFuZ2xpbmcgZm9yd2FyZCB0b3dhcmRzIHRoZSBzdGVlcmluZyB3aGVlbC4KKyAqIE1pbiB2YWx1ZSBpbmRpY2F0ZXMgZnVsbCByZWNsaW5lLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9CQUNLUkVTVF9BTkdMRV8xX1BPUyAgICAgICAgICAgICAgICAgICgweDAwMDAwQjg3KQorCisvKioKKyAqIFNlYXQgYmFja3Jlc3QgYW5nbGUgMSBtb3ZlCisgKgorICogTW92ZXMgdGhlIGJhY2tyZXN0IGZvcndhcmQgb3IgcmVjbGluZS4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9CQUNLUkVTVF9BTkdMRV8xX01PVkUgICAgICAgICAgICAgICAgICgweDAwMDAwQjg4KQorCisvKioKKyAqIFNlYXQgYmFja3Jlc3QgYW5nbGUgMiBwb3NpdGlvbgorICoKKyAqIEJhY2tyZXN0IGFuZ2xlIDIgaXMgdGhlIG5leHQgYWN0dWF0b3IgdXAgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBzZWF0LgorICogTWF4IHZhbHVlIGluZGljYXRlcyBhbmdsaW5nIGZvcndhcmQgdG93YXJkcyB0aGUgc3RlZXJpbmcgd2hlZWwuCisgKiBNaW4gdmFsdWUgaW5kaWNhdGVzIGZ1bGwgcmVjbGluZS4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfQkFDS1JFU1RfQU5HTEVfMl9QT1MgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4OSkKKworLyoqCisgKiBTZWF0IGJhY2tyZXN0IGFuZ2xlIDIgbW92ZQorICoKKyAqIE1vdmVzIHRoZSBiYWNrcmVzdCBmb3J3YXJkIG9yIHJlY2xpbmUuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfQkFDS1JFU1RfQU5HTEVfMl9NT1ZFICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4QSkKKworLyoqCisgKiBTZWF0IGhlaWdodCBwb3NpdGlvbgorICoKKyAqIFNldHMgdGhlIHNlYXQgaGVpZ2h0LgorICogTWF4IHZhbHVlIGluZGljYXRlcyBoaWdoZXN0IHBvc2l0aW9uLgorICogTWluIHZhbHVlIGluZGljYXRlcyBsb3dlc3QgcG9zaXRpb24uCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0hFSUdIVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCOEIpCisKKy8qKgorICogU2VhdCBoZWlnaHQgbW92ZQorICoKKyAqIE1vdmVzIHRoZSBzZWF0IGhlaWdodC4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9IRUlHSFRfTU9WRSAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjhDKQorCisvKioKKyAqIFNlYXQgZGVwdGggcG9zaXRpb24KKyAqCisgKiBTZXRzIHRoZSBzZWF0IGRlcHRoLCBkaXN0YW5jZSBmcm9tIGJhY2sgcmVzdCB0byBmcm9udCBlZGdlIG9mIHNlYXQuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIGxvbmdlc3QgZGVwdGggcG9zaXRpb24uCisgKiBNaW4gdmFsdWUgaW5kaWNhdGVzIHNob3J0ZXN0IHBvc2l0aW9uLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9ERVBUSF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjhEKQorCisvKioKKyAqIFNlYXQgZGVwdGggbW92ZQorICoKKyAqIEFkanVzdHMgdGhlIHNlYXQgZGVwdGguCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfREVQVEhfTU9WRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4RSkKKworLyoqCisgKiBTZWF0IHRpbHQgcG9zaXRpb24KKyAqCisgKiBTZXRzIHRoZSBzZWF0IHRpbHQuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIGZyb250IGVkZ2Ugb2Ygc2VhdCBoaWdoZXIgdGhhbiBiYWNrIGVkZ2UuCisgKiBNaW4gdmFsdWUgaW5kaWNhdGVzIGZyb250IGVkZ2Ugb2Ygc2VhdCBsb3dlciB0aGFuIGJhY2sgZWRnZS4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfVElMVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4RikKKworLyoqCisgKiBTZWF0IHRpbHQgbW92ZQorICoKKyAqIFRpbHRzIHRoZSBzZWF0LgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFfFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX1RJTFRfTU9WRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCOTApCisKKy8qKgorICogTHVtYmVyIGZvcmUvYWZ0IHBvc2l0aW9uCisgKgorICogUHVzaGVzIHRoZSBsdW1iYXIgc3VwcG9ydCBmb3J3YXJkIGFuZCBiYWNrd2FyZHMKKyAqIE1heCB2YWx1ZSBpbmRpY2F0ZXMgbW9zdCBmb3J3YXJkIHBvc2l0aW9uLgorICogTWluIHZhbHVlIGluZGljYXRlcyBtb3N0IHJlYXJ3YXJkIHBvc2l0aW9uLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9MVU1CQVJfRk9SRV9BRlRfUE9TICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjkxKQorCisvKioKKyAqIEx1bWJhciBmb3JlL2FmdCBtb3ZlCisgKgorICogQWRqdXN0cyB0aGUgbHVtYmFyIHN1cHBvcnQuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfTFVNQkFSX0ZPUkVfQUZUX01PVkUgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI5MikKKworLyoqCisgKiBMdW1iYXIgc2lkZSBzdXBwb3J0IHBvc2l0aW9uCisgKgorICogU2V0cyB0aGUgYW1vdW50IG9mIGxhdGVyYWwgbHVtYmFyIHN1cHBvcnQuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIHdpZGVzdCBsdW1iYXIgc2V0dGluZyAoaS5lLiBsZWFzdCBzdXBwb3J0KQorICogTWluIHZhbHVlIGluZGljYXRlcyB0aGlubmVzdCBsdW1iYXIgc2V0dGluZy4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfTFVNQkFSX1NJREVfU1VQUE9SVF9QT1MgICAgICAgICAgICAgICAoMHgwMDAwMEI5MykKKworLyoqCisgKiBMdW1iYXIgc2lkZSBzdXBwb3J0IG1vdmUKKyAqCisgKiBBZGp1c3RzIHRoZSBhbW91bnQgb2YgbGF0ZXJhbCBsdW1iYXIgc3VwcG9ydC4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9MVU1CQVJfU0lERV9TVVBQT1JUX01PVkUgICAgICAgICAgICAgICgweDAwMDAwQjk0KQorCisvKioKKyAqIEhlYWRyZXN0IGhlaWdodCBwb3NpdGlvbgorICoKKyAqIFNldHMgdGhlIGhlYWRyZXN0IGhlaWdodC4KKyAqIE1heCB2YWx1ZSBpbmRpY2F0ZXMgdGFsbGVzdCBzZXR0aW5nLgorICogTWluIHZhbHVlIGluZGljYXRlcyBzaG9ydGVzdCBzZXR0aW5nLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9IRUFEUkVTVF9IRUlHSFRfUE9TICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjk1KQorCisvKioKKyAqIEhlYWRyZXN0IGhlaWdodCBtb3ZlCisgKgorICogTW92ZXMgdGhlIGhlYWRyZXN0IHVwIGFuZCBkb3duLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFfFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0hFQURSRVNUX0hFSUdIVF9NT1ZFICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCOTYpCisKKy8qKgorICogSGVhZHJlc3QgYW5nbGUgcG9zaXRpb24KKyAqCisgKiBTZXRzIHRoZSBhbmdsZSBvZiB0aGUgaGVhZHJlc3QuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIG1vc3QgdXByaWdodCBhbmdsZS4KKyAqIE1pbiB2YWx1ZSBpbmRpY2F0ZXMgc2hhbGxvd2VzdCBoZWFkcmVzdCBhbmdsZS4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfSEVBRFJFU1RfQU5HTEVfUE9TICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI5NykKKworLyoqCisgKiBIZWFkcmVzdCBhbmdsZSBtb3ZlCisgKgorICogQWRqdXN0cyB0aGUgYW5nbGUgb2YgdGhlIGhlYWRyZXN0CisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfSEVBRFJFU1RfQU5HTEVfTU9WRSAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI5OCkKKworLyoqCisgKiBIZWFkcmVzdCBmb3JlL2FmdCBwb3NpdGlvbgorICoKKyAqIEFkanVzdHMgdGhlIGhlYWRyZXN0IGZvcndhcmRzIGFuZCBiYWNrd2FyZHMuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIHBvc2l0aW9uIGNsb3Nlc3QgdG8gZnJvbnQgb2YgY2FyLgorICogTWluIHZhbHVlIGluZGljYXRlcyBwb3NpdGlvbiBjbG9zZXN0IHRvIHJlYXIgb2YgY2FyLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9IRUFEUkVTVF9GT1JFX0FGVF9QT1MgICAgICAgICAgICAgICAgICgweDAwMDAwQjk5KQorCisvKioKKyAqIEhlYWRyZXN0IGZvcmUvYWZ0IG1vdmUKKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9IRUFEUkVTVF9GT1JFX0FGVF9NT1ZFICAgICAgICAgICAgICAgICgweDAwMDAwQjlBKQorCisKKy8vIFdpbmRvd3MKKy8qKgorICogV2luZG93IFBvc2l0aW9uCisgKgorICogTWF4ID0gd2luZG93IHVwIC8gY2xvc2VkCisgKiBNaW4gPSB3aW5kb3cgZG93biAvIG9wZW4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9XSU5ET1dfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCQzApCisKKy8qKgorICogV2luZG93IE1vdmUKKyAqCisgKiBNYXggPSB3aW5kb3cgdXAgLyBjbG9zZWQKKyAqIE1pbiA9IHdpbmRvdyBkb3duIC8gb3BlbgorICogTWFnbml0dWRlIGRlbm90ZXMgcmVsYXRpdmUgc3BlZWQuICBJLmUuICsyIGlzIGZhc3RlciB0aGFuICsxIGluIHJhaXNpbmcgdGhlIHdpbmRvdy4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1dJTkRPV19NT1ZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEJDMSkKKworLyoqCisgKiBXaW5kb3cgVmVudCBQb3NpdGlvbgorICoKKyAqIFRoaXMgZmVhdHVyZSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHZlbnQgZmVhdHVyZSBvbiBhIHN1bnJvb2YuCisgKgorICogTWF4ID0gdmVudCBvcGVuCisgKiBNaW4gPSB2ZW50IGNsb3NlZAorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1dJTkRPV19WRU5UX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEJDMikKKworLyoqCisgKiBXaW5kb3cgVmVudCBNb3ZlCisgKgorICogVGhpcyBmZWF0dXJlIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgdmVudCBmZWF0dXJlIG9uIGEgc3Vucm9vZi4KKyAqCisgKiBNYXggPSB2ZW50IG9wZW4KKyAqIE1pbiA9IHZlbnQgY2xvc2VkCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9XSU5ET1dfVkVOVF9NT1ZFICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCQzMpCisKKy8qKgorICogV2luZG93IExvY2sKKyAqCisgKiBUcnVlIGluZGljYXRlcyB3aW5kb3dzIGFyZSBsb2NrZWQgYW5kIGNhbid0IGJlIG1vdmVkLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9CT09MRUFOCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEBkYXRhX21lbWJlciBib29sZWFuX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9XSU5ET1dfTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCQzQpCisKKworCisvKioKICAqICBIL1cgc3BlY2lmaWMsIG5vbi1zdGFuZGFyZCBwcm9wZXJ0eSBjYW4gYmUgYWRkZWQgYXMgbmVjZXNzYXJ5LiBTdWNoIHByb3BlcnR5IHNob3VsZCB1c2UKICAqICBwcm9wZXJ0eSBudW1iZXIgaW4gcmFuZ2Ugb2YgW1ZFSElDTEVfUFJPUEVSVFlfQ1VTVE9NX1NUQVJULCBWRUhJQ0xFX1BST1BFUlRZX0NVU1RPTV9FTkRdLgogICogIERlZmluaXRpb24gb2YgcHJvcGVydHkgaW4gdGhpcyByYW5nZSBpcyBjb21wbGV0ZWx5IHVwIHRvIGVhY2ggSEFMIGltcGxlbWVudGF0aW9uLgpAQCAtMTAyNywyMCArMTg2MCwyMCBAQAogICogIGluY2x1ZGUgY29uZmlnX3N0cmluZyBvZiAiY29tLlhZWi5zb21lX2Z1cnRoZXJfZGV0YWlscyIuCiAgKiAgQHJhbmdlX3N0YXJ0CiAgKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9DVVNUT01fU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICgweDcwMDAwMDAwKQorI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0NVU1RPTV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3MDAwMDAwMCkKIC8qKiBAcmFuZ2VfZW5kICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQ1VTVE9NX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3M2ZmZmZmZikKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9DVVNUT01fRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NzNmZmZmZmYpCiAKIC8qKgogICogUHJvcGVydHkgcmFuZ2UgYWxsb2NhdGVkIGZvciBzeXN0ZW0ncyBpbnRlcm5hbCB1c2FnZSBsaWtlIHRlc3RpbmcuIEhBTCBzaG91bGQgbmV2ZXIgZGVjbGFyZQogICogcHJvcGVydHkgaW4gdGhpcyByYW5nZS4KICAqIEByYW5nZV9zdGFydAogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSU5URVJOQUxfU1RBUlQgICAgICAgICAgICAgICAgICAgICAoMHg3NDAwMDAwMCkKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9JTlRFUk5BTF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NzQwMDAwMDApCiAvKioKICAqIEByYW5nZV9lbmQKICAqLwotI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0lOVEVSTkFMX0VORCAgICAgICAgICAgICAgICAgICAgICAgKDB4NzRmZmZmZmYpCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSU5URVJOQUxfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDc0ZmZmZmZmKQogCiAvKioKICAqIFZhbHVlIHR5cGVzIGZvciB2YXJpb3VzIHByb3BlcnRpZXMuCkBAIC0xMDg2LDEyICsxOTE5LDE0IEBACiAgICAgVkVISUNMRV9VTklUX1RZUEVfTUVURVIgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAyMSwKICAgICBWRUhJQ0xFX1VOSVRfVFlQRV9LSUxPTUVURVIgICAgICAgICAgICAgPSAweDAwMDAwMDIzLAogICAgIC8vIHRlbXBlcmF0dXJlCi0gICAgVkVISUNMRV9VTklUX1RZUEVfQ0VMQ0lVUyAgICAgICAgICAgICAgID0gMHgwMDAwMDAzMCwKKyAgICBWRUhJQ0xFX1VOSVRfVFlQRV9DRUxTSVVTICAgICAgICAgICAgICAgPSAweDAwMDAwMDMwLAorICAgIFZFSElDTEVfVU5JVF9UWVBFX0ZBSFJFTkhFSVQgICAgICAgICAgICA9IDB4MDAwMDAwMzEsCisgICAgVkVISUNMRV9VTklUX1RZUEVfS0VMVklOICAgICAgICAgICAgICAgID0gMHgwMDAwMDAzMiwKICAgICAvLyB2b2x1bWUKICAgICBWRUhJQ0xFX1VOSVRfVFlQRV9NSUxMSUxJVEVSICAgICAgICAgICAgPSAweDAwMDAwMDQwLAogICAgIC8vIHRpbWUKICAgICBWRUhJQ0xFX1VOSVRfVFlQRV9OQU5PX1NFQ1MgICAgICAgICAgICAgPSAweDAwMDAwMDUwLAotICAgIFZFSElDTEVfVU5PVF9UWVBFX1NFQ1MgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwNTMsCisgICAgVkVISUNMRV9VTklUX1RZUEVfU0VDUyAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDA1MywKICAgICBWRUhJQ0xFX1VOSVRfVFlQRV9ZRUFSICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDU5LAogfTsKIApAQCAtMTEwNSw4ICsxOTQwLDEyIEBACiAgICAgICovCiAgICAgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX1NUQVRJQyAgICAgICAgID0gMHgwMCwKICAgICAvKioKLSAgICAgKiBQcm9wZXJ0eSBvZiB0aGlzIHR5cGUgd2lsbCBiZSByZXBvcnRlZCB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlLiBnZXQgc2hvdWxkIHJldHVybiB0aGUKLSAgICAgKiBjdXJyZW50IHZhbHVlLgorICAgICAqIFByb3BlcnR5IG9mIHRoaXMgdHlwZSB3aWxsIGJlIHJlcG9ydGVkIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UuCisgICAgICogZ2V0IGNhbGwgc2hvdWxkIHJldHVybiB0aGUgY3VycmVudCB2YWx1ZS4KKyAgICAgKiBTZXQgb3BlcmF0aW9uIGZvciB0aGlzIHByb3BlcnR5IGlzIGFzc3VtZWQgdG8gYmUgYXN5bmNocm9ub3VzLiBXaGVuIHRoZSBwcm9wZXJ0eSBpcyByZWFkCisgICAgICogKGdldCkgYWZ0ZXIgc2V0LCBpdCBtYXkgc3RpbGwgcmV0dXJuIG9sZCB2YWx1ZSB1bnRpbCB1bmRlcmx5aW5nIEgvVyBiYWNraW5nIHRoaXMgcHJvcGVydHkKKyAgICAgKiBoYXMgYWN0dWFsbHkgY2hhbmdlZCB0aGUgc3RhdGUuIE9uY2Ugc3RhdGUgaXMgY2hhbmdlZCwgdGhlIHByb3BlcnR5IHdpbGwgZGlzcGF0Y2ggY2hhbmdlZAorICAgICAqIHZhbHVlIGFzIGV2ZW50LgogICAgICAqLwogICAgIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UgICAgICA9IDB4MDEsCiAgICAgLyoqCkBAIC0xMTE0LDYgKzE5NTMsMTggQEAKICAgICAgKiB0aGUgZGF0YS4KICAgICAgKi8KICAgICBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfQ09OVElOVU9VUyAgICAgPSAweDAyLAorICAgIC8qKgorICAgICAqIFByb3BlcnR5IG9mIHRoaXMgdHlwZSBtYXkgYmUgcG9sbGVkIHRvIGdldCB0aGUgY3VycmVudCB2YWx1ZS4KKyAgICAgKi8KKyAgICBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfUE9MTCAgICAgICAgICAgPSAweDAzLAorICAgIC8qKgorICAgICAqIFRoaXMgaXMgZm9yIHByb3BlcnR5IHdoZXJlIGNoYW5nZSBldmVudCBzaG91bGQgYmUgc2VudCBvbmx5IHdoZW4gdGhlIHZhbHVlIGlzCisgICAgICogc2V0IGZyb20gZXh0ZXJuYWwgY29tcG9uZW50LiBOb3JtYWwgdmFsdWUgY2hhbmdlIHdpbGwgbm90IHRyaWdnZXIgZXZlbnQuCisgICAgICogRm9yIGV4YW1wbGUsIGNsb2NrIHByb3BlcnR5IGNhbiBzZW5kIGNoYW5nZSBldmVudCBvbmx5IHdoZW4gaXQgaXMgc2V0LCBvdXRzaWRlIGFuZHJvaWQsCisgICAgICogZm9yIGNhc2UgbGlrZSB1c2VyIHNldHRpbmcgdGltZSBvciB0aW1lIGdldHRpbmcgdXBkYXRlLiBUaGVyZSBpcyBubyBuZWVkIHRvIHNlbmQgaXQKKyAgICAgKiBwZXIgZXZlcnkgdmFsdWUgY2hhbmdlLgorICAgICAqLworICAgIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9TRVQgICAgICAgICA9IDB4MDQsCiB9OwogCiAvKioKQEAgLTEyMzgsMTcgKzIwODksMTUgQEAKICAqIFZhcmlvdXMgU2VhdHMgaW4gdGhlIGNhci4KICAqLwogZW51bSB2ZWhpY2xlX3NlYXQgewotICAgIFZFSElDTEVfU0VBVF9EUklWRVJfTEhEICAgICAgICAgICAgID0gMHgwMDAxLAotICAgIFZFSElDTEVfU0VBVF9EUklWRVJfUkhEICAgICAgICAgICAgID0gMHgwMDAyLAotICAgIFZFSElDTEVfU0VBVF9ST1dfMV9QQVNTRU5HRVJfTEVGVCAgID0gMHgwMDEwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfMV9QQVNTRU5HRVJfQ0VOVEVSID0gMHgwMDIwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfMV9QQVNTRU5HRVJfUklHSFQgID0gMHgwMDQwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfMl9QQVNTRU5HRVJfTEVGVCAgID0gMHgwMTAwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfMl9QQVNTRU5HRVJfQ0VOVEVSID0gMHgwMjAwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfMl9QQVNTRU5HRVJfUklHSFQgID0gMHgwNDAwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfM19QQVNTRU5HRVJfTEVGVCAgID0gMHgxMDAwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfM19QQVNTRU5HRVJfQ0VOVEVSID0gMHgyMDAwLAotICAgIFZFSElDTEVfU0VBVF9ST1dfM19QQVNTRU5HRVJfUklHSFQgID0gMHg0MDAwCisgICAgVkVISUNMRV9TRUFUX1JPV18xX0xFRlQgICA9IDB4MDAwMSwKKyAgICBWRUhJQ0xFX1NFQVRfUk9XXzFfQ0VOVEVSID0gMHgwMDAyLAorICAgIFZFSElDTEVfU0VBVF9ST1dfMV9SSUdIVCAgPSAweDAwMDQsCisgICAgVkVISUNMRV9TRUFUX1JPV18yX0xFRlQgICA9IDB4MDAxMCwKKyAgICBWRUhJQ0xFX1NFQVRfUk9XXzJfQ0VOVEVSID0gMHgwMDIwLAorICAgIFZFSElDTEVfU0VBVF9ST1dfMl9SSUdIVCAgPSAweDAwNDAsCisgICAgVkVISUNMRV9TRUFUX1JPV18zX0xFRlQgICA9IDB4MDEwMCwKKyAgICBWRUhJQ0xFX1NFQVRfUk9XXzNfQ0VOVEVSID0gMHgwMjAwLAorICAgIFZFSElDTEVfU0VBVF9ST1dfM19SSUdIVCAgPSAweDA0MDAKIH07CiAKIC8qKgpAQCAtMTI4Miw2ICsyMTMxLDcgQEAKICAgICBWRUhJQ0xFX01JUlJPUl9EUklWRVJfUklHSFQgID0gMHgwMDAwMDAwMiwKICAgICBWRUhJQ0xFX01JUlJPUl9EUklWRVJfQ0VOVEVSID0gMHgwMDAwMDAwNCwKIH07CisKIGVudW0gdmVoaWNsZV90dXJuX3NpZ25hbCB7CiAgICAgVkVISUNMRV9TSUdOQUxfTk9ORSAgICAgICAgID0gMHgwMCwKICAgICBWRUhJQ0xFX1NJR05BTF9SSUdIVCAgICAgICAgPSAweDAxLApAQCAtMTI4OSw2ICsyMTM5LDE1IEBACiAgICAgVkVISUNMRV9TSUdOQUxfRU1FUkdFTkNZICAgID0gMHgwNAogfTsKIAorZW51bSB2ZWhpY2xlX3pvbmVfdHlwZSB7CisgICAgVkVISUNMRV9aT05FX1RZUEVfTk9ORSAgICAgID0gMHgwMCwKKyAgICBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FICAgID0gMHgwMSwKKyAgICBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUICAgICAgPSAweDAyLAorICAgIFZFSElDTEVfWk9ORV9UWVBFX0RPT1IgICAgICA9IDB4MDQsCisgICAgVkVISUNMRV9aT05FX1RZUEVfV0lORE9XICAgID0gMHgxMCwKKyAgICBWRUhJQ0xFX1pPTkVfVFlQRV9NSVJST1IgICAgPSAweDIwLAorfTsKKwogLyoKICAqIEJvb2xlYW4gdHlwZS4KICAqLwpAQCAtMTQ2OCw2ICsyMzI3LDcgQEAKICAgICAgICAgdmVoaWNsZV9ib29sZWFuX3QgbWF4X2RlZnJvc3Rfb247CiAgICAgICAgIHZlaGljbGVfYm9vbGVhbl90IHJlY2lyY19vbjsKICAgICAgICAgdmVoaWNsZV9ib29sZWFuX3QgZHVhbF9vbjsKKyAgICAgICAgdmVoaWNsZV9ib29sZWFuX3QgYXV0b19vbjsKICAgICAgICAgdmVoaWNsZV9ib29sZWFuX3QgcG93ZXJfb247CiAKICAgICAgICAgZmxvYXQgdGVtcGVyYXR1cmVfY3VycmVudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvdmVoaWNsZV9jYW1lcmEuaCBiL2luY2x1ZGUvaGFyZHdhcmUvdmVoaWNsZV9jYW1lcmEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA3NWFlZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL3ZlaGljbGVfY2FtZXJhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgQU5EUk9JRF9WRUhJQ0xFX0NBTUVSQV9JTlRFUkZBQ0VfSAotI2RlZmluZSBBTkRST0lEX1ZFSElDTEVfQ0FNRVJBX0lOVEVSRkFDRV9ICi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaW5jbHVkZSA8aGFyZHdhcmUvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxjdXRpbHMvbmF0aXZlX2hhbmRsZS5oPgotI2luY2x1ZGUgPHN5c3RlbS93aW5kb3cuaD4KLQotX19CRUdJTl9ERUNMUwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgVkVISUNMRV9DQU1FUkFfSEVBREVSX1ZFUlNJT04gICAgICAgICAgMQotI2RlZmluZSBWRUhJQ0xFX0NBTUVSQV9NT0RVTEVfQVBJX1ZFUlNJT05fMV8wICBIQVJEV0FSRV9NT0RVTEVfQVBJX1ZFUlNJT04oMSwgMCkKLSNkZWZpbmUgVkVISUNMRV9DQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzFfMCAgSEFSRFdBUkVfREVWSUNFX0FQSV9WRVJTSU9OXzIoMSwgMCwgVkVISUNMRV9DQU1FUkFfSEVBREVSX1ZFUlNJT04pCi0KLS8qKgotICogVmVoaWNsZSBDYW1lcmEgdG8gcHJvdmlkZSBpbnRlcmZhY2VzIGZvciBjb250cm9sbGluZyBjYW1lcmFzCi0gKi8KLQotLyoqCi0gKiBUaGUgaWQgb2YgdGhpcyBtb2R1bGUKLSAqLwotI2RlZmluZSBWRUhJQ0xFX0NBTUVSQV9IQVJEV0FSRV9NT0RVTEVfSUQgICJ2ZWhpY2xlX2NhbWVyYSIKLQotLyoqCi0gKiAgTmFtZSBvZiB0aGUgdmVoaWNsZSBkZXZpY2UgdG8gb3Blbi4gIEV4dGVuZCB0aGlzIGxpc3QgYXMKLSAqICBtb3JlIGNhbWVyYXMgYXJlIGFkZGVkLiAgRWFjaCBjYW1lcmEgZGVmaW5lZCBpbiB2ZWhpY2xlX2NhbWVyYV90eXBlX3QKLSAqICBzaGFsbCBoYXZlIGEgc3RyaW5nIGRlZmluZWQgZm9yIGl0LgotICovCi0jZGVmaW5lIFZFSElDTEVfQ0FNRVJBX1JWQ19ERVZJQ0UgICAgICAgInZlaGljbGVfY2FtZXJhX3J2Y19kZXZpY2UiCi0KLS8qKgotICogRWFjaCBjYW1lcmEgb24gdGhlIGNhciBzaGFsbCBiZSBlbnVtZXJhdGVkCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0gICAgVkVISUNMRV9DQU1FUkFfUlZDID0gMSwKLX0gdmVoaWNsZV9jYW1lcmFfdHlwZV90OwotCi0vKioKLSAqIERlc2NyaWJlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBjYW1lcmEgZGV2aWNlCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgICB1aW50MzJfdCBvdmVybGF5X29uOwotICAgIHVpbnQzMl90IGNhbWVyYV9vbjsKLX0gdmVoaWNsZV9jYW1lcmFfc3RhdGVfdDsKLQotLyoqCi0gKiBCaXRtYXNrIG9mIGZlYXR1cmVzIHN1cHBvcnRlZCBieSBhIGNhbWVyYSBtb2R1bGUKLSAqLwotZW51bSB7Ci0gICAgVkVISUNMRV9DQU1FUkFfQ09ORklHX0ZMQUdfQU5EUk9JRF9PVkVSTEFZX1NVUFBPUlQgICAgICA9IDB4MSwKLSAgICBWRUhJQ0xFX0NBTUVSQV9DT05GSUdfRkxBR19DQU1FUkFfQ1JPUF9TVVBQT1JUICAgICAgICAgID0gMHgyLAotICAgIFZFSElDTEVfQ0FNRVJBX0NPTkZJR19GTEFHX0NBTUVSQV9QT1NJVElPTklOR19TVVBQT1JUICAgPSAweDQKLX0gdmVoaWNsZV9jYW1lcmFfY29uZmlnX2ZsYWc7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICB1aW50MzJfdCBjYXBhYmlsaXRlc19mbGFnczsKLSAgICB1aW50MzJfdCBjYW1lcmFfd2lkdGg7Ci0gICAgdWludDMyX3QgY2FtZXJhX2hlaWdodDsKLSAgICB1aW50MzJfdCBkaXNwbGF5X3dpZHRoOwotICAgIHVpbnQzMl90IGRpc3BsYXlfaGVpZ2h0OwotfSB2ZWhpY2xlX2NhbWVyYV9jYXBfdDsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqCi0gKiBFdmVyeSBoYXJkd2FyZSBtb2R1bGUgbXVzdCBoYXZlIGEgZGF0YSBzdHJ1Y3R1cmUgbmFtZWQgSEFMX01PRFVMRV9JTkZPX1NZTQotICogYW5kIHRoZSBmaWVsZHMgb2YgdGhpcyBkYXRhIHN0cnVjdHVyZSBtdXN0IGJlZ2luIHdpdGggaHdfbW9kdWxlX3QKLSAqIGZvbGxvd2VkIGJ5IG1vZHVsZSBzcGVjaWZpYyBpbmZvcm1hdGlvbi4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHN0cnVjdCBod19tb2R1bGVfdCBjb21tb247Ci0gICAgLyoqCi0gICAgICogUXVlcmllcyB0aGUgSFcgZm9yIHRoZSBjYW1lcmFzIGluc3RhbGxlZCBvbiB0aGUgdmVoaWNsZQotICAgICAqIEBwYXJhbSBudW1fY2FtZXJhcyAtIG51bWJlciBvZiBjYW1lcmEgZGV2aWNlcyBhdmFpbGFibGUuICBJZgotICAgICAqICAgICAgICAgICAgICAgICAgICAwIGlzIHJldHVybmVkLCBhbiBlcnJvciBoYXMgb2NjdXJyZWQgYW5kCi0gICAgICogICAgICAgICAgICAgICAgICAgIHRoZSByZXR1cm4gcG9pbnRlciBzaGFsbCBiZSBOVUxMLgotICAgICAqIEByZXR1cm4gcG9pbnRlciB0byBhbiBhcnJheSBvZiB2ZWhpY2xlX2NhbWVyYV90eXBlX3QgdG8KLSAgICAgKiAgICAgICAgIGRlbm90ZSB3aGljaCBjYW1lcmFzIGFyZSBpbnN0YWxsZWQuICBUaGlzIHBvaW50ZXIgaXMKLSAgICAgKiAgICAgICAgIG9ubHkgdmFsaWQgd2hpbGUgdGhlIHZlaGljbGUgaGFsIGlzIGxvYWRlZC4gIElmIHRoZQotICAgICAqICAgICAgICAgcG9pbnRlciBpcyBOVUxMLCB0aGVuIGFuIGVycm9yIGhhcyBvY2N1cnJlZCBhbmQKLSAgICAgKiAgICAgICAgIG51bV9jYW1lcmFzIHNoYWxsIGJlIDAuCi0gICAgICovCi0gICAgY29uc3QgdWludDMyX3QgKiAoKmdldF9jYW1lcmFfZGV2aWNlX2xpc3QpKHVpbnQzMl90ICpudW1fY2FtZXJhcyk7Ci19IHZlaGljbGVfY2FtZXJhX21vZHVsZV90OwotCi0KLXR5cGVkZWYgc3RydWN0IHZlaGljbGVfY2FtZXJhX2RldmljZV90IHsKLSAgICBzdHJ1Y3QgaHdfZGV2aWNlX3QgY29tbW9uOwotCi0gICAgY29uc3QgdWludDMyX3QgY2FtZXJhX3R5cGU7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhpcyBjYW1lcmEuCi0gICAgICogQHBhcmFtIGRldmljZSAtIGRldmljZSBoYW5kbGUKLSAgICAgKiBAcGFyYW0gY2FwIC0gcG9pbnRlciB0byBjYXBhYmlsaXRpZXMgZmxhZ3MgYmVpbmcgcmV0dXJuZWQKLSAgICAgKiBAcmV0dXJuIDAgb24gc3VjY2VzcwotICAgICAqICAgICAgICAgIC1FUEVSTSBpZiBkZXZpY2UgaXMgaW52YWxpZCBvciBub3QgaW5pdGlhbGl6ZWQKLSAgICAgKi8KLSAgICBpbnQgKCpnZXRfY2FwYWJpbGl0aWVzKShzdHJ1Y3QgdmVoaWNsZV9jYW1lcmFfZGV2aWNlX3QgKmRldmljZSwgdmVoaWNsZV9jYW1lcmFfY2FwX3QgKmNhcCk7Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNhbWVyYSBjcm9wIHNldHRpbmdzLgotICAgICAqIEBwYXJhbSBkZXZpY2UgLSBkZXZpY2UgaGFuZGxlCi0gICAgICogQHBhcmFtIHJlY3QgLSBjdXJyZW50IGNhbWVyYSBjcm9wIHNldHRpbmdzCi0gICAgICogQHJldHVybiAwIG9uIHN1Y2Nlc3MKLSAgICAgKiAgICAgICAgICAtRVBFUk0gaWYgZGV2aWNlIGlzIG5vdCBpbml0aWFsaXplZAotICAgICAqICAgICAgICAgIC1lcnJubyBvbiBlcnJvcgotICAgICAqLwotICAgIGludCAoKmdldF9jYW1lcmFfY3JvcCkoc3RydWN0IHZlaGljbGVfY2FtZXJhX2RldmljZV90ICpkZXZpY2UsIGFuZHJvaWRfbmF0aXZlX3JlY3RfdCAqcmVjdCk7Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBjYW1lcmEgY3JvcC4KLSAgICAgKiBAcGFyYW0gZGV2aWNlIC0gZGV2aWNlIGhhbmRsZQotICAgICAqIEBwYXJhbSByZWN0IC0gYXJlYSBvZiBjYW1lcmEgaW5wdXQgdG8gY3JvcC4gIE11c3QgZml0IHdpdGhpbgotICAgICAqICAgICAgICAgICAgIGNhbWVyYSB3aWR0aCBhbmQgaGVpZ2h0IGZyb20gY2FtZXJhIGNhcGFiaWxpdGllcy4KLSAgICAgKiBAcmV0dXJuIDAgb24gc3VjY2VzcwotICAgICAqICAgICAgICAgIC1FUEVSTSBpZiBkZXZpY2UgaXMgbm90IGluaXRpYWxpemVkCi0gICAgICogICAgICAgICAgLWVycm5vIG9uIGVycm9yCi0gICAgICovCi0gICAgaW50ICgqc2V0X2NhbWVyYV9jcm9wKShzdHJ1Y3QgdmVoaWNsZV9jYW1lcmFfZGV2aWNlX3QgKmRldmljZSwgY29uc3QgYW5kcm9pZF9uYXRpdmVfcmVjdF90ICpyZWN0KTsKLQotICAgIC8qKgotICAgICAqIEdldHMgcG9zaXRpb24gb2YgdGhlIGNhbWVyYSBvbiB0aGUgZGlzcGxheS4KLSAgICAgKiBAcGFyYW0gZGV2aWNlIC0gZGV2aWNlIGhhbmRsZQotICAgICAqIEBwYXJhbSByZWN0IC0gYXJlYSBvZiBkaXNwbGF5IHRoZSBjYW1lcmEgd2lsbCBhcHBlYXIgd2hlbiBvbgotICAgICAqIEByZXR1cm4gMCBvbiBzdWNjZXNzCi0gICAgICogICAgICAgICAgLUVQRVJNIGlmIGRldmljZSBpcyBub3QgaW5pdGlhbGl6ZWQKLSAgICAgKiAgICAgICAgICAtZXJybm8gb24gZXJyb3IKLSAgICAgKi8KLSAgICBpbnQgKCpnZXRfY2FtZXJhX3Bvc2l0aW9uKShzdHJ1Y3QgdmVoaWNsZV9jYW1lcmFfZGV2aWNlX3QgKmRldmljZSwgYW5kcm9pZF9uYXRpdmVfcmVjdF90ICpyZWN0KTsKLQotICAgIC8qKgotICAgICAqIFNldHMgcG9zaXRpb24gb2YgdGhlIGNhbWVyYSBvbiB0aGUgZGlzcGxheS4KLSAgICAgKiBAcGFyYW0gZGV2aWNlIC0gZGV2aWNlIGhhbmRsZQotICAgICAqIEBwYXJhbSByZWN0IC0gYXJlYSBvZiBkaXNwbGF5IHRoZSBjYW1lcmEgd2lsbCBhcHBlYXIgd2hlbiBvbi4KLSAgICAgKiAgICAgICAgICAgICBNdXN0IGZpdCB3aXRoaW4gZGlzcGxheSB3aWR0aCBhbmQgaGVpZ2h0IGZyb20KLSAgICAgKiAgICAgICAgICAgICBjYW1lcmEgY2FwYWJpbGl0aWVzLgotICAgICAqIEByZXR1cm4gMCBvbiBzdWNjZXNzCi0gICAgICogICAgICAgICAgLUVQRVJNIGlmIGRldmljZSBpcyBub3QgaW5pdGlhbGl6ZWQKLSAgICAgKiAgICAgICAgICAtZXJybm8gb24gZXJyb3IKLSAgICAgKi8KLSAgICBpbnQgKCpzZXRfY2FtZXJhX3Bvc2l0aW9uKShzdHJ1Y3QgdmVoaWNsZV9jYW1lcmFfZGV2aWNlX3QgKmRldmljZSwgY29uc3QgYW5kcm9pZF9uYXRpdmVfcmVjdF90ICpyZWN0KTsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY2FtZXJhIHN0YXRlLgotICAgICAqIEBwYXJhbSBkZXZpY2UgLSBkZXZpY2UgaGFuZGxlCi0gICAgICogQHBhcmFtIHN0YXRlIC0gbGFzdCBzZXR0aW5nIGZvciB0aGUgY2FtZXJhCi0gICAgICogQHJldHVybiAwIG9uIHN1Y2Nlc3MKLSAgICAgKiAgICAgICAgICAtRVBFUk0gaWYgZGV2aWNlIGlzIG5vdCBpbml0aWFsaXplZAotICAgICAqLwotICAgIGludCAoKmdldF9jYW1lcmFfc3RhdGUpKHN0cnVjdCB2ZWhpY2xlX2NhbWVyYV9kZXZpY2VfdCAqZGV2aWNlLCB2ZWhpY2xlX2NhbWVyYV9zdGF0ZV90ICpzdGF0ZSk7Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBjYW1lcmEgc3RhdGUuCi0gICAgICogQHBhcmFtIGRldmljZSAtIGRldmljZSBoYW5kbGUKLSAgICAgKiBAcGFyYW0gc3RhdGUgLSBkZXNpcmVkIHNldHRpbmcgZm9yIHRoZSBjYW1lcmEKLSAgICAgKiBAcmV0dXJuIDAgb24gc3VjY2VzcwotICAgICAqICAgICAgICAgIC1FUEVSTSBpZiBkZXZpY2UgaXMgbm90IGluaXRpYWxpemVkCi0gICAgICogICAgICAgICAgLWVycm5vIG9uIGVycm9yCi0gICAgICovCi0gICAgaW50ICgqc2V0X2NhbWVyYV9zdGF0ZSkoc3RydWN0IHZlaGljbGVfY2FtZXJhX2RldmljZV90ICpkZXZpY2UsIGNvbnN0IHZlaGljbGVfY2FtZXJhX3N0YXRlX3QgKnN0YXRlKTsKLX0gdmVoaWNsZV9jYW1lcmFfZGV2aWNlX3Q7Ci0KLV9fRU5EX0RFQ0xTCi0KLSNlbmRpZiAgLy8gQU5EUk9JRF9WRUhJQ0xFX0NBTUVSQV9JTlRFUkZBQ0VfSApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9SRUFETUUuYW5kcm9pZCBiL21vZHVsZXMvUkVBRE1FLmFuZHJvaWQKaW5kZXggNTdhYmI3Mi4uN2ZmYzBmNCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9SRUFETUUuYW5kcm9pZAorKysgYi9tb2R1bGVzL1JFQURNRS5hbmRyb2lkCkBAIC00LDEzICs0LDEzIEBACiBsaWJoYXJkd2FyZS5zbyBldmVudHVhbGx5IHNob3VsZCBjb250YWluICpqdXN0KiB0aGUgSEFMIGh1YgogKGhhcmR3YXJlLmMpLCBldmVyeXRoaW5nIGluIGl0IHNob3VsZCBiZSByZXdyaXR0ZW4gYXMgbW9kdWxlcy4KIAotTW9kdWxlcyBhcmUgLnNvIGluIC9zeXN0ZW0vbGlicy9ody8gYW5kIGhhdmUgYSB3ZWxsIGRlZmluZWQgbmFtaW5nCitNb2R1bGVzIGFyZSAuc28gaW4gL3ZlbmRvci9saWIvaHcvIGFuZCBoYXZlIGEgd2VsbCBkZWZpbmVkIG5hbWluZwogY29udmVudGlvbjoKIAotICAgIC9zeXN0ZW0vbGlicy9ody88Kl9IQVJEV0FSRV9NT0RVTEVfSUQ+Ljxyby5wcm9kdWN0LmJvYXJkPi5zbwotICAgIC9zeXN0ZW0vbGlicy9ody88Kl9IQVJEV0FSRV9NT0RVTEVfSUQ+Ljxyby5ib2FyZC5wbGF0Zm9ybT4uc28KLSAgICAvc3lzdGVtL2xpYnMvaHcvPCpfSEFSRFdBUkVfTU9EVUxFX0lEPi48cm8uYXJjaD4uc28KLSAgICAvc3lzdGVtL2xpYnMvaHcvPCpfSEFSRFdBUkVfTU9EVUxFX0lEPi5kZWZhdWx0LnNvCisgICAgL3ZlbmRvci9saWIvaHcvPCpfSEFSRFdBUkVfTU9EVUxFX0lEPi48cm8ucHJvZHVjdC5ib2FyZD4uc28KKyAgICAvdmVuZG9yL2xpYi9ody88Kl9IQVJEV0FSRV9NT0RVTEVfSUQ+Ljxyby5ib2FyZC5wbGF0Zm9ybT4uc28KKyAgICAvdmVuZG9yL2xpYi9ody88Kl9IQVJEV0FSRV9NT0RVTEVfSUQ+Ljxyby5hcmNoPi5zbworICAgIC92ZW5kb3IvbGliL2h3LzwqX0hBUkRXQVJFX01PRFVMRV9JRD4uZGVmYXVsdC5zbwogCiBUaGV5IGFsc28gaGF2ZSBhIHdlbGwgZGVmaW5lZCBpbnRlcmZhY2Ugd2hpY2ggbGl2ZXMgaW4gaW5jbHVkZS9oYXJkd2FyZS8uCiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvYXVkaW8vQW5kcm9pZC5icCBiL21vZHVsZXMvYXVkaW8vQW5kcm9pZC5icAppbmRleCA4MGNhYjE5Li44NGRhZWFkIDEwMDY0NAotLS0gYS9tb2R1bGVzL2F1ZGlvL0FuZHJvaWQuYnAKKysrIGIvbW9kdWxlcy9hdWRpby9BbmRyb2lkLmJwCkBAIC0yMSwxMSArMjEsMTIgQEAKIGNjX2xpYnJhcnlfc2hhcmVkIHsKICAgICBuYW1lOiAiYXVkaW8ucHJpbWFyeS5kZWZhdWx0IiwKICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgc3JjczogWyJhdWRpb19ody5jIl0sCiAgICAgc2hhcmVkX2xpYnM6IFsKICAgICAgICAgImxpYmxvZyIsCiAgICAgXSwKLSAgICBjZmxhZ3M6IFsiLVduby11bnVzZWQtcGFyYW1ldGVyIl0sCisgICAgY2ZsYWdzOiBbIi1XYWxsIiwgIi1XZXJyb3IiLCAiLVduby11bnVzZWQtcGFyYW1ldGVyIl0sCiB9CiAKIC8vIFRoZSBzdHViIGF1ZGlvIEhBTCBtb2R1bGUsIGlkZW50aWNhbCB0byB0aGUgZGVmYXVsdCBhdWRpbyBoYWwsIGJ1dCB3aXRoCkBAIC0zNywxMSArMzgsMTIgQEAKIGNjX2xpYnJhcnlfc2hhcmVkIHsKICAgICBuYW1lOiAiYXVkaW8uc3R1Yi5kZWZhdWx0IiwKICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgc3JjczogWyJhdWRpb19ody5jIl0sCiAgICAgc2hhcmVkX2xpYnM6IFsKICAgICAgICAgImxpYmxvZyIsCiAgICAgXSwKLSAgICBjZmxhZ3M6IFsiLVduby11bnVzZWQtcGFyYW1ldGVyIl0sCisgICAgY2ZsYWdzOiBbIi1XYWxsIiwgIi1XZXJyb3IiLCAiLVduby11bnVzZWQtcGFyYW1ldGVyIl0sCiB9CiAKIC8vIFRoZSBzdHViIGF1ZGlvIHBvbGljeSBIQUwgbW9kdWxlIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBza2VsZXRvbiBmb3IKQEAgLTQ5LDkgKzUxLDEwIEBACiBjY19saWJyYXJ5X3NoYXJlZCB7CiAgICAgbmFtZTogImF1ZGlvX3BvbGljeS5zdHViIiwKICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgc3JjczogWyJhdWRpb19wb2xpY3kuYyJdLAogICAgIHNoYXJlZF9saWJzOiBbCiAgICAgICAgICJsaWJsb2ciLAogICAgIF0sCi0gICAgY2ZsYWdzOiBbIi1Xbm8tdW51c2VkLXBhcmFtZXRlciJdLAorICAgIGNmbGFnczogWyItV2FsbCIsICItV2Vycm9yIiwgIi1Xbm8tdW51c2VkLXBhcmFtZXRlciJdLAogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hdWRpby9hdWRpb19ody5jIGIvbW9kdWxlcy9hdWRpby9hdWRpb19ody5jCmluZGV4IDNjMjg4Y2EuLjhmNzNmMTEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYXVkaW8vYXVkaW9faHcuYworKysgYi9tb2R1bGVzL2F1ZGlvL2F1ZGlvX2h3LmMKQEAgLTMwMCwxMSArMzAwLDkgQEAKIHsKICAgICBBTE9HVigiYWRldl9vcGVuX291dHB1dF9zdHJlYW0uLi4iKTsKIAotICAgIHN0cnVjdCBzdHViX2F1ZGlvX2RldmljZSAqbGFkZXYgPSAoc3RydWN0IHN0dWJfYXVkaW9fZGV2aWNlICopZGV2OwotICAgIHN0cnVjdCBzdHViX3N0cmVhbV9vdXQgKm91dDsKLSAgICBpbnQgcmV0OwotCi0gICAgb3V0ID0gKHN0cnVjdCBzdHViX3N0cmVhbV9vdXQgKiljYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHViX3N0cmVhbV9vdXQpKTsKKyAgICAqc3RyZWFtX291dCA9IE5VTEw7CisgICAgc3RydWN0IHN0dWJfc3RyZWFtX291dCAqb3V0ID0KKyAgICAgICAgICAgIChzdHJ1Y3Qgc3R1Yl9zdHJlYW1fb3V0ICopY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3R1Yl9zdHJlYW1fb3V0KSk7CiAgICAgaWYgKCFvdXQpCiAgICAgICAgIHJldHVybiAtRU5PTUVNOwogCkBAIC0zMjgsMTEgKzMyNiw2IEBACiAKICAgICAqc3RyZWFtX291dCA9ICZvdXQtPnN0cmVhbTsKICAgICByZXR1cm4gMDsKLQotZXJyX29wZW46Ci0gICAgZnJlZShvdXQpOwotICAgICpzdHJlYW1fb3V0ID0gTlVMTDsKLSAgICByZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBhZGV2X2Nsb3NlX291dHB1dF9zdHJlYW0oc3RydWN0IGF1ZGlvX2h3X2RldmljZSAqZGV2LApAQCAtNDI3LDExICs0MjAsOCBAQAogewogICAgIEFMT0dWKCJhZGV2X29wZW5faW5wdXRfc3RyZWFtLi4uIik7CiAKLSAgICBzdHJ1Y3Qgc3R1Yl9hdWRpb19kZXZpY2UgKmxhZGV2ID0gKHN0cnVjdCBzdHViX2F1ZGlvX2RldmljZSAqKWRldjsKLSAgICBzdHJ1Y3Qgc3R1Yl9zdHJlYW1faW4gKmluOwotICAgIGludCByZXQ7Ci0KLSAgICBpbiA9IChzdHJ1Y3Qgc3R1Yl9zdHJlYW1faW4gKiljYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHViX3N0cmVhbV9pbikpOworICAgICpzdHJlYW1faW4gPSBOVUxMOworICAgIHN0cnVjdCBzdHViX3N0cmVhbV9pbiAqaW4gPSAoc3RydWN0IHN0dWJfc3RyZWFtX2luICopY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3R1Yl9zdHJlYW1faW4pKTsKICAgICBpZiAoIWluKQogICAgICAgICByZXR1cm4gLUVOT01FTTsKIApAQCAtNDUzLDExICs0NDMsNiBAQAogCiAgICAgKnN0cmVhbV9pbiA9ICZpbi0+c3RyZWFtOwogICAgIHJldHVybiAwOwotCi1lcnJfb3BlbjoKLSAgICBmcmVlKGluKTsKLSAgICAqc3RyZWFtX2luID0gTlVMTDsKLSAgICByZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBhZGV2X2Nsb3NlX2lucHV0X3N0cmVhbShzdHJ1Y3QgYXVkaW9faHdfZGV2aWNlICpkZXYsCkBAIC00ODYsNyArNDcxLDYgQEAKICAgICBBTE9HVigiYWRldl9vcGVuOiAlcyIsIG5hbWUpOwogCiAgICAgc3RydWN0IHN0dWJfYXVkaW9fZGV2aWNlICphZGV2OwotICAgIGludCByZXQ7CiAKICAgICBpZiAoc3RyY21wKG5hbWUsIEFVRElPX0hBUkRXQVJFX0lOVEVSRkFDRSkgIT0gMCkKICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2F1ZGlvL2F1ZGlvX3BvbGljeS5jIGIvbW9kdWxlcy9hdWRpby9hdWRpb19wb2xpY3kuYwppbmRleCA5MzM1NjU0Li40ZjljZDVhIDEwMDY0NAotLS0gYS9tb2R1bGVzL2F1ZGlvL2F1ZGlvX3BvbGljeS5jCisrKyBiL21vZHVsZXMvYXVkaW8vYXVkaW9fcG9saWN5LmMKQEAgLTI0MSw5ICsyNDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVkaW9fcG9saWN5ICoqYXApCiB7Ci0gICAgc3RydWN0IGRlZmF1bHRfYXBfZGV2aWNlICpkZXY7CiAgICAgc3RydWN0IGRlZmF1bHRfYXVkaW9fcG9saWN5ICpkYXA7Ci0gICAgaW50IHJldDsKIAogICAgICphcCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvYXVkaW9fcmVtb3RlX3N1Ym1peC9BbmRyb2lkLm1rIGIvbW9kdWxlcy9hdWRpb19yZW1vdGVfc3VibWl4L0FuZHJvaWQubWsKaW5kZXggOTBkYTM5Ni4uYzllODUxZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hdWRpb19yZW1vdGVfc3VibWl4L0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy9hdWRpb19yZW1vdGVfc3VibWl4L0FuZHJvaWQubWsKQEAgLTE4LDExICsxOCwxMyBAQAogCiBMT0NBTF9NT0RVTEUgOj0gYXVkaW8ucl9zdWJtaXguZGVmYXVsdAogTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCiBMT0NBTF9TUkNfRklMRVMgOj0gXAogCWF1ZGlvX2h3LmNwcAogTE9DQUxfQ19JTkNMVURFUyArPSBcCiAJZnJhbWV3b3Jrcy9hdi9pbmNsdWRlLyBcCi0JZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS8KKwlmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlLyBcCisJJChjYWxsIGluY2x1ZGUtcGF0aC1mb3IsIGF1ZGlvLXV0aWxzKQogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJsb2cgbGliY3V0aWxzIGxpYnV0aWxzIGxpYm5iYWlvCiBMT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYm1lZGlhX2hlbHBlcgogTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhLzNfMC9BbmRyb2lkLm1rIGIvbW9kdWxlcy9jYW1lcmEvM18wL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU2OGVkNQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvY2FtZXJhLzNfMC9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsNDUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK0xPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX01PRFVMRSA6PSBjYW1lcmEuZGVmYXVsdAorTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKKworTE9DQUxfQ19JTkNMVURFUyArPSBcCisJc3lzdGVtL2NvcmUvaW5jbHVkZSBcCisJc3lzdGVtL21lZGlhL2NhbWVyYS9pbmNsdWRlIFwKKworTE9DQUxfU1JDX0ZJTEVTIDo9IFwKKwlDYW1lcmFIQUwuY3BwIFwKKwlDYW1lcmEuY3BwIFwKKwlFeGFtcGxlQ2FtZXJhLmNwcCBcCisJTWV0YWRhdGEuY3BwIFwKKwlTdHJlYW0uY3BwIFwKKwlWZW5kb3JUYWdzLmNwcCBcCisKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAorCWxpYmNhbWVyYV9tZXRhZGF0YSBcCisJbGliY3V0aWxzIFwKKwlsaWJsb2cgXAorCWxpYnN5bmMgXAorCWxpYnV0aWxzIFwKKworTE9DQUxfQ0ZMQUdTICs9IC1XYWxsIC1XZXh0cmEgLWZ2aXNpYmlsaXR5PWhpZGRlbgorCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NhbWVyYS9DYW1lcmEuY3BwIGIvbW9kdWxlcy9jYW1lcmEvM18wL0NhbWVyYS5jcHAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvY2FtZXJhL0NhbWVyYS5jcHAKcmVuYW1lIHRvIG1vZHVsZXMvY2FtZXJhLzNfMC9DYW1lcmEuY3BwCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NhbWVyYS9DYW1lcmEuaCBiL21vZHVsZXMvY2FtZXJhLzNfMC9DYW1lcmEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9jYW1lcmEvQ2FtZXJhLmgKcmVuYW1lIHRvIG1vZHVsZXMvY2FtZXJhLzNfMC9DYW1lcmEuaApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jYW1lcmEvQ2FtZXJhSEFMLmNwcCBiL21vZHVsZXMvY2FtZXJhLzNfMC9DYW1lcmFIQUwuY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9DYW1lcmFIQUwuY3BwCnJlbmFtZSB0byBtb2R1bGVzL2NhbWVyYS8zXzAvQ2FtZXJhSEFMLmNwcApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jYW1lcmEvQ2FtZXJhSEFMLmggYi9tb2R1bGVzL2NhbWVyYS8zXzAvQ2FtZXJhSEFMLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvY2FtZXJhL0NhbWVyYUhBTC5oCnJlbmFtZSB0byBtb2R1bGVzL2NhbWVyYS8zXzAvQ2FtZXJhSEFMLmgKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhL0V4YW1wbGVDYW1lcmEuY3BwIGIvbW9kdWxlcy9jYW1lcmEvM18wL0V4YW1wbGVDYW1lcmEuY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9FeGFtcGxlQ2FtZXJhLmNwcApyZW5hbWUgdG8gbW9kdWxlcy9jYW1lcmEvM18wL0V4YW1wbGVDYW1lcmEuY3BwCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NhbWVyYS9FeGFtcGxlQ2FtZXJhLmggYi9tb2R1bGVzL2NhbWVyYS8zXzAvRXhhbXBsZUNhbWVyYS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9FeGFtcGxlQ2FtZXJhLmgKcmVuYW1lIHRvIG1vZHVsZXMvY2FtZXJhLzNfMC9FeGFtcGxlQ2FtZXJhLmgKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhL01ldGFkYXRhLmNwcCBiL21vZHVsZXMvY2FtZXJhLzNfMC9NZXRhZGF0YS5jcHAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvY2FtZXJhL01ldGFkYXRhLmNwcApyZW5hbWUgdG8gbW9kdWxlcy9jYW1lcmEvM18wL01ldGFkYXRhLmNwcApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jYW1lcmEvTWV0YWRhdGEuaCBiL21vZHVsZXMvY2FtZXJhLzNfMC9NZXRhZGF0YS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9NZXRhZGF0YS5oCnJlbmFtZSB0byBtb2R1bGVzL2NhbWVyYS8zXzAvTWV0YWRhdGEuaApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jYW1lcmEvU3RyZWFtLmNwcCBiL21vZHVsZXMvY2FtZXJhLzNfMC9TdHJlYW0uY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9TdHJlYW0uY3BwCnJlbmFtZSB0byBtb2R1bGVzL2NhbWVyYS8zXzAvU3RyZWFtLmNwcApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jYW1lcmEvU3RyZWFtLmggYi9tb2R1bGVzL2NhbWVyYS8zXzAvU3RyZWFtLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvY2FtZXJhL1N0cmVhbS5oCnJlbmFtZSB0byBtb2R1bGVzL2NhbWVyYS8zXzAvU3RyZWFtLmgKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhL1ZlbmRvclRhZ3MuY3BwIGIvbW9kdWxlcy9jYW1lcmEvM18wL1ZlbmRvclRhZ3MuY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9WZW5kb3JUYWdzLmNwcApyZW5hbWUgdG8gbW9kdWxlcy9jYW1lcmEvM18wL1ZlbmRvclRhZ3MuY3BwCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NhbWVyYS9WZW5kb3JUYWdzLmggYi9tb2R1bGVzL2NhbWVyYS8zXzAvVmVuZG9yVGFncy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9WZW5kb3JUYWdzLmgKcmVuYW1lIHRvIG1vZHVsZXMvY2FtZXJhLzNfMC9WZW5kb3JUYWdzLmgKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhL0FuZHJvaWQubWsgYi9tb2R1bGVzL2NhbWVyYS9BbmRyb2lkLm1rCmluZGV4IGFlNjhlZDUuLjcxMzg4YWEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvY2FtZXJhL0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy9jYW1lcmEvQW5kcm9pZC5tawpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMgQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICMKICMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTEyLDM0ICsxMiw0IEBACiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKLUxPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKLQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBjYW1lcmEuZGVmYXVsdAotTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKLQotTE9DQUxfQ19JTkNMVURFUyArPSBcCi0Jc3lzdGVtL2NvcmUvaW5jbHVkZSBcCi0Jc3lzdGVtL21lZGlhL2NhbWVyYS9pbmNsdWRlIFwKLQotTE9DQUxfU1JDX0ZJTEVTIDo9IFwKLQlDYW1lcmFIQUwuY3BwIFwKLQlDYW1lcmEuY3BwIFwKLQlFeGFtcGxlQ2FtZXJhLmNwcCBcCi0JTWV0YWRhdGEuY3BwIFwKLQlTdHJlYW0uY3BwIFwKLQlWZW5kb3JUYWdzLmNwcCBcCi0KLUxPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAotCWxpYmNhbWVyYV9tZXRhZGF0YSBcCi0JbGliY3V0aWxzIFwKLQlsaWJsb2cgXAotCWxpYnN5bmMgXAotCWxpYnV0aWxzIFwKLQotTE9DQUxfQ0ZMQUdTICs9IC1XYWxsIC1XZXh0cmEgLWZ2aXNpYmlsaXR5PWhpZGRlbgotCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAotCi1pbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCitpbmNsdWRlICQoY2FsbCBhbGwtc3ViZGlyLW1ha2VmaWxlcykKZGlmZiAtLWdpdCBhL21vZHVsZXMvY29uc3VtZXJpci9BbmRyb2lkLmJwIGIvbW9kdWxlcy9jb25zdW1lcmlyL0FuZHJvaWQuYnAKaW5kZXggNGVlNWZiMS4uYjEzOTQ5MiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9jb25zdW1lcmlyL0FuZHJvaWQuYnAKKysrIGIvbW9kdWxlcy9jb25zdW1lcmlyL0FuZHJvaWQuYnAKQEAgLTE1LDYgKzE1LDcgQEAKIGNjX2xpYnJhcnlfc2hhcmVkIHsKICAgICBuYW1lOiAiY29uc3VtZXJpci5kZWZhdWx0IiwKICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgc3JjczogWyJjb25zdW1lcmlyLmMiXSwKICAgICBzaGFyZWRfbGliczogWwogICAgICAgICAibGlibG9nIiwKZGlmZiAtLWdpdCBhL21vZHVsZXMvZmluZ2VycHJpbnQvQW5kcm9pZC5icCBiL21vZHVsZXMvZmluZ2VycHJpbnQvQW5kcm9pZC5icAppbmRleCBhNjZmOWY5Li5iYTc0OWU0IDEwMDY0NAotLS0gYS9tb2R1bGVzL2ZpbmdlcnByaW50L0FuZHJvaWQuYnAKKysrIGIvbW9kdWxlcy9maW5nZXJwcmludC9BbmRyb2lkLmJwCkBAIC0xNSw2ICsxNSw3IEBACiBjY19saWJyYXJ5X3NoYXJlZCB7CiAgICAgbmFtZTogImZpbmdlcnByaW50LmRlZmF1bHQiLAogICAgIHJlbGF0aXZlX2luc3RhbGxfcGF0aDogImh3IiwKKyAgICBwcm9wcmlldGFyeTogdHJ1ZSwKICAgICBzcmNzOiBbImZpbmdlcnByaW50LmMiXSwKICAgICBzaGFyZWRfbGliczogWyJsaWJsb2ciXSwKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvZ3JhbGxvYy9BbmRyb2lkLm1rIGIvbW9kdWxlcy9ncmFsbG9jL0FuZHJvaWQubWsKaW5kZXggNmI2ZTYwZC4uZmY1ODA4ZCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9ncmFsbG9jL0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy9ncmFsbG9jL0FuZHJvaWQubWsKQEAgLTIwLDYgKzIwLDcgQEAKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCiBMT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBodworTE9DQUxfUFJPUFJJRVRBUllfTU9EVUxFIDo9IHRydWUKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGlibG9nIGxpYmN1dGlscwogCiBMT0NBTF9TUkNfRklMRVMgOj0gCVwKZGlmZiAtLWdpdCBhL21vZHVsZXMvZ3JhbGxvYy9ncmFsbG9jLmNwcCBiL21vZHVsZXMvZ3JhbGxvYy9ncmFsbG9jLmNwcAppbmRleCBmOGQzYzc4Li4wN2JiZmJhIDEwMDY0NAotLS0gYS9tb2R1bGVzL2dyYWxsb2MvZ3JhbGxvYy5jcHAKKysrIGIvbW9kdWxlcy9ncmFsbG9jL2dyYWxsb2MuY3BwCkBAIC0yMDksNiArMjA5LDkgQEAKIAogICAgIGludCBieXRlc1BlclBpeGVsID0gMDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEhBTF9QSVhFTF9GT1JNQVRfUkdCQV9GUDE2OgorICAgICAgICAgICAgYnl0ZXNQZXJQaXhlbCA9IDg7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIQUxfUElYRUxfRk9STUFUX1JHQkFfODg4ODoKICAgICAgICAgY2FzZSBIQUxfUElYRUxfRk9STUFUX1JHQlhfODg4ODoKICAgICAgICAgY2FzZSBIQUxfUElYRUxfRk9STUFUX0JHUkFfODg4ODoKZGlmZiAtLWdpdCBhL21vZHVsZXMvaHdjb21wb3Nlci9BbmRyb2lkLm1rIGIvbW9kdWxlcy9od2NvbXBvc2VyL0FuZHJvaWQubWsKaW5kZXggMzVjMGZhZS4uZGEwZjZkYiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9od2NvbXBvc2VyL0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy9od2NvbXBvc2VyL0FuZHJvaWQubWsKQEAgLTIwLDYgKzIwLDcgQEAKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCiBMT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBodworTE9DQUxfUFJPUFJJRVRBUllfTU9EVUxFIDo9IHRydWUKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGlibG9nIGxpYkVHTAogTE9DQUxfU1JDX0ZJTEVTIDo9IGh3Y29tcG9zZXIuY3BwCiBMT0NBTF9NT0RVTEUgOj0gaHdjb21wb3Nlci5kZWZhdWx0CmRpZmYgLS1naXQgYS9tb2R1bGVzL2h3Y29tcG9zZXIvaHdjb21wb3Nlci5jcHAgYi9tb2R1bGVzL2h3Y29tcG9zZXIvaHdjb21wb3Nlci5jcHAKaW5kZXggMjk3Y2FmZC4uZmQ0ZTkwZCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9od2NvbXBvc2VyL2h3Y29tcG9zZXIuY3BwCisrKyBiL21vZHVsZXMvaHdjb21wb3Nlci9od2NvbXBvc2VyLmNwcApAQCAtMzcsMTggKzM3LDE4IEBACiAgICAgICAgIHN0cnVjdCBod19kZXZpY2VfdCoqIGRldmljZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgaHdfbW9kdWxlX21ldGhvZHNfdCBod2NfbW9kdWxlX21ldGhvZHMgPSB7Ci0gICAgb3BlbjogaHdjX2RldmljZV9vcGVuCisgICAgLm9wZW4gPSBod2NfZGV2aWNlX29wZW4KIH07CiAKIGh3Y19tb2R1bGVfdCBIQUxfTU9EVUxFX0lORk9fU1lNID0gewotICAgIGNvbW1vbjogewotICAgICAgICB0YWc6IEhBUkRXQVJFX01PRFVMRV9UQUcsCi0gICAgICAgIHZlcnNpb25fbWFqb3I6IDEsCi0gICAgICAgIHZlcnNpb25fbWlub3I6IDAsCi0gICAgICAgIGlkOiBIV0NfSEFSRFdBUkVfTU9EVUxFX0lELAotICAgICAgICBuYW1lOiAiU2FtcGxlIGh3Y29tcG9zZXIgbW9kdWxlIiwKLSAgICAgICAgYXV0aG9yOiAiVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCIsCi0gICAgICAgIG1ldGhvZHM6ICZod2NfbW9kdWxlX21ldGhvZHMsCisgICAgLmNvbW1vbiA9IHsKKyAgICAgICAgLnRhZyA9IEhBUkRXQVJFX01PRFVMRV9UQUcsCisgICAgICAgIC52ZXJzaW9uX21ham9yID0gMSwKKyAgICAgICAgLnZlcnNpb25fbWlub3IgPSAwLAorICAgICAgICAuaWQgPSBIV0NfSEFSRFdBUkVfTU9EVUxFX0lELAorICAgICAgICAubmFtZSA9ICJTYW1wbGUgaHdjb21wb3NlciBtb2R1bGUiLAorICAgICAgICAuYXV0aG9yID0gIlRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QiLAorICAgICAgICAubWV0aG9kcyA9ICZod2NfbW9kdWxlX21ldGhvZHMsCiAgICAgfQogfTsKIApAQCAtNjcsOCArNjcsOCBAQAogICAgICAgICAgICAgbC0+ZGlzcGxheUZyYW1lLmJvdHRvbSk7CiB9CiAKLXN0YXRpYyBpbnQgaHdjX3ByZXBhcmUoaHdjX2NvbXBvc2VyX2RldmljZV8xX3QgKmRldiwKLSAgICAgICAgc2l6ZV90IG51bURpc3BsYXlzLCBod2NfZGlzcGxheV9jb250ZW50c18xX3QqKiBkaXNwbGF5cykgeworc3RhdGljIGludCBod2NfcHJlcGFyZShod2NfY29tcG9zZXJfZGV2aWNlXzFfdCAqIC8qZGV2Ki8sCisgICAgICAgIHNpemVfdCAvKm51bURpc3BsYXlzKi8sIGh3Y19kaXNwbGF5X2NvbnRlbnRzXzFfdCoqIGRpc3BsYXlzKSB7CiAgICAgaWYgKGRpc3BsYXlzICYmIChkaXNwbGF5c1swXS0+ZmxhZ3MgJiBIV0NfR0VPTUVUUllfQ0hBTkdFRCkpIHsKICAgICAgICAgZm9yIChzaXplX3QgaT0wIDsgaTxkaXNwbGF5c1swXS0+bnVtSHdMYXllcnMgOyBpKyspIHsKICAgICAgICAgICAgIC8vZHVtcF9sYXllcigmbGlzdC0+aHdMYXllcnNbaV0pOwpAQCAtNzgsMTYgKzc4LDE2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaHdjX3NldChod2NfY29tcG9zZXJfZGV2aWNlXzFfdCAqZGV2LAotICAgICAgICBzaXplX3QgbnVtRGlzcGxheXMsIGh3Y19kaXNwbGF5X2NvbnRlbnRzXzFfdCoqIGRpc3BsYXlzKQorc3RhdGljIGludCBod2Nfc2V0KGh3Y19jb21wb3Nlcl9kZXZpY2VfMV90ICogLypkZXYqLywKKyAgICAgICAgc2l6ZV90IC8qbnVtRGlzcGxheXMqLywgaHdjX2Rpc3BsYXlfY29udGVudHNfMV90KiogZGlzcGxheXMpCiB7CiAgICAgLy9mb3IgKHNpemVfdCBpPTAgOyBpPGxpc3QtPm51bUh3TGF5ZXJzIDsgaSsrKSB7CiAgICAgLy8gICAgZHVtcF9sYXllcigmbGlzdC0+aHdMYXllcnNbaV0pOwogICAgIC8vfQogCi0gICAgRUdMQm9vbGVhbiBzdWNlc3MgPSBlZ2xTd2FwQnVmZmVycygoRUdMRGlzcGxheSlkaXNwbGF5c1swXS0+ZHB5LAorICAgIEVHTEJvb2xlYW4gc3VjY2VzcyA9IGVnbFN3YXBCdWZmZXJzKChFR0xEaXNwbGF5KWRpc3BsYXlzWzBdLT5kcHksCiAgICAgICAgICAgICAoRUdMU3VyZmFjZSlkaXNwbGF5c1swXS0+c3VyKTsKLSAgICBpZiAoIXN1Y2VzcykgeworICAgIGlmICghc3VjY2VzcykgewogICAgICAgICByZXR1cm4gSFdDX0VHTF9FUlJPUjsKICAgICB9CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2lucHV0L2V2ZGV2L0FuZHJvaWQubWsgYi9tb2R1bGVzL2lucHV0L2V2ZGV2L0FuZHJvaWQubWsKaW5kZXggOWE1ZDA5Mi4uYmU0ZGI2YiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbnB1dC9ldmRldi9BbmRyb2lkLm1rCisrKyBiL21vZHVsZXMvaW5wdXQvZXZkZXYvQW5kcm9pZC5tawpAQCAtNDUsNiArNDUsNyBAQAogCiBMT0NBTF9NT0RVTEUgOj0gaW5wdXQuZXZkZXYuZGVmYXVsdAogTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCiAKIExPQ0FMX1NSQ19GSUxFUyA6PSBcCiAgICAgRXZkZXZNb2R1bGUuY3BwCmRpZmYgLS1naXQgYS9tb2R1bGVzL2xvY2FsX3RpbWUvQW5kcm9pZC5icCBiL21vZHVsZXMvbG9jYWxfdGltZS9BbmRyb2lkLmJwCmluZGV4IGRmMzIzMjUuLjY0M2FmYTUgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvbG9jYWxfdGltZS9BbmRyb2lkLmJwCisrKyBiL21vZHVsZXMvbG9jYWxfdGltZS9BbmRyb2lkLmJwCkBAIC0yNCw2ICsyNCw3IEBACiBjY19saWJyYXJ5X3NoYXJlZCB7CiAgICAgbmFtZTogImxvY2FsX3RpbWUuZGVmYXVsdCIsCiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAiaHciLAorICAgIHByb3ByaWV0YXJ5OiB0cnVlLAogICAgIHNyY3M6IFsibG9jYWxfdGltZV9ody5jIl0sCiAgICAgc2hhcmVkX2xpYnM6IFsKICAgICAgICAgImxpYmxvZyIsCmRpZmYgLS1naXQgYS9tb2R1bGVzL2xvY2FsX3RpbWUvbG9jYWxfdGltZV9ody5jIGIvbW9kdWxlcy9sb2NhbF90aW1lL2xvY2FsX3RpbWVfaHcuYwppbmRleCA0YjIxNjU2Li5iMzhkOGE1IDEwMDY0NAotLS0gYS9tb2R1bGVzL2xvY2FsX3RpbWUvbG9jYWxfdGltZV9ody5jCisrKyBiL21vZHVsZXMvbG9jYWxfdGltZS9sb2NhbF90aW1lX2h3LmMKQEAgLTI4LDYgKzI4LDkgQEAKICNpbmNsdWRlIDxoYXJkd2FyZS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGhhcmR3YXJlL2xvY2FsX3RpbWVfaGFsLmg+CiAKKy8vIFdlIG9ubHkgc3VwcG9ydCBnY2MgYW5kIGNsYW5nLCBib3RoIG9mIHdoaWNoIHN1cHBvcnQgdGhpcyBhdHRyaWJ1dGUuCisjZGVmaW5lIFVOVVNFRF9BUkdVTUVOVCBfX2F0dHJpYnV0ZSgodW51c2VkKSkKKwogc3RydWN0IHN0dWJfbG9jYWxfdGltZV9kZXZpY2UgewogICAgIHN0cnVjdCBsb2NhbF90aW1lX2h3X2RldmljZSBkZXZpY2U7CiB9OwpAQCAtNTEsNyArNTQsOCBAQAogICAgIHJldHVybiAoaW50NjRfdClub3c7CiB9CiAKLXN0YXRpYyB1aW50NjRfdCBsdGRldl9nZXRfbG9jYWxfZnJlcShzdHJ1Y3QgbG9jYWxfdGltZV9od19kZXZpY2UqIGRldikKK3N0YXRpYyB1aW50NjRfdCBsdGRldl9nZXRfbG9jYWxfZnJlcSgKKyAgICAgICAgc3RydWN0IGxvY2FsX3RpbWVfaHdfZGV2aWNlKiBkZXYgVU5VU0VEX0FSR1VNRU5UKQogewogICAgIC8vIEZvciBiZXR0ZXIgb3Igd29yc2UsIGxpbnV4IGNsb2NrX2dldHRpbWUgcm91dGluZXMgbm9ybWFsaXplIGFsbCBjbG9jawogICAgIC8vIGZyZXF1ZW5jaWVzIHRvIDFHSHoKZGlmZiAtLWdpdCBhL21vZHVsZXMvbmZjLW5jaS9BbmRyb2lkLmJwIGIvbW9kdWxlcy9uZmMtbmNpL0FuZHJvaWQuYnAKaW5kZXggZmM3Mzc2MS4uOTBkMmEyOCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9uZmMtbmNpL0FuZHJvaWQuYnAKKysrIGIvbW9kdWxlcy9uZmMtbmNpL0FuZHJvaWQuYnAKQEAgLTE1LDYgKzE1LDcgQEAKIGNjX2xpYnJhcnlfc2hhcmVkIHsKICAgICBuYW1lOiAibmZjX25jaS5kZWZhdWx0IiwKICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgc3JjczogWyJuZmNfbmNpX2V4YW1wbGUuYyJdLAogICAgIHNoYXJlZF9saWJzOiBbCiAgICAgICAgICJsaWJsb2ciLApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9uZmMtbmNpL25mY19uY2lfZXhhbXBsZS5jIGIvbW9kdWxlcy9uZmMtbmNpL25mY19uY2lfZXhhbXBsZS5jCmluZGV4IGNkZmQ3ZDcuLmYzZjYwZjYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvbmZjLW5jaS9uZmNfbmNpX2V4YW1wbGUuYworKysgYi9tb2R1bGVzL25mYy1uY2kvbmZjX25jaV9leGFtcGxlLmMKQEAgLTIzLDQ0ICsyMyw2MSBAQAogI2luY2x1ZGUgPGhhcmR3YXJlL25mYy5oPgogCiAvKgorICogV2Ugd2FudCB0byBzaWxlbmNlIHRoZSAidW51c2VkIGFyZ3VtZW50IiB0aGF0IGdjYyBhbmQgY2xhbmcgZ2l2ZS4KKyAqIE90aGVyIGNvbXBpbGVycyBnZW5lcmF0aW5nIHRoaXMgd2FybmluZyB3aWxsIG5lZWQgdG8gcHJvdmlkZSB0aGVpcgorICogY3VzdG9tIGF0dHJpYnV0ZSB0byBzaWxlbmNlIHRoaXMuCisgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fY2xhbmdfXykKKyNkZWZpbmUgVU5VU0VEX0FSR1VNRU5UIF9fYXR0cmlidXRlKCh1bnVzZWQpKQorI2Vsc2UKKyNkZWZpbmUgVU5VU0VEX0FSR1VNRU5UCisjZW5kaWYKKworLyoKICAqIE5DSSBIQUwgbWV0aG9kIGltcGxlbWVudGF0aW9ucy4gVGhlc2UgbXVzdCBiZSBvdmVycmlkZW4KICAqLwotc3RhdGljIGludCBoYWxfb3Blbihjb25zdCBzdHJ1Y3QgbmZjX25jaV9kZXZpY2UgKmRldiwKLSAgICAgICAgbmZjX3N0YWNrX2NhbGxiYWNrX3QgKnBfY2JhY2ssIG5mY19zdGFja19kYXRhX2NhbGxiYWNrX3QgKnBfZGF0YV9jYmFjaykgeworc3RhdGljIGludCBoYWxfb3Blbihjb25zdCBzdHJ1Y3QgbmZjX25jaV9kZXZpY2UgKmRldiBVTlVTRURfQVJHVU1FTlQsCisgICAgICAgIG5mY19zdGFja19jYWxsYmFja190ICpwX2NiYWNrIFVOVVNFRF9BUkdVTUVOVCwKKyAgICAgICAgbmZjX3N0YWNrX2RhdGFfY2FsbGJhY2tfdCAqcF9kYXRhX2NiYWNrIFVOVVNFRF9BUkdVTUVOVCkgewogICAgIEFMT0dFKCJORkMtTkNJIEhBTDogJXMiLCBfX0ZVTkNUSU9OX18pOwogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhhbF93cml0ZShjb25zdCBzdHJ1Y3QgbmZjX25jaV9kZXZpY2UgKmRldiwKLSAgICAgICAgdWludDE2X3QgZGF0YV9sZW4sIGNvbnN0IHVpbnQ4X3QgKnBfZGF0YSkgeworc3RhdGljIGludCBoYWxfd3JpdGUoY29uc3Qgc3RydWN0IG5mY19uY2lfZGV2aWNlICpkZXYgVU5VU0VEX0FSR1VNRU5ULAorICAgICAgICB1aW50MTZfdCBkYXRhX2xlbiBVTlVTRURfQVJHVU1FTlQsCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnBfZGF0YSBVTlVTRURfQVJHVU1FTlQpIHsKICAgICBBTE9HRSgiTkZDLU5DSSBIQUw6ICVzIiwgX19GVU5DVElPTl9fKTsKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBoYWxfY29yZV9pbml0aWFsaXplZChjb25zdCBzdHJ1Y3QgbmZjX25jaV9kZXZpY2UgKmRldiwKLSAgICAgICAgdWludDhfdCogcF9jb3JlX2luaXRfcnNwX3BhcmFtcykgeworc3RhdGljIGludCBoYWxfY29yZV9pbml0aWFsaXplZCgKKyAgICAgICAgY29uc3Qgc3RydWN0IG5mY19uY2lfZGV2aWNlICpkZXYgVU5VU0VEX0FSR1VNRU5ULAorICAgICAgICB1aW50OF90KiBwX2NvcmVfaW5pdF9yc3BfcGFyYW1zIFVOVVNFRF9BUkdVTUVOVCkgewogICAgIEFMT0dFKCJORkMtTkNJIEhBTDogJXMiLCBfX0ZVTkNUSU9OX18pOwogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhhbF9wcmVfZGlzY292ZXIoY29uc3Qgc3RydWN0IG5mY19uY2lfZGV2aWNlICpkZXYpIHsKK3N0YXRpYyBpbnQgaGFsX3ByZV9kaXNjb3ZlcigKKyAgICAgICAgY29uc3Qgc3RydWN0IG5mY19uY2lfZGV2aWNlICpkZXYgVU5VU0VEX0FSR1VNRU5UKSB7CiAgICAgQUxPR0UoIk5GQy1OQ0kgSEFMOiAlcyIsIF9fRlVOQ1RJT05fXyk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaGFsX2Nsb3NlKGNvbnN0IHN0cnVjdCBuZmNfbmNpX2RldmljZSAqZGV2KSB7CitzdGF0aWMgaW50IGhhbF9jbG9zZShjb25zdCBzdHJ1Y3QgbmZjX25jaV9kZXZpY2UgKmRldiBVTlVTRURfQVJHVU1FTlQpIHsKICAgICBBTE9HRSgiTkZDLU5DSSBIQUw6ICVzIiwgX19GVU5DVElPTl9fKTsKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBoYWxfY29udHJvbF9ncmFudGVkIChjb25zdCBzdHJ1Y3QgbmZjX25jaV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIGludCBoYWxfY29udHJvbF9ncmFudGVkICgKKyAgICAgICAgY29uc3Qgc3RydWN0IG5mY19uY2lfZGV2aWNlICpwX2RldiBVTlVTRURfQVJHVU1FTlQpCiB7CiAgICAgQUxPR0UoIk5GQy1OQ0kgSEFMOiAlcyIsIF9fRlVOQ1RJT05fXyk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIGludCBoYWxfcG93ZXJfY3ljbGUgKGNvbnN0IHN0cnVjdCBuZmNfbmNpX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGhhbF9wb3dlcl9jeWNsZSAoCisgICAgICAgIGNvbnN0IHN0cnVjdCBuZmNfbmNpX2RldmljZSAqcF9kZXYgVU5VU0VEX0FSR1VNRU5UKQogewogICAgIEFMT0dFKCJORkMtTkNJIEhBTDogJXMiLCBfX0ZVTkNUSU9OX18pOwogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9uZmMvQW5kcm9pZC5icCBiL21vZHVsZXMvbmZjL0FuZHJvaWQuYnAKaW5kZXggNTNhYjMwOS4uMTBkYzJjMSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9uZmMvQW5kcm9pZC5icAorKysgYi9tb2R1bGVzL25mYy9BbmRyb2lkLmJwCkBAIC0xNSw2ICsxNSw3IEBACiBjY19saWJyYXJ5X3NoYXJlZCB7CiAgICAgbmFtZTogIm5mYy5kZWZhdWx0IiwKICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgc3JjczogWyJuZmNfcG41NDRfZXhhbXBsZS5jIl0sCiAgICAgc2hhcmVkX2xpYnM6IFsKICAgICAgICAgImxpYmxvZyIsCmRpZmYgLS1naXQgYS9tb2R1bGVzL3Bvd2VyL0FuZHJvaWQuYnAgYi9tb2R1bGVzL3Bvd2VyL0FuZHJvaWQuYnAKaW5kZXggMmI4NmM4Yi4uZjRjNzRjZSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9wb3dlci9BbmRyb2lkLmJwCisrKyBiL21vZHVsZXMvcG93ZXIvQW5kcm9pZC5icApAQCAtMTUsNiArMTUsNyBAQAogY2NfbGlicmFyeV9zaGFyZWQgewogICAgIG5hbWU6ICJwb3dlci5kZWZhdWx0IiwKICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgc3JjczogWyJwb3dlci5jIl0sCiAgICAgc2hhcmVkX2xpYnM6IFsibGlibG9nIl0sCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL3JhZGlvL0FuZHJvaWQubWsgYi9tb2R1bGVzL3JhZGlvL0FuZHJvaWQubWsKaW5kZXggMjIxNDI0Zi4uNmYxMTE2OSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9yYWRpby9BbmRyb2lkLm1rCisrKyBiL21vZHVsZXMvcmFkaW8vQW5kcm9pZC5tawpAQCAtMjEsNiArMjEsNyBAQAogCiBMT0NBTF9NT0RVTEUgOj0gcmFkaW8uZm0uZGVmYXVsdAogTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCiBMT0NBTF9TUkNfRklMRVMgOj0gcmFkaW9faHcuYwogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJsb2cgbGliY3V0aWxzIGxpYnJhZGlvX21ldGFkYXRhCiBMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9yYWRpby9yYWRpb19oYWxfdG9vbC5jIGIvbW9kdWxlcy9yYWRpby9yYWRpb19oYWxfdG9vbC5jCmluZGV4IGJhYTJlZmUuLjAxMTdmMjggMTAwNjQ0Ci0tLSBhL21vZHVsZXMvcmFkaW8vcmFkaW9faGFsX3Rvb2wuYworKysgYi9tb2R1bGVzL3JhZGlvL3JhZGlvX2hhbF90b29sLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICByYWRpb19tZXRhZGF0YV9rZXlfdCBrZXk7CiAgICAgICAgIHJhZGlvX21ldGFkYXRhX3R5cGVfdCB0eXBlOwogICAgICAgICB2b2lkICp2YWx1ZTsKLSAgICAgICAgdWludDMyX3Qgc2l6ZTsKKyAgICAgICAgc2l6ZV90IHNpemU7CiAKICAgICAgICAgcmFkaW9fbWV0YWRhdGFfZ2V0X2F0X2luZGV4KGluZm8ubWV0YWRhdGEsIGksICZrZXksICZ0eXBlLCAmdmFsdWUsICZzaXplKTsKIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9yYWRpby9yYWRpb19ody5jIGIvbW9kdWxlcy9yYWRpby9yYWRpb19ody5jCmluZGV4IGYxNDQ4ZGEuLjQ1NmM4NjYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvcmFkaW8vcmFkaW9faHcuYworKysgYi9tb2R1bGVzL3JhZGlvL3JhZGlvX2h3LmMKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAuYmFuZHMgPSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIC50eXBlID0gUkFESU9fQkFORF9GTSwKLSAgICAgICAgICAgIC5hbnRlbm5hX2Nvbm5lY3RlZCA9IGZhbHNlLAorICAgICAgICAgICAgLmFudGVubmFfY29ubmVjdGVkID0gdHJ1ZSwKICAgICAgICAgICAgIC5sb3dlcl9saW1pdCA9IDg3OTAwLAogICAgICAgICAgICAgLnVwcGVyX2xpbWl0ID0gMTA3OTAwLAogICAgICAgICAgICAgLm51bV9zcGFjaW5ncyA9IDEsCkBAIC0yMTMsNiArMjEzLDcgQEAKICAgICAqbWV0YWRhdGEgPSBOVUxMOwogCiAgICAgcmV0ID0gcmFkaW9fbWV0YWRhdGFfYWxsb2NhdGUobWV0YWRhdGEsIHR1bmVyLT5wcm9ncmFtLmNoYW5uZWwsIDApOworCiAgICAgaWYgKHJldCAhPSAwKQogICAgICAgICByZXR1cm4gcmV0OwogCkBAIC0yMjQsMTQgKzIyNSwxNCBAQAogICAgICAgICBpZiAocmV0ICE9IDApCiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIHJldCA9IGFkZF9iaXRtYXBfbWV0YWRhdGEobWV0YWRhdGEsIFJBRElPX01FVEFEQVRBX0tFWV9JQ09OLCBCSVRNQVBfRklMRV9QQVRIKTsKLSAgICAgICAgaWYgKHJldCAhPSAwKQorICAgICAgICBpZiAocmV0ICE9IDAgJiYgcmV0ICE9IC1FUElQRSkKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgcmV0ID0gcmFkaW9fbWV0YWRhdGFfYWRkX2Nsb2NrKG1ldGFkYXRhLCBSQURJT19NRVRBREFUQV9LRVlfQ0xPQ0ssICZod19jbG9jayk7CiAgICAgICAgIGlmIChyZXQgIT0gMCkKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9IGVsc2UgewogICAgICAgICByZXQgPSBhZGRfYml0bWFwX21ldGFkYXRhKG1ldGFkYXRhLCBSQURJT19NRVRBREFUQV9LRVlfQVJULCBCSVRNQVBfRklMRV9QQVRIKTsKLSAgICAgICAgaWYgKHJldCAhPSAwKQorICAgICAgICBpZiAocmV0ICE9IDAgJiYgcmV0ICE9IC1FUElQRSkKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTM1OSw2ICszNjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgdHVuZXItPnByb2dyYW0uc3RlcmVvID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHR1bmVyLT5wcm9ncmFtLnN0ZXJlbyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBwcmVwYXJlX21ldGFkYXRhKHR1bmVyLCAmdHVuZXItPnByb2dyYW0ubWV0YWRhdGEsIHR1bmVyLT5wcm9ncmFtLnR1bmVkKTsKIAogICAgICAgICAgICAgICAgICAgICBldmVudC50eXBlID0gUkFESU9fRVZFTlRfVFVORUQ7CiAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmluZm8gPSB0dW5lci0+cHJvZ3JhbTsKQEAgLTM4NSw2ICszODcsNyBAQAogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB0dW5lci0+cHJvZ3JhbS5zdGVyZW8gPSB0dW5lci0+Y29uZmlnLmFtLnN0ZXJlbzsKICAgICAgICAgICAgICAgICAgICAgdHVuZXItPnByb2dyYW0uc2lnbmFsX3N0cmVuZ3RoID0gNTA7CisgICAgICAgICAgICAgICAgICAgIHByZXBhcmVfbWV0YWRhdGEodHVuZXIsICZ0dW5lci0+cHJvZ3JhbS5tZXRhZGF0YSwgdHVuZXItPnByb2dyYW0udHVuZWQpOwogCiAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBSQURJT19FVkVOVF9UVU5FRDsKICAgICAgICAgICAgICAgICAgICAgZXZlbnQuaW5mbyA9IHR1bmVyLT5wcm9ncmFtOwpAQCAtMzk3LDEyICs0MDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR1bmVyLT5jb25maWcuc3BhY2luZ3NbMF0gKiA1KSkgJSAyOwogCiAgICAgICAgICAgICAgICAgICAgIGlmICh0dW5lci0+cHJvZ3JhbS50dW5lZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGFyZV9tZXRhZGF0YSh0dW5lciwgJnR1bmVyLT5wcm9ncmFtLm1ldGFkYXRhLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfY29tbWFuZF9sKHR1bmVyLCBDTURfQU5OT1VOQ0VNRU5UUywgMTAwMCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHVuZXItPnByb2dyYW0ubWV0YWRhdGEgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpb19tZXRhZGF0YV9kZWFsbG9jYXRlKHR1bmVyLT5wcm9ncmFtLm1ldGFkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR1bmVyLT5wcm9ncmFtLm1ldGFkYXRhID0gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB0dW5lci0+cHJvZ3JhbS5zaWduYWxfc3RyZW5ndGggPSAxMDA7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0dW5lci0+Y29uZmlnLnR5cGUgPT0gUkFESU9fQkFORF9GTSkKQEAgLTQxMSw2ICs0MDksOCBAQAogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB0dW5lci0+cHJvZ3JhbS5zdGVyZW8gPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1bmVyLT5wcm9ncmFtLnR1bmVkID8gdHVuZXItPmNvbmZpZy5hbS5zdGVyZW8gOiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcHJlcGFyZV9tZXRhZGF0YSh0dW5lciwgJnR1bmVyLT5wcm9ncmFtLm1ldGFkYXRhLCB0dW5lci0+cHJvZ3JhbS50dW5lZCk7CisKICAgICAgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IFJBRElPX0VWRU5UX1RVTkVEOwogICAgICAgICAgICAgICAgICAgICBldmVudC5pbmZvID0gdHVuZXItPnByb2dyYW07CiAgICAgICAgICAgICAgICAgICAgIHNlbmRfbWV0YV9kYXRhID0gdHJ1ZTsKQEAgLTQyMiw3ICs0MjIsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IFJBRElPX0VWRU5UX01FVEFEQVRBOwogICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQubWV0YWRhdGEgPSBtZXRhZGF0YTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZW5kX21ldGFfZGF0YSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgQ01EX0NBTkNFTDogewpAQCAtNTA2LDYgKzUwNSwxMCBAQAogICAgICAgICBzdGF0dXMgPSAtRUlOVkFMOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQorICAgIGlmIChjb25maWctPmxvd2VyX2xpbWl0ID4gY29uZmlnLT51cHBlcl9saW1pdCkgeworICAgICAgICBzdGF0dXMgPSAtRUlOVkFMOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQogICAgIHNlbmRfY29tbWFuZF9sKHN0dWJfdHVuZXIsIENNRF9DQU5DRUwsIDAsIE5VTEwpOwogICAgIHNlbmRfY29tbWFuZF9sKHN0dWJfdHVuZXIsIENNRF9DT05GSUcsIDUwMCwgKHZvaWQgKiljb25maWcpOwogCkBAIC02MTgsNyArNjIxLDEyIEBACiAgICAgbWV0YWRhdGEgPSBpbmZvLT5tZXRhZGF0YTsKICAgICAqaW5mbyA9IHN0dWJfdHVuZXItPnByb2dyYW07CiAgICAgaW5mby0+bWV0YWRhdGEgPSBtZXRhZGF0YTsKLSAgICBpZiAobWV0YWRhdGEgIT0gTlVMTCAmJiBzdHViX3R1bmVyLT5wcm9ncmFtLm1ldGFkYXRhICE9IE5VTEwpCisgICAgaWYgKG1ldGFkYXRhID09IE5VTEwpIHsKKyAgICAgICAgQUxPR0UoIiVzIG1ldGFkYXRhIGlzIGEgbnVsbHB0ciIsIF9fZnVuY19fKTsKKyAgICAgICAgc3RhdHVzID0gLUVJTlZBTDsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAoc3R1Yl90dW5lci0+cHJvZ3JhbS5tZXRhZGF0YSAhPSBOVUxMKQogICAgICAgICByYWRpb19tZXRhZGF0YV9hZGRfbWV0YWRhdGEoJmluZm8tPm1ldGFkYXRhLCBzdHViX3R1bmVyLT5wcm9ncmFtLm1ldGFkYXRhKTsKIAogZXhpdDoKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9BbmRyb2lkLmJwIGIvbW9kdWxlcy9zZW5zb3JzL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQxNTA2NQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMTUgQEAKK2NjX2xpYnJhcnlfc3RhdGljIHsKKyAgICBuYW1lOiAibXVsdGloYWwiLAorICAgIHZlbmRvcjogdHJ1ZSwKKyAgICBzcmNzOiBbCisgICAgICAgICJtdWx0aWhhbC5jcHAiLAorICAgICAgICAiU2Vuc29yRXZlbnRRdWV1ZS5jcHAiCisgICAgXSwKKyAgICBzaGFyZWRfbGliczogWworICAgICAgICAibGlibG9nIiwKKyAgICAgICAgImxpYmN1dGlscyIsCisgICAgICAgICJsaWJ1dGlscyIsCisgICAgICAgICJsaWJkbCIKKyAgICBdLAorICAgIGV4cG9ydF9pbmNsdWRlX2RpcnM6IFsiLiJdLAorfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL0FuZHJvaWQubWsgYi9tb2R1bGVzL3NlbnNvcnMvQW5kcm9pZC5tawppbmRleCA1MzRlNmU5Li5jYTI3N2U2IDEwMDY0NAotLS0gYS9tb2R1bGVzL3NlbnNvcnMvQW5kcm9pZC5taworKysgYi9tb2R1bGVzL3NlbnNvcnMvQW5kcm9pZC5tawpAQCAtMjMsNiArMjMsNyBAQAogTE9DQUxfTU9EVUxFIDo9IHNlbnNvcnMuJChUQVJHRVRfREVWSUNFKQogCiBMT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBodworTE9DQUxfUFJPUFJJRVRBUllfTU9EVUxFIDo9IHRydWUKIAogTE9DQUxfQ0ZMQUdTIDo9IC1ETE9HX1RBRz1cIk11bHRpSGFsXCIKIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0FuZHJvaWQubWsgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGMxOTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0FuZHJvaWQubWsKQEAgLTAsMCArMSw4OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQorQ09NTU9OX0NGTEFHUyA6PSAtV2FsbCAtV2Vycm9yIC1XZXh0cmEKKworIworIyBUaGVyZSBhcmUgdHdvIHdheXMgdG8gdXRpbGl6ZSB0aGUgZHluYW1pYyBzZW5zb3IgbW9kdWxlOgorIyAgIDEuIFVzZSBhcyBhbiBleHRlbnNpb24gaW4gYW4gZXhpc3RpbmcgaGFsOiBkZWNsYXJlIGRlcGVuZGVuY3kgb24gbGliZHluYW1pY19zZW5zb3JfZXh0IHNoYXJlZAorIyAgICAgIGxpYnJhcnkgaW4gZXhpc3Rpbmcgc2Vuc29yIGhhbC4KKyMgICAyLiBVc2UgYXMgYSBzdGFuZGFsb25lIHNlbnNvciBIQUwgYW5kIGNvbmZpZ3VyZSBtdWx0aWhhbCB0byBjb21iaW5lIGl0IHdpdGggc2Vuc29yIGhhbCB0aGF0CisjICAgICAgaG9zdHMgb3RoZXIgc2Vuc29yczogYWRkIGRlcGVuZGVuY3kgb24gc2Vuc29ycy5keW5hbWljX3NlbnNvcl9oYWwgaW4gZGV2aWNlIGxldmVsIG1ha2VmaWxlIGFuZAorIyAgICAgIHdyaXRlIG11bHRpaGFsIGNvbmZpZ3VyYXRpb24gZmlsZSBhY2NvcmRpbmdseS4KKyMKKyMgUGxlYXNlIHRha2Ugb25seSBvbmUgb2YgdGhlc2UgdHdvIG9wdGlvbnMgdG8gYXZvaWQgY29uZmxpY3Qgb3ZlciBoYXJkd2FyZSByZXNvdXJjZS4KKyMKKworIworIyBPcHRpb24gMTogc2Vuc29yIGV4dGVuc2lvbiBtb2R1bGUKKyMKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IGxpYmR5bmFtaWNfc2Vuc29yX2V4dAorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKyMgaW50ZW5kZWQgdG8gYmUgaW50ZWdyYXRlZCBpbnRvIGhhbCwgdGh1cyBwcm9wcmlldGFyeQorTE9DQUxfUFJPUFJJRVRBUllfTU9EVUxFIDo9IHRydWUKKworTE9DQUxfQ0ZMQUdTICs9ICQoQ09NTU9OX0NGTEFHUykgLURMT0dfVEFHPVwiRHluYW1pY1NlbnNvckV4dFwiCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSBcCisgICAgQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24uY3BwIFwKKyAgICBCYXNlU2Vuc29yT2JqZWN0LmNwcCBcCisgICAgQ29ubmVjdGlvbkRldGVjdG9yLmNwcCBcCisgICAgRHVtbXlEeW5hbWljQWNjZWxEYWVtb24uY3BwIFwKKyAgICBEeW5hbWljU2Vuc29yTWFuYWdlci5jcHAgXAorICAgIFJpbmdCdWZmZXIuY3BwCisKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAorICAgIGxpYmN1dGlscyBcCisgICAgbGlidXRpbHMgXAorICAgIGxpYmxvZworCitMT0NBTF9FWFBPUlRfQ19JTkNMVURFX0RJUlMgOj0gJChMT0NBTF9QQVRIKQorCitpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCisKKyMKKyMgT3B0aW9uIDI6IGluZGVwZW5kZW50IHNlbnNvciBoYWwKKyMKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IHNlbnNvcnMuZHluYW1pY19zZW5zb3JfaGFsCitMT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBodworTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKyMgaGFsIG1vZHVsZSwgdGh1cyBwcm9wcmlldGFyeQorTE9DQUxfUFJPUFJJRVRBUllfTU9EVUxFIDo9IHRydWUKKworTE9DQUxfQ0ZMQUdTICs9ICQoQ09NTU9OX0NGTEFHUykgLURMT0dfVEFHPVwiRHluYW1pY1NlbnNvckhhbFwiCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSBcCisgICAgQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24uY3BwIFwKKyAgICBCYXNlU2Vuc29yT2JqZWN0LmNwcCBcCisgICAgQ29ubmVjdGlvbkRldGVjdG9yLmNwcCBcCisgICAgRHVtbXlEeW5hbWljQWNjZWxEYWVtb24uY3BwIFwKKyAgICBEeW5hbWljU2Vuc29yTWFuYWdlci5jcHAgXAorICAgIFJpbmdCdWZmZXIuY3BwIFwKKyAgICBzZW5zb3JzLmNwcAorCitMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKKyAgICBsaWJjdXRpbHMgXAorICAgIGxpYnV0aWxzIFwKKyAgICBsaWJsb2cKKworTE9DQUxfRVhQT1JUX0NfSU5DTFVERV9ESVJTIDo9ICQoTE9DQUxfUEFUSCkKKworaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQorCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvSGlkVXRpbHMvQW5kcm9pZC5taworCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24uY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Jhc2VEeW5hbWljU2Vuc29yRGFlbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWY2NDJjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Jhc2VEeW5hbWljU2Vuc29yRGFlbW9uLmNwcApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgIkJhc2VEeW5hbWljU2Vuc29yRGFlbW9uLmgiCisjaW5jbHVkZSAiRHluYW1pY1NlbnNvck1hbmFnZXIuaCIKKyNpbmNsdWRlICJ1dGlscy9Mb2cuaCIKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIFNlbnNvckhhbEV4dCB7CisKK2Jvb2wgQmFzZUR5bmFtaWNTZW5zb3JEYWVtb246Om9uQ29ubmVjdGlvbkNoYW5nZShjb25zdCBzdGQ6OnN0cmluZyAmZGV2aWNlS2V5LCBib29sIGNvbm5lY3RlZCkgeworICAgIGJvb2wgcmV0ID0gZmFsc2U7CisgICAgYXV0byBpID0gbURldmljZXMuZmluZChkZXZpY2VLZXkpOworICAgIGlmIChjb25uZWN0ZWQpIHsKKyAgICAgICAgaWYgKGkgPT0gbURldmljZXMuZW5kKCkpIHsKKyAgICAgICAgICAgIEFMT0dWKCJkZXZpY2UgJXMgaXMgY29ubmVjdGVkIiwgZGV2aWNlS2V5LmNfc3RyKCkpOworICAgICAgICAgICAgQmFzZVNlbnNvck9iamVjdCogcyA9IGNyZWF0ZVNlbnNvcihkZXZpY2VLZXkpOworICAgICAgICAgICAgaWYgKHMpIHsKKyAgICAgICAgICAgICAgICBtRGV2aWNlcy5lbXBsYWNlKGRldmljZUtleSwgc3A8QmFzZVNlbnNvck9iamVjdD4ocykpOworICAgICAgICAgICAgICAgIG1NYW5hZ2VyLnJlZ2lzdGVyU2Vuc29yKHMpOworICAgICAgICAgICAgICAgIEFMT0dWKCJkZXZpY2UgJXMgaXMgcmVnaXN0ZXJlZCIsIGRldmljZUtleS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZXQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQUxPR0QoImRldmljZSAlcyBhbHJlYWR5IGFkZGVkIGFuZCBpcyBjb25uZWN0ZWQgYWdhaW4sIGlnbm9yZSIsIGRldmljZUtleS5jX3N0cigpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEFMT0dWKCJkZXZpY2UgJXMgaXMgZGlzY29ubmVjdGVkIiwgZGV2aWNlS2V5LmNfc3RyKCkpOworICAgICAgICBpZiAoaSAhPSBtRGV2aWNlcy5lbmQoKSkgeworICAgICAgICAgICAgbU1hbmFnZXIudW5yZWdpc3RlclNlbnNvcihpLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICAgICAgbURldmljZXMuZXJhc2UoaSk7CisgICAgICAgICAgICBBTE9HVigiZGV2aWNlICVzIGlzIHVucmVnaXN0ZXJlZCIsIGRldmljZUtleS5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBTE9HRCgiZGV2aWNlIG5vdCBmb3VuZCBpbiByZWdpc3RyeSIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KK30gLy8gbmFtZXNwYWNlIFNlbnNvckhhbEV4dAorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24uaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9CYXNlRHluYW1pY1NlbnNvckRhZW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OThiN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24uaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX1NFTlNPUkhBTF9FWFRfQkFTRV9EWU5BTUlDX1NFTlNPUl9EQUVNT05fSAorI2RlZmluZSBBTkRST0lEX1NFTlNPUkhBTF9FWFRfQkFTRV9EWU5BTUlDX1NFTlNPUl9EQUVNT05fSAorCisjaW5jbHVkZSAiQmFzZVNlbnNvck9iamVjdC5oIgorCisjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgU2Vuc29ySGFsRXh0IHsKKworY2xhc3MgRHluYW1pY1NlbnNvck1hbmFnZXI7CisKK2NsYXNzIEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uIDogcHVibGljIFJlZkJhc2UgeworcHVibGljOgorICAgIEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uKER5bmFtaWNTZW5zb3JNYW5hZ2VyJiBtYW5hZ2VyKSA6IG1NYW5hZ2VyKG1hbmFnZXIpIHt9CisgICAgdmlydHVhbCB+QmFzZUR5bmFtaWNTZW5zb3JEYWVtb24oKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIGJvb2wgb25Db25uZWN0aW9uQ2hhbmdlKGNvbnN0IHN0ZDo6c3RyaW5nICZkZXZpY2VLZXksIGJvb2wgY29ubmVjdGVkKTsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIEJhc2VTZW5zb3JPYmplY3QgKiBjcmVhdGVTZW5zb3IoY29uc3Qgc3RkOjpzdHJpbmcgJmRldmljZUtleSkgPSAwOworCisgICAgRHluYW1pY1NlbnNvck1hbmFnZXIgJm1NYW5hZ2VyOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3A8QmFzZVNlbnNvck9iamVjdD4gPiBtRGV2aWNlczsKK307CisKK30gLy8gbmFtZXNwYWNlIFNlbnNvckhhbEV4dAorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgLy8gQU5EUk9JRF9TRU5TT1JIQUxfRVhUX0JBU0VfRFlOQU1JQ19TRU5TT1JfREFFTU9OX0gKKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Jhc2VTZW5zb3JPYmplY3QuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Jhc2VTZW5zb3JPYmplY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OWU4N2YKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQmFzZVNlbnNvck9iamVjdC5jcHAKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJCYXNlU2Vuc29yT2JqZWN0LmgiCisjaW5jbHVkZSAiU2Vuc29yRXZlbnRDYWxsYmFjay5oIgorCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisjaW5jbHVkZSA8Y3N0cmluZz4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIFNlbnNvckhhbEV4dCB7CisKK0Jhc2VTZW5zb3JPYmplY3Q6OkJhc2VTZW5zb3JPYmplY3QoKSA6IG1DYWxsYmFjayhudWxscHRyKSB7Cit9CisKK2Jvb2wgQmFzZVNlbnNvck9iamVjdDo6c2V0RXZlbnRDYWxsYmFjayhTZW5zb3JFdmVudENhbGxiYWNrKiBjYWxsYmFjaykgeworICAgIGlmIChtQ2FsbGJhY2sgIT0gbnVsbHB0cikgeworICAgICAgICBBTE9HRSgiY2FsbGJhY2sgaXMgYWxyZWFkeSBhc3NpZ25lZCwgY2Fubm90IGNoYW5nZS4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBCYXNlU2Vuc29yT2JqZWN0OjpnZXRVdWlkKHVpbnQ4X3QqIHV1aWQpIGNvbnN0IHsKKyAgICAvLyBkZWZhdWx0IHV1aWQgZGVub3RpbmcgdXVpZCBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBzZW5zb3IuCisgICAgbWVtc2V0KHV1aWQsIDAsIDE2KTsKK30KKworaW50IEJhc2VTZW5zb3JPYmplY3Q6OmZsdXNoKCkgeworICAgIHN0YXRpYyBjb25zdCBzZW5zb3JzX2V2ZW50X3QgZXZlbnQgPSB7CisgICAgICAgIC50eXBlID0gU0VOU09SX1RZUEVfTUVUQV9EQVRBLAorICAgICAgICAudGltZXN0YW1wID0gVElNRVNUQU1QX0FVVE9fRklMTCAgLy8gdGltZXN0YW1wIHdpbGwgYmUgZmlsbGVkIGF0IGRpc3BhdGNoZXIKKyAgICB9OworICAgIGdlbmVyYXRlRXZlbnQoZXZlbnQpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEJhc2VTZW5zb3JPYmplY3Q6OmdlbmVyYXRlRXZlbnQoY29uc3Qgc2Vuc29yc19ldmVudF90ICZlKSB7CisgICAgaWYgKG1DYWxsYmFjaykgeworICAgICAgICBtQ2FsbGJhY2stPnN1Ym1pdEV2ZW50KHRoaXMsIGUpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgU2Vuc29ySGFsRXh0Cit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9CYXNlU2Vuc29yT2JqZWN0LmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQmFzZVNlbnNvck9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNmUxMzgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQmFzZVNlbnNvck9iamVjdC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfU0VOU09SSEFMX0JBU0VfU0VOU09SX09CSkVDVF9ICisjZGVmaW5lIEFORFJPSURfU0VOU09SSEFMX0JBU0VfU0VOU09SX09CSkVDVF9ICisKKyNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CisjaW5jbHVkZSA8dXRpbHMvVGltZXJzLmg+IC8vIGZvciBuc2Vjc190CisjaW5jbHVkZSA8Y3N0ZGludD4KKworc3RydWN0IHNlbnNvcl90Oworc3RydWN0IHNlbnNvcnNfZXZlbnRfdDsKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIFNlbnNvckhhbEV4dCB7CisKK2NsYXNzIFNlbnNvckV2ZW50Q2FsbGJhY2s7CisKK2NsYXNzIEJhc2VTZW5zb3JPYmplY3QgOiB2aXJ0dWFsIHB1YmxpYyBSZWZCYXNlIHsKK3B1YmxpYzoKKyAgICBCYXNlU2Vuc29yT2JqZWN0KCk7CisgICAgdmlydHVhbCB+QmFzZVNlbnNvck9iamVjdCgpID0gZGVmYXVsdDsKKworICAgIC8vIGFsd2F5cyBjYWxsZWQgYnkgRHluYW1pY1NlbnNvck1hbmFnZXIsIGNhbGxiYWNrIG11c3QgcG9pbnQgdG8KKyAgICAvLyB2YWxpZCBvYmplY3QgdGhyb3VnaG91dCBsaWZlIGN5Y2xlIG9mIEJhc2VTZW5zb3JPYmplY3QKKyAgICBib29sIHNldEV2ZW50Q2FsbGJhY2soU2Vuc29yRXZlbnRDYWxsYmFjayogY2FsbGJhY2spOworCisgICAgLy8gdmlydHVhbCBmdW5jdGlvbnMgdG8gZ2V0IHNlbnNvciBpbmZvcm1hdGlvbiBhbmQgb3BlcmF0ZSBzZW5zb3IKKyAgICB2aXJ0dWFsIGNvbnN0IHNlbnNvcl90KiBnZXRTZW5zb3IoKSBjb25zdCA9IDA7CisKKyAgICAvLyBnZXQgdXVpZCBvZiBzZW5zb3IsIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2V0IGl0IHRvIGFsbCB6ZXJvLCBtZWFucyBkb2VzIG5vdCBoYXZlIGEgdXVpZC4KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VXVpZCh1aW50OF90KiB1dWlkKSBjb25zdDsKKworICAgIC8vIGVuYWJsZSBzZW5zb3IKKyAgICB2aXJ0dWFsIGludCBlbmFibGUoYm9vbCBlbmFibGUpID0gMDsKKworICAgIC8vIHNldCBzYW1wbGUgcGVyaW9kIGFuZCBiYXRjaGluZyBwZXJpb2Qgb2Ygc2Vuc29yLgorICAgIHZpcnR1YWwgaW50IGJhdGNoKG5zZWNzX3Qgc2FtcGxlUGVyaW9kLCBuc2Vjc190IGJhdGNoUGVyaW9kKSA9IDA7CisKKyAgICAvLyBmbHVzaCBzZW5zb3IsIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBzZW5kIGEgZmx1c2ggY29tcGxldGUgZXZlbnQgYmFjay4KKyAgICB2aXJ0dWFsIGludCBmbHVzaCgpOworCitwcm90ZWN0ZWQ6CisgICAgLy8gdXRpbGl0eSBmdW5jdGlvbiBmb3Igc3ViLWNsYXNzCisgICAgdm9pZCBnZW5lcmF0ZUV2ZW50KGNvbnN0IHNlbnNvcnNfZXZlbnRfdCAmZSk7Citwcml2YXRlOgorICAgIFNlbnNvckV2ZW50Q2FsbGJhY2sqIG1DYWxsYmFjazsKK307CisKK30gLy8gbmFtZXNwYWNlIFNlbnNvckhhbEV4dAorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgLy8gQU5EUk9JRF9TRU5TT1JIQUxfQkFTRV9TRU5TT1JfT0JKRUNUX0gKKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Nvbm5lY3Rpb25EZXRlY3Rvci5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQ29ubmVjdGlvbkRldGVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDk5NDkzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Nvbm5lY3Rpb25EZXRlY3Rvci5jcHAKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiQ29ubmVjdGlvbkRldGVjdG9yLmgiCisKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKworI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPHN5cy9pbm90aWZ5Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCisjaW5jbHVkZSA8c3N0cmVhbT4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIFNlbnNvckhhbEV4dCB7CisKKy8vIFNvY2tldENvbm5lY3Rpb25EZXRlY3RvciBmdW5jdGlvbnMKK1NvY2tldENvbm5lY3Rpb25EZXRlY3Rvcjo6U29ja2V0Q29ubmVjdGlvbkRldGVjdG9yKEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uICpkLCBpbnQgcG9ydCkKKyAgICAgICAgOiBDb25uZWN0aW9uRGV0ZWN0b3IoZCkgeworICAgIC8vIGluaXRpYWxpemUgc29ja2V0IHRoYXQgYWNjZXB0IGNvbm5lY3Rpb24gdG8gbG9jYWxob3N0OnBvcnQKKyAgICBtTGlzdGVuRmQgPSA6OnNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgICAgaWYgKG1MaXN0ZW5GZCA8IDApIHsKKyAgICAgICAgQUxPR0UoIkNhbm5vdCBvcGVuIHNvY2tldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RydWN0IHNvY2thZGRyX2luIHNlcnZlckFkZHJlc3MgPSB7CisgICAgICAgIC5zaW5fZmFtaWx5ID0gQUZfSU5FVCwKKyAgICAgICAgLnNpbl9wb3J0ID0gaHRvbnMocG9ydCksCisgICAgICAgIC5zaW5fYWRkciA9IHsKKyAgICAgICAgICAgIC5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spCisgICAgICAgIH0KKyAgICB9OworCisgICAgOjpiaW5kKG1MaXN0ZW5GZCwgKHN0cnVjdCBzb2NrYWRkciopJnNlcnZlckFkZHJlc3MsIHNpemVvZihzZXJ2ZXJBZGRyZXNzKSk7CisgICAgaWYgKDo6bGlzdGVuKG1MaXN0ZW5GZCwgMCkgIT0gTk9fRVJST1IpIHsKKyAgICAgICAgQUxPR0UoIkNhbm5vdCBsaXN0ZW4gdG8gcG9ydCAlZCIsIHBvcnQpOworICAgICAgICBtTGlzdGVuRmQgPSAtMTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzOworICAgIHMgPDwgInNvY2tldDoiIDw8IHBvcnQ7CisgICAgbURldmljZSA9IHMuc3RyKCk7CisKKyAgICBydW4oImRkYWRfc29ja2V0Iik7Cit9CisKK1NvY2tldENvbm5lY3Rpb25EZXRlY3Rvcjo6flNvY2tldENvbm5lY3Rpb25EZXRlY3RvcigpIHsKKyAgICBpZiAobUxpc3RlbkZkID49IDApIHsKKyAgICAgICAgcmVxdWVzdEV4aXRBbmRXYWl0KCk7CisgICAgfQorfQorCitpbnQgU29ja2V0Q29ubmVjdGlvbkRldGVjdG9yOjp3YWl0Rm9yQ29ubmVjdGlvbigpIHsKKyAgICByZXR1cm4gOjphY2NlcHQobUxpc3RlbkZkLCBudWxscHRyLCBudWxscHRyKTsKK30KKwordm9pZCBTb2NrZXRDb25uZWN0aW9uRGV0ZWN0b3I6OndhaXRGb3JEaXNjb25uZWN0aW9uKGludCBjb25uRmQpIHsKKyAgICBjaGFyIGJ1ZmZlclsxNl07CisgICAgd2hpbGUgKDo6cmVhZChjb25uRmQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpID4gMCkgeworICAgICAgICAvLyBkaXNjYXJkIGRhdGEgYnV0IHJlc3BvbnNlIHNvbWV0aGluZyB0byBkZW5vdGUgdGhyZWFkIGFsaXZlCisgICAgICAgIDo6d3JpdGUoY29ubkZkLCAiLiIsIDEpOworICAgIH0KKyAgICAvLyByZWFkIGZhaWx1cmUgbWVhbnMgZGlzY29ubmVjdGlvbgorICAgIDo6Y2xvc2UoY29ubkZkKTsKK30KKworYm9vbCBTb2NrZXRDb25uZWN0aW9uRGV0ZWN0b3I6OnRocmVhZExvb3AoKSB7CisgICAgd2hpbGUgKCFUaHJlYWQ6OmV4aXRQZW5kaW5nKCkpIHsKKyAgICAgICAgLy8gYmxvY2sgd2FpdGluZyBmb3IgY29ubmVjdGlvbgorICAgICAgICBpbnQgY29ubkZkID0gd2FpdEZvckNvbm5lY3Rpb24oKTsKKworICAgICAgICBpZiAoY29ubkZkIDwgMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBBTE9HVigiUmVjZWl2ZWQgY29ubmVjdGlvbiwgcmVnaXN0ZXIgZHluYW1pYyBhY2NlbCBzZW5zb3IiKTsKKyAgICAgICAgbURhZW1vbi0+b25Db25uZWN0aW9uQ2hhbmdlKG1EZXZpY2UsIHRydWUpOworCisgICAgICAgIHdhaXRGb3JEaXNjb25uZWN0aW9uKGNvbm5GZCk7CisgICAgICAgIEFMT0dWKCJDb25uZWN0aW9uIGJyZWFrLCB1bnJlZ2lzdGVyIGR5bmFtaWMgYWNjZWwgc2Vuc29yIik7CisgICAgICAgIG1EYWVtb24tPm9uQ29ubmVjdGlvbkNoYW5nZShtRGV2aWNlLCBmYWxzZSk7CisgICAgfQorICAgIG1EYWVtb24tPm9uQ29ubmVjdGlvbkNoYW5nZShtRGV2aWNlLCBmYWxzZSk7CisgICAgQUxPR0QoIlNvY2tldENvbm5lY3Rpb25EZXRlY3RvciB0aHJlYWQgZXhpdGVkIik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBGaWxlQ29ubmVjdGlvbkRldGVjdG9yIGZ1bmN0aW9ucworRmlsZUNvbm5lY3Rpb25EZXRlY3Rvcjo6RmlsZUNvbm5lY3Rpb25EZXRlY3RvciAoCisgICAgICAgIEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uICpkLCBjb25zdCBzdGQ6OnN0cmluZyAmcGF0aCwgY29uc3Qgc3RkOjpzdHJpbmcgJnJlZ2V4KQorICAgICAgICAgICAgOiBDb25uZWN0aW9uRGV0ZWN0b3IoZCksIG1QYXRoKHBhdGgpLCBtUmVnZXgocmVnZXgpIHsKKyAgICBtSW5vdGlmeUZkID0gOjppbm90aWZ5X2luaXQxKElOX05PTkJMT0NLKTsKKyAgICBpZiAobUlub3RpZnlGZCA8IDApIHsKKyAgICAgICAgQUxPR0UoIkNhbm5vdCBpbml0IGlub3RpZnkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCB3ZCA9IDo6aW5vdGlmeV9hZGRfd2F0Y2gobUlub3RpZnlGZCwgcGF0aC5jX3N0cigpLCBJTl9DUkVBVEUgfCBJTl9ERUxFVEUgfCBJTl9NT1ZFRF9GUk9NKTsKKyAgICBpZiAod2QgPCAwKSB7CisgICAgICAgIDo6Y2xvc2UobUlub3RpZnlGZCk7CisgICAgICAgIG1Jbm90aWZ5RmQgPSAtMTsKKyAgICAgICAgQUxPR0UoIkNhbm5vdCBzZXR1cCB3YXRjaCBvbiBkaXIgJXMiLCBwYXRoLmNfc3RyKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbVBvbGxGZC5mZCA9IHdkOworICAgIG1Qb2xsRmQuZXZlbnRzID0gUE9MTElOOworCisgICAgcnVuKCJkZGFkX2ZpbGUiKTsKK30KKworRmlsZUNvbm5lY3Rpb25EZXRlY3Rvcjo6fkZpbGVDb25uZWN0aW9uRGV0ZWN0b3IoKSB7CisgICAgaWYgKG1Jbm90aWZ5RmQpIHsKKyAgICAgICAgcmVxdWVzdEV4aXRBbmRXYWl0KCk7CisgICAgICAgIDo6Y2xvc2UobUlub3RpZnlGZCk7CisgICAgfQorfQorCitib29sIEZpbGVDb25uZWN0aW9uRGV0ZWN0b3I6Om1hdGNoZXMoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RkOjpyZWdleF9tYXRjaChuYW1lLCBtUmVnZXgpOworfQorCitzdGQ6OnN0cmluZyBGaWxlQ29ubmVjdGlvbkRldGVjdG9yOjpnZXRGdWxsTmFtZShjb25zdCBzdGQ6OnN0cmluZyBuYW1lKSBjb25zdCB7CisgICAgcmV0dXJuIG1QYXRoICsgbmFtZTsKK30KKwordm9pZCBGaWxlQ29ubmVjdGlvbkRldGVjdG9yOjpwcm9jZXNzRXhpc3RpbmdGaWxlcygpIGNvbnN0IHsKKyAgICBhdXRvIGRpcnAgPSA6Om9wZW5kaXIobVBhdGguY19zdHIoKSk7CisgICAgc3RydWN0IGRpcmVudCAqZHA7CisgICAgd2hpbGUgKChkcCA9IDo6cmVhZGRpcihkaXJwKSkgIT0gTlVMTCkgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lKGRwLT5kX25hbWUpOworICAgICAgICBpZiAobWF0Y2hlcyhuYW1lKSkgeworICAgICAgICAgICAgbURhZW1vbi0+b25Db25uZWN0aW9uQ2hhbmdlKGdldEZ1bGxOYW1lKG5hbWUpLCB0cnVlIC8qY29ubmVjdGVkKi8pOworICAgICAgICB9CisgICAgfQorICAgIDo6Y2xvc2VkaXIoZGlycCk7Cit9CisKK2Jvb2wgRmlsZUNvbm5lY3Rpb25EZXRlY3Rvcjo6dGhyZWFkTG9vcCgpIHsKKyAgICBzdHJ1Y3QgeworICAgICAgICBzdHJ1Y3QgaW5vdGlmeV9ldmVudCBlOworICAgICAgICB1aW50OF90IHBhZGRpbmdbTkFNRV9NQVggKyAxXTsKKyAgICB9IGV2OworCisgICAgcHJvY2Vzc0V4aXN0aW5nRmlsZXMoKTsKKworICAgIHdoaWxlICghVGhyZWFkOjpleGl0UGVuZGluZygpKSB7CisgICAgICAgIGludCBwb2xsTnVtID0gOjpwb2xsKCZtUG9sbEZkLCAxLCAtMSk7CisgICAgICAgIGlmIChwb2xsTnVtID09IC0xKSB7CisgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICBBTE9HRSgiaW5vdGlmeSBwb2xsIGVycm9yOiAlcyIsIDo6c3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwb2xsTnVtID4gMCkgeworICAgICAgICAgICAgaWYgKCEgKG1Qb2xsRmQucmV2ZW50cyAmIFBPTExJTikpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogSW5vdGlmeSBldmVudHMgYXJlIGF2YWlsYWJsZSAqLworICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAvKiBSZWFkIHNvbWUgZXZlbnRzLiAqLworICAgICAgICAgICAgICAgIHNzaXplX3QgbGVuID0gOjpyZWFkKG1Jbm90aWZ5RmQsICZldiwgc2l6ZW9mIGV2KTsKKyAgICAgICAgICAgICAgICBpZiAobGVuID09IC0xICYmIGVycm5vICE9IEVBR0FJTikgeworICAgICAgICAgICAgICAgICAgICBBTE9HRSgicmVhZCBlcnJvcjogJXMiLCA6OnN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFeGl0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIElmIHRoZSBub25ibG9ja2luZyByZWFkKCkgZm91bmQgbm8gZXZlbnRzIHRvIHJlYWQsIHRoZW4KKyAgICAgICAgICAgICAgICAgICBpdCByZXR1cm5zIC0xIHdpdGggZXJybm8gc2V0IHRvIEVBR0FJTi4gSW4gdGhhdCBjYXNlLAorICAgICAgICAgICAgICAgICAgIHdlIGV4aXQgdGhlIGxvb3AuICovCisgICAgICAgICAgICAgICAgaWYgKGxlbiA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChldi5lLmxlbiAmJiAhKGV2LmUubWFzayAmIElOX0lTRElSKSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lKGV2LmUubmFtZSk7CisgICAgICAgICAgICAgICAgICAgIEFMT0dWKCJkZXZpY2UgJXMgc3RhdGUgY2hhbmdlZCIsIG5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKG5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXYuZS5tYXNrICYgSU5fQ1JFQVRFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURhZW1vbi0+b25Db25uZWN0aW9uQ2hhbmdlKGdldEZ1bGxOYW1lKG5hbWUpLCB0cnVlIC8qIGNvbm5lY3RlZCovKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2LmUubWFzayAmIElOX0RFTEVURSB8fCBldi5lLm1hc2sgJiBJTl9NT1ZFRF9GUk9NKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURhZW1vbi0+b25Db25uZWN0aW9uQ2hhbmdlKGdldEZ1bGxOYW1lKG5hbWUpLCBmYWxzZSAvKiBjb25uZWN0ZWQqLyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBTE9HRCgiRmlsZUNvbm5lY3Rpb25EZXRlY3Rpb24gdGhyZWFkIGV4aXRlZCIpOworICAgIHJldHVybiBmYWxzZTsKK30KK30gLy8gbmFtZXNwYWNlIFNlbnNvckhhbEV4dAorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Nvbm5lY3Rpb25EZXRlY3Rvci5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Nvbm5lY3Rpb25EZXRlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMmQ4MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQ29ubmVjdGlvbkRldGVjdG9yLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9TRU5TT1JIQUxfRVhUX0NPTk5FQ1RJT05fREVURUNUT1JfSAorI2RlZmluZSBBTkRST0lEX1NFTlNPUkhBTF9FWFRfQ09OTkVDVElPTl9ERVRFQ1RPUl9ICisKKyNpbmNsdWRlICJCYXNlRHluYW1pY1NlbnNvckRhZW1vbi5oIgorI2luY2x1ZGUgPHV0aWxzL1RocmVhZC5oPgorCisjaW5jbHVkZSA8cmVnZXg+CisKKyNpbmNsdWRlIDxwb2xsLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBTZW5zb3JIYWxFeHQgeworCisvLyBBYnN0cmFjdGlvbiBvZiBjb25uZWN0aW9uIGRldGVjdG9yOiBhbiBlbnRpdHkgdGhhdCBjYWxscworLy8gQmFzZUR5bmFtaWNTZW5zb3JEYWVtb246Om9uQ29ubmVjdGlvbkNoYW5nZSgpIHdoZW4gbmVjZXNzYXJ5LgorY2xhc3MgQ29ubmVjdGlvbkRldGVjdG9yIDogdmlydHVhbCBwdWJsaWMgUmVmQmFzZSB7CitwdWJsaWM6CisgICAgQ29ubmVjdGlvbkRldGVjdG9yKEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uICpkKSA6IG1EYWVtb24oZCkgeyB9CisgICAgdmlydHVhbCB+Q29ubmVjdGlvbkRldGVjdG9yKCkgPSBkZWZhdWx0OworcHJvdGVjdGVkOgorICAgIEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uKiBtRGFlbW9uOworfTsKKworLy8gT3BlbiBhIHNvY2tldCB0aGF0IGxpc3RlbiB0byBsb2NhbGhvc3Q6cG9ydCBhbmQgbm90aWZ5IHNlbnNvciBkYWVtb24gb2YgY29ubmVjdGlvbiBhbmQKKy8vIGRpc2Nvbm5lY3Rpb24gZXZlbnQgd2hlbiBzb2NrZXQgaXMgY29ubmVjdGVkIG9yIGRpc2Nvbm5lY3RlZCwgcmVzcGVjdGl2ZWx5LiBPbmx5IG9uZSBjb25jdXJyZW50CisvLyBjbGllbnQgaXMgYWNjZXB0ZWQuCitjbGFzcyBTb2NrZXRDb25uZWN0aW9uRGV0ZWN0b3IgOiBwdWJsaWMgQ29ubmVjdGlvbkRldGVjdG9yLCBwdWJsaWMgVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBTb2NrZXRDb25uZWN0aW9uRGV0ZWN0b3IoQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24gKmQsIGludCBwb3J0KTsKKyAgICB2aXJ0dWFsIH5Tb2NrZXRDb25uZWN0aW9uRGV0ZWN0b3IoKTsKK3ByaXZhdGU6CisgICAgLy8gaW1wbGVtZW50IHZpcnR1YWwgb2YgVGhyZWFkCisgICAgdmlydHVhbCBib29sIHRocmVhZExvb3AoKTsKKyAgICBpbnQgd2FpdEZvckNvbm5lY3Rpb24oKTsKKyAgICBzdGF0aWMgdm9pZCB3YWl0Rm9yRGlzY29ubmVjdGlvbihpbnQgY29ubkZkKTsKKworICAgIGludCBtTGlzdGVuRmQ7CisgICAgc3RkOjpzdHJpbmcgbURldmljZTsKK307CisKKy8vIERldGVjdCBmaWxlIGNoYW5nZSB1bmRlciBwYXRoIGFuZCBub3RpZnkgc2Vuc29yIGRhZW1vbiBvZiBjb25uZWN0aW9uIGFuZCBkaXNjb25uZWN0aW9uIGV2ZW50IHdoZW4KKy8vIGZpbGUgaXMgY3JlYXRlZCBpbiBvciByZW1vdmVkIGZyb20gdGhlIGRpcmVjdG9yeSwgcmVzcGVjdGl2ZWx5LgorY2xhc3MgRmlsZUNvbm5lY3Rpb25EZXRlY3RvciA6IHB1YmxpYyBDb25uZWN0aW9uRGV0ZWN0b3IsIHB1YmxpYyBUaHJlYWQgeworcHVibGljOgorICAgIEZpbGVDb25uZWN0aW9uRGV0ZWN0b3IoCisgICAgICAgICAgICBCYXNlRHluYW1pY1NlbnNvckRhZW1vbiAqZCwgY29uc3Qgc3RkOjpzdHJpbmcgJnBhdGgsIGNvbnN0IHN0ZDo6c3RyaW5nICZyZWdleCk7CisgICAgdmlydHVhbCB+RmlsZUNvbm5lY3Rpb25EZXRlY3RvcigpOworcHJpdmF0ZToKKyAgICAvLyBpbXBsZW1lbnQgdmlydHVhbCBvZiBUaHJlYWQKKyAgICB2aXJ0dWFsIGJvb2wgdGhyZWFkTG9vcCgpOworCisgICAgYm9vbCBtYXRjaGVzKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdDsKKyAgICB2b2lkIHByb2Nlc3NFeGlzdGluZ0ZpbGVzKCkgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgZ2V0RnVsbE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcgbmFtZSkgY29uc3Q7CisKKyAgICBzdGQ6OnN0cmluZyBtUGF0aDsKKyAgICBzdGQ6OnJlZ2V4IG1SZWdleDsKKyAgICBpbnQgbUlub3RpZnlGZDsKKyAgICBzdHJ1Y3QgcG9sbGZkIG1Qb2xsRmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBTZW5zb3JIYWxFeHQKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfU0VOU09SSEFMX0VYVF9EWU5BTUlDX1NFTlNPUl9EQUVNT05fSApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0R1bW15RHluYW1pY0FjY2VsRGFlbW9uLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9EdW1teUR5bmFtaWNBY2NlbERhZW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk3Nzk2NwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9EdW1teUR5bmFtaWNBY2NlbERhZW1vbi5jcHAKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiQmFzZVNlbnNvck9iamVjdC5oIgorI2luY2x1ZGUgIkNvbm5lY3Rpb25EZXRlY3Rvci5oIgorI2luY2x1ZGUgIkR1bW15RHluYW1pY0FjY2VsRGFlbW9uLmgiCisjaW5jbHVkZSAiRHluYW1pY1NlbnNvck1hbmFnZXIuaCIKKworI2luY2x1ZGUgPGN1dGlscy9wcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisjaW5jbHVkZSA8dXRpbHMvU3lzdGVtQ2xvY2suaD4KKyNpbmNsdWRlIDx1dGlscy9taXNjLmg+CisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4gICAgICAgICAgICAvL3N0ZDo6bWF4CisKKyNkZWZpbmUgU1lTUFJPUF9QUkVGSVggICAgICAgICAgICAgICAgICAiZHluYW1pY19zZW5zb3IuZHVtbXkiCisjZGVmaW5lIEZJTEVfTkFNRV9CQVNFICAgICAgICAgICAgICAgICAgImR1bW15X2FjY2VsX2ZpbGUiCisjZGVmaW5lIEZJTEVfTkFNRV9SRUdFWCAgICAgICAgICAgICAgICAgKCJeIiBGSUxFX05BTUVfQkFTRSAiWzAtOV0kIikKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIFNlbnNvckhhbEV4dCB7CisKK0R1bW15RHluYW1pY0FjY2VsRGFlbW9uOjpEdW1teUR5bmFtaWNBY2NlbERhZW1vbihEeW5hbWljU2Vuc29yTWFuYWdlciYgbWFuYWdlcikKKyAgICAgICAgOiBCYXNlRHluYW1pY1NlbnNvckRhZW1vbihtYW5hZ2VyKSB7CisgICAgY2hhciBwcm9wZXJ0eVtQUk9QRVJUWV9WQUxVRV9NQVgrMV07CisKKyAgICBwcm9wZXJ0eV9nZXQoU1lTUFJPUF9QUkVGSVggIi5maWxlIiwgcHJvcGVydHksICIiKTsKKyAgICBpZiAoc3RyY21wKHByb3BlcnR5LCAiIikgIT0gMCkgeworICAgICAgICBtRmlsZURldGVjdG9yID0gbmV3IEZpbGVDb25uZWN0aW9uRGV0ZWN0b3IoCisgICAgICAgICAgICAgICAgdGhpcywgc3RkOjpzdHJpbmcocHJvcGVydHkpLCBzdGQ6OnN0cmluZyhGSUxFX05BTUVfUkVHRVgpKTsKKyAgICB9CisKKyAgICBwcm9wZXJ0eV9nZXQoU1lTUFJPUF9QUkVGSVggIi5zb2NrZXQiLCBwcm9wZXJ0eSwgIiIpOworICAgIGlmIChzdHJjbXAocHJvcGVydHksICIiKSAhPSAwKSB7CisgICAgICAgIG1Tb2NrZXREZXRlY3RvciA9IG5ldyBTb2NrZXRDb25uZWN0aW9uRGV0ZWN0b3IodGhpcywgYXRvaShwcm9wZXJ0eSkpOworICAgIH0KK30KKworQmFzZVNlbnNvck9iamVjdCAqIER1bW15RHluYW1pY0FjY2VsRGFlbW9uOjpjcmVhdGVTZW5zb3IoY29uc3Qgc3RkOjpzdHJpbmcgJmRldmljZUtleSkgeworICAgIGlmIChkZXZpY2VLZXkuY29tcGFyZSgwLCAxLCAiLyIpID09IDApIHsKKyAgICAgICAgLy8gZmlsZSBkZXRlY3RvciByZXN1bHQsIGRldmljZUtleSBpcyBmaWxlIGFic29sdXRlIHBhdGgKKyAgICAgICAgc2l6ZV90IHN0YXJ0ID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlS2V5Lmxlbmd0aCgpIC0gKDo6c3RybGVuKEZJTEVfTkFNRV9CQVNFKSArIDEpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBEdW1teVNlbnNvcihkZXZpY2VLZXkuc3Vic3RyKHN0YXJ0KSk7CisKKyAgICB9IGVsc2UgaWYgKGRldmljZUtleS5jb21wYXJlKDAsIDo6c3RybGVuKCJzb2NrZXQ6IiksICJzb2NrZXQ6IikgPT0gMCkgeworICAgICAgICByZXR1cm4gbmV3IER1bW15U2Vuc29yKGRldmljZUtleSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gdW5rbm93biBkZXZpY2VLZXkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCitEdW1teUR5bmFtaWNBY2NlbERhZW1vbjo6RHVtbXlTZW5zb3I6OkR1bW15U2Vuc29yKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSA6IG1SdW5TdGF0ZShmYWxzZSkgeworICAgIG1TZW5zb3JOYW1lID0gIkR1bW15IEFjY2VsIC0gIiArIG5hbWU7CisgICAgbVNlbnNvciA9IChzdHJ1Y3Qgc2Vuc29yX3QpIHsKKyAgICAgICAgbVNlbnNvck5hbWUuY19zdHIoKSwKKyAgICAgICAgIkRlbW9TZW5zZSwgSW5jLiIsCisgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2ZXJzaW9uCisgICAgICAgIC0xLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUsIGR1bW15IG51bWJlciBoZXJlCisgICAgICAgIFNFTlNPUl9UWVBFX0FDQ0VMRVJPTUVURVIsCisgICAgICAgIDkuOCAqIDguMGYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXhSYW5nZQorICAgICAgICA5LjggKiA4LjBmIC8gMzI3NjguMGYsICAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x1dGlvbgorICAgICAgICAwLjVmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG93ZXIKKyAgICAgICAgKGludDMyX3QpKDEuMEU2ZiAvIDUwKSwgICAgICAgICAgICAgICAgICAgIC8vIG1pbkRlbGF5CisgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWZvUmVzZXJ2ZWRFdmVudENvdW50CisgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWZvTWF4RXZlbnRDb3VudAorICAgICAgICBTRU5TT1JfU1RSSU5HX1RZUEVfQUNDRUxFUk9NRVRFUiwKKyAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmVkUGVybWlzc2lvbgorICAgICAgICAobG9uZykoMS4wRTZmIC8gNTApLCAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4RGVsYXkKKyAgICAgICAgU0VOU09SX0ZMQUdfQ09OVElOVU9VU19NT0RFLAorICAgICAgICB7IE5VTEwsIE5VTEwgfQorICAgIH07CisgICAgbVJ1bkxvY2subG9jaygpOworICAgIHJ1bigiRHVtbXlTZW5zb3IiKTsKK30KKworRHVtbXlEeW5hbWljQWNjZWxEYWVtb246OkR1bW15U2Vuc29yOjp+RHVtbXlTZW5zb3IoKSB7CisgICAgcmVxdWVzdEV4aXRBbmRXYWl0KCk7CisgICAgLy8gdW5sb2NrIG1SdW5Mb2NrIHNvIHRocmVhZCBjYW4gYmUgdW5ibG9ja2VkCisgICAgbVJ1bkxvY2sudW5sb2NrKCk7Cit9CisKK2NvbnN0IHNlbnNvcl90KiBEdW1teUR5bmFtaWNBY2NlbERhZW1vbjo6RHVtbXlTZW5zb3I6OmdldFNlbnNvcigpIGNvbnN0IHsKKyAgICByZXR1cm4gJm1TZW5zb3I7Cit9CisKK3ZvaWQgRHVtbXlEeW5hbWljQWNjZWxEYWVtb246OkR1bW15U2Vuc29yOjpnZXRVdWlkKHVpbnQ4X3QqIHV1aWQpIGNvbnN0IHsKKyAgICAvLyBhdCBtYXhpbXVtLCB0aGVyZSB3aWxsIGJlIGFsd2F5cyBvbmUgaW5zdGFuY2UsIHNvIHdlIGNhbiBoYXJkY29kZQorICAgIHNpemVfdCBoYXNoID0gc3RkOjpoYXNoPHN0ZDo6c3RyaW5nPigpKG1TZW5zb3JOYW1lKTsKKyAgICBtZW1zZXQodXVpZCwgJ3gnLCAxNik7CisgICAgbWVtY3B5KHV1aWQsICZoYXNoLCBzaXplb2YoaGFzaCkpOworfQorCitpbnQgRHVtbXlEeW5hbWljQWNjZWxEYWVtb246OkR1bW15U2Vuc29yOjplbmFibGUoYm9vbCBlbmFibGUpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGsobUxvY2spOworICAgIGlmIChtUnVuU3RhdGUgIT0gZW5hYmxlKSB7CisgICAgICAgIGlmIChlbmFibGUpIHsKKyAgICAgICAgICAgIG1SdW5Mb2NrLnVubG9jaygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVJ1bkxvY2subG9jaygpOworICAgICAgICB9CisgICAgICAgIG1SdW5TdGF0ZSA9IGVuYWJsZTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBEdW1teUR5bmFtaWNBY2NlbERhZW1vbjo6RHVtbXlTZW5zb3I6OmJhdGNoKG5zZWNzX3QsIG5zZWNzX3QpIHsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBEdW1teUR5bmFtaWNBY2NlbERhZW1vbjo6RHVtbXlTZW5zb3I6OndhaXRVbnRpbE5leHRTYW1wbGUoKSB7CisgICAgLy8gYmxvY2sgd2hlbiBkaXNhYmxlZCAobVJ1bkxvY2sgbG9ja2VkKQorICAgIG1SdW5Mb2NrLmxvY2soKTsKKyAgICBtUnVuTG9jay51bmxvY2soKTsKKworICAgIGlmICghVGhyZWFkOjpleGl0UGVuZGluZygpKSB7CisgICAgICAgIC8vIHNsZWVwIDIwIG1zICg1MEh6KQorICAgICAgICB1c2xlZXAoMjAwMDApOworICAgIH0KK30KKworYm9vbCBEdW1teUR5bmFtaWNBY2NlbERhZW1vbjo6RHVtbXlTZW5zb3I6OnRocmVhZExvb3AoKSB7CisgICAgLy8gZGVzaWduYXRlZCBpbnRpYWxpemF0aW9uIHdpbGwgbGVhdmUgdGhlIHVuc3BlY2lmaWVkIGZpZWxkcyB6ZXJvZWQKKyAgICBzZW5zb3JzX2V2ZW50X3QgZXZlbnQgPSB7CisgICAgICAgIC52ZXJzaW9uID0gc2l6ZW9mKGV2ZW50KSwKKyAgICAgICAgLnNlbnNvciA9IC0xLAorICAgICAgICAudHlwZSA9IFNFTlNPUl9UWVBFX0FDQ0VMRVJPTUVURVIsCisgICAgfTsKKworICAgIGludDY0X3Qgc3RhcnRUaW1lTnMgPSBlbGFwc2VkUmVhbHRpbWVOYW5vKCk7CisKKyAgICBBTE9HSSgiRHluYW1pYyBEdW1teSBBY2NlbCBzdGFydGVkIGZvciBzZW5zb3IgJXMiLCBtU2Vuc29yTmFtZS5jX3N0cigpKTsKKyAgICB3aGlsZSAoIVRocmVhZDo6ZXhpdFBlbmRpbmcoKSkgeworICAgICAgICB3YWl0VW50aWxOZXh0U2FtcGxlKCk7CisKKyAgICAgICAgaWYgKFRocmVhZDo6ZXhpdFBlbmRpbmcoKSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaW50NjRfdCBub3dUaW1lTnMgPSBlbGFwc2VkUmVhbHRpbWVOYW5vKCk7CisgICAgICAgIGZsb2F0IHQgPSAobm93VGltZU5zIC0gc3RhcnRUaW1lTnMpIC8gMWU5ZjsKKworICAgICAgICBldmVudC5kYXRhWzBdID0gMiAqIDo6c2luKDMgKiBNX1BJICogdCk7CisgICAgICAgIGV2ZW50LmRhdGFbMV0gPSAzICogOjpjb3MoMyAqIE1fUEkgKiB0KTsKKyAgICAgICAgZXZlbnQuZGF0YVsyXSA9IDEuNSAqIDo6c2luKDYgKiBNX1BJICogdCk7CisgICAgICAgIGV2ZW50LnRpbWVzdGFtcCA9IG5vd1RpbWVOczsKKyAgICAgICAgZ2VuZXJhdGVFdmVudChldmVudCk7CisgICAgfQorCisgICAgQUxPR0koIkR5bmFtaWMgRHVtbXkgQWNjZWwgdGhyZWFkIGVuZGVkIGZvciBzZW5zb3IgJXMiLCBtU2Vuc29yTmFtZS5jX3N0cigpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFNlbnNvckhhbEV4dAorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvRHVtbXlEeW5hbWljQWNjZWxEYWVtb24uaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9EdW1teUR5bmFtaWNBY2NlbERhZW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZmZiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvRHVtbXlEeW5hbWljQWNjZWxEYWVtb24uaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX1NFTlNPUkhBTF9FWFRfRFVNTVlfRFlOQU1JQ19BQ0NFTF9EQUVNT05fSAorI2RlZmluZSBBTkRST0lEX1NFTlNPUkhBTF9FWFRfRFVNTVlfRFlOQU1JQ19BQ0NFTF9EQUVNT05fSAorCisjaW5jbHVkZSAiQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24uaCIKKyNpbmNsdWRlICJCYXNlU2Vuc29yT2JqZWN0LmgiCisKKyNpbmNsdWRlIDxoYXJkd2FyZS9zZW5zb3JzLmg+CisjaW5jbHVkZSA8dXRpbHMvVGhyZWFkLmg+CisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIFNlbnNvckhhbEV4dCB7CisKK2NsYXNzIENvbm5lY3Rpb25EZXRlY3RvcjsKKworLyoqCisgKiBUaGlzIGRhZW1vbiBzaW11bGF0ZXMgZHluYW1pYyBzZW5zb3IgY29ubmVjdGlvbiB3aXRob3V0IHRoZSBuZWVkIG9mIGFjdHVhbGx5IGNvbm5lY3QgcGVyaXBoZXJhbAorICogdG8gQW5kcm9pZC4gSXQgaXMgZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZy4gSXQgY2FuIGhhbmRsZSBvbmUgY29uY3VycmVudCBjb25uZWN0aW9ucyBhdCBtYXhpbXVtLgorICovCitjbGFzcyBEdW1teUR5bmFtaWNBY2NlbERhZW1vbiA6IHB1YmxpYyBCYXNlRHluYW1pY1NlbnNvckRhZW1vbiB7CitwdWJsaWM6CisgICAgRHVtbXlEeW5hbWljQWNjZWxEYWVtb24oRHluYW1pY1NlbnNvck1hbmFnZXImIG1hbmFnZXIpOworICAgIHZpcnR1YWwgfkR1bW15RHluYW1pY0FjY2VsRGFlbW9uKCkgPSBkZWZhdWx0OworcHJpdmF0ZToKKyAgICBjbGFzcyBEdW1teVNlbnNvciA6IHB1YmxpYyBCYXNlU2Vuc29yT2JqZWN0LCBwdWJsaWMgVGhyZWFkIHsKKyAgICBwdWJsaWM6CisgICAgICAgIER1bW15U2Vuc29yKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKyAgICAgICAgfkR1bW15U2Vuc29yKCk7CisgICAgICAgIHZpcnR1YWwgY29uc3Qgc2Vuc29yX3QqIGdldFNlbnNvcigpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0VXVpZCh1aW50OF90KiB1dWlkKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQgZW5hYmxlKGJvb2wgZW5hYmxlKTsKKyAgICAgICAgdmlydHVhbCBpbnQgYmF0Y2gobnNlY3NfdCBzYW1wbGVfcGVyaW9kLCBuc2Vjc190IGJhdGNoX3BlcmlvZCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gaW1wbGVtZW50IFRocmVhZCBmdW5jdGlvbgorICAgICAgICB2aXJ0dWFsIGJvb2wgdGhyZWFkTG9vcCgpIG92ZXJyaWRlOworCisgICAgICAgIHZvaWQgd2FpdFVudGlsTmV4dFNhbXBsZSgpOworCisgICAgICAgIHNlbnNvcl90IG1TZW5zb3I7CisgICAgICAgIHN0ZDo6c3RyaW5nIG1TZW5zb3JOYW1lOworCisgICAgICAgIHN0ZDo6bXV0ZXggbUxvY2s7CisgICAgICAgIHN0ZDo6bXV0ZXggbVJ1bkxvY2s7CisgICAgICAgIGJvb2wgbVJ1blN0YXRlOworICAgIH07CisgICAgLy8gaW1wbGVtZW50IEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uIGZ1bmN0aW9uCisgICAgQmFzZVNlbnNvck9iamVjdCAqIGNyZWF0ZVNlbnNvcihjb25zdCBzdGQ6OnN0cmluZyAmZGV2aWNlS2V5KSBvdmVycmlkZTsKKworICAgIHNwPENvbm5lY3Rpb25EZXRlY3Rvcj4gbUZpbGVEZXRlY3RvcjsKKyAgICBzcDxDb25uZWN0aW9uRGV0ZWN0b3I+IG1Tb2NrZXREZXRlY3RvcjsKK307Cit9IC8vIG5hbWVzcGFjZSBTZW5zb3JIYWxFeHQKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfU0VOU09SSEFMX0VYVF9EWU5BTUlDX1NFTlNPUl9EQUVNT05fSAorCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvRHluYW1pY1NlbnNvck1hbmFnZXIuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0R5bmFtaWNTZW5zb3JNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjQ5MDNkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0R5bmFtaWNTZW5zb3JNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJCYXNlRHluYW1pY1NlbnNvckRhZW1vbi5oIgorI2luY2x1ZGUgIkJhc2VTZW5zb3JPYmplY3QuaCIKKyNpbmNsdWRlICJEdW1teUR5bmFtaWNBY2NlbERhZW1vbi5oIgorI2luY2x1ZGUgIkR5bmFtaWNTZW5zb3JNYW5hZ2VyLmgiCisKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKyNpbmNsdWRlIDx1dGlscy9TeXN0ZW1DbG9jay5oPgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIFNlbnNvckhhbEV4dCB7CisKK0R5bmFtaWNTZW5zb3JNYW5hZ2VyKiBEeW5hbWljU2Vuc29yTWFuYWdlcjo6Y3JlYXRlSW5zdGFuY2UoCisgICAgICAgIGludCBoYW5kbGVCYXNlLCBpbnQgaGFuZGxlQ291bnQsIFNlbnNvckV2ZW50Q2FsbGJhY2sgKmNhbGxiYWNrKSB7CisgICAgYXV0byBtID0gbmV3IER5bmFtaWNTZW5zb3JNYW5hZ2VyKGhhbmRsZUJhc2UsIGhhbmRsZUJhc2UgKyBoYW5kbGVDb3VudCAtIDEsIGNhbGxiYWNrKTsKKyAgICBtLT5tRGFlbW9uVmVjdG9yLnB1c2hfYmFjayhuZXcgRHVtbXlEeW5hbWljQWNjZWxEYWVtb24oKm0pKTsKKyAgICByZXR1cm4gbTsKK30KKworRHluYW1pY1NlbnNvck1hbmFnZXI6OkR5bmFtaWNTZW5zb3JNYW5hZ2VyKAorICAgICAgICBpbnQgaGFuZGxlQmFzZSwgaW50IGhhbmRsZU1heCwgU2Vuc29yRXZlbnRDYWxsYmFjayogY2FsbGJhY2spIDoKKyAgICAgICAgbUhhbmRsZVJhbmdlKGhhbmRsZUJhc2UsIGhhbmRsZU1heCksCisgICAgICAgIG1DYWxsYmFjayhjYWxsYmFjayksCisgICAgICAgIG1GaWZvKGNhbGxiYWNrID8gMCA6IGtGaWZvU2l6ZSksCisgICAgICAgIG1OZXh0SGFuZGxlKGhhbmRsZUJhc2UrMSkgeworICAgIGFzc2VydChoYW5kbGVCYXNlID4gMCAmJiBoYW5kbGVNYXggPiBoYW5kbGVCYXNlICsgMSk7IC8vIGhhbmRsZUJhc2UgaXMgcmVzZXJ2ZWQKKworICAgIG1NZXRhU2Vuc29yID0gKGNvbnN0IHNlbnNvcl90KSB7CisgICAgICAgICJEeW5hbWljIFNlbnNvciBNYW5hZ2VyIiwKKyAgICAgICAgIkdvb2dsZSIsCisgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmVyc2lvbgorICAgICAgICBoYW5kbGVCYXNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZQorICAgICAgICBTRU5TT1JfVFlQRV9EWU5BTUlDX1NFTlNPUl9NRVRBLAorICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heFJhbmdlCisgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x1dGlvbgorICAgICAgICAxZS02ZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvd2VyLCB2ZXJ5IHNtYWxsIG51bWJlciBpbnN0ZWFkIG9mIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBzaWd1bGFyaXR5IGluIGFwcAorICAgICAgICAoaW50MzJfdCkoMTAwMCksICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1pbkRlbGF5CisgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlmb1Jlc2VydmVkRXZlbnRDb3VudAorICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpZm9NYXhFdmVudENvdW50CisgICAgICAgIFNFTlNPUl9TVFJJTkdfVFlQRV9EWU5BTUlDX1NFTlNPUl9NRVRBLAorICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmVkUGVybWlzc2lvbgorICAgICAgICAobG9uZykoMTAwMCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heERlbGF5CisgICAgICAgIFNFTlNPUl9GTEFHX1NQRUNJQUxfUkVQT1JUSU5HX01PREUgfCBTRU5TT1JfRkxBR19XQUtFX1VQLAorICAgICAgICB7IE5VTEwsIE5VTEwgfQorICAgIH07Cit9CisKK0R5bmFtaWNTZW5zb3JNYW5hZ2VyOjp+RHluYW1pY1NlbnNvck1hbmFnZXIoKSB7CisgICAgLy8gZnJlZSBhbGwgZGFlbW9ucyBmaXJzdAorICAgIG1EYWVtb25WZWN0b3IuY2xlYXIoKTsKK30KKworYm9vbCBEeW5hbWljU2Vuc29yTWFuYWdlcjo6b3ducyhpbnQgaGFuZGxlKSBjb25zdCB7CisgICAgcmV0dXJuIGhhbmRsZSA+PSBtSGFuZGxlUmFuZ2UuZmlyc3QgJiYgaGFuZGxlIDwgbUhhbmRsZVJhbmdlLnNlY29uZDsKK30KKworaW50IER5bmFtaWNTZW5zb3JNYW5hZ2VyOjphY3RpdmF0ZShpbnQgaGFuZGxlLCBib29sIGVuYWJsZSkgeworICAgIGlmIChoYW5kbGUgPT0gbUhhbmRsZVJhbmdlLmZpcnN0KSB7CisgICAgICAgIC8vIGlnbm9yZWQKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gaW4gY2FzZSB0aGVyZSBpcyBhIHBlbmRpbmcgcmVwb3J0LCBub3cgaXQgaXMgdGltZSB0byByZW1vdmUgaXQgYXMgaXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKyAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsayhtTG9jayk7CisgICAgICAgIG1QZW5kaW5nUmVwb3J0LmVyYXNlKGhhbmRsZSk7CisgICAgfQorCisgICAgcmV0dXJuIG9wZXJhdGVTZW5zb3IoaGFuZGxlLAorICAgICAgICAgICAgWyZlbmFibGVdIChzcDxCYXNlU2Vuc29yT2JqZWN0PiBzKS0+aW50IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcy0+ZW5hYmxlKGVuYWJsZSk7CisgICAgICAgICAgICB9KTsKK30KKworaW50IER5bmFtaWNTZW5zb3JNYW5hZ2VyOjpiYXRjaChpbnQgaGFuZGxlLCBuc2Vjc190IHNhbXBsZV9wZXJpb2QsIG5zZWNzX3QgYmF0Y2hfcGVyaW9kKSB7CisgICAgaWYgKGhhbmRsZSA9PSBtSGFuZGxlUmFuZ2UuZmlyc3QpIHsKKyAgICAgICAgLy8gaWdub3JlZAorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG9wZXJhdGVTZW5zb3IoaGFuZGxlLAorICAgICAgICAgICAgWyZzYW1wbGVfcGVyaW9kLCAmYmF0Y2hfcGVyaW9kXSAoc3A8QmFzZVNlbnNvck9iamVjdD4gcyktPmludCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHMtPmJhdGNoKHNhbXBsZV9wZXJpb2QsIGJhdGNoX3BlcmlvZCk7CisgICAgICAgICAgICB9KTsKK30KKworaW50IER5bmFtaWNTZW5zb3JNYW5hZ2VyOjpzZXREZWxheShpbnQgaGFuZGxlLCBuc2Vjc190IHNhbXBsZV9wZXJpb2QpIHsKKyAgICByZXR1cm4gYmF0Y2goaGFuZGxlLCBzYW1wbGVfcGVyaW9kLCAwKTsKK30KKworaW50IER5bmFtaWNTZW5zb3JNYW5hZ2VyOjpmbHVzaChpbnQgaGFuZGxlKSB7CisgICAgaWYgKGhhbmRsZSA9PSBtSGFuZGxlUmFuZ2UuZmlyc3QpIHsKKyAgICAgICAgLy8gVE9ETzogc3VibWl0IGEgZmx1c2ggY29tcGxldGUgaGVyZQorICAgICAgICBzdGF0aWMgY29uc3Qgc2Vuc29yc19ldmVudF90IGV2ZW50ID0geworICAgICAgICAgICAgLnR5cGUgPSBTRU5TT1JfVFlQRV9NRVRBX0RBVEEsCisgICAgICAgICAgICAuc2Vuc29yID0gbUhhbmRsZVJhbmdlLmZpcnN0LAorICAgICAgICAgICAgLnRpbWVzdGFtcCA9IFRJTUVTVEFNUF9BVVRPX0ZJTEwsICAvLyB0aW1lc3RhbXAgd2lsbCBiZSBmaWxsZWQgYXQgZGlzcGF0Y2hlcgorICAgICAgICB9OworICAgICAgICBzdWJtaXRFdmVudChudWxscHRyLCBldmVudCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gb3BlcmF0ZVNlbnNvcihoYW5kbGUsIFtdIChzcDxCYXNlU2Vuc29yT2JqZWN0PiBzKS0+aW50IHtyZXR1cm4gcy0+Zmx1c2goKTt9KTsKK30KKworaW50IER5bmFtaWNTZW5zb3JNYW5hZ2VyOjpwb2xsKHNlbnNvcnNfZXZlbnRfdCAqIGRhdGEsIGludCBjb3VudCkgeworICAgIGFzc2VydChtQ2FsbGJhY2sgPT0gbnVsbHB0cik7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxrKG1GaWZvTG9jayk7CisgICAgcmV0dXJuIG1GaWZvLnJlYWQoZGF0YSwgY291bnQpOworfQorCitib29sIER5bmFtaWNTZW5zb3JNYW5hZ2VyOjpyZWdpc3RlclNlbnNvcihzcDxCYXNlU2Vuc29yT2JqZWN0PiBzZW5zb3IpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGsobUxvY2spOworICAgIGlmIChtUmV2ZXJzZU1hcC5maW5kKHNlbnNvci5nZXQoKSkgIT0gbVJldmVyc2VNYXAuZW5kKCkpIHsKKyAgICAgICAgQUxPR0UoInRyeWluZyB0byBhZGQgdGhlIHNhbWUgc2Vuc29yIHR3aWNlLCBpZ25vcmUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpbnQgaGFuZGxlID0gZ2V0TmV4dEF2YWlsYWJsZUhhbmRsZSgpOworICAgIGlmIChoYW5kbGUgPCAwKSB7CisgICAgICAgIEFMT0dFKCJSdW5uaW5nIG91dCBvZiBoYW5kbGUsIHF1aXQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyB0aGVzZSBlbXBsYWNlIHdpbGwgYWx3YXlzIGJlIHN1Y2Nlc3NmdWwKKyAgICBtTWFwLmVtcGxhY2UoaGFuZGxlLCBzZW5zb3IpOworICAgIG1SZXZlcnNlTWFwLmVtcGxhY2Uoc2Vuc29yLmdldCgpLCBoYW5kbGUpOworICAgIHNlbnNvci0+c2V0RXZlbnRDYWxsYmFjayh0aGlzKTsKKworICAgIGF1dG8gZW50cnkgPSBtUGVuZGluZ1JlcG9ydC5lbXBsYWNlKAorICAgICAgICAgICAgc3RkOjpwaWVjZXdpc2VfY29uc3RydWN0LAorICAgICAgICAgICAgc3RkOjpmb3J3YXJkX2FzX3R1cGxlKGhhbmRsZSksCisgICAgICAgICAgICBzdGQ6OmZvcndhcmRfYXNfdHVwbGUoaGFuZGxlLCBzZW5zb3IpKTsKKyAgICBpZiAoZW50cnkuc2Vjb25kKSB7CisgICAgICAgIHN1Ym1pdEV2ZW50KG51bGxwdHIsIGVudHJ5LmZpcnN0LT5zZWNvbmQuZ2VuZXJhdGVDb25uZWN0aW9uRXZlbnQobUhhbmRsZVJhbmdlLmZpcnN0KSk7CisgICAgfQorICAgIHJldHVybiBlbnRyeS5zZWNvbmQ7Cit9CisKK3ZvaWQgRHluYW1pY1NlbnNvck1hbmFnZXI6OnVucmVnaXN0ZXJTZW5zb3Ioc3A8QmFzZVNlbnNvck9iamVjdD4gc2Vuc29yKSB7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxrKG1Mb2NrKTsKKyAgICBhdXRvIGkgPSBtUmV2ZXJzZU1hcC5maW5kKHNlbnNvci5nZXQoKSk7CisgICAgaWYgKGkgPT0gbVJldmVyc2VNYXAuZW5kKCkpIHsKKyAgICAgICAgQUxPR0UoImNhbm5vdCByZW1vdmUgYSBub24tZXhpc3Qgc2Vuc29yIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IGhhbmRsZSA9IGktPnNlY29uZDsKKyAgICBtUmV2ZXJzZU1hcC5lcmFzZShpKTsKKyAgICBtTWFwLmVyYXNlKGhhbmRsZSk7CisKKyAgICAvLyB3aWxsIG5vdCBjbGVhbiB1cCBtUGVuZGluZ1JlcG9ydCBoZXJlLCBpdCB3aWxsIGJlIGNsZWFuZWQgdXAgd2hlbiBhdCBmaXJzdCBhY3RpdmF0ZSBjYWxsLgorICAgIC8vIHNlbnNvcnNlcnZpY2UgaXMgZ3VyYW50ZWVkIHRvIGNhbGwgYWN0aXZhdGUgdXBvbiBhcnJpdmFsIG9mIGR5bmFtaWMgc2Vuc29yIG1ldGEgY29ubmVjdGlvbgorICAgIC8vIGV2ZW50LgorCisgICAgLy8gc2VuZCBkaXNjb25uZWN0aW9uIGV2ZW50CisgICAgc2Vuc29yc19ldmVudF90IGV2ZW50OworICAgIENvbm5lY3Rpb25SZXBvcnQ6OmZpbGxEaXNjb25uZWN0aW9uRXZlbnQoJmV2ZW50LCBtSGFuZGxlUmFuZ2UuZmlyc3QsIGhhbmRsZSk7CisgICAgc3VibWl0RXZlbnQobnVsbHB0ciwgZXZlbnQpOworfQorCitpbnQgRHluYW1pY1NlbnNvck1hbmFnZXI6OnN1Ym1pdEV2ZW50KHNwPEJhc2VTZW5zb3JPYmplY3Q+IHNvdXJjZSwgY29uc3Qgc2Vuc29yc19ldmVudF90ICZlKSB7CisgICAgaW50IGhhbmRsZTsKKyAgICBpZiAoc291cmNlID09IG51bGxwdHIpIHsKKyAgICAgICAgaGFuZGxlID0gbUhhbmRsZVJhbmdlLmZpcnN0OworICAgIH0gZWxzZSB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsayhtTG9jayk7CisgICAgICAgIGF1dG8gaSA9IG1SZXZlcnNlTWFwLmZpbmQoc291cmNlLmdldCgpKTsKKyAgICAgICAgaWYgKGkgPT0gbVJldmVyc2VNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIEFMT0dFKCJjYW5ub3Qgc3VibWl0IGV2ZW50IGZvciBzZW5zb3IgdGhhdCBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZCIpOworICAgICAgICAgICAgcmV0dXJuIE5BTUVfTk9UX0ZPVU5EOworICAgICAgICB9CisgICAgICAgIGhhbmRsZSA9IGktPnNlY29uZDsKKyAgICB9CisKKyAgICAvLyBtYWtpbmcgYSBjb3B5IG9mIGV2ZW50cywgcHJlcGFyZSBmb3IgZWRpdGluZworICAgIHNlbnNvcnNfZXZlbnRfdCBldmVudCA9IGU7CisgICAgZXZlbnQudmVyc2lvbiA9IHNpemVvZihldmVudCk7CisKKyAgICAvLyBzcGVjaWFsIGNhc2Ugb2YgZmx1c2ggY29tcGxldGUKKyAgICBpZiAoZXZlbnQudHlwZSA9PSBTRU5TT1JfVFlQRV9NRVRBX0RBVEEpIHsKKyAgICAgICAgZXZlbnQuc2Vuc29yID0gMDsKKyAgICAgICAgZXZlbnQubWV0YV9kYXRhLnNlbnNvciA9IGhhbmRsZTsKKyAgICB9IGVsc2UgeworICAgICAgICBldmVudC5zZW5zb3IgPSBoYW5kbGU7CisgICAgfQorCisgICAgLy8gc2V0IHRpbWVzdGFtcCBpZiBpdCBpcyBkZWZhdWx0IHZhbHVlCisgICAgaWYgKGV2ZW50LnRpbWVzdGFtcCA9PSBUSU1FU1RBTVBfQVVUT19GSUxMKSB7CisgICAgICAgIGV2ZW50LnRpbWVzdGFtcCA9IGVsYXBzZWRSZWFsdGltZU5hbm8oKTsKKyAgICB9CisKKyAgICBpZiAobUNhbGxiYWNrKSB7CisgICAgICAgIC8vIGV4dGVudGlvbiBtb2RlLCBjYWxsaW5nIGNhbGxiYWNrIGRpcmVjdGx5CisgICAgICAgIGludCByZXQ7CisKKyAgICAgICAgcmV0ID0gbUNhbGxiYWNrLT5zdWJtaXRFdmVudChudWxscHRyLCBldmVudCk7CisgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICBBTE9HRSgiRHluYW1pY1NlbnNvck1hbmFnZXIgY2FsbGJhY2sgZmFpbGVkLCByZXQ6ICVkIiwgcmV0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIHN0YW5kYWxvbmUgbW9kZSwgYWRkIGV2ZW50IHRvIGludGVybmFsIGJ1ZmZlciBmb3IgcG9sbCgpIHRvIHBpY2sgdXAKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxrKG1GaWZvTG9jayk7CisgICAgICAgIGlmIChtRmlmby53cml0ZSgmZXZlbnQsIDEpIDwgMCkgeworICAgICAgICAgICAgQUxPR0UoIkR5bmFtaWNTZW5zb3JNYW5hZ2VyIGZpZm8gZnVsbCIpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgRHluYW1pY1NlbnNvck1hbmFnZXI6OmdldE5leHRBdmFpbGFibGVIYW5kbGUoKSB7CisgICAgaWYgKG1OZXh0SGFuZGxlID09IG1IYW5kbGVSYW5nZS5zZWNvbmQpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gbU5leHRIYW5kbGUrKzsKK30KKworY29uc3Qgc2Vuc29yX3QmIER5bmFtaWNTZW5zb3JNYW5hZ2VyOjpnZXREeW5hbWljTWV0YVNlbnNvcigpIGNvbnN0IHsKKyAgICByZXR1cm4gbU1ldGFTZW5zb3I7Cit9CisKK0R5bmFtaWNTZW5zb3JNYW5hZ2VyOjpDb25uZWN0aW9uUmVwb3J0OjpDb25uZWN0aW9uUmVwb3J0KAorICAgICAgICBpbnQgaGFuZGxlLCBzcDxCYXNlU2Vuc29yT2JqZWN0PiBzZW5zb3IpIDoKKyAgICAgICAgbVNlbnNvcigqKHNlbnNvci0+Z2V0U2Vuc29yKCkpKSwKKyAgICAgICAgbU5hbWUobVNlbnNvci5uYW1lKSwKKyAgICAgICAgbVZlbmRvcihtU2Vuc29yLnZlbmRvciksCisgICAgICAgIG1QZXJtaXNzaW9uKG1TZW5zb3IucmVxdWlyZWRQZXJtaXNzaW9uKSwKKyAgICAgICAgbVN0cmluZ1R5cGUobVNlbnNvci5zdHJpbmdUeXBlKSwKKyAgICAgICAgbUdlbmVyYXRlZChmYWxzZSkgeworICAgIG1TZW5zb3IubmFtZSA9IG1OYW1lLmNfc3RyKCk7CisgICAgbVNlbnNvci52ZW5kb3IgPSBtVmVuZG9yLmNfc3RyKCk7CisgICAgbVNlbnNvci5yZXF1aXJlZFBlcm1pc3Npb24gPSBtUGVybWlzc2lvbi5jX3N0cigpOworICAgIG1TZW5zb3Iuc3RyaW5nVHlwZSA9IG1TdHJpbmdUeXBlLmNfc3RyKCk7CisgICAgbVNlbnNvci5oYW5kbGUgPSBoYW5kbGU7CisgICAgbWVtc2V0KCZtRXZlbnQsIDAsIHNpemVvZihtRXZlbnQpKTsKKyAgICBtRXZlbnQudmVyc2lvbiA9IHNpemVvZihtRXZlbnQpOworICAgIHNlbnNvci0+Z2V0VXVpZChtVXVpZCk7CisgICAgQUxPR1YoIkNvbm5lY3Rpb24gcmVwb3J0IGluaXQ6IG5hbWUgPSAlcywgaGFuZGxlID0gJWQiLCBtU2Vuc29yLm5hbWUsIG1TZW5zb3IuaGFuZGxlKTsKK30KKworRHluYW1pY1NlbnNvck1hbmFnZXI6OkNvbm5lY3Rpb25SZXBvcnQ6On5Db25uZWN0aW9uUmVwb3J0KCkgeworICAgIEFMT0dWKCJDb25uZWN0aW9uIHJlcG9ydCBkdG9yOiBuYW1lID0gJXMsIGhhbmRsZSA9ICVkIiwgbVNlbnNvci5uYW1lLCBtU2Vuc29yLmhhbmRsZSk7Cit9CisKK2NvbnN0IHNlbnNvcnNfZXZlbnRfdCYgRHluYW1pY1NlbnNvck1hbmFnZXI6OkNvbm5lY3Rpb25SZXBvcnQ6OgorICAgICAgICBnZW5lcmF0ZUNvbm5lY3Rpb25FdmVudChpbnQgbWV0YUhhbmRsZSkgeworICAgIGlmICghbUdlbmVyYXRlZCkgeworICAgICAgICBtRXZlbnQuc2Vuc29yID0gbWV0YUhhbmRsZTsKKyAgICAgICAgbUV2ZW50LnR5cGUgPSBTRU5TT1JfVFlQRV9EWU5BTUlDX1NFTlNPUl9NRVRBOworICAgICAgICBtRXZlbnQudGltZXN0YW1wID0gZWxhcHNlZFJlYWx0aW1lTmFubygpOworICAgICAgICBtRXZlbnQuZHluYW1pY19zZW5zb3JfbWV0YSA9CisgICAgICAgICAgICAgICAgKGR5bmFtaWNfc2Vuc29yX21ldGFfZXZlbnRfdCkge3RydWUsIG1TZW5zb3IuaGFuZGxlLCAmbVNlbnNvciwgezB9fTsKKyAgICAgICAgbWVtY3B5KCZtRXZlbnQuZHluYW1pY19zZW5zb3JfbWV0YS51dWlkLCAmbVV1aWQsIHNpemVvZihtRXZlbnQuZHluYW1pY19zZW5zb3JfbWV0YS51dWlkKSk7CisgICAgICAgIG1HZW5lcmF0ZWQgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gbUV2ZW50OworfQorCit2b2lkIER5bmFtaWNTZW5zb3JNYW5hZ2VyOjpDb25uZWN0aW9uUmVwb3J0OjoKKyAgICAgICAgZmlsbERpc2Nvbm5lY3Rpb25FdmVudChzZW5zb3JzX2V2ZW50X3QqIGV2ZW50LCBpbnQgbWV0YUhhbmRsZSwgaW50IGhhbmRsZSkgeworICAgIG1lbXNldChldmVudCwgMCwgc2l6ZW9mKHNlbnNvcnNfZXZlbnRfdCkpOworICAgIGV2ZW50LT52ZXJzaW9uID0gc2l6ZW9mKHNlbnNvcnNfZXZlbnRfdCk7CisgICAgZXZlbnQtPnNlbnNvciA9IG1ldGFIYW5kbGU7CisgICAgZXZlbnQtPnR5cGUgPSBTRU5TT1JfVFlQRV9EWU5BTUlDX1NFTlNPUl9NRVRBOworICAgIGV2ZW50LT50aW1lc3RhbXAgPSBlbGFwc2VkUmVhbHRpbWVOYW5vKCk7CisgICAgZXZlbnQtPmR5bmFtaWNfc2Vuc29yX21ldGEuY29ubmVjdGVkID0gZmFsc2U7CisgICAgZXZlbnQtPmR5bmFtaWNfc2Vuc29yX21ldGEuaGFuZGxlID0gaGFuZGxlOworfQorCit9IC8vIG5hbWVzcGFjZSBTZW5zb3JIYWxFeHQKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9EeW5hbWljU2Vuc29yTWFuYWdlci5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0R5bmFtaWNTZW5zb3JNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhmZDQ3MgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9EeW5hbWljU2Vuc29yTWFuYWdlci5oCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX1NFTlNPUkhBTF9FWFRfRFlOQU1JQ19TRU5TT1JfTUFOQUdFUl9ICisjZGVmaW5lIEFORFJPSURfU0VOU09SSEFMX0VYVF9EWU5BTUlDX1NFTlNPUl9NQU5BR0VSX0gKKworI2luY2x1ZGUgIlNlbnNvckV2ZW50Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJSaW5nQnVmZmVyLmgiCisjaW5jbHVkZSA8aGFyZHdhcmUvc2Vuc29ycy5oPgorI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KKworI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIFNlbnNvckhhbEV4dCB7CisKK2NsYXNzIEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uOworCitjbGFzcyBEeW5hbWljU2Vuc29yTWFuYWdlciA6IHB1YmxpYyBTZW5zb3JFdmVudENhbGxiYWNrIHsKK3B1YmxpYzoKKyAgICAvLyBoYW5kbGVCYXNlIGlzIHJlc2VydmVkIGZvciB0aGUgZHluYW1pYyBzZW5zb3IgbWV0YSBzZW5zb3IuCisgICAgLy8gaGFuZGxlTWF4IG11c3QgYmUgZ3JlYXRlciB0aGFuIGhhbmRsZUJhc2UgKyAxLgorICAgIC8vIFRoaXMgY2xhc3MgaGFzIHR3byBvcGVyYXRpb24gbW9kZSBkZXBlbmRpbmcgb24gY2FsbGJhY2s6IDEpIGV4dGVuc2lvbiwgMikgc3RhbmQtYWxvbmUuCisgICAgLy8gSW4gZXh0ZW5zaW9uIG1vZGUsIGNhbGxiYWNrIG11c3Qgbm90IGJlIG51bGxwdHIuIFNlbnNvciBldmVudCBnZW5lcmF0ZWQgd2lsbCBiZSBzdWJtaXR0ZWQgdG8KKyAgICAvLyBidWZmZXIgb2YgcHJpbWFyeSBzZW5zb3IgSEFMIGltcGxlbWVudGF0aW9uLiBJbiBzdGFuZC1hbG9uZSBtb2RlLCBjYWxsYmFjayBtdXN0IGJlIG51bGxwdHIuCisgICAgLy8gR2VuZXJhdGVkIHNlbnNvciBldmVudHMgd2lsbCBiZSBhZGRlZCBpbnRvIGludGVybmFsIGJ1ZmZlciB3YWl0aW5nIGZvciBwb2xsKCkgZnVuY3Rpb24gdG8KKyAgICAvLyBwaWNrIHVwLgorICAgIC8vCisgICAgc3RhdGljIER5bmFtaWNTZW5zb3JNYW5hZ2VyKiBjcmVhdGVJbnN0YW5jZSgKKyAgICAgICAgICAgIGludCBoYW5kbGVCYXNlLCBpbnQgaGFuZGxlQ291bnQsIFNlbnNvckV2ZW50Q2FsbGJhY2sgKmNhbGxiYWNrKTsKKyAgICB2aXJ0dWFsIH5EeW5hbWljU2Vuc29yTWFuYWdlcigpOworCisgICAgLy8gY2FsbHMgdG8gYWRkIG9yIHJlbW92ZSBzZW5zb3IsIGNhbGxlZCBmcm9tIHNlbnNvciBkYWVtb24KKyAgICBib29sIHJlZ2lzdGVyU2Vuc29yKHNwPEJhc2VTZW5zb3JPYmplY3Q+IHNlbnNvcik7CisgICAgdm9pZCB1bnJlZ2lzdGVyU2Vuc29yKHNwPEJhc2VTZW5zb3JPYmplY3Q+IHNlbnNvcik7CisKKyAgICAvLyBEZXRlcm1pbmUgaWYgYSBzZW5zb3IgaGFuZGxlIGlzIGluIHRoZSByYW5nZSBkZWZpbmVkIGluIGNvbnN0cnVjdG9yLgorICAgIC8vIEl0IGRvZXMgbm90IHRlc3QgaWYgc2Vuc29yIGhhbmRsZSBpcyB2YWxpZC4KKyAgICBib29sIG93bnMoaW50IGhhbmRsZSkgY29uc3Q7CisKKyAgICAvLyBoYW5kbGVzIHNlbnNvciBoYWwgcmVxdWVzdHMuCisgICAgaW50IGFjdGl2YXRlKGludCBoYW5kbGUsIGJvb2wgZW5hYmxlKTsKKyAgICBpbnQgYmF0Y2goaW50IGhhbmRsZSwgbnNlY3NfdCBzYW1wbGVfcGVyaW9kLCBuc2Vjc190IGJhdGNoX3BlcmlvZCk7CisgICAgaW50IHNldERlbGF5KGludCBoYW5kbGUsIG5zZWNzX3Qgc2FtcGxlX3BlcmlvZCk7CisgICAgaW50IGZsdXNoKGludCBoYW5kbGUpOworICAgIGludCBwb2xsKHNlbnNvcnNfZXZlbnRfdCAqIGRhdGEsIGludCBjb3VudCk7CisKKyAgICAvLyBTZW5zb3JFdmVudENhbGxiYWNrCisgICAgdmlydHVhbCBpbnQgc3VibWl0RXZlbnQoc3A8QmFzZVNlbnNvck9iamVjdD4sIGNvbnN0IHNlbnNvcnNfZXZlbnRfdCAmZSkgb3ZlcnJpZGU7CisKKyAgICAvLyBnZXQgbWV0YSBzZW5zb3Igc3RydWN0CisgICAgY29uc3Qgc2Vuc29yX3QmIGdldER5bmFtaWNNZXRhU2Vuc29yKCkgY29uc3Q7Citwcm90ZWN0ZWQ6CisgICAgRHluYW1pY1NlbnNvck1hbmFnZXIoaW50IGhhbmRsZUJhc2UsIGludCBoYW5kbGVNYXgsIFNlbnNvckV2ZW50Q2FsbGJhY2sqIGNhbGxiYWNrKTsKK3ByaXZhdGU6CisgICAgLy8gYSBoZWxwZXIgY2xhc3MgdXNlZCBmb3IgZ2VuZXJhdGUgY29ubmVjdGlvbiBhbmQgZGlzY29ubmVjdGlvbiByZXBvcnQKKyAgICBjbGFzcyBDb25uZWN0aW9uUmVwb3J0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIENvbm5lY3Rpb25SZXBvcnQoKSB7fQorICAgICAgICBDb25uZWN0aW9uUmVwb3J0KGludCBoYW5kbGUsIHNwPEJhc2VTZW5zb3JPYmplY3Q+IHNlbnNvcik7CisgICAgICAgIH5Db25uZWN0aW9uUmVwb3J0KCk7CisgICAgICAgIGNvbnN0IHNlbnNvcnNfZXZlbnRfdCYgZ2VuZXJhdGVDb25uZWN0aW9uRXZlbnQoaW50IG1ldGFIYW5kbGUpOworICAgICAgICBzdGF0aWMgdm9pZCBmaWxsRGlzY29ubmVjdGlvbkV2ZW50KHNlbnNvcnNfZXZlbnRfdCogZXZlbnQsIGludCBtZXRhSGFuZGxlLCBpbnQgaGFuZGxlKTsKKyAgICBwcml2YXRlOgorICAgICAgICBzZW5zb3JfdCBtU2Vuc29yOworICAgICAgICBzdGQ6OnN0cmluZyBtTmFtZTsKKyAgICAgICAgc3RkOjpzdHJpbmcgbVZlbmRvcjsKKyAgICAgICAgc3RkOjpzdHJpbmcgbVBlcm1pc3Npb247CisgICAgICAgIHN0ZDo6c3RyaW5nIG1TdHJpbmdUeXBlOworICAgICAgICBzZW5zb3JzX2V2ZW50X3QgbUV2ZW50OworICAgICAgICB1aW50OF90IG1VdWlkWzE2XTsKKyAgICAgICAgYm9vbCBtR2VuZXJhdGVkOworICAgICAgICBESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhDb25uZWN0aW9uUmVwb3J0KTsKKyAgICB9OworCisgICAgLy8gcmV0dXJucyBuZXh0IGF2YWlsYWJsZSBoYW5kbGUgdG8gdXNlIHVwb24gYSBuZXcgc2Vuc29yIGNvbm5lY3Rpb24sIG9yIC0xIGlmIHdlIHJ1biBvdXQuCisgICAgaW50IGdldE5leHRBdmFpbGFibGVIYW5kbGUoKTsKKworICAgIC8vIFRGOiAgaW50IGZvbyhzcDxCYXNlU2Vuc29yT2JqZWN0PiBvYmopOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBURj4KKyAgICBpbnQgb3BlcmF0ZVNlbnNvcihpbnQgaGFuZGxlLCBURiBmKSBjb25zdCB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsayhtTG9jayk7CisgICAgICAgIGNvbnN0IGF1dG8gaSA9IG1NYXAuZmluZChoYW5kbGUpOworICAgICAgICBpZiAoaSA9PSBtTWFwLmVuZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICB9CisgICAgICAgIHNwPEJhc2VTZW5zb3JPYmplY3Q+IHMgPSBpLT5zZWNvbmQucHJvbW90ZSgpOworICAgICAgICBpZiAocyA9PSBudWxscHRyKSB7CisgICAgICAgICAgICAvLyBzZW5zb3Igb2JqZWN0IGlzIGFscmVhZHkgZ29uZQorICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZihzKTsKKyAgICB9CisKKyAgICAvLyBhdmFpbGFibGUgc2Vuc29yIGhhbmRsZSBzcGFjZQorICAgIGNvbnN0IHN0ZDo6cGFpcjxpbnQsIGludD4gbUhhbmRsZVJhbmdlOworICAgIHNlbnNvcl90IG1NZXRhU2Vuc29yOworCisgICAgLy8gaW1tdXRhYmxlIHBvaW50ZXIgdG8gZXZlbnQgY2FsbGJhY2ssIHVzZWQgaW4gZXh0ZW50aW9uIG1vZGUuCisgICAgU2Vuc29yRXZlbnRDYWxsYmFjayAqIGNvbnN0IG1DYWxsYmFjazsKKworICAgIC8vIFJpbmdCdWZmZXIgdXNlZCBpbiBzdGFuZGFsb25lIG1vZGUKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBrRmlmb1NpemUgPSA0MDk2OyAvLzRLIGV2ZW50cworICAgIG11dGFibGUgc3RkOjptdXRleCBtRmlmb0xvY2s7CisgICAgUmluZ0J1ZmZlciBtRmlmbzsKKworICAgIC8vIG1hcHBpbmcgYmV0d2VlbiBoYW5kbGUgYW5kIFNlbnNvck9iamVjdHMKKyAgICBtdXRhYmxlIHN0ZDo6bXV0ZXggbUxvY2s7CisgICAgaW50IG1OZXh0SGFuZGxlOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxpbnQsIHdwPEJhc2VTZW5zb3JPYmplY3Q+ID4gbU1hcDsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8dm9pZCAqLCBpbnQ+IG1SZXZlcnNlTWFwOworICAgIG11dGFibGUgc3RkOjp1bm9yZGVyZWRfbWFwPGludCwgQ29ubmVjdGlvblJlcG9ydD4gbVBlbmRpbmdSZXBvcnQ7CisKKyAgICAvLyBkYWVtb25zCisgICAgc3RkOjp2ZWN0b3I8c3A8QmFzZUR5bmFtaWNTZW5zb3JEYWVtb24+PiBtRGFlbW9uVmVjdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgU2Vuc29ySGFsRXh0Cit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBBTkRST0lEX1NFTlNPUkhBTF9FWFRfRFlOQU1JQ19TRU5TT1JfTUFOQUdFUl9ICmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvQW5kcm9pZC5tayBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMWQ4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvQW5kcm9pZC5tawpAQCAtMCwwICsxLDk5IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitMT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCitDT01NT05fQ0ZMQUdTIDo9IC1XYWxsIC1XZXJyb3IgLVdleHRyYQorCitoaWRwYXJzZXJfc3JjIDo9IFwKKyAgICBIaWRHbG9iYWwuY3BwIFwKKyAgICBIaWRJdGVtLmNwcCBcCisgICAgSGlkTG9jYWwuY3BwIFwKKyAgICBIaWRQYXJzZXIuY3BwIFwKKyAgICBIaWRSZXBvcnQuY3BwIFwKKyAgICBIaWRUcmVlLmNwcAorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX01PRFVMRSA6PSBsaWJoaWRwYXJzZXIKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisjIGluZGVuZGVkIHRvIGJlIHVzZWQgYnkgaGFsIGNvbXBvbmVudHMsIHRodXMgcHJvcGlldGFyeQorTE9DQUxfUFJPUFJJRVRBUllfTU9EVUxFIDo9IHRydWUKKworTE9DQUxfQ0ZMQUdTICs9ICQoQ09NTU9OX0NGTEFHUykgLURMT0dfVEFHPVwiSGlkVXRpbFwiCitMT0NBTF9TUkNfRklMRVMgOj0gJChoaWRwYXJzZXJfc3JjKQorTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJiYXNlCitMT0NBTF9FWFBPUlRfQ19JTkNMVURFX0RJUlMgOj0gJChMT0NBTF9QQVRIKQoraW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQorCisjCisjIGhvc3Qgc2lkZSBzaGFyZWQgbGlicmFyeSAoZm9yIGhvc3QgdGVzdCwgZXhhbXBsZSwgZXRjKQorIworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9NT0RVTEUgOj0gbGliaGlkcGFyc2VyX2hvc3QKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK0xPQ0FMX0NGTEFHUyArPSAkKENPTU1PTl9DRkxBR1MpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGhpZHBhcnNlcl9zcmMpCisKK0xPQ0FMX0VYUE9SVF9DX0lOQ0xVREVfRElSUyA6PSAkKExPQ0FMX1BBVEgpCitpbmNsdWRlICQoQlVJTERfSE9TVF9TSEFSRURfTElCUkFSWSkKKworIworIyBFeGFtcGxlIG9mIEhpZFBhcnNlcgorIworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9NT0RVTEUgOj0gaGlkcGFyc2VyX2V4YW1wbGUKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK0xPQ0FMX0NGTEFHUyArPSAkKENPTU1PTl9DRkxBR1MpCitMT0NBTF9TUkNfRklMRVMgOj0gXAorICAgICQoaGlkcGFyc2VyX3NyYykgXAorICAgIHRlc3QvSGlkUGFyc2VyRXhhbXBsZS5jcHAgXAorICAgIHRlc3QvVGVzdEhpZERlc2NyaXB0b3IuY3BwCisKK0xPQ0FMX0NfSU5DTFVERVMgKz0gJChMT0NBTF9QQVRIKS90ZXN0CitpbmNsdWRlICQoQlVJTERfSE9TVF9FWEVDVVRBQkxFKQorCisjCisjIEFub3RoZXIgZXhhbXBsZSBvZiBIaWRQYXJzZXIKKyMKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IGhpZHBhcnNlcl9leGFtcGxlMgorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworTE9DQUxfQ0ZMQUdTICs9ICQoQ09NTU9OX0NGTEFHUykKK0xPQ0FMX1NSQ19GSUxFUyA6PSBcCisgICAgJChoaWRwYXJzZXJfc3JjKSBcCisgICAgdGVzdC9IaWRQYXJzZXJFeGFtcGxlMi5jcHAgXAorICAgIHRlc3QvVGVzdEhpZERlc2NyaXB0b3IuY3BwCisKK0xPQ0FMX0NfSU5DTFVERVMgKz0gJChMT0NBTF9QQVRIKS90ZXN0CitpbmNsdWRlICQoQlVJTERfSE9TVF9FWEVDVVRBQkxFKQorCisjCisjIFRlc3QgZm9yIFRyaVN0YXRlIHRlbXBsYXRlCisjCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX01PRFVMRSA6PSB0cmlzdGF0ZV90ZXN0CitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitMT0NBTF9DRkxBR1MgKz0gJChDT01NT05fQ0ZMQUdTKQorTE9DQUxfU1JDX0ZJTEVTIDo9IHRlc3QvVHJpU3RhdGVUZXN0LmNwcAorCitMT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IFwKKyAgICAgbGliZ3Rlc3QgXAorICAgICBsaWJndGVzdF9tYWluCisKK0xPQ0FMX0NfSU5DTFVERVMgKz0gJChMT0NBTF9QQVRIKS90ZXN0CitpbmNsdWRlICQoQlVJTERfSE9TVF9OQVRJVkVfVEVTVCkKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWREZWZzLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkRGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NDQ1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkRGVmcy5oCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgSElEVVRJTF9ISURERUZTX0hfCisjZGVmaW5lIEhJRFVUSUxfSElEREVGU19IXworCituYW1lc3BhY2UgSGlkVXRpbCB7CisKKy8vIEhJRCBzcGVjaWZpY2F0aW9uIGNvbnN0YW50cyBkZWZpbml0aW9uCisvLworLy8gRGVmaW5pdGlvbnMgYXJlIGZyb20gSElEIHNwZWNpZmljYXRpb24gdjEuMTEsIHdoaWNoIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGh0dHA6Ly93d3cudXNiLm9yZworLy8KKy8vIFByZWZlcnJlZCBuYW1lc3BhY2UgZm9yIG5hbWVzcGFjZSByZXN0cmljdGlvbiB0aGFuIGVudW0gY2xhc3MgYXMgZW51bSBjbGFzcyBoYXMgc3Ryb25nIHR5cGUKKy8vIHdoaWNoIGlzIGluY29udmVuaWVudCBpbiBhIHBhcnNlciwgaW4gd2hpY2ggaW5wdXQgYmluYXJ5IHZhbHVlcyBoYXMgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGVzZQorLy8gZGVmaW5pdGlvbnMgZnJlcXVuZXRseS4KK25hbWVzcGFjZSBIaWREZWYgeworLy8gSGlkIHNwZWMgNi4yLjIuMworbmFtZXNwYWNlIFRhZ1R5cGUgeworZW51bSB7CisgICAgTUFJTiwKKyAgICBHTE9CQUwsCisgICAgTE9DQUwsCisgICAgUkVTRVJWRUQKK307Cit9IC8vIG5hbWVzcGFjZSBUYWdUeXBlCisKKy8vIEhJRCBzcGVjIDYuMi4yLjQKK25hbWVzcGFjZSBSZXBvcnRGbGFnIHsKK2VudW0geworICAgIERBVEFfQ09OU1QgPSAxLAorICAgIEFSUkFZX1ZBUklBQkxFID0gMiwKKyAgICBXUkFQID0gNCwKKyAgICBOT05MSU5FQVIgPSA4LAorICAgIE5PX1BSRUZFUlJFRCA9IDB4MTAsCisgICAgTlVMTF9TVEFURSA9IDB4MjAsCisgICAgVk9MQVRJTEUgPSAweDQwLAorICAgIC8vIGJpdCA3IHJlc2VydmVkCisgICAgQlVGRkVSRURfQllURVMgPSAweDEwMAorfTsKK30gLy8gbmFtZXNwYWNlIFJlcG9ydEZsYWcKKworLy8gSElEIHNwZWMgNi4yLjIuNQorbmFtZXNwYWNlIE1haW5UYWcgeworZW51bSB7CisgICAgSU5QVVQgPSA4LAorICAgIE9VVFBVVCA9IDksCisgICAgQ09MTEVDVElPTiA9IDEwLAorICAgIEZFQVRVUkUgPSAxMSwKKyAgICBFTkRfQ09MTEVDVElPTiA9IDEyLAorICAgIExPTkdfSVRFTSA9IDE1LAorfTsKK30gLy8gbmFtZXNwYWNlIE1haW5UYWcKKworLy8gSElEIHNwZWMgNi4yLjIuNgorbmFtZXNwYWNlIENvbGxlY3Rpb25UeXBlIHsKK2VudW0geworICAgIFBIWVNJQ0FMID0gMCwKKyAgICBBUFBMSUNBVElPTiwKKyAgICBMT0dJQ0FMLAorICAgIFJFUE9SVCwKKyAgICBOQU1FRF9BUlJBWSwKKyAgICBVU0FHRV9TV0lUQ0gsCisgICAgVVNBR0VfTU9ESUZJRVIKK307Cit9IC8vIG5hbWVzcGFjZSBDb2xsZWN0aW9uVHlwZQorCisvLyBISUQgc3BlYyA2LjIuMi43CituYW1lc3BhY2UgR2xvYmFsVGFnIHsKK2VudW0geworICAgIFVTQUdFX1BBR0UsCisgICAgTE9HSUNBTF9NSU5JTVVNLAorICAgIExPR0lDQUxfTUFYSU1VTSwKKyAgICBQSFlTSUNBTF9NSU5JTVVNLAorICAgIFBIWVNJQ0FMX01BWElNVU0sCisgICAgVU5JVF9FWFBPTkVOVCwKKyAgICBVTklULAorICAgIFJFUE9SVF9TSVpFLAorICAgIFJFUE9SVF9JRCwKKyAgICBSRVBPUlRfQ09VTlQsCisgICAgUFVTSCwKKyAgICBQT1AKK307Cit9IC8vbmFtZXNwYWNlIEdsb2JhbFRhZworCisvLyBISUQgc3BlYyA2LjIuMi44CituYW1lc3BhY2UgTG9jYWxUYWcgeworZW51bSBIaWRMb2NhbFRhZyB7CisgICAgVVNBR0UsCisgICAgVVNBR0VfTUlOSU1VTSwKKyAgICBVU0FHRV9NQVhJTVVNLAorICAgIERFU0lHTkFUT1JfSU5ERVgsCisgICAgREVTSUdOQVRPUl9NSU5JTVVNLAorICAgIERFU0lHTkFUT1JfTUFYSU1VTSwKKyAgICAvLyB0aGVyZSBpcyBhIGhvbGUgaGVyZSBpbiB0aGUgc3BlYworICAgIFNUUklOR19JTkRFWCA9IDcsCisgICAgU1RSSU5HX01JTklNVU0sCisgICAgU1RSSU5HX01BWElNVU0sCisgICAgREVMSU1JVE9SCit9OworfSAvLyBuYW1lc3BhY2UgTG9jYWxUYWcKKworfSAvL25hbWVzcGFjZSBIaWREZWYKK30gLy9uYW1lc3BhY2UgSGlkVXRpbAorCisjZW5kaWYgLy8gSElEVVRJTF9ISURERUZTX0hfCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkR2xvYmFsLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRHbG9iYWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNDcxM2IKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkR2xvYmFsLmNwcApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSAiSGlkRGVmcy5oIgorI2luY2x1ZGUgIkhpZEdsb2JhbC5oIgorI2luY2x1ZGUgIkhpZExvZy5oIgorCituYW1lc3BhY2UgSGlkVXRpbCB7Cit1c2luZyBuYW1lc3BhY2UgSGlkRGVmOjpHbG9iYWxUYWc7CisKK2Jvb2wgSGlkR2xvYmFsOjphcHBlbmQoY29uc3QgSGlkSXRlbSAmaSkgeworICAgIHVzaW5nIG5hbWVzcGFjZSBIaWREZWY6OlRhZ1R5cGU7CisgICAgaWYgKGkudHlwZSAhPSBHTE9CQUwpIHsKKyAgICAgICAgTE9HX0UgPDwgIkhpZEdsb2JhbDo6YXBwZW5kIGNhbm5vdCBwcm9jZXNzIHRhZyB0aGF0IGlzIG5vdCBnbG9iYWwsICIgPDwgaSA8PCBMT0dfRU5ETDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChpLnRhZyA9PSBQVVNIIHx8IGkudGFnID09IFBPUCkgeworICAgICAgICBMT0dfRSA8PCAiUFVTSCBhbmQgUE9QIHNob3VsZCBiZSBoYW5kbGVkIGluIEhpZEdsb2JhbFN0YWNrLCAiIDw8IGkgPDwgTE9HX0VOREw7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgc2lnbmVkSW50ZWdlcjsKKyAgICB1bnNpZ25lZCB1bnNpZ25lZEludGVnZXI7CisgICAgYm9vbCBzaWduZWRFcnJvciA9ICFpLmRhdGFBc1NpZ25lZCgmc2lnbmVkSW50ZWdlcik7CisgICAgYm9vbCB1bnNpZ25lZEVycm9yID0gIWkuZGF0YUFzVW5zaWduZWQoJnVuc2lnbmVkSW50ZWdlcik7CisKKyAgICBib29sIHZhbHVlRXJyb3IgPSBmYWxzZTsKKyAgICBib29sIHJldCA9IHRydWU7CisgICAgc3dpdGNoIChpLnRhZykgeworICAgICAgICBjYXNlIFVTQUdFX1BBR0U6CisgICAgICAgICAgICB1c2FnZVBhZ2UgPSB1bnNpZ25lZEludGVnZXI7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gdW5zaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExPR0lDQUxfTUlOSU1VTToKKyAgICAgICAgICAgIGxvZ2ljYWxNaW4gPSBzaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTE9HSUNBTF9NQVhJTVVNOgorICAgICAgICAgICAgbG9naWNhbE1heCA9IHNpZ25lZEludGVnZXI7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQSFlTSUNBTF9NSU5JTVVNOgorICAgICAgICAgICAgcGh5c2ljYWxNaW4gPSBzaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUEhZU0lDQUxfTUFYSU1VTToKKyAgICAgICAgICAgIHBoeXNpY2FsTWF4ID0gc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSBzaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVOSVRfRVhQT05FTlQ6CisgICAgICAgICAgICBleHBvbmVudCA9IHVuc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSB1bnNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVU5JVDoKKyAgICAgICAgICAgIHVuaXQgPSB1bnNpZ25lZEludGVnZXI7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gdW5zaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJFUE9SVF9TSVpFOgorICAgICAgICAgICAgcmVwb3J0U2l6ZSA9IHVuc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSB1bnNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkVQT1JUX0lEOgorICAgICAgICAgICAgcmVwb3J0SWQgPSB1bnNpZ25lZEludGVnZXI7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gdW5zaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJFUE9SVF9DT1VOVDoKKyAgICAgICAgICAgIHJlcG9ydENvdW50ID0gdW5zaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHVuc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIExPR19FIDw8ICJ1bmtub3duIGdsb2JhbCB0YWcsICIgPDwgaSA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgIH0KKworICAgIGlmICh2YWx1ZUVycm9yKSB7CisgICAgICAgIExPR19FIDw8ICJDYW5ub3QgZ2V0IHNpZ25lZCAvIHVuc2lnbmVkIGRhdGEgYXQgIiA8PCBpIDw8IExPR19FTkRMOworICAgICAgICByZXQgPSBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworYm9vbCBIaWRHbG9iYWxTdGFjazo6YXBwZW5kKGNvbnN0IEhpZEl0ZW0gJmkpIHsKKyAgICB1c2luZyBuYW1lc3BhY2UgSGlkRGVmOjpUYWdUeXBlOworICAgIGlmIChpLnR5cGUgIT0gR0xPQkFMKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHJldCA9IHRydWU7CisgICAgaWYgKGkudGFnID09IFBVU0gpIHsKKyAgICAgICAgbVN0YWNrLnB1c2hfYmFjayh0b3AoKSk7CisgICAgfSBlbHNlIGlmIChpLnRhZyA9PSBQT1ApIHsKKyAgICAgICAgbVN0YWNrLnBvcF9iYWNrKCk7CisgICAgICAgIGlmIChtU3RhY2suc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIG1TdGFjay5wdXNoX2JhY2soSGlkR2xvYmFsKCkpOyAvLyBmYWlsLXNhZmUKKyAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0ID0gbVN0YWNrLmJhY2soKS5hcHBlbmQoaSk7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK0hpZEdsb2JhbFN0YWNrOjpIaWRHbG9iYWxTdGFjaygpIHsKKyAgICAvLyBkZWZhdWx0IGVsZW1lbnQKKyAgICBtU3RhY2sucHVzaF9iYWNrKEhpZEdsb2JhbCgpKTsKK30KKworY29uc3QgSGlkR2xvYmFsJiBIaWRHbG9iYWxTdGFjazo6dG9wKCkgY29uc3QgeworICAgIHJldHVybiBtU3RhY2suYmFjaygpOworfQorCit9IC8vIG5hbWVzcGFjZSBIaWRVdGlsCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkR2xvYmFsLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkR2xvYmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxMzlkMAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRHbG9iYWwuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgSElEVVRJTF9ISURHTE9CQUxfSF8KKyNkZWZpbmUgSElEVVRJTF9ISURHTE9CQUxfSF8KKworI2luY2x1ZGUgIkhpZEl0ZW0uaCIKKyNpbmNsdWRlICJUcmlTdGF0ZS5oIgorCituYW1lc3BhY2UgSGlkVXRpbCB7CisvLyBBIHNldCBvZiBnbG9iYWwgc3RhdGVzIHRoYXQgcGFyc2VyIGhhcyB0byBrZWVwIHRyYWNrIGR1cmluZyBwYXJzaW5nLgorLy8gVGhleSBhcmUgYWxsIHNwZWNpZmllZCBpbiBISUQgc3BlYyB2MS4xMSBzZWN0aW9uIDYuMi4yLjcKK3N0cnVjdCBIaWRHbG9iYWwgeworICAgIC8vIGFkZCBhIHRva2VuIGFuZCBjaGFuZ2UgZ2xvYmFsIHN0YXRlcywgcmV0dXJucyB2YWx1ZSBpbmRpY2F0ZXMgaWYgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwKKyAgICBib29sIGFwcGVuZChjb25zdCBIaWRJdGVtICZpKTsKKworICAgIHRyaV91aW50IHVzYWdlUGFnZTsKKyAgICB0cmlfaW50ICBsb2dpY2FsTWluOworICAgIHRyaV9pbnQgIGxvZ2ljYWxNYXg7CisgICAgdHJpX2ludCAgcGh5c2ljYWxNaW47CisgICAgdHJpX2ludCAgcGh5c2ljYWxNYXg7CisgICAgdHJpX3VpbnQgZXhwb25lbnQ7CisgICAgdHJpX3VpbnQgdW5pdDsKKyAgICB0cmlfdWludCByZXBvcnRTaXplOworICAgIHRyaV91aW50IHJlcG9ydElkOworICAgIHRyaV91aW50IHJlcG9ydENvdW50OworfTsKKworLy8gSElEIHNwZWNzIGFsbG93cyBQVVNIIGFuZCBQT1AgdG8gc2F2ZSBhIHNuYXBzaG90IG9mIGN1cnJlbnQgZ2xvYmFsIHN0YXRlcyBhbmQgY29tZSBiYWNrIHRvIHRoZQorLy8gc2F2ZWQgc2F0ZXMgbGF0ZXIuIEhpZFN0YWNrIG1hbmFnZXMgdGhpcyBsb2dpYy4gTm90ZSB0aGF0IFBVU0ggYW5kIFBPUCBhcmUgYWxzbyBIaWRJdGVtcywgc28KKy8vIHRoZXJlIGlzIG5vIGV4cGxpY2l0IHB1c2ggYW5kIHBvcCBmdW5jdGlvbiBpbiB0aGlzIHN0YWNrIGltcGxlbWVudGF0aW9uLgorY2xhc3MgSGlkR2xvYmFsU3RhY2sgeworcHVibGljOgorICAgIEhpZEdsb2JhbFN0YWNrKCk7CisKKyAgICAvLyBhZGQgYSB0b2tlbiBhbmQgY2hhbmdlIGdsb2JhbCBzdGF0ZXMsIHJldHVybnMgdmFsdWUgaW5kaWNhdGVzIGlmIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsCisgICAgLy8gaXQgdGhlIHRva2VuIGlzIHB1c2gvcG9wLCB0aGUgc3RhY2sgcHVzaC9wb3AgYWNjb3JkaW5nbHkuCisgICAgYm9vbCBhcHBlbmQoY29uc3QgSGlkSXRlbSAmaSk7CisKKyAgICAvLyBnZXQgcmVmZXJlbmNlIHRvIHRvcCBlbGVtZW50IG9uIHRoZSBzdGFjaworICAgIGNvbnN0IEhpZEdsb2JhbCYgdG9wKCkgY29uc3Q7Citwcml2YXRlOgorICAgIHN0ZDo6dmVjdG9yPEhpZEdsb2JhbD4gbVN0YWNrOworfTsKKworfSAvL25hbWVzcGFjZSBIaWRVdGlsCisKKyNlbmRpZiAvLyBISURVVElMX0hJREdMT0FCTF9IXwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZEl0ZW0uY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZEl0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDRkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkSXRlbS5jcHAKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgIkhpZEl0ZW0uaCIKKyNpbmNsdWRlICJIaWREZWZzLmgiCisjaW5jbHVkZSAiU3RyZWFtSW9VdGlsLmgiCisjaW5jbHVkZSA8aW9zdHJlYW0+CisKK25hbWVzcGFjZSBIaWRVdGlsIHsKKworYm9vbCBIaWRJdGVtOjpkYXRhQXNVbnNpZ25lZCh1bnNpZ25lZCBpbnQgKm91dCkgY29uc3QgIHsKKyAgICBpZiAoZGF0YS5zaXplKCkgPiA0IHx8IGRhdGEuc2l6ZSgpID09IDApIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgICpvdXQgPSAwOworICAgIGludCBzaGlmdCA9IDA7CisKKyAgICBmb3IgKGF1dG8gaSA6IGRhdGEpIHsKKyAgICAgICAgKm91dCB8PSAoaSA8PCBzaGlmdCk7CisgICAgICAgIHNoaWZ0ICs9IDg7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhpZEl0ZW06OmRhdGFBc1NpZ25lZChpbnQgKm91dCkgY29uc3QgeworICAgIHVuc2lnbmVkIGludCB1OworICAgIGlmICghZGF0YUFzVW5zaWduZWQoJnUpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgc2l6ZV90IGJpdFNpemVfMSA9IGRhdGEuc2l6ZSgpICogOCAtIDE7CisgICAgdW5zaWduZWQgaW50IHNpZ24gPSB1ICYgKDEgPDwgYml0U2l6ZV8xKTsKKyAgICAqb3V0ID0gdSB8ICgoc2lnbiA9PSAwKSA/IDAgOiAoIH4wIDw8IGJpdFNpemVfMSkpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGQ6OnZlY3RvcjxIaWRJdGVtPiBIaWRJdGVtOjp0b2tlbml6ZShjb25zdCB1aW50OF90ICpiZWdpbiwgc2l6ZV90IHNpemUpIHsKKyAgICAvLyBjb25zdHJ1Y3QgYSBzdHJlYW0KKyAgICBjaGFydmVjdG9yYnVmPHVuc2lnbmVkIGNoYXI+IGJ1ZihiZWdpbiwgc2l6ZSk7CisgICAgc3RkOjppc3RyZWFtIGlzKCZidWYpOworICAgIHJldHVybiB0b2tlbml6ZShpcyk7Cit9CisKK3N0ZDo6dmVjdG9yPEhpZEl0ZW0+IEhpZEl0ZW06OnRva2VuaXplKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZkZXNjcmlwdG9yKSB7CisgICAgLy8gY29uc3RydWN0IGEgc3RyZWFtCisgICAgY2hhcnZlY3RvcmJ1Zjx1bnNpZ25lZCBjaGFyPiBidWYoZGVzY3JpcHRvcik7CisgICAgc3RkOjppc3RyZWFtIGlzKCZidWYpOworICAgIHJldHVybiB0b2tlbml6ZShpcyk7Cit9CisKK3N0ZDo6dmVjdG9yPEhpZEl0ZW0+IEhpZEl0ZW06OnRva2VuaXplKHN0ZDo6aXN0cmVhbSAmaXMpIHsKKyAgICBzdGQ6OnZlY3RvcjxIaWRJdGVtPiBoaWRUb2tlbjsKKworICAgIC8vIHRoaXMgaXMgaW1wb3J0YW50IHRvIGF2b2lkIHNraXBwaW5nIGNoYXJhY3RlcnMKKyAgICBpcy51bnNldGYoc3RkOjppb3NfYmFzZTo6c2tpcHdzKTsKKyAgICB3aGlsZSAoIWlzLmVvZigpKSB7CisgICAgICAgIEhpZEl0ZW0gaTsKKyAgICAgICAgaXMgPj4gaTsKKyAgICAgICAgaWYgKGkudmFsaWQpIHsKKyAgICAgICAgICAgIGhpZFRva2VuLnB1c2hfYmFjayhpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBoaWRUb2tlbjsKK30KKworc3RkOjppc3RyZWFtJiBvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSAmaXMsIEhpZFV0aWw6OkhpZEl0ZW0gJmgpIHsKKyAgICB1c2luZyBuYW1lc3BhY2UgSGlkVXRpbDo6SGlkRGVmOjpNYWluVGFnOworICAgIHVzaW5nIG5hbWVzcGFjZSBIaWRVdGlsOjpIaWREZWY6OlRhZ1R5cGU7CisKKyAgICBoLnZhbGlkID0gZmFsc2U7CisgICAgaC5vZmZzZXQgPSBpcy50ZWxsZygpOworICAgIGguYnl0ZVNpemUgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgZmlyc3Q7CisgICAgaXMgPj4gZmlyc3Q7CisgICAgaWYgKCFpcy5lb2YoKSkgeworICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxlblRhYmxlW10gPSB7IDAsIDEsIDIsIDQgfTsKKyAgICAgICAgc2l6ZV90IGxlbiA9IGxlblRhYmxlW2ZpcnN0ICYgMHgzXTsgLy8gbG93IDIgYml0cyBhcmUgbGVuZ3RoIGRlc2NyaXB0b3IKKyAgICAgICAgaC50YWcgPSAoZmlyc3QgPj4gNCk7CisgICAgICAgIGgudHlwZSA9IChmaXJzdCAmIDB4QykgPj4gMjsKKworICAgICAgICBpZiAoaC50YWcgPT0gTE9OR19JVEVNICYmIGgudHlwZSA9PSBSRVNFUlZFRCkgeyAvLyBsb25nIGl0ZW0KKyAgICAgICAgICAgIC8vbG9uZyBpdGVtCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGIgPSAwOworICAgICAgICAgICAgaXMgPj4gYjsKKyAgICAgICAgICAgIGxlbiA9IGI7CisgICAgICAgICAgICBpcyA+PiBiOworICAgICAgICAgICAgaC50YWcgPSBiOworICAgICAgICB9CisKKyAgICAgICAgaC5kYXRhLnJlc2l6ZShsZW4pOworICAgICAgICBmb3IgKGF1dG8gJmkgOiBoLmRhdGEpIHsKKyAgICAgICAgICAgIGlmIChpcy5lb2YoKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaXMgPj4gaTsKKyAgICAgICAgfQorICAgICAgICBoLmJ5dGVTaXplID0gKHNzaXplX3QpIGlzLnRlbGxnKCkgLSBoLm9mZnNldDsKKyAgICAgICAgaC52YWxpZCA9ICFpcy5lb2YoKTsKKyAgICB9CisKKyAgICByZXR1cm4gaXM7Cit9CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJm9zLCBjb25zdCBIaWRVdGlsOjpIaWRJdGVtICZoKSB7CisgICAgb3MgPDwgIm9mZnNldDogIiA8PCBoLm9mZnNldCA8PCAiLCBzaXplOiAiIDw8IGguYnl0ZVNpemUKKyAgICAgICA8PCAiLCB0YWc6ICIgPDwgaC50YWcgPDwgIiwgdHlwZTogIiA8PCBoLnR5cGUgPDwgIiwgZGF0YTogIjsKKyAgICBpZiAoaC5kYXRhLmVtcHR5KCkpIHsKKyAgICAgICAgb3MgPDwgIltlbXB0eV0iOworICAgIH0gZWxzZSB7CisgICAgICAgIG9zIDw8IGguZGF0YS5zaXplKCkgPDwgIiBieXRlKHMpIHsiOworICAgICAgICBmb3IgKGF1dG8gaSA6IGguZGF0YSkgeworICAgICAgICAgICAgb3MgPDwgKGludCkgaSA8PCAiLCAiOworICAgICAgICB9CisgICAgICAgIG9zIDw8ICJ9IjsKKyAgICB9CisgICAgcmV0dXJuIG9zOworfQorfSAvLyBuYW1lc3BhY2UgSGlkVXRpbApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZEl0ZW0uaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRJdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjNzllOQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRJdGVtLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIEhJRFVUSUxfSElESVRFTV9IXworI2RlZmluZSBISURVVElMX0hJRElURU1fSF8KKworI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGlzdHJlYW0+CisjaW5jbHVkZSA8b3N0cmVhbT4KKworbmFtZXNwYWNlIEhpZFV0aWwgeworCitzdHJ1Y3QgSGlkSXRlbSB7CisgICAgYm9vbCB2YWxpZDsKKyAgICB1bnNpZ25lZCBpbnQgdHlwZTsKKyAgICB1bnNpZ25lZCBpbnQgdGFnOworICAgIHNzaXplX3Qgb2Zmc2V0OworICAgIHNzaXplX3QgYnl0ZVNpemU7CisgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZGF0YTsKKworICAgIGJvb2wgZGF0YUFzVW5zaWduZWQodW5zaWduZWQgaW50ICpvdXQpIGNvbnN0OworICAgIGJvb2wgZGF0YUFzU2lnbmVkKGludCAqb3V0KSBjb25zdDsKKworICAgIC8vIGZyaWVuZCBzdHJlYW0gZnVuY3Rpb25zCisgICAgZnJpZW5kIHN0ZDo6aXN0cmVhbSYgb3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0gJmlzLCBIaWRJdGVtICZoKTsKKyAgICBmcmllbmQgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmb3MsIGNvbnN0IEhpZEl0ZW0gJmgpOworCisgICAgLy8gdG9rZW5pemUgZnJvbSBhIHVuc2lnbmVkIGNoYXIgdmVjdG9yCisgICAgc3RhdGljIHN0ZDo6dmVjdG9yPEhpZEl0ZW0+IHRva2VuaXplKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ICZkZXNjcmlwdG9yKTsKKyAgICBzdGF0aWMgc3RkOjp2ZWN0b3I8SGlkSXRlbT4gdG9rZW5pemUoY29uc3QgdWludDhfdCAqYmVnaW4sIHNpemVfdCBzaXplKTsKKyAgICBzdGF0aWMgc3RkOjp2ZWN0b3I8SGlkSXRlbT4gdG9rZW5pemUoc3RkOjppc3RyZWFtICZpcyk7Cit9OworCisvLyBwYXJzaW5nIGluIGZyb20gYmluYXJ5IHN0cmVhbQorc3RkOjppc3RyZWFtJiBvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSAmaXMsIEhpZFV0aWw6OkhpZEl0ZW0gJmgpOworCisvLyBvdXRwdXQgYXMgaHVtYW4gcmVhZGFibGUgc3RyaW5nIHRvIHN0cmVhbQorc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmb3MsIGNvbnN0IEhpZFV0aWw6OkhpZEl0ZW0gJmgpOworfSAvL25hbWVzcGFjZSBIaWRVdGlsCisKKyNlbmRpZiAvLyBISURVVElMX0hJRElURU1fSF8KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRMb2NhbC5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkTG9jYWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMTdhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkTG9jYWwuY3BwCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlICJIaWREZWZzLmgiCisjaW5jbHVkZSAiSGlkTG9jYWwuaCIKKyNpbmNsdWRlICJIaWRMb2cuaCIKKyNpbmNsdWRlIDxjc3RkZGVmPgorCituYW1lc3BhY2UgSGlkVXRpbCB7CisKK2NvbnN0ZXhwciB1aW50MzJfdCBJTlZBTElEX1VTQUdFID0gMHhGRkZGOworY29uc3RleHByIHVpbnQzMl90IElOVkFMSURfREVTSUdOQVRPUiA9IDB4RkZGRjsKK2NvbnN0ZXhwciB1aW50MzJfdCBJTlZBTElEX1NUUklORyA9IDB4RkZGRjsKKwordWludDMyX3QgSGlkTG9jYWw6OmdldFVzYWdlKHNpemVfdCBpbmRleCkgY29uc3QgeworICAgIGlmICh1c2FnZS5lbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBJTlZBTElEX1VTQUdFOworICAgIH0KKyAgICByZXR1cm4gKGluZGV4ID49IHVzYWdlLnNpemUoKSkgPyB1c2FnZS5iYWNrKCkgOiB1c2FnZVtpbmRleF07Cit9CisKK3VpbnQzMl90IEhpZExvY2FsOjpnZXREZXNpZ25hdG9yKHNpemVfdCBpbmRleCkgY29uc3QgeworICAgIGlmIChkZXNpZ25hdG9yLmVtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIElOVkFMSURfREVTSUdOQVRPUjsKKyAgICB9CisgICAgcmV0dXJuIChpbmRleCA+PSBkZXNpZ25hdG9yLnNpemUoKSkgPyBkZXNpZ25hdG9yLmJhY2soKSA6IGRlc2lnbmF0b3JbaW5kZXhdOworfQorCit1aW50MzJfdCBIaWRMb2NhbDo6Z2V0U3RyaW5nKHNpemVfdCBpbmRleCkgY29uc3QgeworICAgIGlmIChzdHJpbmcuZW1wdHkoKSkgeworICAgICAgICByZXR1cm4gSU5WQUxJRF9TVFJJTkc7CisgICAgfQorICAgIHJldHVybiAoaW5kZXggPj0gc3RyaW5nLnNpemUoKSkgPyBzdHJpbmcuYmFjaygpIDogc3RyaW5nW2luZGV4XTsKK30KKwordm9pZCBIaWRMb2NhbDo6Y2xlYXIoKSB7CisgICAgKnRoaXMgPSBIaWRMb2NhbCgpOworfQorCitib29sIEhpZExvY2FsOjphcHBlbmQoY29uc3QgSGlkSXRlbSAmaSkgeworICAgIHVzaW5nIG5hbWVzcGFjZSBIaWREZWY6OkxvY2FsVGFnOworCisgICAgYm9vbCByZXQgPSB0cnVlOworICAgIHVuc2lnbmVkIHVuc2lnbmVkSW50ZWdlcjsKKyAgICBib29sIHVuc2lnbmVkRXJyb3IgPSAhaS5kYXRhQXNVbnNpZ25lZCgmdW5zaWduZWRJbnRlZ2VyKTsKKyAgICBib29sIHZhbHVlRXJyb3IgPSBmYWxzZTsKKworICAgIHN3aXRjaCAoaS50YWcpIHsKKyAgICAgICAgY2FzZSBVU0FHRToKKyAgICAgICAgICAgIHVzYWdlLnB1c2hfYmFjayh1bnNpZ25lZEludGVnZXIpOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHVuc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVU0FHRV9NSU5JTVVNOgorICAgICAgICAgICAgdXNhZ2VNaW4gPSB1bnNpZ25lZEludGVnZXI7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gdW5zaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVTQUdFX01BWElNVU06CisgICAgICAgICAgICBpZiAoIXVzYWdlTWluLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICBMT0dfRSA8PCAidXNhZ2UgbWluIG5vdCBzZXQgd2hlbiBzYXcgdXNhZ2UgbWF4ICIgPDwgaSA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgdXNhZ2VtYXggPSB1bnNpZ25lZEludGVnZXI7CisgICAgICAgICAgICAgICAgdmFsdWVFcnJvciA9IHVuc2lnbmVkRXJyb3I7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IHVzYWdlTWluLmdldCgwKTsgaiA8PSB1c2FnZW1heDsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIHVzYWdlLnB1c2hfYmFjayhqKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdXNhZ2VNaW4uY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUUklOR19JTkRFWDoKKyAgICAgICAgICAgIHN0cmluZy5wdXNoX2JhY2sodW5zaWduZWRJbnRlZ2VyKTsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSB1bnNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RSSU5HX01JTklNVU06CisgICAgICAgICAgICBzdHJpbmdNaW4gPSB1bnNpZ25lZEludGVnZXI7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gdW5zaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUUklOR19NQVhJTVVNOiB7CisgICAgICAgICAgICBpZiAoIXVzYWdlTWluLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAgICBMT0dfRSA8PCAic3RyaW5nIG1pbiBub3Qgc2V0IHdoZW4gc2F3IHN0cmluZyBtYXggIiA8PCBpIDw8IExPR19FTkRMOworICAgICAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBzdHJpbmdNYXggPSB1bnNpZ25lZEludGVnZXI7CisgICAgICAgICAgICAgICAgdmFsdWVFcnJvciA9IHVuc2lnbmVkRXJyb3I7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IHN0cmluZ01pbi5nZXQoMCk7IGogPD0gc3RyaW5nTWF4OyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nLnB1c2hfYmFjayhqKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RyaW5nTWluLmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIERFTElNSVRPUjoKKyAgICAgICAgICAgIGRlbGltZXRlciA9IHVuc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSB1bnNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBMT0dfRSA8PCAidW5rbm93biBsb2NhbCB0YWcsICIgPDwgaSA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAodmFsdWVFcnJvcikgeworICAgICAgICBMT0dfRSA8PCAiQ2Fubm90IGdldCB1bnNpZ25lZCBkYXRhIGF0ICIgPDwgaSA8PCBMT0dfRU5ETDsKKyAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9Cit9IC8vbmFtZXNwYWNlIEhpZFV0aWwKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRMb2NhbC5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZExvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzMGIzMAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRMb2NhbC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBISURVVElMX0hJRExPQ0FMX0hfCisjZGVmaW5lIEhJRFVUSUxfSElETE9DQUxfSF8KKworI2luY2x1ZGUgIkhpZEl0ZW0uaCIKKyNpbmNsdWRlICJUcmlTdGF0ZS5oIgorI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgSGlkVXRpbCB7CisKKy8vIEEgc2V0IG9mIGxvY2FsIHN0YXRlcyB0aGF0IHBhcnNlciBoYXMgdG8ga2VlcCB0cmFjayBkdXJpbmcgcGFyc2luZy4KKy8vIFRoZXkgYXJlIGFsbCBzcGVjaWZpZWQgaW4gSElEIHNwZWMgdjEuMTEgc2VjdGlvbiA2LjIuMi44CitzdHJ1Y3QgSGlkTG9jYWwgeworICAgIC8vIGFkZCBhIHRva2VuIHRvIGNoYW5nZSBsb2NhbCBzdGF0ZXMsIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgaWYgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwKKyAgICBib29sIGFwcGVuZChjb25zdCBIaWRJdGVtICZpKTsKKyAgICAvLyBjbGVhciBhbGwgbG9jYWwgc3RhdGVzLiBUaGlzIG5lZWQgdG8gYmUgZG9uZSBhZnRlciBlYWNoIG1haW4gdGFnCisgICAgdm9pZCBjbGVhcigpOworCisgICAgLy8gbXVsdGlwbGUgdXNhZ2UsIGRlc2lnbmF0b3Igb3Igc3RyaW5ncyBtYXkgZXhpc3QgZm9yIHNpbmdsZSBpbnB1dC9vdXRwdXQvZmVhdHVyZSByZXBvcnQKKyAgICB1aW50MzJfdCBnZXRVc2FnZShzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIHVpbnQzMl90IGdldERlc2lnbmF0b3Ioc2l6ZV90IGluZGV4KSBjb25zdDsKKyAgICB1aW50MzJfdCBnZXRTdHJpbmcoc2l6ZV90IGluZGV4KSBjb25zdDsKKworICAgIHN0ZDo6dmVjdG9yPHVpbnQzMl90PiB1c2FnZTsKKyAgICAvLyBrZWVwIHRyYWNrIG9mIHVzYWdlIG1pbiB3aGVuIGV4cGVjdGluZyBhIHVzYWdlIG1heAorICAgIHRyaV91aW50IHVzYWdlTWluOworCisgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IGRlc2lnbmF0b3I7CisgICAgLy8ga2VlcCB0cmFjayBvZiBkZXNpZ25hdG9yIG1pbiB3aGVuIGV4cGVjdGluZyBkZXNpZ25hdG9yIG1heAorICAgIHRyaV91aW50IGRlc2lnbmF0b3JNaW47CisKKyAgICBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gc3RyaW5nOworICAgIC8vIGtlZXAgdHJhY2sgb2Ygc3RyaW5nIG1pbiB3aGVuIGV4cGVjdGluZyBzdHJpbmcgbWF4CisgICAgdHJpX3VpbnQgc3RyaW5nTWluOworCisgICAgdHJpX3VpbnQgZGVsaW1ldGVyOworfTsKK30gLy8gbmFtZXNwYWNlIEhpZFV0aWwKKworI2VuZGlmIC8vIEhJRFVUSUxfSElETE9DQUxfSF8KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRMb2cuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRMb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzdkZTU3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZExvZy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBISURVVElMX0hJRExPR19IXworI2RlZmluZSBISURVVElMX0hJRExPR19IXworCisjaWYgZGVmaW5lZChfX0FORFJPSURfXykgJiYgIWRlZmluZWQoTE9HX1RPX0NPTlNPTEUpCisjaW5jbHVkZSA8YW5kcm9pZC1iYXNlL2xvZ2dpbmcuaD4KKyNkZWZpbmUgTE9HX0VOREwgIiIKKyNkZWZpbmUgTE9HX0UgTE9HKEVSUk9SKQorI2RlZmluZSBMT0dfVyBMT0coV0FSTklORykKKyNkZWZpbmUgTE9HX0kgTE9HKElORk8pCisjZGVmaW5lIExPR19EIExPRyhERUJVRykKKyNkZWZpbmUgTE9HX1YgTE9HKFZFUkJPU0UpCisjZWxzZQorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2RlZmluZSBMT0dfRU5ETCBzdGQ6OmVuZGwKKyNkZWZpbmUgTE9HX0UgKHN0ZDo6Y2VyciA8PCAiRTogIikKKyNkZWZpbmUgTE9HX1cgKHN0ZDo6Y2VyciA8PCAiVzogIikKKyNkZWZpbmUgTE9HX0kgKHN0ZDo6Y2VyciA8PCAiSTogIikKKyNkZWZpbmUgTE9HX0QgKHN0ZDo6Y2VyciA8PCAiRDogIikKKyNkZWZpbmUgTE9HX1YgKHN0ZDo6Y2VyciA8PCAiVjogIikKKyNlbmRpZgorCisjZW5kaWYgLy8gSElEVVRJTF9ISURMT0dfSF8KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRQYXJzZXIuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVmYWY2NQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlICJIaWREZWZzLmgiCisjaW5jbHVkZSAiSGlkUGFyc2VyLmgiCisjaW5jbHVkZSAiSGlkTG9nLmgiCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8aW9tYW5pcD4KKworbmFtZXNwYWNlIEhpZFV0aWwgeworCit2b2lkIEhpZFBhcnNlcjo6cmVzZXQoKSB7CisgICAgbUdsb2JhbFN0YWNrID0gSGlkR2xvYmFsU3RhY2soKTsKKyAgICBtTG9jYWwgPSBIaWRMb2NhbCgpOworICAgIG1UcmVlID0gc3RkOjptYWtlX3NoYXJlZDxIaWRUcmVlTm9kZT4oKTsKKyAgICBtQ3VycmVudCA9IG1UcmVlOworfQorCitib29sIEhpZFBhcnNlcjo6cGFyc2UoY29uc3Qgc3RkOjp2ZWN0b3I8SGlkSXRlbT4gJnRva2VuKSB7CisgICAgLy8gQ2xlYW4gdXAgaW50ZXJuYWwgc3RhdGVzIG9mIHRoZSBwYXJzZXIgZm9yIGEgbmV3IHN0cmVhbSBvZiBkZXNjcmlwdG9yIHRva2VuCisgICAgcmVzZXQoKTsKKworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKyAgICB1c2luZyBuYW1lc3BhY2UgSGlkRGVmOjpUYWdUeXBlOworCisgICAgZm9yIChhdXRvICZpIDogdG9rZW4pIHsKKyAgICAgICAgc3dpdGNoIChpLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgTUFJTjoKKyAgICAgICAgICAgICAgICByZXQgPSBwcm9jZXNzTWFpblRhZyhpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgR0xPQkFMOgorICAgICAgICAgICAgICAgIHJldCA9IG1HbG9iYWxTdGFjay5hcHBlbmQoaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExPQ0FMOgorICAgICAgICAgICAgICAgIHJldCA9IG1Mb2NhbC5hcHBlbmQoaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIExPR19FIDw8ICJIaWRQYXJzZXIgZm91bmQgaWxsZWdhbCBIaWRJdGVtOiAiIDw8IGkgPDwgTE9HX0VOREw7CisgICAgICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBpbiBjYXNlIGEgcGFyc2UgZmFpbHVyZSwgcXVpdCBwcmVtYXR1cmVseQorICAgICAgICBpZiAoIXJldCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworYm9vbCBIaWRQYXJzZXI6OnByb2Nlc3NNYWluVGFnKGNvbnN0IEhpZEl0ZW0gJmkpIHsKKyAgICB1c2luZyBuYW1lc3BhY2UgSGlkRGVmOjpNYWluVGFnOworICAgIHVzaW5nIG5hbWVzcGFjZSBIaWREZWY6OlJlcG9ydEZsYWc7CisKKyAgICBib29sIHJldCA9IHRydWU7CisgICAgc3dpdGNoIChpLnRhZykgeworICAgICAgICBjYXNlIENPTExFQ1RJT046IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb2xsZWN0aW9uVHlwZTsKKyAgICAgICAgICAgIGlmICghaS5kYXRhQXNVbnNpZ25lZCgmY29sbGVjdGlvblR5cGUpKSB7CisgICAgICAgICAgICAgICAgTE9HX0UgPDwgIkNhbm5vdCBnZXQgY29sbGVjdGlvbiB0eXBlIGF0IG9mZnNldCAiIDw8IGkub2Zmc2V0IDw8IExPR19FTkRMOworICAgICAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdW5zaWduZWQgaW50IGZ1bGxVc2FnZSA9CisgICAgICAgICAgICAgICAgICAgIG1HbG9iYWxTdGFjay50b3AoKS51c2FnZVBhZ2UuZ2V0KDApIDw8IDE2IHwgbUxvY2FsLmdldFVzYWdlKDApOworICAgICAgICAgICAgbUN1cnJlbnQgPSBtQ3VycmVudC0+YWRkQ2hpbGQoCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8SGlkVHJlZU5vZGU+KG1DdXJyZW50LCBjb2xsZWN0aW9uVHlwZSwgZnVsbFVzYWdlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEVORF9DT0xMRUNUSU9OOgorICAgICAgICAgICAgbUN1cnJlbnQgPSBtQ3VycmVudC0+Z2V0UGFyZW50KCk7CisgICAgICAgICAgICBpZiAoIW1DdXJyZW50KSB7CisgICAgICAgICAgICAgICAgLy8gdHJpZ2dlciBwYXJzZSBmYWlsdXJlIHNvIHRoYXQgbUN1cnJlbnQgd2lsbCBub3QgYmUgYWNjZXNzZWQKKyAgICAgICAgICAgICAgICBMT0dfRSA8PCAidW5tYXRjaGVkIEVORF9DT0xMRUNUSU9OIGF0ICIgPDwgaS5vZmZzZXQgPDwgTE9HX0VOREw7CisgICAgICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJTlBVVDoKKyAgICAgICAgY2FzZSBPVVRQVVQ6CisgICAgICAgIGNhc2UgRkVBVFVSRTogeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlcG9ydFR5cGUgPSBpLnRhZzsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnOworICAgICAgICAgICAgaWYgKCFpLmRhdGFBc1Vuc2lnbmVkKCZmbGFnKSkgeworICAgICAgICAgICAgICAgIExPR19FIDw8ICJDYW5ub3QgZ2V0IHJlcG9ydCBmbGFnIGF0IG9mZnNldCAiIDw8IGkub2Zmc2V0IDw8IExPR19FTkRMOworICAgICAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3QgSGlkR2xvYmFsICZ0b3AgPSBtR2xvYmFsU3RhY2sudG9wKCk7CisKKyAgICAgICAgICAgIC8vIHVzYWdlIHBhZ2UsIGxvY2FsIG1pbi9tYXgsIHJlcG9ydCBzaXplIGFuZCBjb3VudCBoYXZlIHRvIGJlIGRlZmluZWQgYXQgcmVwb3J0CisgICAgICAgICAgICAvLyBkZWZpbml0aW9uLgorICAgICAgICAgICAgaWYgKCEodG9wLnVzYWdlUGFnZS5pc1NldCgpICYmIHRvcC5sb2dpY2FsTWluLmlzU2V0KCkgJiYgdG9wLmxvZ2ljYWxNYXguaXNTZXQoKQorICAgICAgICAgICAgICAgICAgJiYgdG9wLnJlcG9ydFNpemUuaXNTZXQoKSAmJiB0b3AucmVwb3J0Q291bnQuaXNTZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBMT0dfRSA8PCAiUmVwb3J0IGRlZmluZWQgYXQgIiA8PCBpLm9mZnNldAorICAgICAgICAgICAgICAgICAgICAgIDw8ICIgZG9lcyBub3QgaGF2ZSBhbGwgbWFuZGF0b3J5IGZpZWxkcyBzZXQiIDw8IExPR19FTkRMOworICAgICAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRvcC5yZXBvcnRTaXplLmdldCgwKSA+IDMyKSB7CisgICAgICAgICAgICAgICAgTE9HX0UgPDwgIlJlcG9ydCBkZWZpbmVkIGF0ICIgPDwgaS5vZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgICA8PCAiIGhhcyB1bnN1cHBvcnRlZCByZXBvcnQgc2l6ZSg+IDMyIGJpdCkiIDw8IExPR19FTkRMOworICAgICAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBIaWRSZXBvcnQgcmVwb3J0KHJlcG9ydFR5cGUsIGZsYWcsIHRvcCwgbUxvY2FsKTsKKyAgICAgICAgICAgIG1SZXBvcnQucHVzaF9iYWNrKHJlcG9ydCk7CisgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IG5vZGUobmV3IEhpZFJlcG9ydE5vZGUobUN1cnJlbnQsIHJlcG9ydCkpOworICAgICAgICAgICAgbUN1cnJlbnQtPmFkZENoaWxkKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIExPR19FIDw8ICJ1bmtub3duIG1haW4gdGFnLCAiIDw8IGkgPDwgTE9HX0VOREw7CisgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICB9CisgICAgLy8gbG9jYWxzIGlzIGNsZWFyZWQgYWZ0ZXIgYW55IG1haW4gdGFnIGFjY29yZGluZyB0byBISUQgc3BlYworICAgIG1Mb2NhbC5jbGVhcigpOworICAgIHJldHVybiByZXQ7Cit9CisKK2Jvb2wgSGlkUGFyc2VyOjpwYXJzZShjb25zdCB1bnNpZ25lZCBjaGFyICpiZWdpbiwgc2l6ZV90IHNpemUpIHsKKyAgICBzdGQ6OnZlY3RvcjxIaWRJdGVtPiBoaWRJdGVtVmVjdG9yID0gSGlkSXRlbTo6dG9rZW5pemUoYmVnaW4sIHNpemUpOworICAgIHJldHVybiBwYXJzZShoaWRJdGVtVmVjdG9yKTsKK30KKwordm9pZCBIaWRQYXJzZXI6OmZpbHRlclRyZWUoKSB7CisgICAgaWYgKG1UcmVlICE9IG51bGxwdHIpIHsKKyAgICAgICAgZmlsdGVyVHJlZShtVHJlZSk7CisgICAgfQorfQorCit2b2lkIEhpZFBhcnNlcjo6ZmlsdGVyVHJlZShzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+ICZub2RlKSB7CisgICAgaWYgKG5vZGUtPmlzUmVwb3J0Q29sbGVjdGlvbigpKSB7CisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxIaWRSZXBvcnROb2RlPiByZXBvcnROb2RlID0KKyAgICAgICAgICAgICAgICBzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8SGlkUmVwb3J0Tm9kZT4obm9kZS0+Z2V0Q2hpbGRyZW4oKS5mcm9udCgpKTsKKyAgICAgICAgaWYgKHJlcG9ydE5vZGUgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgcmVwb3J0Tm9kZS0+Y29sbGFwc2Uobm9kZS0+Z2V0RnVsbFVzYWdlKCkpOworICAgICAgICAgICAgbm9kZSA9IHJlcG9ydE5vZGU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGF1dG8gJmkgOiBub2RlLT5nZXRDaGlsZHJlbigpKSB7CisgICAgICAgICAgICBmaWx0ZXJUcmVlKGkpOworICAgICAgICB9CisgICAgfQorfQorCitIaWRQYXJzZXI6OkRpZ2VzdFZlY3RvciBIaWRQYXJzZXI6OmdlbmVyYXRlRGlnZXN0KAorICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8dW5zaWduZWQgaW50PiAmaW50ZXJlc3RlZFVzYWdlKSB7CisgICAgRGlnZXN0VmVjdG9yIGRpZ2VzdFZlY3RvcjsKKyAgICBkaWdlc3QoJmRpZ2VzdFZlY3RvciwgbVRyZWUsIGludGVyZXN0ZWRVc2FnZSk7CisgICAgcmV0dXJuIGRpZ2VzdFZlY3RvcjsKK30KKwordm9pZCBIaWRQYXJzZXI6OmRpZ2VzdChIaWRQYXJzZXI6OkRpZ2VzdFZlY3RvciAqZGlnZXN0VmVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+ICZub2RlLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8dW5zaWduZWQgaW50PiAmaW50ZXJlc3RlZFVzYWdlKSB7CisgICAgaWYgKGRpZ2VzdFZlY3RvciA9PSBudWxscHRyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+aXNVc2FnZUNvbGxlY3Rpb24oKQorICAgICAgICAgICAgJiYgaW50ZXJlc3RlZFVzYWdlLmZpbmQobm9kZS0+Z2V0RnVsbFVzYWdlKCkpICE9IGludGVyZXN0ZWRVc2FnZS5lbmQoKSkgeworICAgICAgICAvLyB0aGlzIGNvbGxlY3Rpb24gY29udGFpbnMgdGhlIHVzYWdlIGludGVyZXN0ZWQKKyAgICAgICAgUmVwb3J0U2V0R3JvdXAgcmVwb3J0U2V0R3JvdXA7CisKKyAgICAgICAgLy8gb25lIGxheWVyIGRlZXAgc2VhcmNoCisgICAgICAgIGZvciAoYXV0byAmaSA6IG5vZGUtPmdldENoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgIC8vIHNraXAgYWxsIG5vZGVzIHRoYXQgaXMgbm90IGEgcmVwb3J0IG5vZGUKKyAgICAgICAgICAgIGlmIChpLT5nZXROb2RlVHlwZSgpICE9IEhpZFRyZWVOb2RlOjpUWVBFX1JFUE9SVCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3QgSGlkUmVwb3J0ICZyZXBvcnQgPQorICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8SGlkUmVwb3J0Tm9kZT4oaSktPmdldFJlcG9ydCgpOworCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaWQgPSByZXBvcnQuZ2V0UmVwb3J0SWQoKTs7CisgICAgICAgICAgICBpZiAocmVwb3J0U2V0R3JvdXAuZmluZChpZCkgPT0gcmVwb3J0U2V0R3JvdXAuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYW4gaWQgZ3JvdXAgaWYgaXQgaXMgbm90IGNyZWF0ZWQKKyAgICAgICAgICAgICAgICByZXBvcnRTZXRHcm91cC5lbXBsYWNlKGlkLCBSZXBvcnRTZXQoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlcG9ydFNldCAmcmVwb3J0R3JvdXAgPSByZXBvcnRTZXRHcm91cFtpZF07CisgICAgICAgICAgICBzd2l0Y2gocmVwb3J0LmdldFR5cGUoKSkgeworICAgICAgICAgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBIaWREZWY6Ok1haW5UYWc7CisgICAgICAgICAgICAgICAgY2FzZSBGRUFUVVJFOgorICAgICAgICAgICAgICAgICAgICByZXBvcnRHcm91cFtSRVBPUlRfVFlQRV9GRUFUVVJFXS5wdXNoX2JhY2socmVwb3J0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJTlBVVDoKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0R3JvdXBbUkVQT1JUX1RZUEVfSU5QVVRdLnB1c2hfYmFjayhyZXBvcnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE9VVFBVVDoKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0R3JvdXBbUkVQT1JUX1RZUEVfT1VUUFVUXS5wdXNoX2JhY2socmVwb3J0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgUmVwb3J0RGlnZXN0IGRpZ2VzdCA9IHsKKyAgICAgICAgICAgIC5mdWxsVXNhZ2UgPSBub2RlLT5nZXRGdWxsVXNhZ2UoKSwKKyAgICAgICAgICAgIC5wYWNrZXRzID0gY29udmVydEdyb3VwVG9QYWNrZXQocmVwb3J0U2V0R3JvdXApCisgICAgICAgIH07CisgICAgICAgIGRpZ2VzdFZlY3Rvci0+ZW1wbGFjZV9iYWNrKGRpZ2VzdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvICZjaGlsZCA6IG5vZGUtPmdldENoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+Z2V0Tm9kZVR5cGUoKSA9PSBIaWRUcmVlTm9kZTo6VFlQRV9OT1JNQUwpIHsKKyAgICAgICAgICAgICAgICAvLyBvbmx5IGZvbGxvdyBpbnRvIGNvbGxlY3Rpb24gbm9kZXMKKyAgICAgICAgICAgICAgICBkaWdlc3QoZGlnZXN0VmVjdG9yLCBjaGlsZCwgaW50ZXJlc3RlZFVzYWdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RkOjp2ZWN0b3I8SGlkUGFyc2VyOjpSZXBvcnRQYWNrZXQ+IEhpZFBhcnNlcjo6Y29udmVydEdyb3VwVG9QYWNrZXQoCisgICAgICAgIGNvbnN0IEhpZFBhcnNlcjo6UmVwb3J0U2V0R3JvdXAgJmdyb3VwKSB7CisgICAgc3RkOjp2ZWN0b3I8UmVwb3J0UGFja2V0PiBwYWNrZXRzOworCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiB0eXBlcyA9IHtSRVBPUlRfVFlQRV9GRUFUVVJFLCBSRVBPUlRfVFlQRV9JTlBVVCwgUkVQT1JUX1RZUEVfT1VUUFVUfTsKKworICAgIGZvciAoY29uc3QgYXV0byAmc2V0UGFpciA6IGdyb3VwKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBpZCA9IHNldFBhaXIuZmlyc3Q7CisgICAgICAgIGZvciAoYXV0byB0eXBlIDogdHlwZXMpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8gJnJlcG9ydHMgPSBzZXRQYWlyLnNlY29uZFt0eXBlXTsgLy8gZmVhdHVyZQorCisgICAgICAgICAgICAvLyB0ZW1wbGF0ZQorICAgICAgICAgICAgUmVwb3J0UGFja2V0IHBhY2tldCA9IHsKKyAgICAgICAgICAgICAgICAudHlwZSA9IHR5cGUsCisgICAgICAgICAgICAgICAgLmlkID0gaWQsCisgICAgICAgICAgICAgICAgLmJpdFNpemUgPSAwCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8gJnIgOiByZXBvcnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBsb2dpY2FsID0gci5nZXRMb2dpY2FsUmFuZ2UoKTsKKyAgICAgICAgICAgICAgICBhdXRvIHBoeXNpY2FsID0gci5nZXRQaHlzaWNhbFJhbmdlKCk7CisKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG9mZnNldCA9IHBoeXNpY2FsLmZpcnN0IC0gbG9naWNhbC5maXJzdDsKKyAgICAgICAgICAgICAgICBkb3VibGUgc2NhbGUgPSBzdGF0aWNfY2FzdDxkb3VibGU+KChwaHlzaWNhbC5zZWNvbmQgLSBwaHlzaWNhbC5maXJzdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAvIChsb2dpY2FsLnNlY29uZCAtIGxvZ2ljYWwuZmlyc3QpOworICAgICAgICAgICAgICAgIHNjYWxlICo9IHIuZ2V0RXhwb25lbnRWYWx1ZSgpOworCisgICAgICAgICAgICAgICAgUmVwb3J0SXRlbSBkaWdlc3QgPSB7CisgICAgICAgICAgICAgICAgICAgIC51c2FnZSA9IHIuZ2V0RnVsbFVzYWdlKCksCisgICAgICAgICAgICAgICAgICAgIC5pZCA9IGlkLAorICAgICAgICAgICAgICAgICAgICAubWluUmF3ID0gbG9naWNhbC5maXJzdCwKKyAgICAgICAgICAgICAgICAgICAgLm1heFJhdyA9IGxvZ2ljYWwuc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAuYSA9IHNjYWxlLAorICAgICAgICAgICAgICAgICAgICAuYiA9IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgLmJpdE9mZnNldCA9IHBhY2tldC5iaXRTaXplLAorICAgICAgICAgICAgICAgICAgICAuYml0U2l6ZSA9IHIuZ2V0U2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAuY291bnQgPSByLmdldENvdW50KCksCisgICAgICAgICAgICAgICAgICAgIC51bml0ID0gci5nZXRVbml0KCksCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBwYWNrZXQucmVwb3J0cy5wdXNoX2JhY2soZGlnZXN0KTsKKyAgICAgICAgICAgICAgICBwYWNrZXQuYml0U2l6ZSArPSBkaWdlc3QuYml0U2l6ZSAqIGRpZ2VzdC5jb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcGFja2V0LnJlcG9ydHMuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHBhY2tldHMucHVzaF9iYWNrKHN0ZDo6bW92ZShwYWNrZXQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcGFja2V0czsKK30KKworc3RhdGljIHN0ZDo6c3RyaW5nIHJlcG9ydFR5cGVUb1N0cmluZyhpbnQgcmVwb3J0VHlwZSkgeworICAgIHN3aXRjaCAocmVwb3J0VHlwZSkgeworICAgICAgICBjYXNlIEhpZFBhcnNlcjo6UkVQT1JUX1RZUEVfSU5QVVQ6CisgICAgICAgICAgICByZXR1cm4gIklOUFVUIjsKKyAgICAgICAgY2FzZSBIaWRQYXJzZXI6OlJFUE9SVF9UWVBFX09VVFBVVDoKKyAgICAgICAgICAgIHJldHVybiAiT1VUUFVUIjsKKyAgICAgICAgY2FzZSBIaWRQYXJzZXI6OlJFUE9SVF9UWVBFX0ZFQVRVUkU6CisgICAgICAgICAgICByZXR1cm4gIkZFQVRVUkUiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEIFJFUE9SVCI7CisgICAgfQorfQorCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICZvcywgY29uc3QgSGlkUGFyc2VyOjpEaWdlc3RWZWN0b3IgJmRpZ2VzdHMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8gJmkgOiBkaWdlc3RzKSB7CisgICAgICAgIG9zIDw8ICJVc2FnZTogMHgiIDw8IHN0ZDo6aGV4ICA8PCBpLmZ1bGxVc2FnZSA8PCBzdGQ6OmRlYworICAgICAgICAgICA8PCAiLCAiIDw8IGkucGFja2V0cy5zaXplKCkgPDwgIiByZXBvcnQgcGFja2V0OiIgPDwgTE9HX0VOREw7CisgICAgICAgIGZvciAoY29uc3QgYXV0byAmcGFja2V0IDogaS5wYWNrZXRzKSB7CisgICAgICAgICAgICBvcyA8PCByZXBvcnRUeXBlVG9TdHJpbmcocGFja2V0LnR5cGUpIDw8ICIgaWQ6ICIgPDwgcGFja2V0LmlkCisgICAgICAgICAgICAgICA8PCAiIHNpemU6ICIgPDwgcGFja2V0LmJpdFNpemUKKyAgICAgICAgICAgICAgIDw8ICJiKCIgPDwgcGFja2V0LmdldEJ5dGVTaXplKCkgPDwgIkIpLCAiCisgICAgICAgICAgICAgICA8PCBwYWNrZXQucmVwb3J0cy5zaXplKCkgPDwgIiBlbnRyaWVzIiA8PCBMT0dfRU5ETDsKKworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvICZyZXBvcnQgOiBwYWNrZXQucmVwb3J0cykgeworICAgICAgICAgICAgICAgIGRvdWJsZSBtaW4sIG1heDsKKyAgICAgICAgICAgICAgICByZXBvcnQuZGVjb2RlKHJlcG9ydC5tYXNrKHJlcG9ydC5taW5SYXcpLCAmbWluKTsKKyAgICAgICAgICAgICAgICByZXBvcnQuZGVjb2RlKHJlcG9ydC5tYXNrKHJlcG9ydC5tYXhSYXcpLCAmbWF4KTsKKworICAgICAgICAgICAgICAgIG9zIDw8ICIgICIgPDwgcmVwb3J0LmJpdE9mZnNldCA8PCAiIHNpemU6ICIgPDwgcmVwb3J0LmJpdFNpemUKKyAgICAgICAgICAgICAgICAgICA8PCAiLCBjb3VudDogIiA8PCByZXBvcnQuY291bnQKKyAgICAgICAgICAgICAgICAgICA8PCAiLCB1c2FnZTogIiA8PCBzdGQ6OmhleCA8PCBzdGQ6OnNldGZpbGwoJzAnKSA8PCBzdGQ6OnNldHcoOCkKKyAgICAgICAgICAgICAgICAgICA8PCByZXBvcnQudXNhZ2UgPDwgc3RkOjpkZWMKKyAgICAgICAgICAgICAgICAgICA8PCAiLCBtaW46ICIgPDwgcmVwb3J0Lm1pblJhdyA8PCAiLCBtYXg6ICIgPDwgcmVwb3J0Lm1heFJhdworICAgICAgICAgICAgICAgICAgIDw8ICIsIG1pbkRlY29kZWQ6ICIgPDwgbWluCisgICAgICAgICAgICAgICAgICAgPDwgIiwgbWF4RGVjb2RlZDogIiA8PCBtYXgKKyAgICAgICAgICAgICAgICAgICA8PCAiLCBhOiAiIDw8IHJlcG9ydC5hIDw8ICIsIGI6ICIgPDwgcmVwb3J0LmIKKyAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmhleAorICAgICAgICAgICAgICAgICAgIDw8ICIsIG1pblJhd0hleDogMHgiIDw8IHJlcG9ydC5tYXNrKHJlcG9ydC5taW5SYXcpCisgICAgICAgICAgICAgICAgICAgPDwgIiwgbWF4UmF3SGV4OiAweCIgPDwgcmVwb3J0Lm1hc2socmVwb3J0Lm1heFJhdykKKyAgICAgICAgICAgICAgICAgICA8PCAiLCByYXdNYXNrZWQ6IDB4IiA8PCByZXBvcnQucmF3TWFzaygpCisgICAgICAgICAgICAgICAgICAgPDwgc3RkOjpkZWMgPDwgTE9HX0VOREw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgb3MgPDwgTE9HX0VOREw7CisgICAgfQorICAgIG9zIDw8IExPR19FTkRMOworICAgIHJldHVybiBvczsKK30KK30gLy8gbmFtZXNwYWNlIEhpZFV0aWwKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRQYXJzZXIuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRQYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWY1ZWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFBhcnNlci5oCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgSElEVVRJTF9ISURQQVJTRVJfSF8KKyNkZWZpbmUgSElEVVRJTF9ISURQQVJTRVJfSF8KKworI2luY2x1ZGUgIkhpZEl0ZW0uaCIKKyNpbmNsdWRlICJIaWRUcmVlLmgiCisjaW5jbHVkZSAiSGlkR2xvYmFsLmgiCisjaW5jbHVkZSAiSGlkTG9jYWwuaCIKKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPG9zdHJlYW0+CisKK25hbWVzcGFjZSBIaWRVdGlsIHsKK2NsYXNzIEhpZFBhcnNlciB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIFJFUE9SVF9UWVBFX0ZFQVRVUkUgPSAwLAorICAgICAgICBSRVBPUlRfVFlQRV9JTlBVVCA9IDEsCisgICAgICAgIFJFUE9SVF9UWVBFX09VVFBVVCA9IDIKKyAgICB9OworCisgICAgc3RydWN0IFJlcG9ydEl0ZW07CisgICAgc3RydWN0IFJlcG9ydFBhY2tldDsKKworICAgIC8vIHJlcG9ydCAoaW5jbHVkaW5nIGlucHV0IG91dHB1dCBhbmQgZmVhdHVyZSkgZ3JvdXBlZCBieSBmdWxsIHVzYWdlCisgICAgc3RydWN0IFJlcG9ydERpZ2VzdCB7CisgICAgICAgIHVuc2lnbmVkIGludCBmdWxsVXNhZ2U7CisgICAgICAgIHN0ZDo6dmVjdG9yPFJlcG9ydFBhY2tldD4gcGFja2V0czsKKyAgICB9OworCisgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxSZXBvcnREaWdlc3Q+IERpZ2VzdFZlY3RvcjsKKworICAgIC8vIHBhcnNlIEhJRCBkZXNjcmlwdG9yCisgICAgYm9vbCBwYXJzZShjb25zdCBzdGQ6OnZlY3RvcjxIaWRJdGVtPiAmdG9rZW4pOworICAgIGJvb2wgcGFyc2UoY29uc3QgdW5zaWduZWQgY2hhciAqYmVnaW4sIHNpemVfdCBzaXplKTsKKworICAgIC8vIGZpbHRlciB0aGUgdHJlZSB0byBlbGltaW5hdGUgc2luZ2xlIGNoaWxkIHJlcG9ydCBsZWFmIG5vZGUgY2F1c2VzIGJ5IHVzYWdlIGFycmF5IHR5cGUKKyAgICAvLyByZXBvcnRzCisgICAgdm9pZCBmaWx0ZXJUcmVlKCk7CisKKyAgICAvLyBnZW5lcmF0ZSBhIGxpc3Qgb2YgcmVwb3J0IGRpZ2VzdCBmb3IgYWxsIGludGVyZXN0ZWQgdXNhZ2UuIEl0IHdpbGwgYXV0b21hdGljYWxseQorICAgIC8vIGNhbGwgZmlsdGVyVHJlZSgpLgorICAgIERpZ2VzdFZlY3RvciBnZW5lcmF0ZURpZ2VzdChjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8dW5zaWduZWQgaW50PiAmaW50ZXJlc3RlZFVzYWdlKTsKKworICAgIC8vIGdldCBwYXJzZWQgdHJlZSAoZmlsdGVyZWQgb3Igbm90IGZpbHRlcmVkKQorICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gZ2V0VHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1UcmVlOyB9CisKKyAgICAvLyBnZXQgYWxsIHBhcnNlZCByZXBvcnQgaW4gYSBwYXJzZWQgZm9ybS4KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxIaWRSZXBvcnQ+JiBnZXRSZXBvcnQoKSBjb25zdCB7IHJldHVybiBtUmVwb3J0OyB9CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBzdGQ6OmFycmF5PHN0ZDo6dmVjdG9yPEhpZFJlcG9ydD4sIDM+IFJlcG9ydFNldDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDx1bnNpZ25lZCBpbnQgLyogcmVwb3J0SWQgKi8sIFJlcG9ydFNldD4gUmVwb3J0U2V0R3JvdXA7CisKKyAgICAvLyBoZWxwZXIgc3Vicm91dGluZXMKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgYm9vbCBwcm9jZXNzTWFpblRhZyhjb25zdCBIaWRJdGVtICZpKTsKKyAgICBzdGF0aWMgdm9pZCBmaWx0ZXJUcmVlKHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gJm5vZGUpOworICAgIHN0YXRpYyB2b2lkIGRpZ2VzdCgKKyAgICAgICAgICAgIERpZ2VzdFZlY3RvciAqZGlnZXN0VmVjdG9yLAorICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiAmbm9kZSwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDx1bnNpZ25lZCBpbnQ+ICZpbnRlcmVzdGVkVXNhZ2UpOworICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxSZXBvcnRQYWNrZXQ+IGNvbnZlcnRHcm91cFRvUGFja2V0KGNvbnN0IFJlcG9ydFNldEdyb3VwICZncm91cCk7CisKKyAgICBIaWRHbG9iYWxTdGFjayBtR2xvYmFsU3RhY2s7CisgICAgSGlkTG9jYWwgbUxvY2FsOworICAgIHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gbVRyZWU7CisgICAgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBtQ3VycmVudDsKKyAgICBzdGQ6OnZlY3RvcjxIaWRSZXBvcnQ+IG1SZXBvcnQ7Cit9OworCitzdHJ1Y3QgSGlkUGFyc2VyOjpSZXBvcnRJdGVtIHsKKyAgICB1bnNpZ25lZCBpbnQgdXNhZ2U7CisgICAgdW5zaWduZWQgaW50IGlkOworICAgIGludCB0eXBlOyAvLyBmZWF0dXJlLCBpbnB1dCBvciBvdXRwdXQKKworICAgIGludDY0X3QgbWluUmF3OworICAgIGludDY0X3QgbWF4UmF3OworCisgICAgLy8gY29udmVyc2lvbiBmb3IgZmxvYXQgcG9pbnQgdmFsdWVzCisgICAgLy8gcmVhbCB2YWx1ZSA9IChzaWduRXh0ZW5kSWZOZWVkZWQocmF3KSArIGIpICogYQorICAgIC8vIHJhdyB2YWx1ZSA9IG1hc2socmVhbC9hIC0gYik7CisgICAgLy8KKyAgICAvLyBjb252ZXJzaW9uIGZvciBpbnRlZ2VyIHZhbHVlcworICAgIC8vIHJlYWwgdmFsdWUgPSBzaWduRXh0ZW5kZWRJZk5lZWRlZChyYXcpICsgYjsKKyAgICAvLyByYXcgdmFsdWUgPSBtYXNrKHJlYWwgLSBiKTsKKyAgICBkb3VibGUgYTsgLy8gc2NhbGluZworICAgIGludDY0X3QgYjsgLy8gb2Zmc2V0CisgICAgdW5zaWduZWQgaW50IHVuaXQ7CisKKyAgICBzaXplX3QgYml0T2Zmc2V0OworICAgIHNpemVfdCBiaXRTaXplOyAvLyBiaXQgbGVuZ3RoIHBlciB1bml0CisgICAgc2l6ZV90IGNvdW50OworCisgICAgLy8gaGVscGVyIGZ1bmN0aW9uCisgICAgYm9vbCBpc1NpZ25lZCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1pblJhdyA8IDA7CisgICAgfQorCisgICAgYm9vbCBpc0J5dGVBbGlnbmVkKCkgY29uc3QgeworICAgICAgICByZXR1cm4gKGJpdE9mZnNldCAmIDcpID09IDAgJiYgKGJpdFNpemUgJiA3KSA9PSAwOworICAgIH0KKworICAgIC8vIGNvbnZlcnQgcmF3IHZhbHVlcyB0byB1bnNpZ25lZCBmb3JtYXQKKyAgICB1aW50MzJfdCBtYXNrKGludDY0X3QgaW5wdXQpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbnB1dCAmIHJhd01hc2soKSk7CisgICAgfQorCisgICAgYm9vbCBkZWNvZGUodWludDMyX3QgaW5wdXQsIGRvdWJsZSAqb3V0cHV0KSBjb25zdCB7CisgICAgICAgIGlmIChvdXRwdXQgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGludDY0X3QgcyA9IHNpZ25FeHRlbmRJZk5lZWRlZChpbnB1dCk7CisgICAgICAgIGlmIChzIDwgbWluUmF3IHx8IHMgPiBtYXhSYXcpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAqb3V0cHV0ID0gKHMgKyBiKSAqIGE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgZW5jb2RlKGRvdWJsZSBpbnB1dCwgdWludDMyX3QgKm91dHB1dCkgY29uc3QgeworICAgICAgICBpZiAob3V0cHV0ID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpbnB1dCA9IGlucHV0IC8gYSAtIGI7CisgICAgICAgIGlmIChpbnB1dCA8IG1pblJhdyB8fCBpbnB1dCA+IG1heFJhdykgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8aW50NjRfdD4oaW5wdXQpICYgcmF3TWFzaygpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaW50NjRfdCByYXdNYXNrKCkgY29uc3QgeworICAgICAgICBjb25zdGV4cHIgaW50NjRfdCBvbmUgPSAxOworICAgICAgICByZXR1cm4gKG9uZSA8PCBiaXRTaXplKSAtIDE7CisgICAgfQorCisgICAgaW50NjRfdCBzaWduRXh0ZW5kSWZOZWVkZWQoaW50NjRfdCB2YWx1ZSkgY29uc3QgeworICAgICAgICByZXR1cm4gdmFsdWUgfCAoKGlzU2lnbmVkKCkgJiYgaXNOZWdhdGl2ZSh2YWx1ZSkpID8gfnJhd01hc2soKSA6IDApOworICAgIH0KKworICAgIGJvb2wgaXNOZWdhdGl2ZShpbnQ2NF90IHZhbHVlKSBjb25zdCB7CisgICAgICAgIGNvbnN0ZXhwciBpbnQ2NF90IG9uZSA9IDE7CisgICAgICAgIHJldHVybiAoKG9uZSA8PCAoYml0U2l6ZSAtIDEpKSAmIHZhbHVlKSAhPSAwOworICAgIH0KK307CisKKy8vIGEgY29sbGVjdGlvbiBvZiByZXBvcnQgaXRlbSB0aGF0IGZvcm1zIGEgcGFja2V0CisvLyB0aGlzIGlzIHRoZSBpbnB1dCBvdXRwdXQgdW5pdCB3aXRoIEhJRCBoYXJkd2FyZQorc3RydWN0IEhpZFBhcnNlcjo6UmVwb3J0UGFja2V0IHsKKyAgICBzdGQ6OnZlY3RvcjxSZXBvcnRJdGVtPiByZXBvcnRzOworICAgIHNpemVfdCBiaXRTaXplOworICAgIGludCB0eXBlOyAvLyBSRVBPUlRfVFlQRV9GRUFUVVJFL0lOUFVUL09VVFBVVAorICAgIHVuc2lnbmVkIGludCBpZDsKKworICAgIHNpemVfdCBnZXRCeXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIChiaXRTaXplICsgNykgLyA4OyB9OworfTsKKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmb3MsIGNvbnN0IEhpZFBhcnNlcjo6RGlnZXN0VmVjdG9yICZkaWdlc3QyKTsKK30gLy8gbmFtZXNwYWNlIEhpZFV0aWwKKworI2VuZGlmIC8vIEhJRFVUSUxfSElEUEFSU0VSX0hfCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkUmVwb3J0LmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRSZXBvcnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmI3OGIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkUmVwb3J0LmNwcApAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSAiSGlkUmVwb3J0LmgiCisjaW5jbHVkZSAiSGlkRGVmcy5oIgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8aW9tYW5pcD4KKworbmFtZXNwYWNlIEhpZFV0aWwgeworSGlkUmVwb3J0OjpIaWRSZXBvcnQodWludDMyX3QgdHlwZSwgdWludDMyX3QgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhpZEdsb2JhbCAmZ2xvYmFsLCBjb25zdCBIaWRMb2NhbCAmbG9jYWwpCisgICAgICAgIDogbVJlcG9ydFR5cGUodHlwZSksCisgICAgICAgICAgbUZsYWcoZGF0YSksCisgICAgICAgICAgbVVzYWdlUGFnZShnbG9iYWwudXNhZ2VQYWdlLmdldCgwKSksICAgLy8gZGVmYXVsdCB2YWx1ZSAwCisgICAgICAgICAgbVVzYWdlKGxvY2FsLmdldFVzYWdlKDApKSwKKyAgICAgICAgICBtVXNhZ2VWZWN0b3IobG9jYWwudXNhZ2UpLAorICAgICAgICAgIG1Mb2dpY2FsTWluKGdsb2JhbC5sb2dpY2FsTWluLmdldCgwKSksIC8vIGRlZmF1bHQgdmFsdWUgMAorICAgICAgICAgIG1Mb2dpY2FsTWF4KGdsb2JhbC5sb2dpY2FsTWF4LmdldCgwKSksCisgICAgICAgICAgbVJlcG9ydFNpemUoZ2xvYmFsLnJlcG9ydFNpemUpLAorICAgICAgICAgIG1SZXBvcnRDb3VudChnbG9iYWwucmVwb3J0Q291bnQpLAorICAgICAgICAgIG1QaHlzaWNhbE1pbihnbG9iYWwucGh5c2ljYWxNaW4pLAorICAgICAgICAgIG1QaHlzaWNhbE1heChnbG9iYWwucGh5c2ljYWxNYXgpLAorICAgICAgICAgIG1FeHBvbmVudChnbG9iYWwuZXhwb25lbnQpLAorICAgICAgICAgIG1Vbml0KGdsb2JhbC51bml0KSwKKyAgICAgICAgICBtUmVwb3J0SWQoZ2xvYmFsLnJlcG9ydElkKSB7IH0KKworc3RkOjpzdHJpbmcgSGlkUmVwb3J0OjpnZXRTdHJpbmdUeXBlKCkgY29uc3QgeworICAgIHJldHVybiByZXBvcnRUeXBlVG9TdHJpbmcobVJlcG9ydFR5cGUpOworfQorCitzdGQ6OnN0cmluZyBIaWRSZXBvcnQ6OnJlcG9ydFR5cGVUb1N0cmluZyhpbnQgdHlwZSkgeworICAgIHVzaW5nIG5hbWVzcGFjZSBIaWREZWY6Ok1haW5UYWc7CisgICAgc3dpdGNoKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJTlBVVDoKKyAgICAgICAgICAgIHJldHVybiAiSU5QVVQiOworICAgICAgICBjYXNlIE9VVFBVVDoKKyAgICAgICAgICAgIHJldHVybiAiT1VUUFVUIjsKKyAgICAgICAgY2FzZSBGRUFUVVJFOgorICAgICAgICAgICAgcmV0dXJuICJGRUFUVVJFIjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAiPDxVTktOT1dOPj4iOworICAgIH0KK30KKworZG91YmxlIEhpZFJlcG9ydDo6Z2V0RXhwb25lbnRWYWx1ZSgpIGNvbnN0IHsKKyAgICBpZiAoIW1FeHBvbmVudC5pc1NldCgpKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAvLyBkZWZhdWx0IGV4cG9uZW50IGlzIDAKKyAgICBpbnQgZXhwb25lbnRJbnQgPSBtRXhwb25lbnQuZ2V0KDApOworICAgIGlmIChleHBvbmVudEludCA+IDE1IHx8IGV4cG9uZW50SW50IDwgMCkgeworICAgICAgICByZXR1cm4gTkFOOworICAgIH0KKyAgICByZXR1cm4gcG93KDEwLjAsIHN0YXRpY19jYXN0PGRvdWJsZT4oKGV4cG9uZW50SW50IDw9IDcpID8gZXhwb25lbnRJbnQgOiBleHBvbmVudEludCAtIDE2KSk7Cit9CisKK3N0ZDo6c3RyaW5nIEhpZFJlcG9ydDo6Z2V0RXhwb25lbnRTdHJpbmcoKSBjb25zdCB7CisgICAgaW50IGV4cG9uZW50SW50ID0gbUV4cG9uZW50LmdldCgwKTsKKyAgICBpZiAoZXhwb25lbnRJbnQgPiAxNSB8fCBleHBvbmVudEludCA8IDApIHsKKyAgICAgICAgcmV0dXJuICJbZXJyb3JdIjsKKyAgICB9CisgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCJ4MTBeIikKKyAgICAgICAgICAgICsgc3RkOjp0b19zdHJpbmcoKGV4cG9uZW50SW50IDw9IDcpID8gZXhwb25lbnRJbnQgOiBleHBvbmVudEludCAtIDE2KTsKK30KKworc3RkOjpzdHJpbmcgSGlkUmVwb3J0OjpnZXRVbml0U3RyaW5nKCkgY29uc3QgeworICAgIGlmICghbVVuaXQuaXNTZXQoKSkgeworICAgICAgICByZXR1cm4gImRlZmF1bHQiOworICAgIH0KKyAgICByZXR1cm4gIltub3QgaW1wbGVtZW50ZWRdIjsKKworICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSByZXQ7CisgICAgcmV0IDw8IHN0ZDo6aGV4IDw8IHN0ZDo6c2V0ZmlsbCgnMCcpIDw8IHN0ZDo6c2V0dygyKSA8PCBtVW5pdC5nZXQoMCk7CisgICAgcmV0dXJuIHJldC5zdHIoKTsKK30KKworc3RkOjpzdHJpbmcgSGlkUmVwb3J0OjpnZXRGbGFnU3RyaW5nKCkgY29uc3QgeworICAgIHVzaW5nIG5hbWVzcGFjZSBIaWREZWY6OlJlcG9ydEZsYWc7CisgICAgc3RkOjpzdHJpbmcgcmV0OworICAgIHJldCArPSAobUZsYWcgJiBEQVRBX0NPTlNUKSA/ICJDb25zdCAiIDogIkRhdGEgIjsKKyAgICByZXQgKz0gKG1GbGFnICYgQVJSQVlfVkFSSUFCTEUpID8gIlZhcmlhYmxlICIgOiAiQXJyYXkgIjsKKyAgICByZXQgKz0gKG1GbGFnICYgV1JBUCkgPyAiV3JhcCAiIDogIiI7CisgICAgcmV0ICs9IChtRmxhZyAmIE5PTkxJTkVBUikgPyAiTm9ubGluZWFyICIgOiAiIjsKKyAgICByZXQgKz0gKG1GbGFnICYgTk9fUFJFRkVSUkVEKSA/ICJOb1ByZWZlcnJlZCAiIDogIiI7CisgICAgcmV0ICs9IChtRmxhZyAmIE5VTExfU1RBVEUpID8gIk51bGxTdGF0ZSAiIDogIiI7CisgICAgcmV0ICs9IChtRmxhZyAmIFZPTEFUSUxFKSA/ICJWb2xhdGlsZSAiIDogIiI7CisgICAgcmV0ICs9IChtRmxhZyAmIEJVRkZFUkVEX0JZVEVTKSA/ICJCdWZmZXJlZEJ5dGVzICIgOiAiIjsKKyAgICByZXR1cm4gcmV0OworfQorCisvLyBpc0FycmF5KCkgd2lsbCByZXR1cm4gdHJ1ZSBmb3IgcmVwb3J0cyB0aGF0IG1heSBjb250YWlucyBtdWx0aXBsZSB2YWx1ZXMsIGUuZy4ga2V5Ym9hcmQgc2NhbgorLy8gY29kZSwgd2hpY2ggY2FuIGhhdmUgbXVsdGlwbGUgdmFsdWUsIGVhY2ggZGVub3RpbmcgYSBrZXkgcHJlc3NlZCBkb3duIGF0IHRoZSBzYW1lIHRpbWUuIEl0IHdpbGwKKy8vIHJldHVybiBmYWxzZSBpZiByZXBvciByZXByZXNlbnQgYSB2ZWN0b3Igb3IgbWF0cml4LgorLy8KKy8vIFRoaXMgc2xpZ2h0bHkgZGV2aWF0ZXMgZnJvbSBISUQncyBkZWZpbml0aW9uLCBpdCBpcyBtb3JlIGNvbnZlbmllbnQgdGhpcyB3YXkgYXMgbWF0cml4L3ZlY3RvcgorLy8gaW5wdXQgaXMgdHJlYXRlZCBzaW1pbGFybHkgYXMgdmFyaWFibGVzLgorYm9vbCBIaWRSZXBvcnQ6OmlzQXJyYXkoKSBjb25zdCB7CisgICAgdXNpbmcgbmFtZXNwYWNlIEhpZERlZjo6UmVwb3J0RmxhZzsKKyAgICByZXR1cm4gKG1GbGFnICYgQVJSQVlfVkFSSUFCTEUpID09IDAgJiYgbUlzQ29sbGFwc2VkOworfQorCitib29sIEhpZFJlcG9ydDo6aXNWYXJpYWJsZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gIWlzQXJyYXkoKTsKK30KKworYm9vbCBIaWRSZXBvcnQ6OmlzRGF0YSgpIGNvbnN0IHsKKyAgICB1c2luZyBuYW1lc3BhY2UgSGlkRGVmOjpSZXBvcnRGbGFnOworICAgIHJldHVybiAobUZsYWcgJiBEQVRBX0NPTlNUKSA9PSAwOworfQorCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgSGlkUmVwb3J0JiBoKSB7CisgICAgb3MgPDwgaC5nZXRTdHJpbmdUeXBlKCkgPDwgIiwgIgorICAgICAgIDw8ICJ1c2FnZTogIiA8PCBzdGQ6OmhleCA8PCBoLmdldEZ1bGxVc2FnZSgpIDw8IHN0ZDo6ZGVjIDw8ICIsICI7CisKKyAgICBpZiAoaC5pc0RhdGEoKSkgeworICAgICAgICBhdXRvIHJhbmdlID0gaC5nZXRMb2dpY2FsUmFuZ2UoKTsKKyAgICAgICAgb3MgPDwgImxvZ01pbjogIiA8PCByYW5nZS5maXJzdCA8PCAiLCAiCisgICAgICAgICAgIDw8ICJsb2dNYXg6ICIgPDwgcmFuZ2Uuc2Vjb25kIDw8ICIsICI7CisKKyAgICAgICAgaWYgKHJhbmdlID09IGguZ2V0UGh5c2ljYWxSYW5nZSgpKSB7CisgICAgICAgICAgICBvcyA8PCAicGh5PT09bG9nLCAiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmFuZ2UgPSBoLmdldFBoeXNpY2FsUmFuZ2UoKTsKKyAgICAgICAgICAgIG9zIDw8ICJwaHlNaW46ICIgPDwgcmFuZ2UuZmlyc3QgPDwgIiwgIgorICAgICAgICAgICAgICAgPDwgInBoeU1heDogIiA8PCByYW5nZS5zZWNvbmQgPDwgIiwgIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoLmlzQXJyYXkoKSkgeworICAgICAgICAgICAgb3MgPDwgIm1hcDogKCIgPDwgc3RkOjpoZXg7CisgICAgICAgICAgICBmb3IgKGF1dG8gaSA6IGguZ2V0VXNhZ2VWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIG9zIDw8IGkgPDwgIiwiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3MgPDwgIiksICIgPDwgc3RkOjpkZWM7CisgICAgICAgIH0KKworICAgICAgICBvcyA8PCAiZXhwb25lbnQ6ICIgPDwgaC5nZXRFeHBvbmVudFN0cmluZygpIDw8ICIsICIKKyAgICAgICAgICAgPDwgInVuaXQ6ICIgPDwgaC5nZXRVbml0U3RyaW5nKCkgPDwgIiwgIjsKKyAgICB9IGVsc2UgeworICAgICAgICBvcyA8PCAiY29uc3RhbnQ6ICI7CisgICAgfQorICAgIG9zIDw8ICJzaXplOiAiIDw8IGguZ2V0U2l6ZSgpIDw8ICJiaXQgeCAiIDw8IGguZ2V0Q291bnQoKSA8PCAiLCAiCisgICAgICAgPDwgImlkOiAiIDw8IGgubVJlcG9ydElkOworCisgICAgcmV0dXJuIG9zOworfQorCitzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4gSGlkUmVwb3J0OjpnZXRMb2dpY2FsUmFuZ2UoKSBjb25zdCB7CisgICAgaW50NjRfdCBhID0gbUxvZ2ljYWxNaW47CisgICAgaW50NjRfdCBiID0gbUxvZ2ljYWxNYXg7CisKKyAgICBpZiAoYSA+IGIpIHsKKyAgICAgICAgLy8gbWlnaHQgYmUgdW5zaWduZWQKKyAgICAgICAgYSA9IGEgJiAoKHN0YXRpY19jYXN0PGludDY0X3Q+KDEpIDw8IGdldFNpemUoKSkgLSAxKTsKKyAgICAgICAgYiA9IGIgJiAoKHN0YXRpY19jYXN0PGludDY0X3Q+KDEpIDw8IGdldFNpemUoKSkgLSAxKTsKKyAgICAgICAgaWYgKGEgPiBiKSB7CisgICAgICAgICAgICAvLyBiYWQgaGlkIGRlc2NyaXB0b3IKKyAgICAgICAgICAgIHJldHVybiB7MCwgMH07CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHthLCBifTsKK30KKworc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+IEhpZFJlcG9ydDo6Z2V0UGh5c2ljYWxSYW5nZSgpIGNvbnN0IHsKKyAgICBpZiAoIShtUGh5c2ljYWxNaW4uaXNTZXQoKSAmJiBtUGh5c2ljYWxNYXguaXNTZXQoKSkpIHsKKyAgICAgICAgLy8gcGh5c2ljYWwgcmFuZ2UgdW5kZWZpbmVkLCB1c2UgbG9naWNhbCByYW5nZQorICAgICAgICByZXR1cm4gZ2V0TG9naWNhbFJhbmdlKCk7CisgICAgfQorCisgICAgaW50NjRfdCBhID0gbVBoeXNpY2FsTWluLmdldCgwKTsKKyAgICBpbnQ2NF90IGIgPSBtUGh5c2ljYWxNYXguZ2V0KDApOworCisgICAgaWYgKGEgPiBiKSB7CisgICAgICAgIGEgPSBhICYgKChzdGF0aWNfY2FzdDxpbnQ2NF90PigxKSA8PCBnZXRTaXplKCkpIC0gMSk7CisgICAgICAgIGIgPSBiICYgKChzdGF0aWNfY2FzdDxpbnQ2NF90PigxKSA8PCBnZXRTaXplKCkpIC0gMSk7CisgICAgICAgIGlmIChhID4gYikgeworICAgICAgICAgICAgcmV0dXJuIHswLCAwfTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4ge2EsIGJ9OworfQorCit1bnNpZ25lZCBpbnQgSGlkUmVwb3J0OjpnZXRGdWxsVXNhZ2UoKSBjb25zdCB7CisgICAgcmV0dXJuIG1Vc2FnZSB8IChtVXNhZ2VQYWdlIDw8IDE2KTsKK30KKworc2l6ZV90IEhpZFJlcG9ydDo6Z2V0U2l6ZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbVJlcG9ydFNpemU7Cit9CisKK3NpemVfdCBIaWRSZXBvcnQ6OmdldENvdW50KCkgY29uc3QgeworICAgIHJldHVybiBtUmVwb3J0Q291bnQ7Cit9CisKK3Vuc2lnbmVkIGludCBIaWRSZXBvcnQ6OmdldFVuaXQoKSBjb25zdCB7CisgICAgcmV0dXJuIG1Vbml0LmdldCgwKTsgLy8gZGVmYXVsdCB1bml0IGlzIDAgbWVhbnMgZGVmYXVsdCB1bml0Cit9CisKK3Vuc2lnbmVkIEhpZFJlcG9ydDo6Z2V0UmVwb3J0SWQoKSBjb25zdCB7CisgICAgLy8gaWYgcmVwb3J0IGlkIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIHplcm8KKyAgICByZXR1cm4gbVJlcG9ydElkLmdldCgwKTsKK30KKwordW5zaWduZWQgSGlkUmVwb3J0OjpnZXRUeXBlKCkgY29uc3QgeworICAgIHJldHVybiBtUmVwb3J0VHlwZTsKK30KKwordm9pZCBIaWRSZXBvcnQ6OnNldENvbGxhcHNlZCh1aW50MzJfdCBmdWxsVXNhZ2UpIHsKKyAgICBtVXNhZ2UgPSBmdWxsVXNhZ2UgJiAweEZGRkY7CisgICAgbVVzYWdlUGFnZSA9IGZ1bGxVc2FnZSA+PiAxNjsKKyAgICBtSXNDb2xsYXBzZWQgPSB0cnVlOworfQorCitjb25zdCBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+JiBIaWRSZXBvcnQ6OmdldFVzYWdlVmVjdG9yKCkgY29uc3QgeworICAgIHJldHVybiBtVXNhZ2VWZWN0b3I7Cit9Cit9IC8vIG5hbWVzcGFjZSBIaWRVdGlsCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkUmVwb3J0LmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkUmVwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwMWI2OAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRSZXBvcnQuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIEhJRFVUSUxfSElEUkVQT1JUX0hfCisjZGVmaW5lIEhJRFVUSUxfSElEUkVQT1JUX0hfCisKKyNpbmNsdWRlICJIaWRHbG9iYWwuaCIKKyNpbmNsdWRlICJIaWRMb2NhbC5oIgorI2luY2x1ZGUgIlRyaVN0YXRlLmgiCisjaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIEhpZFV0aWwgeworCitjbGFzcyBIaWRQYXJzZXI7CitjbGFzcyBIaWRUcmVlTm9kZTsKKworLy8gSGlkUmVwb3J0IHJlcHJlc2VudCBhbiBpbnB1dCwgb3V0cHV0IG9yIGZlYXR1cmUgcmVwb3J0CitjbGFzcyBIaWRSZXBvcnQgeworICAgIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgSGlkUmVwb3J0JiBoKTsKK3B1YmxpYzoKKyAgICBIaWRSZXBvcnQodWludDMyX3QgdHlwZV8sIHVpbnQzMl90IGRhdGEsIGNvbnN0IEhpZEdsb2JhbCAmZ2xvYmFsLCBjb25zdCBIaWRMb2NhbCAmbG9jYWwpOworCisgICAgLy8gVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHBhcnNpbmcgcHJvY2VzcyB3aGVuIHRoZSBwYXJzZXIgcmVncm91cHMgbXVsdGktdmFsdWVkIHJlcG9ydCBpbnRvIG9uZQorICAgIHZvaWQgc2V0Q29sbGFwc2VkKHVpbnQzMl90IGZ1bGxVc2FnZSk7CisKKyAgICAvLyBnZXQgcmVwb3J0IGlkCisgICAgdW5zaWduZWQgaW50IGdldFJlcG9ydElkKCkgY29uc3Q7CisgICAgLy8gZ2V0IHR5cGUgb2YgcmVwb3J0LCByZXR1cm4gY29uc3RhbnQgb2YgSGlkRGVmOjpNYWluVGFnCisgICAgdW5zaWduZWQgaW50IGdldFR5cGUoKSBjb25zdDsKKyAgICAvLyBGdWxsIHNlbnNvciB1c2FnZQorICAgIHVuc2lnbmVkIGludCBnZXRGdWxsVXNhZ2UoKSBjb25zdDsKKworICAgIC8vIGJpbmFyeSBwcm9wZXJ0aWVzCisgICAgYm9vbCBpc0FycmF5KCkgY29uc3Q7CisgICAgYm9vbCBpc0RhdGEoKSBjb25zdDsKKyAgICBib29sIGlzVmFyaWFibGUoKSBjb25zdDsKKworICAgIC8vIGxvZ2ljYWwgYW5kIHBoeXNpY2FsIHZhbHVlIHJhbmdlCisgICAgc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+IGdldExvZ2ljYWxSYW5nZSgpIGNvbnN0OworICAgIHN0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiBnZXRQaHlzaWNhbFJhbmdlKCkgY29uc3Q7CisgICAgZG91YmxlIGdldEV4cG9uZW50VmFsdWUoKSBjb25zdDsKKworICAgIC8vIHJldHVybiBISUQgdW5pdCBuaWJibGVzIGluIGFuIHVuc2lnbmVkIGludAorICAgIHVuc2lnbmVkIGludCBnZXRVbml0KCkgY29uc3Q7CisKKyAgICAvLyBzaXplIGluIGJpdHMKKyAgICBzaXplX3QgZ2V0U2l6ZSgpIGNvbnN0OworICAgIC8vIGRpbWVuc2lvbiAoaWYgaXQgaXMgdmVjdG9yL21hdHJpeCkgb3IgbnVtYmVyIG9mIGNvbmN1cnJlbnQgaW5wdXQgdmFsdWVzCisgICAgLy8gaXQgaXMgYWxzbyB1c2VkIHRvIGNhbGN1bGF0ZSBtZW1vcnkgZm9vdCBwcmludAorICAgIHNpemVfdCBnZXRDb3VudCgpIGNvbnN0OworCisgICAgLy8gZm9yIG91dHB1dCB0byBzdHJlYW0KKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgcmVwb3J0VHlwZVRvU3RyaW5nKGludCB0eXBlKTsKKyAgICBzdGQ6OnN0cmluZyBnZXRTdHJpbmdUeXBlKCkgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgZ2V0RXhwb25lbnRTdHJpbmcoKSBjb25zdDsKKyAgICBzdGQ6OnN0cmluZyBnZXRVbml0U3RyaW5nKCkgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgZ2V0RmxhZ1N0cmluZygpIGNvbnN0OworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGludD4mIGdldFVzYWdlVmVjdG9yKCkgY29uc3Q7Citwcml2YXRlOgorICAgIGJvb2wgbUlzQ29sbGFwc2VkOworCisgICAgLy8gbWFuZGF0YXJ5IGZpZWxkcworICAgIHVuc2lnbmVkIGludCBtUmVwb3J0VHlwZTsKKyAgICB1bnNpZ25lZCBpbnQgbUZsYWc7CisgICAgdW5zaWduZWQgaW50IG1Vc2FnZVBhZ2U7CisgICAgdW5zaWduZWQgaW50IG1Vc2FnZTsKKyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+IG1Vc2FnZVZlY3RvcjsKKworICAgIGludCBtTG9naWNhbE1pbjsgICAgICAgIC8vIDMyIGJpdCBpcyBlbm91Z2gKKyAgICBpbnQgbUxvZ2ljYWxNYXg7CisgICAgdW5zaWduZWQgaW50IG1SZXBvcnRTaXplOworICAgIHVuc2lnbmVkIGludCBtUmVwb3J0Q291bnQ7CisKKyAgICAvLyB0aGVzZSBiZWxvdyBhcmUgb3B0aW9uYWwKKyAgICB0cmlfaW50IG1QaHlzaWNhbE1pbjsKKyAgICB0cmlfaW50IG1QaHlzaWNhbE1heDsKKworICAgIHRyaV91aW50IG1FeHBvbmVudDsKKyAgICB0cmlfdWludCBtVW5pdDsKKyAgICB0cmlfdWludCBtUmVwb3J0SWQ7Cit9OworCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgSGlkUmVwb3J0JiBoKTsKK30gLy8gbmFtZXNwYWNlIEhpZFV0aWwKKyNlbmRpZiAvLyBISURVVElMX0hJRFJFUE9SVF9IXwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFRyZWUuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFRyZWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMDQxMzUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkVHJlZS5jcHAKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgIkhpZERlZnMuaCIKKyNpbmNsdWRlICJIaWRMb2cuaCIKKyNpbmNsdWRlICJIaWRUcmVlLmgiCisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgSGlkVXRpbCB7CisKKy8vIEhpZFRyZWVOb2RlCitIaWRUcmVlTm9kZTo6SGlkVHJlZU5vZGUoKSA6IG1Ob2RlVHlwZShUWVBFX1VOSU5JVElBTElaRUQpLCBtRGF0YSgwKSwgbUZ1bGxVc2FnZSgwKSB7Cit9CisKK0hpZFRyZWVOb2RlOjpIaWRUcmVlTm9kZShzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkYXRhLCB1aW50MzJfdCBmdWxsVXNhZ2UsIGludCBub2RlVHlwZSkKKyAgICAgICAgOiBtTm9kZVR5cGUobm9kZVR5cGUpLCBtRGF0YShkYXRhKSwKKyAgICAgICAgbUZ1bGxVc2FnZShmdWxsVXNhZ2UpLCBtUGFyZW50KHBhcmVudCkgeworfQorCitIaWRUcmVlTm9kZTo6SGlkVHJlZU5vZGUoc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGF0YSwgdWludDMyX3QgZnVsbFVzYWdlKQorICAgICAgICA6IG1Ob2RlVHlwZShUWVBFX05PUk1BTCksIG1EYXRhKGRhdGEpLAorICAgICAgICBtRnVsbFVzYWdlKGZ1bGxVc2FnZSksIG1QYXJlbnQocGFyZW50KSB7Cit9CisKK3ZvaWQgSGlkVHJlZU5vZGU6Om91dHB1dFJlY3Vyc2l2ZShzdGQ6Om9zdHJlYW0gJm9zLCBpbnQgbGV2ZWwpIGNvbnN0IHsKKyAgICBpbnNlcnRJbmRlbnRhdGlvbihvcywgbGV2ZWwpOworICAgIG9zIDw8ICJOb2RlIGRhdGE6ICIgPDwgbURhdGEKKyAgICAgICA8PCAiLCB1c2FnZSAiIDw8IHN0ZDo6aGV4IDw8IG1GdWxsVXNhZ2UgPDwgc3RkOjpkZWMgPDwgTE9HX0VOREw7CisKKyAgICBmb3IgKGF1dG8gJmNoaWxkIDogbUNoaWxkcmVuKSB7CisgICAgICAgIGNoaWxkLT5vdXRwdXRSZWN1cnNpdmUob3MsIGxldmVsICsgMSk7CisgICAgfQorfQorCitzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IEhpZFRyZWVOb2RlOjpkZWVwQ29weSgKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBwYXJlbnQpIGNvbnN0IHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IGNvcHkobmV3IEhpZFRyZWVOb2RlKHBhcmVudCwgbURhdGEsIG1GdWxsVXNhZ2UsIG1Ob2RlVHlwZSkpOworICAgIGZvciAoYXV0byAmaSA6IG1DaGlsZHJlbikgeworICAgICAgICBjb3B5LT5tQ2hpbGRyZW4ucHVzaF9iYWNrKGktPmRlZXBDb3B5KGNvcHkpKTsKKyAgICB9CisgICAgcmV0dXJuIGNvcHk7Cit9CisKK3ZvaWQgSGlkVHJlZU5vZGU6Omluc2VydEluZGVudGF0aW9uKHN0ZDo6b3N0cmVhbSAmb3MsIGludCBsZXZlbCkgY29uc3QgeworICAgIGNvbnN0ZXhwciBjaGFyIGluZGVudENoYXJhY3RlciA9ICdcdCc7CisgICAgc3RkOjpmaWxsX24oc3RkOjpvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+KG9zKSwgbGV2ZWwsIGluZGVudENoYXJhY3Rlcik7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gSGlkVHJlZU5vZGU6OmFkZENoaWxkKHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gY2hpbGQpIHsKKyAgICBtQ2hpbGRyZW4ucHVzaF9iYWNrKGNoaWxkKTsKKyAgICByZXR1cm4gY2hpbGQ7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gSGlkVHJlZU5vZGU6OmdldFBhcmVudCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbVBhcmVudC5sb2NrKCk7Cit9CisKK2Jvb2wgSGlkVHJlZU5vZGU6OmlzUmVwb3J0Q29sbGVjdGlvbigpIGNvbnN0IHsKKyAgICByZXR1cm4gbU5vZGVUeXBlID09IFRZUEVfTk9STUFMICYmIG1DaGlsZHJlbi5zaXplKCkgPT0gMQorICAgICAgICAgICAgJiYgbUNoaWxkcmVuLmZyb250KCktPm1Ob2RlVHlwZSA9PSBUWVBFX1JFUE9SVDsKK30KKwordW5zaWduZWQgaW50IEhpZFRyZWVOb2RlOjpnZXRGdWxsVXNhZ2UoKSBjb25zdCB7CisgICAgcmV0dXJuIG1GdWxsVXNhZ2U7Cit9CisKK3N0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4+JiBIaWRUcmVlTm9kZTo6Z2V0Q2hpbGRyZW4oKSB7CisgICAgcmV0dXJuIG1DaGlsZHJlbjsKK30KKworY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPj4mIEhpZFRyZWVOb2RlOjpnZXRDaGlsZHJlbigpIGNvbnN0IHsKKyAgICByZXR1cm4gbUNoaWxkcmVuOworfQorCitib29sIEhpZFRyZWVOb2RlOjppc1VzYWdlQ29sbGVjdGlvbigpIGNvbnN0IHsKKyAgICB1c2luZyBuYW1lc3BhY2UgSGlkRGVmOjpDb2xsZWN0aW9uVHlwZTsKKyAgICByZXR1cm4gbU5vZGVUeXBlID09IFRZUEVfTk9STUFMICYmIChtRGF0YSA9PSBQSFlTSUNBTCB8fCBtRGF0YSA9PSBBUFBMSUNBVElPTik7Cit9CisKK2ludCBIaWRUcmVlTm9kZTo6Z2V0Tm9kZVR5cGUoKSBjb25zdCB7CisgICAgcmV0dXJuIG1Ob2RlVHlwZTsKK30KKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEhpZFRyZWVOb2RlJiBuKSB7CisgICAgbi5vdXRwdXRSZWN1cnNpdmUob3MsIDApOworICAgIHJldHVybiBvczsKK30KKworLy8gSGlkUmVwb3J0Tm9kZQorSGlkUmVwb3J0Tm9kZTo6SGlkUmVwb3J0Tm9kZShzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IHBhcmVudCwgY29uc3QgSGlkUmVwb3J0ICZyZXBvcnQpCisgICAgOiBIaWRUcmVlTm9kZShwYXJlbnQsIDAgLypkYXRhKi8sIDAgLypmdWxsVXNhZ2UqLywgVFlQRV9SRVBPUlQpLCBtUmVwb3J0KHJlcG9ydCkgeworfQorCit2b2lkIEhpZFJlcG9ydE5vZGU6Om91dHB1dFJlY3Vyc2l2ZShzdGQ6Om9zdHJlYW0gJm9zLCBpbnQgbGV2ZWwpIGNvbnN0IHsKKyAgICBpbnNlcnRJbmRlbnRhdGlvbihvcywgbGV2ZWwpOworICAgIG9zIDw8IG1SZXBvcnQgPDwgTE9HX0VOREw7Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gSGlkUmVwb3J0Tm9kZTo6ZGVlcENvcHkoCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gcGFyZW50KSBjb25zdCB7CisgICAgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBjb3B5KG5ldyBIaWRSZXBvcnROb2RlKHBhcmVudCwgbVJlcG9ydCkpOworICAgIHJldHVybiBjb3B5OworfQorCitjb25zdCBIaWRSZXBvcnQmIEhpZFJlcG9ydE5vZGU6OmdldFJlcG9ydCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbVJlcG9ydDsKK30KKwordm9pZCBIaWRSZXBvcnROb2RlOjpjb2xsYXBzZSh1bnNpZ25lZCBpbnQgbmV3VXNhZ2UpIHsKKyAgICBtUmVwb3J0LnNldENvbGxhcHNlZChuZXdVc2FnZSk7Cit9CisKK30gLy9uYW1lc3BhY2UgSGlkVXRpbApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFRyZWUuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRUcmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc1MjAwNwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRUcmVlLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBISURVVElMX0hJRFRSRUVfSF8KKyNkZWZpbmUgSElEVVRJTF9ISURUUkVFX0hfCisKKyNpbmNsdWRlICJIaWRSZXBvcnQuaCIKKworI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorCituYW1lc3BhY2UgSGlkVXRpbCB7CisKKy8vIEhJRCByZXBvcnQgcGFyc2VyIG91dHB1dCB0cmVlIG5vZGUKK2NsYXNzIEhpZFRyZWVOb2RlIHsKKyAgICBmcmllbmQgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEhpZFRyZWVOb2RlJiBuKTsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgVFlQRV9VTklOSVRJQUxJWkVEID0gMCwKKyAgICAgICAgVFlQRV9OT1JNQUwgPSAxLAorICAgICAgICBUWVBFX1JFUE9SVCA9IDIgICAgIC8vIGNhbiBiZSBjYXN0IHRvIEhpZFJlcG9ydE5vZGUKKyAgICB9OworICAgIEhpZFRyZWVOb2RlKCk7CisgICAgSGlkVHJlZU5vZGUoc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBwYXJlbnQsIHVpbnQzMl90IGRhdGEsIHVpbnQzMl90IGZ1bGxVc2FnZSk7CisKKyAgICB2aXJ0dWFsIH5IaWRUcmVlTm9kZSgpID0gZGVmYXVsdDsKKworICAgIC8vIG1ha2UgYSBkZWVwIGNvcHkgb2YgdHJlZSBhdCBhbmQgYmVsb3cgdGhpcyBub2RlIGFuZCBhdHRhY2ggaXQgdG8gc3BlY2lmaWVkIHBhcmVudCBub2RlCisgICAgdmlydHVhbCBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IGRlZXBDb3B5KAorICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gcGFyZW50ID0gbnVsbHB0cikgY29uc3Q7CisKKyAgICAvLyBhZGQgY2hpbGQgdG8gdGhpcyBub2RlCisgICAgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBhZGRDaGlsZChzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IGNoaWxkKTsKKworICAgIC8vIGdldCBhbGwgY2hpbGRyZW4gb2YgYSBub2RlCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPj4mIGdldENoaWxkcmVuKCk7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPj4mIGdldENoaWxkcmVuKCkgY29uc3Q7CisKKyAgICAvLyBnZXQgcGFyZW50IChudWxscHRyIGlmIGl0IGlzIHJvb3Qgbm9kZSBvciBpZiBsb2NrIHdlYWtfcHRyIGZhaWxlZCkKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IGdldFBhcmVudCgpIGNvbnN0OworCisgICAgLy8gYWNjZXNzIHVzYWdlIG9mIHRoaXMgbm9kZQorICAgIHVuc2lnbmVkIGludCBnZXRGdWxsVXNhZ2UoKSBjb25zdDsKKworICAgIGJvb2wgaXNSZXBvcnRDb2xsZWN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc1VzYWdlQ29sbGVjdGlvbigpIGNvbnN0OworICAgIGludCBnZXROb2RlVHlwZSgpIGNvbnN0OworcHJvdGVjdGVkOgorICAgIC8vIGZvciBkZXJpdmVkIGNsYXNzIHRvIGRlZmluZSBkaWZmZXJlbnQgbm9kZVR5cGUKKyAgICBIaWRUcmVlTm9kZShzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IHBhcmVudCwKKyAgICAgICAgICAgICAgdWludDMyX3QgZGF0YSwgdWludDMyX3QgZnVsbFVzYWdlLCBpbnQgbm9kZVR5cGUpOworCisgICAgLy8gaGVscGVyIGZvciBzdHJlYW0gb3V0cHV0CisgICAgdm9pZCBpbnNlcnRJbmRlbnRhdGlvbihzdGQ6Om9zdHJlYW0gJm9zLCBpbnQgbGV2ZWwpIGNvbnN0OworcHJpdmF0ZToKKyAgICAvLyBoZWxwZXIgZm9yIHN0cmVhbSBvdXRwdXQKKyAgICB2aXJ0dWFsIHZvaWQgb3V0cHV0UmVjdXJzaXZlKHN0ZDo6b3N0cmVhbSYgb3MsIGludCBsZXZlbCkgY29uc3Q7CisKKyAgICBpbnQgbU5vZGVUeXBlOworICAgIHVpbnQzMl90IG1EYXRhOworICAgIHVpbnQzMl90IG1GdWxsVXNhZ2U7CisKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+PiBtQ2hpbGRyZW47CisgICAgc3RkOjp3ZWFrX3B0cjxIaWRUcmVlTm9kZT4gbVBhcmVudDsKK307CisKKy8vIFRyZWUgbm9kZSB0aGF0IGNvcnJlc3BvbmRzIHRvIGFuIGlucHV0LCBvdXRwdXQgb3IgZmVhdHVyZSByZXBvcnQKK2NsYXNzIEhpZFJlcG9ydE5vZGUgOiBwdWJsaWMgSGlkVHJlZU5vZGUgeworcHVibGljOgorICAgIEhpZFJlcG9ydE5vZGUoc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBwYXJlbnQsIGNvbnN0IEhpZFJlcG9ydCAmcmVwb3J0KTsKKworICAgIHZpcnR1YWwgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBkZWVwQ29weSgKKyAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IHBhcmVudCA9IG51bGxwdHIpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gb2J0YWluIEhpZFJlcG9ydCBhdHRhY2hlZCB0byB0aGlzIG5vZGUKKyAgICBjb25zdCBIaWRSZXBvcnQmIGdldFJlcG9ydCgpIGNvbnN0OworCisgICAgLy8gcmVzZXQgdXNhZ2Ugb2Ygbm9kZSBhbmQgc2V0IHVuZGVybHlpbmcgcmVwb3J0IHRvIGNvbGxhcHNlZAorICAgIHZvaWQgY29sbGFwc2UodW5zaWduZWQgaW50IG5ld1VzYWdlKTsKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIG91dHB1dFJlY3Vyc2l2ZShzdGQ6Om9zdHJlYW0gJm9zLCBpbnQgbGV2ZWwpIGNvbnN0IG92ZXJyaWRlOworCisgICAgSGlkUmVwb3J0IG1SZXBvcnQ7Cit9OworCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgSGlkVHJlZU5vZGUmIG4pOworCit9IC8vIG5hbWVzcGFjZSBIaWRVdGlsCisKKyNlbmRpZiAvLyBISURVVElMX0hJRFRSRUVfSF8KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9TdHJlYW1Jb1V0aWwuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9TdHJlYW1Jb1V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWE5NGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL1N0cmVhbUlvVXRpbC5oCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgSElEVVRJTF9TVFJFQU1fSU9fVVRJTF9IXworI2RlZmluZSBISURVVElMX1NUUkVBTV9JT19VVElMX0hfCisKKyNpbmNsdWRlICJIaWRMb2cuaCIKKyNpbmNsdWRlIDxpc3RyZWFtPgorI2luY2x1ZGUgPGlvbWFuaXA+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKworbmFtZXNwYWNlIEhpZFV0aWwgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVD4KK2NsYXNzIGNoYXJ2ZWN0b3JidWYgOiBwdWJsaWMgc3RkOjpzdHJlYW1idWYgeyAvLyBjbGFzcyBuYW1lIGlzIGNvbnNpc3RlbnQgd2l0aCBzdGQgbGliCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0PENoYXJUPjo6dmFsdWUgPT0gZmFsc2UsICJjYW5ub3QgdXNlIGNvbnN0IHR5cGUiKTsKK3B1YmxpYzoKKyAgICAvLyByL3cgYnVmZmVyIGNvbnN0cnVjdG9ycworICAgIGNoYXJ2ZWN0b3JidWYoc3RkOjp2ZWN0b3I8Q2hhclQ+ICZ2ZWMpIHsKKyAgICAgICAgaW5pdCh2ZWMuZGF0YSgpLCB2ZWMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBjaGFydmVjdG9yYnVmKENoYXJUICpiZWdpbiwgQ2hhclQgKmVuZCkgeworICAgICAgICBhc3NlcnQoZW5kID49IGJlZ2luKTsKKyAgICAgICAgaW5pdChiZWdpbiwgZW5kIC0gYmVnaW4pOworICAgIH0KKworICAgIGNoYXJ2ZWN0b3JidWYoQ2hhclQgKmJlZ2luLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBpbml0KGJlZ2luLCBzaXplKTsKKyAgICB9CisKKyAgICAvLyByL28gYnVmZmVyIGNvbnN0cnVjdG9yCisgICAgY2hhcnZlY3RvcmJ1Zihjb25zdCBzdGQ6OnZlY3RvcjxDaGFyVD4gJnZlYykgeworICAgICAgICBpbml0KHZlYy5kYXRhKCksIHZlYy5zaXplKCkpOworICAgIH0KKworICAgIGNoYXJ2ZWN0b3JidWYoY29uc3QgQ2hhclQgKmJlZ2luLCBjb25zdCBDaGFyVCAqZW5kKSB7CisgICAgICAgIGFzc2VydChlbmQgPj0gYmVnaW4pOworICAgICAgICBpbml0KGJlZ2luLCBlbmQgLSBiZWdpbik7CisgICAgfQorCisgICAgY2hhcnZlY3RvcmJ1Zihjb25zdCBDaGFyVCAqYmVnaW4sIHNpemVfdCBzaXplKSB7CisgICAgICAgIGluaXQoYmVnaW4sIHNpemUpOworICAgIH0KKyBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBzdGQ6OnN0cmVhbXBvcyBzZWVrcG9zKAorICAgICAgICAgICAgc3RkOjpzdHJlYW1wb3Mgc3AsIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIHdoaWNoID0KKyAgICAgICAgICAgIHN0ZDo6aW9zX2Jhc2U6OmluIHwgc3RkOjppb3NfYmFzZTo6b3V0KSBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBzZWVrb2ZmKHN0ZDo6c3RyZWFtb2ZmKHNwKSwgc3RkOjppb3NfYmFzZTo6YmVnLCB3aGljaCk7CisgICAgfQorCisgICAgLy8gdGhpcyBpcyBuZWVkZWQgdG8gdXNlIGZ0ZWxsKCkgb24gc3RyZWFtCisgICAgdmlydHVhbCBzdGQ6OnN0cmVhbXBvcyBzZWVrb2ZmKAorICAgICAgICAgICAgc3RkOjpzdHJlYW1vZmYgb2ZmLCBzdGQ6Omlvc19iYXNlOjpzZWVrZGlyIHdheSwKKyAgICAgICAgICAgIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlIHdoaWNoID0KKyAgICAgICAgICAgIHN0ZDo6aW9zX2Jhc2U6OmluIHwgc3RkOjppb3NfYmFzZTo6b3V0KSBvdmVycmlkZSB7CisKKyAgICAgICAgLy8gcHB0cigpID09IG51bGxwdHI6IHJlYWQtb25seQorICAgICAgICBhc3NlcnQocHB0cigpID09IG51bGxwdHIgfHwgZWdwdHIoKSAtIGViYWNrKCkgPT0gZXBwdHIoKSAtIHBiYXNlKCkpOworICAgICAgICBib29sIGluID0gd2hpY2ggJiBzdGQ6Omlvc19iYXNlOjppbjsKKyAgICAgICAgYm9vbCBvdXQgPSB3aGljaCAmIHN0ZDo6aW9zX2Jhc2U6Om91dDsKKyAgICAgICAgcG9zX3R5cGUgZW5kID0gZWdwdHIoKSAtIGViYWNrKCk7CisKKyAgICAgICAgaWYgKCFpbiAmJiAhb3V0KSB7CisgICAgICAgICAgICByZXR1cm4gcG9zX3R5cGUoLTEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGluICYmIG91dCAmJiB3YXkgPT0gc3RkOjppb3NfYmFzZTo6Y3VyKSB7CisgICAgICAgICAgICByZXR1cm4gcG9zX3R5cGUoLTEpOworICAgICAgICB9CisKKyAgICAgICAgb2ZmX3R5cGUgbm9mZjsKKyAgICAgICAgc3dpdGNoICh3YXkpIHsKKyAgICAgICAgICAgIGNhc2Ugc3RkOjppb3NfYmFzZTo6YmVnOgorICAgICAgICAgICAgICAgIG5vZmYgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBzdGQ6Omlvc19iYXNlOjpjdXI6CisgICAgICAgICAgICAgICAgaWYgKGluKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZmYgPSBncHRyKCkgLSBlYmFjaygpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG5vZmYgPSBwcHRyKCkgLSBwYmFzZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ugc3RkOjppb3NfYmFzZTo6ZW5kOgorICAgICAgICAgICAgICAgIG5vZmYgPSBlbmQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBwb3NfdHlwZSgtMSk7CisgICAgICAgIH0KKyAgICAgICAgbm9mZiArPSBvZmY7CisgICAgICAgIGlmIChub2ZmIDwgMCB8fCAgbm9mZiA+IGVuZCkgeworICAgICAgICAgICAgcmV0dXJuIHBvc190eXBlKC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChub2ZmICE9IDAgJiYgKChpbiAmJiBncHRyKCkgPT0gbnVsbHB0cikgfHwgKG91dCAmJiBwcHRyKCkgPT0gbnVsbHB0cikpKSB7CisgICAgICAgICAgICByZXR1cm4gcG9zX3R5cGUoLTEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGluKSB7CisgICAgICAgICAgICBzZXRnKGViYWNrKCksIGViYWNrKCkgKyBub2ZmLCBlZ3B0cigpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvdXQpIHsKKyAgICAgICAgICAgIHNldHAocGJhc2UoKSwgZXBwdHIoKSk7CisgICAgICAgICAgICBwYnVtcChub2ZmKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBwb3NfdHlwZShub2ZmKTsKKyAgICB9Citwcml2YXRlOgorICAgIC8vIHJlYWQgb25seSBidWZmZXIgaW5pdAorICAgIHZvaWQgaW5pdChjb25zdCBDaGFyVCAqYmFzZSwgc2l6ZV90IHNpemUpIHsKKyAgICAgICAgc2V0ZygoY2hhciopYmFzZSwgKGNoYXIqKWJhc2UsIChjaGFyKikoYmFzZSArIHNpemUpKTsKKyAgICB9CisKKyAgICAvLyByZWFkIHdyaXRlIGJ1ZmZlciBpbml0CisgICAgdm9pZCBpbml0KENoYXJUICpiYXNlLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBzZXRnKChjaGFyKiliYXNlLCAoY2hhciopYmFzZSwgKGNoYXIqKShiYXNlICsgc2l6ZSkpOworICAgICAgICBzZXRwKChjaGFyKiliYXNlLCAoY2hhciopKGJhc2UgKyBzaXplKSk7CisgICAgfQorfTsKKworLy8gZHVtcCBiaW5hcnkgdmFsdWVzCit0ZW1wbGF0ZSA8Y2xhc3MgRm9yd2FyZEl0ZXJhdG9yPgordm9pZCBoZXhkdW1wVG9TdHJlYW0oc3RkOjpvc3RyZWFtICZvcywgY29uc3QgRm9yd2FyZEl0ZXJhdG9yICZmaXJzdCwgY29uc3QgRm9yd2FyZEl0ZXJhdG9yICZsYXN0KSB7CisgICAgc3RhdGljX2Fzc2VydCgKKyAgICAgICAgICAgIHN0ZDo6aXNfY29udmVydGlibGU8CisgICAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8Rm9yd2FyZEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCisgICAgICAgICAgICAgICAgc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZz46OnZhbHVlCisgICAgICAgICAgICAmJiBzdGQ6OmlzX2NvbnZlcnRpYmxlPAorICAgICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhcj46OnZhbHVlCisgICAgICAgICAgICAmJiBzaXplb2YodHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8Rm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSkKKyAgICAgICAgICAgICAgICA9PSBzaXplb2YodW5zaWduZWQgY2hhciksCisgICAgICAgICAgICAiT25seSBhY2NlcHRzIGZvcndhcmQgaXRlcmF0b3Igb2YgYSB0eXBlIG9mIHNpemUgMSAiCisgICAgICAgICAgICAgICAgInRoYXQgY2FuIGJlIGNvbnZlcnQgdG8gdW5zaWduZWQgY2hhci5cbiIpOworICAgIHNpemVfdCBjID0gMDsKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3M7CisgICAgZm9yIChGb3J3YXJkSXRlcmF0b3IgaSA9IGZpcnN0OyBpICE9IGxhc3Q7ICsraSwgKytjKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgdiA9ICppOworICAgICAgICAvLyBmb3JtYXR0aW5nCisgICAgICAgIHN3aXRjaCAoYyAmIDB4ZikgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICBvcyA8PCBzcy5zdHIoKSA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgICAgICBzcy5zdHIoIiIpOworICAgICAgICAgICAgICAgIHNzIDw8IHN0ZDo6aGV4OworICAgICAgICAgICAgICAgIHNzIDw8IHN0ZDo6c2V0ZmlsbCgnMCcpIDw8IHN0ZDo6c2V0dyg0KSA8PCBjIDw8ICI6ICI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICAgICAgLy8gc3BhY2UKKyAgICAgICAgICAgICAgICBzcyA8PCAiICI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3MgPDwgc3RkOjpzZXRmaWxsKCcwJykgPDwgc3RkOjpzZXR3KDIpCisgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih2KSkgPDwgIiAiOworICAgIH0KKyAgICBvcyA8PCBzcy5zdHIoKSA8PCBMT0dfRU5ETDsKK30KK30gLy9uYW1lc3BhY2UgSGlkVXRpbAorCisjZW5kaWYgLy8gSElEVVRJTF9TVFJFQU1fSU9fVVRJTF9IXworCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvVHJpU3RhdGUuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9UcmlTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNDQ4MjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvVHJpU3RhdGUuaApAQCAtMCwwICsxLDI1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIEhJRFVUSUxfVFJJU1RBVEVfSF8KKyNkZWZpbmUgSElEVVRJTF9UUklTVEFURV9IXworCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworbmFtZXNwYWNlIEhpZFV0aWwgewordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFRyaVN0YXRlIHsKK3B1YmxpYzoKKyAgICAvLyBjb25zdHJ1Y3RvcgorICAgIFRyaVN0YXRlKCkgOiBtSXNTZXQoZmFsc2UpIHsgfQorICAgIFRyaVN0YXRlKGNvbnN0IFRyaVN0YXRlPFQ+ICZvdGhlcikgOiBtSXNTZXQob3RoZXIubUlzU2V0KSwgbVZhbHVlKG90aGVyLm1WYWx1ZSkgeyB9CisgICAgZXhwbGljaXQgVHJpU3RhdGUoY29uc3QgVCAmdmFsdWUpIDogbUlzU2V0KHRydWUpLCBtVmFsdWUodmFsdWUpIHsgfQorCisgICAgdm9pZCBjbGVhcigpIHsKKyAgICAgICAgbVZhbHVlID0gVCgpOworICAgICAgICBtSXNTZXQgPSBmYWxzZTsKKyAgICB9CisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1Jc1NldDsKKyAgICB9CisKKyAgICBjb25zdCBUIGdldChjb25zdCBUICZkZWZhdWx0VmFsdWUpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGlzU2V0KCkgPyBtVmFsdWUgOiBkZWZhdWx0VmFsdWU7CisgICAgfQorCisgICAgLy8gb3BlcmF0b3Igb3ZlcmxvYWRpbmcKKyAgICBleHBsaWNpdCBvcGVyYXRvciBUICgpIGNvbnN0IHsKKyAgICAgICAgYXNzZXJ0KG1Jc1NldCk7CisgICAgICAgIHJldHVybiBtVmFsdWU7CisgICAgfQorCisgICAgVHJpU3RhdGU8VD4mIG9wZXJhdG9yPShjb25zdCBUcmlTdGF0ZTxUPiAmb3RoZXIpIHsKKyAgICAgICAgbUlzU2V0ID0gb3RoZXIubUlzU2V0OworICAgICAgICBtVmFsdWUgPSBvdGhlci5tVmFsdWU7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBUcmlTdGF0ZTxUPiYgb3BlcmF0b3I9KGNvbnN0IFQmIHZhbHVlKSB7CisgICAgICAgIG1Jc1NldCA9IHRydWU7CisgICAgICAgIG1WYWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgVHJpU3RhdGU8VD4mIG9wZXJhdG9yKysoKSAgeworICAgICAgICBpZiAobUlzU2V0KSB7CisgICAgICAgICAgICBtVmFsdWUrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgVHJpU3RhdGU8VD4gb3BlcmF0b3IrKyhpbnQpIHsKKyAgICAgICAgVHJpU3RhdGU8VD4gdG1wKCp0aGlzKTsKKyAgICAgICAgb3BlcmF0b3IrKygpOworICAgICAgICByZXR1cm4gdG1wOworICAgIH0KKworICAgIFRyaVN0YXRlPFQ+JiBvcGVyYXRvci0tKCkgIHsKKyAgICAgICAgaWYgKG1Jc1NldCkgeworICAgICAgICAgICAgbVZhbHVlLS07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFRyaVN0YXRlPFQ+IG9wZXJhdG9yLS0oaW50KSB7CisgICAgICAgIFRyaVN0YXRlPFQ+IHRtcCgqdGhpcyk7CisgICAgICAgIG9wZXJhdG9yLS0oKTsKKyAgICAgICAgcmV0dXJuIHRtcDsKKyAgICB9CisKKyNkZWZpbmUgVU5BUllfT1Aob3ApIFwKKyAgICBUcmlTdGF0ZTxUPiBvcGVyYXRvciBvcCgpIHsgXAorICAgICAgICBUcmlTdGF0ZTxUPiB0bXAoKnRoaXMpOyBcCisgICAgICAgIGlmIChtSXNTZXQpIHsgXAorICAgICAgICAgICAgdG1wLm1WYWx1ZSA9IG9wIHRtcC5tVmFsdWU7IFwKKyAgICAgICAgfSBcCisgICAgICAgIHJldHVybiB0bXA7IFwKKyAgICB9CisKKyAgICBVTkFSWV9PUCghKTsKKyAgICBVTkFSWV9PUCgtKTsKKyAgICBVTkFSWV9PUCh+KTsKKyN1bmRlZiBVTkFSWV9PUAorCisjZGVmaW5lIENPTVBPVU5EX0FTU0lHTl9PUChvcCkgXAorICAgIFRyaVN0YXRlPFQ+JiBvcGVyYXRvciBvcCAoY29uc3QgVHJpU3RhdGU8VD4mIHJocykgeyBcCisgICAgICAgIGlmIChtSXNTZXQgJiYgcmhzLm1Jc1NldCkgeyBcCisgICAgICAgICAgICBtVmFsdWUgb3AgcmhzLm1WYWx1ZTsgXAorICAgICAgICB9IGVsc2UgeyBcCisgICAgICAgICAgICBtSXNTZXQgPSBmYWxzZTsgXAorICAgICAgICB9IFwKKyAgICAgICAgcmV0dXJuICp0aGlzOyBcCisgICAgfSBcCisgICAgVHJpU3RhdGU8VD4mIG9wZXJhdG9yIG9wKGNvbnN0IFQmIHJocykgeyBcCisgICAgICAgIGlmIChtSXNTZXQpIHsgXAorICAgICAgICAgICAgbVZhbHVlIG9wIHJoczsgXAorICAgICAgICB9IFwKKyAgICAgICAgcmV0dXJuICp0aGlzOyBcCisgICAgfQorCisgICAgQ09NUE9VTkRfQVNTSUdOX09QKCs9KTsKKyAgICBDT01QT1VORF9BU1NJR05fT1AoLT0pOworICAgIENPTVBPVU5EX0FTU0lHTl9PUCgqPSk7CisgICAgQ09NUE9VTkRfQVNTSUdOX09QKC89KTsKKyAgICBDT01QT1VORF9BU1NJR05fT1AoJT0pOworICAgIENPTVBPVU5EX0FTU0lHTl9PUCgmPSk7CisgICAgQ09NUE9VTkRfQVNTSUdOX09QKHw9KTsKKyAgICBDT01QT1VORF9BU1NJR05fT1AoXj0pOworI3VuZGVmIENPTVBPVU5EX0FTU0lHTl9PUAorCisgICAgVHJpU3RhdGU8VD4mIG9wZXJhdG9yID4+PShpbnQgaSkgeworICAgICAgICBpZiAobUlzU2V0KSB7CisgICAgICAgICAgICBtVmFsdWUgPj49IGk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICp0aGlzOyBcCisgICAgfQorCisgICAgVHJpU3RhdGU8VD4mIG9wZXJhdG9yIDw8PShpbnQgaSkgeworICAgICAgICBpZiAobUlzU2V0KSB7CisgICAgICAgICAgICBtVmFsdWUgPDw9IGk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICp0aGlzOyBcCisgICAgfQorCisgICAgVHJpU3RhdGU8VD4gb3BlcmF0b3IgPDwoaW50IGkpIHsgXAorICAgICAgICBUcmlTdGF0ZTxUPiB0bXAoKnRoaXMpOworICAgICAgICBvcGVyYXRvcjw8KGkpOworICAgICAgICByZXR1cm4gdG1wOworICAgIH0KKworICAgIFRyaVN0YXRlPFQ+IG9wZXJhdG9yID4+KGludCBpKSB7IFwKKyAgICAgICAgVHJpU3RhdGU8VD4gdG1wKCp0aGlzKTsKKyAgICAgICAgb3BlcmF0b3I+PihpKTsKKyAgICAgICAgcmV0dXJuIHRtcDsKKyAgICB9CisKKyNkZWZpbmUgQklOQVJZX09QKG9wLCBjb21wb3VuZF9vcCkgXAorICAgIGZyaWVuZCBUcmlTdGF0ZTxUPiBvcGVyYXRvciBvcChUcmlTdGF0ZTxUPiBsaHMsIGNvbnN0IFRyaVN0YXRlPFQ+JiByaHMpIHsgXAorICAgICAgICBsaHMgY29tcG91bmRfb3AgcmhzOyBcCisgICAgcmV0dXJuIGxoczsgXAorICAgIH1cCisgICAgICAgIGZyaWVuZCBUcmlTdGF0ZTxUPiBvcGVyYXRvciBvcChUcmlTdGF0ZTxUPiBsaHMsIGNvbnN0IFQmIHJocykgeyBcCisgICAgbGhzIGNvbXBvdW5kX29wIHJoczsgXAorICAgICAgICByZXR1cm4gbGhzOyBcCisgICAgfVwKKyAgICBmcmllbmQgVHJpU3RhdGU8VD4gb3BlcmF0b3Igb3AoY29uc3QgVCAmbGhzLCBjb25zdCBUcmlTdGF0ZTxUPiYgcmhzKSB7IFwKKyAgICAgICAgVHJpU3RhdGU8VD4gdG1wKGxocyk7IFwKKyAgICAgICAgcmV0dXJuIHRtcCBvcCByaHM7IFwKKyAgICB9CisKKyAgICBCSU5BUllfT1AoKywgKz0pOworICAgIEJJTkFSWV9PUCgtLCAtPSk7CisgICAgQklOQVJZX09QKCosICo9KTsKKyAgICBCSU5BUllfT1AoLywgLz0pOworICAgIEJJTkFSWV9PUCglLCAlPSk7CisgICAgQklOQVJZX09QKCYsICY9KTsKKyAgICBCSU5BUllfT1AofCwgfD0pOworICAgIEJJTkFSWV9PUCheLCBePSk7CisjdW5kZWYgQklOQVJZX09QCisKKyNkZWZpbmUgUkVMQVRJT05fT1Aob3ApIFwKKyAgICBmcmllbmQgVHJpU3RhdGU8Ym9vbD4gb3BlcmF0b3Igb3AoY29uc3QgVHJpU3RhdGU8VD4mIGxocywgY29uc3QgVHJpU3RhdGU8VD4mIHJocykgeyBcCisgICAgICAgIGlmIChsaHMubUlzU2V0ICYmIHJocy5tSXNTZXQpIHsgXAorICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlPGJvb2w+KGxocy5tVmFsdWUgb3AgcmhzLm1WYWx1ZSk7IFwKKyAgICAgICAgfSBlbHNlIHsgXAorICAgICAgICByZXR1cm4gVHJpU3RhdGU8Ym9vbD4oKTsgXAorICAgICAgICB9IFwKKyAgICB9IFwKKyAgICBmcmllbmQgVHJpU3RhdGU8Ym9vbD4gb3BlcmF0b3Igb3AoY29uc3QgVHJpU3RhdGU8VD4mIGxocywgY29uc3QgVCYgcmhzKSB7IFwKKyAgICAgICAgaWYgKGxocy5tSXNTZXQpIHsgXAorICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlPGJvb2w+KGxocy5tVmFsdWUgb3AgcmhzKTsgXAorICAgICAgICB9IGVsc2UgeyBcCisgICAgICAgICAgICByZXR1cm4gVHJpU3RhdGU8Ym9vbD4oKTsgXAorICAgICAgICB9IFwKKyAgICB9IFwKKyAgICBmcmllbmQgVHJpU3RhdGU8Ym9vbD4gb3BlcmF0b3Igb3AoY29uc3QgVCYgbGhzLCBjb25zdCBUcmlTdGF0ZTxUPiYgcmhzKSB7IFwKKyAgICAgICAgaWYgKHJocy5tSXNTZXQpIHsgXAorICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlPGJvb2w+KGxocyBvcCByaHMubVZhbHVlKTsgXAorICAgICAgICB9IGVsc2UgeyBcCisgICAgICAgICAgICByZXR1cm4gVHJpU3RhdGU8Ym9vbD4oKTsgXAorICAgICAgICB9IFwKKyAgICB9CisKKyAgICBSRUxBVElPTl9PUCg9PSk7CisgICAgUkVMQVRJT05fT1AoIT0pOworICAgIFJFTEFUSU9OX09QKD49KTsKKyAgICBSRUxBVElPTl9PUCg8PSk7CisgICAgUkVMQVRJT05fT1AoPik7CisgICAgUkVMQVRJT05fT1AoPCk7CisjdW5kZWYgUkVMQVRJT05fT1AKKworICAgIGZyaWVuZCBUcmlTdGF0ZTxib29sPiBvcGVyYXRvciAmJihUcmlTdGF0ZTxUPiYgbGhzLCBjb25zdCBUcmlTdGF0ZTxUPiYgcmhzKSB7CisgICAgICAgIGlmIChsaHMubUlzU2V0ICYmIHJocy5tSXNTZXQpIHsKKyAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTxib29sPihsaHMubVZhbHVlICYmIHJocy5tVmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlPGJvb2w+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmcmllbmQgVHJpU3RhdGU8Ym9vbD4gb3BlcmF0b3IgfHwoVHJpU3RhdGU8VD4mIGxocywgY29uc3QgVHJpU3RhdGU8VD4mIHJocykgeworICAgICAgICBpZiAobGhzLm1Jc1NldCAmJiByaHMubUlzU2V0KSB7CisgICAgICAgICAgICByZXR1cm4gVHJpU3RhdGU8Ym9vbD4obGhzLm1WYWx1ZSB8fCByaHMubVZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTxib29sPigpOworICAgICAgICB9CisgICAgfQorCisgICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3IgPDwoc3RkOjpvc3RyZWFtICZvcywgY29uc3QgVHJpU3RhdGU8VD4gJnYpIHsKKyAgICAgICAgaWYgKHYubUlzU2V0KSB7CisgICAgICAgICAgICBvcyA8PCB2Lm1WYWx1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG9zIDw8ICJbbm90IHNldF0iOworICAgICAgICB9CisgICAgICAgIHJldHVybiBvczsKKyAgICB9CisKKyAgICBmcmllbmQgc3RkOjppc3RyZWFtJiBvcGVyYXRvciA+PihzdGQ6OmlzdHJlYW0gJmlzLCBjb25zdCBUcmlTdGF0ZTxUPiAmdikgeworICAgICAgICBUIGE7CisgICAgICAgIGlzID4+IGE7CisgICAgICAgIHYgPSBUcmlTdGF0ZTxUPihhKTsKKyAgICAgICAgcmV0dXJuIGlzOworICAgIH0KK3ByaXZhdGU6CisgICAgYm9vbCBtSXNTZXQ7CisgICAgVCBtVmFsdWU7Cit9OworCisvLyBjb21tb25seSB1c2VkIG9uZXMKK3R5cGVkZWYgVHJpU3RhdGU8dW5zaWduZWQ+IHRyaV91aW50OwordHlwZWRlZiBUcmlTdGF0ZTxpbnQ+IHRyaV9pbnQ7CisKK3R5cGVkZWYgVHJpU3RhdGU8dWludDMyX3Q+IHRyaV91aW50MzJfdDsKK3R5cGVkZWYgVHJpU3RhdGU8aW50MzJfdD4gdHJpX2ludDMyX3Q7Cit0eXBlZGVmIFRyaVN0YXRlPHVpbnQ4X3Q+IHRyaV91aW50OF90OwordHlwZWRlZiBUcmlTdGF0ZTx1aW50MTZfdD4gdHJpX3VpbnQxNl90OworfQorCisjZW5kaWYgLy8gSElEVVRJTF9UUklTVEFURV9IXwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvSGlkUGFyc2VyRXhhbXBsZS5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9IaWRQYXJzZXJFeGFtcGxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzcyNDNlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvSGlkUGFyc2VyRXhhbXBsZS5jcHAKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgIkhpZExvZy5oIgorI2luY2x1ZGUgIkhpZFBhcnNlci5oIgorI2luY2x1ZGUgIlRlc3RIaWREZXNjcmlwdG9yLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKwordXNpbmcgSGlkVXRpbDo6SGlkUGFyc2VyOworCitib29sIGRvUGFyc2UoKSB7CisgICAgSGlkUGFyc2VyIGhpZFBhcnNlcjsKKyAgICBib29sIHJldCA9IHRydWU7CisKKyAgICBmb3IgKGNvbnN0IFRlc3RIaWREZXNjcmlwdG9yICpwID0gZ0Rlc2NyaXB0b3JBcnJheTsgOyArK3ApIHsKKyAgICAgICAgaWYgKHAtPmRhdGEgPT0gbnVsbHB0ciB8fCBwLT5sZW4gPT0gMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IHAtPm5hbWUgIT0gbnVsbHB0ciA/IHAtPm5hbWUgOiAidW5uYW1lZCI7CisgICAgICAgIGJvb2wgcGFyc2VSZXN1bHQgPSBoaWRQYXJzZXIucGFyc2UocC0+ZGF0YSwgcC0+bGVuKTsKKworICAgICAgICBpZiAocGFyc2VSZXN1bHQpIHsKKyAgICAgICAgICAgIExPR19WIDw8IG5hbWUgPDwgIiAgZmlsdGVyZWQgdHJlZTogIiA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgIExPR19WIDw8ICooaGlkUGFyc2VyLmdldFRyZWUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIExPR19FIDw8IG5hbWUgPDwgIiBwYXJzaW5nIGVycm9yISIgPDwgTE9HX0VOREw7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworYm9vbCBkb1BhcnNlQW5kRmlsdGVyKCkgeworICAgIEhpZFBhcnNlciBoaWRQYXJzZXI7CisgICAgYm9vbCByZXQgPSB0cnVlOworCisgICAgZm9yIChjb25zdCBUZXN0SGlkRGVzY3JpcHRvciAqcCA9IGdEZXNjcmlwdG9yQXJyYXk7IDsgKytwKSB7CisgICAgICAgIGlmIChwLT5kYXRhID09IG51bGxwdHIgfHwgcC0+bGVuID09IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBwLT5uYW1lICE9IG51bGxwdHIgPyBwLT5uYW1lIDogInVubmFtZWQiOworICAgICAgICBib29sIHBhcnNlUmVzdWx0ID0gaGlkUGFyc2VyLnBhcnNlKHAtPmRhdGEsIHAtPmxlbik7CisKKyAgICAgICAgaWYgKHBhcnNlUmVzdWx0KSB7CisgICAgICAgICAgICBoaWRQYXJzZXIuZmlsdGVyVHJlZSgpOworICAgICAgICAgICAgTE9HX1YgPDwgbmFtZSA8PCAiICBmaWx0ZXJlZCB0cmVlOiAiIDw8IExPR19FTkRMOworICAgICAgICAgICAgTE9HX1YgPDwgKihoaWRQYXJzZXIuZ2V0VHJlZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICAgICAgTE9HX0UgPDwgbmFtZSA8PCAiIHBhcnNpbmcgZXJyb3IhIiA8PCBMT0dfRU5ETDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitib29sIGRvRGlnZXN0KCkgeworICAgIEhpZFBhcnNlciBoaWRQYXJzZXI7CisgICAgYm9vbCByZXQgPSB0cnVlOworCisgICAgLy8gdmFsdWUgZnJvbSBISUQgc2Vuc29yIHVzYWdlIHBhZ2Ugc3BlYworICAgIHN0ZDo6dW5vcmRlcmVkX3NldDx1bnNpZ25lZCBpbnQ+IGludGVyZXN0ZWRVc2FnZSA9IHsKKyAgICAgICAgMHgyMDAwNzMsIC8vIGFjY2VsZXJvbWV0ZXIgM2QKKyAgICAgICAgMHgyMDAwNzYsIC8vIGd5cm8gM2QKKyAgICAgICAgMHgyMDAwODMsIC8vIG1hZyAzZAorICAgICAgICAweDIwMDA4YSwgLy8gZGV2aWNlIG9yaWVudGF0aW9uIChyb3RhdGlvbiB2ZWN0b3IpCisgICAgfTsKKworICAgIGZvciAoY29uc3QgVGVzdEhpZERlc2NyaXB0b3IgKnAgPSBnRGVzY3JpcHRvckFycmF5OyA7ICsrcCkgeworICAgICAgICBpZiAocC0+ZGF0YSA9PSBudWxscHRyIHx8IHAtPmxlbiA9PSAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBjaGFyICpuYW1lID0gcC0+bmFtZSAhPSBudWxscHRyID8gcC0+bmFtZSA6ICJ1bm5hbWVkIjsKKyAgICAgICAgYm9vbCBwYXJzZVJlc3VsdCA9IGhpZFBhcnNlci5wYXJzZShwLT5kYXRhLCBwLT5sZW4pOworCisgICAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKKyAgICAgICAgICAgIExPR19FIDw8IG5hbWUgPDwgIiBwYXJzaW5nIGVycm9yISIgPDwgTE9HX0VOREw7CisgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaGlkUGFyc2VyLmZpbHRlclRyZWUoKTsKKyAgICAgICAgTE9HX1YgPDwgbmFtZSA8PCAiICBkaWdlc3Q6ICIgPDwgTE9HX0VOREw7CisgICAgICAgIEhpZFBhcnNlcjo6RGlnZXN0VmVjdG9yIGRpZ2VzdFZlY3RvciA9IGhpZFBhcnNlci5nZW5lcmF0ZURpZ2VzdChpbnRlcmVzdGVkVXNhZ2UpOworICAgICAgICBMT0dfViA8PCBkaWdlc3RWZWN0b3I7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgcHJpbnRVc2FnZShjaGFyICphcmd2MCkgeworICAgIExPR19WIDw8ICJVc2FnZTogIiA8PCBhcmd2MCA8PCAiIHRlc3RfbmFtZSIgPDwgTE9HX0VOREw7CisgICAgTE9HX1YgPDwgIiAgdGVzdF9uYW1lIGNhbiBiZSBwYXJzZSwgcGFyc2VfZmlsdGVyLCBkaWdlc3QuIiA8PCBMT0dfRU5ETDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgeworICAgIGludCByZXQ7CisKKyAgICBpZiAoYXJnYyAhPSAyKSB7CisgICAgICAgIExPR19FIDw8ICJFcnJvcjogbmVlZCBwYXJhbSIgPDwgTE9HX0VOREw7CisgICAgICAgIHByaW50VXNhZ2UoYXJndlswXSk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIGlmIChzdHJjbXAoYXJndlsxXSwgInBhcnNlIikgPT0gMCkgeworICAgICAgICByZXQgPSBkb1BhcnNlKCkgPyAwIDogMTsKKyAgICB9IGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAicGFyc2VfZmlsdGVyIikgPT0gMCkgeworICAgICAgICByZXQgPSBkb1BhcnNlQW5kRmlsdGVyKCkgPyAwIDogMTsKKyAgICB9IGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiZGlnZXN0IikgPT0gMCkgeworICAgICAgICByZXQgPSBkb0RpZ2VzdCgpID8gMCA6IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HX0UgPDwgIkVycm9yOiB1bmtub3duIHRlc3QgbmFtZSIgPDwgTE9HX0VOREw7CisgICAgICAgIHByaW50VXNhZ2UoYXJndlswXSk7CisgICAgICAgIHJldCA9IC1FTk9FTlQ7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L0hpZFBhcnNlckV4YW1wbGUyLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L0hpZFBhcnNlckV4YW1wbGUyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTUxZGZmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvSGlkUGFyc2VyRXhhbXBsZTIuY3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiVGVzdEhpZERlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJIaWRMb2cuaCIKKyNpbmNsdWRlICJIaWRQYXJzZXIuaCIKKyNpbmNsdWRlICJTdHJlYW1Jb1V0aWwuaCIKKwordXNpbmcgbmFtZXNwYWNlIEhpZFV0aWw7CisKK3ZvaWQgcHJpbnRSYXdWYWx1ZShjb25zdCBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiAmZGVzY3JpcHRvcikgeworICAgIExPR19EIDw8ICJEZXNjcmlwdG9yIFsiIDw8IGRlc2NyaXB0b3Iuc2l6ZSgpIDw8ICJdOiAiIDw8IHN0ZDo6aGV4OworICAgIGhleGR1bXBUb1N0cmVhbShMT0dfRCwgZGVzY3JpcHRvci5iZWdpbigpLCBkZXNjcmlwdG9yLmVuZCgpKTsKK30KKwordm9pZCBwcmludFRva2VuKGNvbnN0IHN0ZDo6dmVjdG9yPEhpZEl0ZW0+ICZoaWRJdGVtVmVjdG9yKSB7CisgICAgTE9HX1YgPDwgIlRvdGFsICIgPDwgaGlkSXRlbVZlY3Rvci5zaXplKCkgPDwgIiB0b2tlbnMiIDw8IExPR19FTkRMOworICAgIGZvciAoYXV0byAmaSA6IGhpZEl0ZW1WZWN0b3IpIHsKKyAgICAgICAgTE9HX1YgPDwgaSA8PCBMT0dfRU5ETDsKKyAgICB9Cit9CisKK2ludCBtYWluKCkgeworICAgIGNvbnN0IFRlc3RIaWREZXNjcmlwdG9yICp0ID0gZmluZFRlc3REZXNjcmlwdG9yKCJhY2NlbDMiKTsKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgaW50IEFDQ0VMXzNEX1VTQUdFID0gMHgyMDAwNzM7CisKKyAgICBhc3NlcnQodCAhPSBudWxscHRyKTsKKyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBkZXNjcmlwdG9yKHQtPmRhdGEsIHQtPmRhdGEgKyB0LT5sZW4pOworCisgICAgLy8gcGFyc2UgY2FuIGJlIGRvbmUgaW4gb25lIHN0ZXAgd2l0aCBIaWRQYXJzZXI6OnBhcnNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJlZ2luLCBzaXplX3Qgc2l6ZSk7CisgICAgLy8gaGVyZSBpdCBpcyBkb25lIGluIG11bHRpcGxlIHN0ZXBzIGZvciBpbGx1c3RyYXRpb24gcHVycG9zZQorICAgIEhpZFBhcnNlciBoaWRQYXJzZXI7CisgICAgLy8gcHJpbnQgb3V0IHJhdyB2YWx1ZQorICAgIHByaW50UmF3VmFsdWUoZGVzY3JpcHRvcik7CisKKyAgICAvLyB0b2tlbml6ZSBpdAorICAgIHN0ZDo6dmVjdG9yPEhpZEl0ZW0+IGhpZEl0ZW1WZWN0b3IgPSBIaWRJdGVtOjp0b2tlbml6ZShkZXNjcmlwdG9yKTsKKworICAgIC8vIHByaW50IG91dCB0b2tlbnMKKyAgICBwcmludFRva2VuKGhpZEl0ZW1WZWN0b3IpOworCisgICAgLy8gcGFyc2UgaXQKKyAgICBpZiAoaGlkUGFyc2VyLnBhcnNlKGhpZEl0ZW1WZWN0b3IpKSB7CisgICAgICAgIC8vIG1ha2luZyBhIGRlZXBjb3B5IG9mIHRyZWUgKG5vdCBuZWNlc3NhcnksIGJ1dCBmb3IgaWxsdXN0cmF0aW9uKQorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IHRyZWUgPSBoaWRQYXJzZXIuZ2V0VHJlZSgpLT5kZWVwQ29weSgpOworCisgICAgICAgIExPR19WIDw8ICJUcmVlOiAiIDw8IExPR19FTkRMOworICAgICAgICBMT0dfViA8PCAqdHJlZTsKKyAgICAgICAgTE9HX1YgPDwgTE9HX0VOREw7CisKKyAgICAgICAgaGlkUGFyc2VyLmZpbHRlclRyZWUoKTsKKyAgICAgICAgTE9HX1YgPDwgIkZpbHRlcmVkVHJlZTogIiA8PCBMT0dfRU5ETDsKKyAgICAgICAgTE9HX1YgPDwgKihoaWRQYXJzZXIuZ2V0VHJlZSgpKTsKKworICAgICAgICBMT0dfViA8PCAiRGlnZXN0VmVjdG9yOiAiIDw8IExPR19FTkRMOworICAgICAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8dW5zaWduZWQgaW50PiBpbnRlcmVzdGVkID0ge0FDQ0VMXzNEX1VTQUdFfTsKKyAgICAgICAgSGlkUGFyc2VyOjpEaWdlc3RWZWN0b3IgZGlnZXN0VmVjdG9yID0gaGlkUGFyc2VyLmdlbmVyYXRlRGlnZXN0KGludGVyZXN0ZWQpOworICAgICAgICBMT0dfViA8PCBkaWdlc3RWZWN0b3I7CisKKyAgICB9IGVsc2UgeworICAgICAgICBMT0dfViA8PCAiUGFyc2luZyBFcnJvciIgPDwgTE9HX0VOREw7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L1Rlc3RIaWREZXNjcmlwdG9yLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L1Rlc3RIaWREZXNjcmlwdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzU3ZDRmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvVGVzdEhpZERlc2NyaXB0b3IuY3BwCkBAIC0wLDAgKzEsMjYwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSAiVGVzdEhpZERlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJUZXN0SGlkU2Vuc29yU3BlYy5oIgorI2luY2x1ZGUgPGNzdHJpbmc+CisKKy8qKgorICogRXhhbXBsZSBISUQgc2Vuc29yIGRlc2NyaXB0b3JzIGluIHRoaXMgZmlsZSBpcyBleHRyYWN0ZWQgZnJvbSBwdWJsaXNoZWQgZG9jdW1lbnQKKyAqICJISUQgU2Vuc29ycyBVc2FnZSIgKGhpZC1zZW5zb3JzLXVzYWdlLmRvY3gpLiBUaGV5IGFyZSBhZGRlZCBmb3IgdGVzdGluZyBvZiBIaWRQYXJzZXIuCisgKgorICogSXQgaXMgc2xpZ2h0bHkgbW9kaWZpZWQgaW4gb3JkZXIgdG8gY29tcGlsZS4KKyAqLworbmFtZXNwYWNlIHsKKy8qKgorICogVHdvIHNlbnNvcnMgY29sbGVjdGlvbiBza2VsZXRvbiBleGFtcGxlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGNvbDFfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0NPTExFQ1RJT04sCisgICAgSElEX0NPTExFQ1RJT04oQXBwbGljYXRpb24pLAorCisgICAgSElEX1JFUE9SVF9JRCgxKSwKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0FDQ0VMRVJPTUVURVJfM0QsCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9GZWF0dXJlIFJlcG9ydCBEZXNjcmlwdG9yIGZvciBTZW5zb3IgUmVwb3J0IElEID0gMQorCisgICAgLy9JbnB1dCBSZXBvcnQgRGVzY3JpcHRvciBmb3IgU2Vuc29yIFJlcG9ydCBJRCA9IDEKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTiwgLy9mb3IgUmVwb3J0IElEID0gMQorCisgICAgSElEX1JFUE9SVF9JRCgyKSwKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9HWVJPTUVURVJfM0QsCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9GZWF0dXJlIFJlcG9ydCBEZXNjcmlwdG9yIGZvciBTZW5zb3IgUmVwb3J0IElEID0gMgorCisgICAgLy9JbnB1dCBSZXBvcnQgRGVzY3JpcHRvciBmb3IgU2Vuc29yIFJlcG9ydCBJRCA9IDIKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTiwgLy9mb3IgUmVwb3J0IElEID0gMgorCisgICAgLy9Nb3JlIHNlbnNvcnMgZm9sbG93IHVzaW5nIHRoZSBzYW1lIHBhdHRlcm4KKworICAgIEhJRF9FTkRfQ09MTEVDVElPTiAvL0FwcGxpY2F0aW9uCit9OworCisKKy8qKgorICogQ29tcG9zaXRlIGRldmljZSBkZXNjcmlwdG9yIGV4YW1wbGU6IHR3byBzZW5zb3JzIHdpdGggYSBrZXlib2FyZCBhbmQgYSBtb3VzZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBjb2wyX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgLy9rZXlib2FyZAorICAgIDB4MDVVLCAweDAxVSwgICAgICAgICAvLyBVU0FHRSBQQUdFIChHZW5lcmljIERlc2t0b3ApCisgICAgMHgwOVUsIDB4MDZVLCAgICAgICAgIC8vIFVTQUdFIChLZXlib2FyZCkKKyAgICAweEExVSwgMHgwMVUsICAgICAgICAgLy8gQ09MTEVDVElPTiAoQXBwbGljYXRpb24pCisKKyAgICAweDg1VSwgMHgwM1UsICAgICAgICAgLy8gUkVQT1JUX0lEICgxKQorCisgICAgMHgxNVUsIDB4MDBVLCAgICAgICAgIC8vICAgTE9HSUNBTCBNSU5JTVVNICgwKQorICAgIDB4MjVVLCAweDAxVSwgICAgICAgICAvLyAgIExPR0lDQUwgTUFYSU1VTSAoMSkKKyAgICAweDc1VSwgMHgwMVUsICAgICAgICAgLy8gICBSRVBPUlQgU0laRSAoMSkKKyAgICAweDk1VSwgMHgwOFUsICAgICAgICAgLy8gICBSRVBPUlQgQ09VTlQgKDgpCisgICAgMHgwNVUsIDB4MDdVLCAgICAgICAgIC8vICAgVVNBR0UgUEFHRSAoS2V5Ym9hcmQpCisgICAgMHgxOVUsIDB4RTBVLCAgICAgICAgIC8vICAgVVNBR0UgTUlOSU1VTSAoS2V5Ym9hcmQgTGVmdENvbnRyb2wpCisgICAgMHgyOVUsIDB4RTdVLCAgICAgICAgIC8vICAgVVNBR0UgTUFYSU1VTSAoS2V5Ym9hcmQgUmlnaHQgR1VJKQorICAgIDB4ODFVLCAweDAyVSwgICAgICAgICAvLyAgIElOUFVUIChWYXIpCisKKyAgICAweDc1VSwgMHgwOFUsICAgICAgICAgLy8gICBSRVBPUlQgU0laRSAoOCkKKyAgICAweDk1VSwgMHgwQVUsICAgICAgICAgLy8gICBSRVBPUlQgQ09VTlQgKDEwKQorICAgIDB4MTlVLCAweDAwVSwgICAgICAgICAvLyAgIFVTQUdFIE1JTklNVU0gKE5vIGV2ZW50KQorICAgIDB4MjlVLCAweDkxVSwgICAgICAgICAvLyAgIFVTQUdFIE1BWElNVU0gKEtleWJvYXJkIExBTkcyKQorICAgIDB4MjZVLCAweEZGVSwgMHgwMFUsICAvLyAgIExPR0lDQUwgTUFYSU1VTSAoMHhGRikKKyAgICAweDgxVSwgMHgwMFUsICAgICAgICAgLy8gICBJTlBVVCAoRGF0YSxBcnksQWJzKQorCisgICAgMHhDMFUsICAgICAgICAgICAgICAgIC8vIEVORCBDT0xMRUNUSU9OLCAvL2tleWJvYXJkCisKKyAgICAvLyBUd28gc2Vuc29yIGNvbGxlY3Rpb24gc2tlbGV0b24gZXhhbXBsZToKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0NPTExFQ1RJT04sCisgICAgSElEX0NPTExFQ1RJT04oQXBwbGljYXRpb24pLAorCisgICAgSElEX1JFUE9SVF9JRCgyKSwKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0FDQ0VMRVJPTUVURVJfM0QsCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9GZWF0dXJlIFJlcG9ydCBEZXNjcmlwdG9yIGZvciBTZW5zb3IgUmVwb3J0IElEID0gMgorCisgICAgLy9JbnB1dCBSZXBvcnQgRGVzY3JpcHRvciBmb3IgU2Vuc29yIFJlcG9ydCBJRCA9IDIKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTiwgLy9mb3IgUmVwb3J0IElEID0gMgorCisgICAgSElEX1JFUE9SVF9JRCgzKSwKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9HWVJPTUVURVJfM0QsCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9GZWF0dXJlIFJlcG9ydCBEZXNjcmlwdG9yIGZvciBTZW5zb3IgUmVwb3J0IElEID0gMworCisgICAgLy9JbnB1dCBSZXBvcnQgRGVzY3JpcHRvciBmb3IgU2Vuc29yIFJlcG9ydCBJRCA9IDMKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTiwgLy9mb3IgUmVwb3J0IElEID0gMworCisgICAgLy9Nb3JlIHNlbnNvcnMgZm9sbG93IHVzaW5nIHRoZSBzYW1lIHBhdHRlcm4KKworICAgIEhJRF9FTkRfQ09MTEVDVElPTiwgLy9TZW5zb3IgY29sbGVjdGlvbgorCisgICAgLy9tb3VzZQorICAgIDB4MDVVLCAweDAxVSwgICAgICAgICAvLyBVU0FHRSBQQUdFIChHZW5lcmljIERlc2t0b3ApCisgICAgMHgwOVUsIDB4MDJVLCAgICAgICAgIC8vIFVTQUdFIChNb3VzZSkKKyAgICAweEExVSwgMHgwMVUsICAgICAgICAgLy8gQ09MTEVDVElPTiAoQXBwbGljYXRpb24pCisgICAgMHg4NVUsIDB4MDRVLCAgICAgICAgIC8vIFJFUE9SVF9JRCAoNCkKKworICAgIC8vIDUgbW91c2UgYnV0dG9ucworICAgIDB4MDVVLCAweDA5VSwgICAgICAgICAvLyAgIFVTQUdFIFBBR0UgKEJ1dHRvbikKKyAgICAweDE5VSwgMHgwMVUsICAgICAgICAgLy8gICBVU0FHRSBNSU5JTVVNIChCdXR0b24gMSkKKyAgICAweDI5VSwgMHgwNVUsICAgICAgICAgLy8gICBVU0FHRSBNQVhJTVVNIChCdXR0b24gNSkKKyAgICAweDE1VSwgMHgwMFUsICAgICAgICAgLy8gICBMT0dJQ0FMIE1JTklNVU0gKDApCisgICAgMHgyNVUsIDB4MDFVLCAgICAgICAgIC8vICAgTE9HSUNBTCBNQVhJTVVNICgxKQorICAgIDB4OTVVLCAweDA1VSwgICAgICAgICAvLyAgIFJFUE9SVCBDT1VOVCAoNSkKKyAgICAweDc1VSwgMHgwMVUsICAgICAgICAgLy8gICBSRVBPUlQgU0laRSAoMSkKKyAgICAweDgxVSwgMHgwMlUsICAgICAgICAgLy8gICBJTlBVVCAoRGF0YSxWYXIsQWJzKQorCisgICAgLy8gIDMgdW51c2VkIGJ1dHRvbnM6CisgICAgMHg5NVUsIDB4MDFVLCAgICAgICAgIC8vICAgUkVQT1JUIENPVU5UICgxKQorICAgIDB4NzVVLCAweDAzVSwgICAgICAgICAvLyAgIFJFUE9SVCBTSVpFICgzKQorICAgIDB4ODFVLCAweDAzVSwgICAgICAgICAvLyAgIElOUFVUIChDbnN0LFZhcixBYnMpCisKKyAgICAvLyBtb3VzZSAoZGVsdGEgeCwgZGVsdGEgeSkgcG9zaXRpb24KKyAgICAweDE1VSwgMHg4MVUsICAgICAgICAgLy8gICBMT0dJQ0FMIE1JTklNVU0gKC0xMjcpCisgICAgMHgyNVUsIDB4N2ZVLCAgICAgICAgIC8vICAgTE9HSUNBTCBNQVhJTVVNICgrMTI3KQorICAgIDB4NzVVLCAweDA4VSwgICAgICAgICAvLyAgIFJFUE9SVCBTSVpFICg4KQorICAgIDB4OTVVLCAweDAyVSwgICAgICAgICAvLyAgIFJFUE9SVCBDT1VOVCAoMikKKyAgICAweDA1VSwgMHgwMVUsICAgICAgICAgLy8gICBVU0FHRSBQQUdFIChHZW5lcmljIERlc2t0b3ApCisgICAgMHgwOVUsIDB4MzBVLCAgICAgICAgIC8vICAgVVNBR0UoWCkKKyAgICAweDA5VSwgMHgzMVUsICAgICAgICAgLy8gICBVU0FHRSAoWSkKKyAgICAweDgxVSwgMHgwNlUsICAgICAgICAgLy8gICBJTlBVVCAoRGF0YSxWYXIsUmVsKQorCisgICAgMHhDMFUsICAgICAgICAgICAgICAgIC8vIEVORCBDT0xMRUNUSU9OIC8vbW91c2UKK307CisKKworLyoqCisgKiBDb21wb3NpdGUgZGV2aWNlIGRlc2NyaXB0b3IgZXhhbXBsZTogb25lIHNlbnNvciB3aXRoIGEga2V5Ym9hcmQgYW5kIGEgbW91c2UuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgY29sM19yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIC8va2V5Ym9hcmQKKyAgICAweDA1VSwgMHgwMVUsICAgICAgICAgLy8gVVNBR0UgUEFHRSAoR2VuZXJpYyBEZXNrdG9wKQorICAgIDB4MDlVLCAweDA2VSwgICAgICAgICAvLyBVU0FHRSAoS2V5Ym9hcmQpCisgICAgMHhBMVUsIDB4MDFVLCAgICAgICAgIC8vIENPTExFQ1RJT04gKEFwcGxpY2F0aW9uKQorCisgICAgMHg4NVUsIDB4MDNVLCAgICAgICAgIC8vIFJFUE9SVF9JRCAoMSkKKworICAgIDB4MTVVLCAweDAwVSwgICAgICAgICAvLyAgIExPR0lDQUwgTUlOSU1VTSAoMCkKKyAgICAweDI1VSwgMHgwMVUsICAgICAgICAgLy8gICBMT0dJQ0FMIE1BWElNVU0gKDEpCisgICAgMHg3NVUsIDB4MDFVLCAgICAgICAgIC8vICAgUkVQT1JUIFNJWkUgKDEpCisgICAgMHg5NVUsIDB4MDhVLCAgICAgICAgIC8vICAgUkVQT1JUIENPVU5UICg4KQorICAgIDB4MDVVLCAweDA3VSwgICAgICAgICAvLyAgIFVTQUdFIFBBR0UgKEtleWJvYXJkKQorICAgIDB4MTlVLCAweEUwVSwgICAgICAgICAvLyAgIFVTQUdFIE1JTklNVU0gKEtleWJvYXJkIExlZnRDb250cm9sKQorICAgIDB4MjlVLCAweEU3VSwgICAgICAgICAvLyAgIFVTQUdFIE1BWElNVU0gKEtleWJvYXJkIFJpZ2h0IEdVSSkKKyAgICAweDgxVSwgMHgwMlUsICAgICAgICAgLy8gICBJTlBVVCAoVmFyKQorCisgICAgMHg3NVUsIDB4MDhVLCAgICAgICAgIC8vICAgUkVQT1JUIFNJWkUgKDgpCisgICAgMHg5NVUsIDB4MEFVLCAgICAgICAgIC8vICAgUkVQT1JUIENPVU5UICgxMCkKKyAgICAweDE5VSwgMHgwMFUsICAgICAgICAgLy8gICBVU0FHRSBNSU5JTVVNIChObyBldmVudCkKKyAgICAweDI5VSwgMHg5MVUsICAgICAgICAgLy8gICBVU0FHRSBNQVhJTVVNIChLZXlib2FyZCBMQU5HMikKKyAgICAweDI2VSwgMHhGRlUsIDB4MDBVLCAgLy8gICBMT0dJQ0FMIE1BWElNVU0gKDB4RkYpCisgICAgMHg4MVUsIDB4MDBVLCAgICAgICAgIC8vICAgSU5QVVQgKERhdGEsQXJ5LEFicykKKworICAgIDB4QzBVLCAgICAgICAgICAgICAgICAvLyBFTkQgQ09MTEVDVElPTiwgLy9rZXlib2FyZAorCisgICAgLy8gT25lIHNlbnNvciBjb2xsZWN0aW9uIHNrZWxldG9uIGV4YW1wbGU6CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9DT0xMRUNUSU9OLAorICAgIEhJRF9DT0xMRUNUSU9OKEFwcGxpY2F0aW9uKSwKKworICAgIEhJRF9SRVBPUlRfSUQoMiksCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9HWVJPTUVURVJfM0QsCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9GZWF0dXJlIFJlcG9ydCBEZXNjcmlwdG9yIGZvciBTZW5zb3IgUmVwb3J0IElEID0gMgorCisgICAgLy9JbnB1dCBSZXBvcnQgRGVzY3JpcHRvciBmb3IgU2Vuc29yIFJlcG9ydCBJRCA9IDIKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTiwgLy9mb3IgUmVwb3J0IElEID0gMgorCisgICAgSElEX0VORF9DT0xMRUNUSU9OLCAvL1NlbnNvciBjb2xsZWN0aW9uCisKKyAgICAvL21vdXNlCisgICAgMHgwNVUsIDB4MDFVLCAgICAgICAgIC8vIFVTQUdFIFBBR0UgKEdlbmVyaWMgRGVza3RvcCkKKyAgICAweDA5VSwgMHgwMlUsICAgICAgICAgLy8gVVNBR0UgKE1vdXNlKQorICAgIDB4QTFVLCAweDAxVSwgICAgICAgICAvLyBDT0xMRUNUSU9OIChBcHBsaWNhdGlvbikKKyAgICAweDg1VSwgMHgwNFUsICAgICAgICAgLy8gUkVQT1JUX0lEICgzKQorCisgICAgLy8gNSBtb3VzZSBidXR0b25zCisgICAgMHgwNVUsIDB4MDlVLCAgICAgICAgIC8vICAgVVNBR0UgUEFHRSAoQnV0dG9uKQorICAgIDB4MTlVLCAweDAxVSwgICAgICAgICAvLyAgIFVTQUdFIE1JTklNVU0gKEJ1dHRvbiAxKQorICAgIDB4MjlVLCAweDA1VSwgICAgICAgICAvLyAgIFVTQUdFIE1BWElNVU0gKEJ1dHRvbiA1KQorICAgIDB4MTVVLCAweDAwVSwgICAgICAgICAvLyAgIExPR0lDQUwgTUlOSU1VTSAoMCkKKyAgICAweDI1VSwgMHgwMVUsICAgICAgICAgLy8gICBMT0dJQ0FMIE1BWElNVU0gKDEpCisgICAgMHg5NVUsIDB4MDVVLCAgICAgICAgIC8vICAgUkVQT1JUIENPVU5UICg1KQorICAgIDB4NzVVLCAweDAxVSwgICAgICAgICAvLyAgIFJFUE9SVCBTSVpFICgxKQorICAgIDB4ODFVLCAweDAyVSwgICAgICAgICAvLyAgIElOUFVUIChEYXRhLFZhcixBYnMpCisKKyAgICAvLyAgMyB1bnVzZWQgYnV0dG9uczoKKyAgICAweDk1VSwgMHgwMVUsICAgICAgICAgLy8gICBSRVBPUlQgQ09VTlQgKDEpCisgICAgMHg3NVUsIDB4MDNVLCAgICAgICAgIC8vICAgUkVQT1JUIFNJWkUgKDMpCisgICAgMHg4MVUsIDB4MDNVLCAgICAgICAgIC8vICAgSU5QVVQgKENuc3QsVmFyLEFicykKKworICAgIC8vIG1vdXNlIChkZWx0YSB4LCBkZWx0YSB5KSBwb3NpdGlvbgorICAgIDB4MTVVLCAweDgxVSwgICAgICAgICAvLyAgIExPR0lDQUwgTUlOSU1VTSAoLTEyNykKKyAgICAweDI1VSwgMHg3ZlUsICAgICAgICAgLy8gICBMT0dJQ0FMIE1BWElNVU0gKCsxMjcpCisgICAgMHg3NVUsIDB4MDhVLCAgICAgICAgIC8vICAgUkVQT1JUIFNJWkUgKDgpCisgICAgMHg5NVUsIDB4MDJVLCAgICAgICAgIC8vICAgUkVQT1JUIENPVU5UICgyKQorICAgIDB4MDVVLCAweDAxVSwgICAgICAgICAvLyAgIFVTQUdFIFBBR0UgKEdlbmVyaWMgRGVza3RvcCkKKyAgICAweDA5VSwgMHgzMFUsICAgICAgICAgLy8gICBVU0FHRShYKQorICAgIDB4MDlVLCAweDMxVSwgICAgICAgICAvLyAgIFVTQUdFIChZKQorICAgIDB4ODFVLCAweDA2VSwgICAgICAgICAvLyAgIElOUFVUIChEYXRhLFZhcixSZWwpCisKKyAgICAweEMwVSwgICAgICAgICAgICAgICAgIC8vICAgRU5EIENPTExFQ1RJT04gLy9tb3VzZQorfTsKKworCisvKioKKyAqIFNpbXBsZSBjdXN0b20gc2Vuc29yIGV4YW1wbGUuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgY3VzMV9yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwgICAgICAgICAvLyBVU0FHRV9QQUdFIChTZW5zb3IpCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09USEVSX0NVU1RPTSwgLy8gVVNBR0UgKFNpbXBsZSBDdXN0b20pCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksIC8vID0gSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9TUEVFRCB2YWx1ZQorCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworCisKKy8qKgorICogTW9yZSBjb21wbGV4IGN1c3RvbSBzZW5zb3IgZXhhbXBsZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBjdXMyX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLCAgICAgICAgIC8vIFVTQUdFX1BBR0UgKFNlbnNvcikKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfT1RIRVJfQ1VTVE9NLCAvLyBVU0FHRSAoU2ltcGxlIEN1c3RvbSkKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1VTQUdFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwgLy8gPSBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX1NQRUVET01FVEVSCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9CT09MRUFOX0FSUkFZLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwgLy8gPSBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX1NQRUVET01FVEVSCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksIC8vID0gSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9TUEVFRCB2YWx1ZQorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMiwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLCAvLyA9IEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fU1BFRUQgdmFsdWUKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzMsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwgLy8gPSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX1NQRUVEIHZhbHVlCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV80LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksIC8vID0gSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9TUEVFRCB2YWx1ZQorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfNSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLCAvLyA9IEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fU1BFRUQgdmFsdWUKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzYsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwgLy8gPSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX1NQRUVEIHZhbHVlCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307CisKKworLyoqCisgKiBDdXN0b20gc2Vuc29yIGV4YW1wbGUgd2l0aCBmZWF0dXJlcworICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGN1czNfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsICAgICAgICAgLy8gVVNBR0VfUEFHRSAoU2Vuc29yKQorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PVEhFUl9DVVNUT00sIC8vIFVTQUdFIChTaW1wbGUgQ3VzdG9tKQorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vZmVhdHVyZSByZXBvcnRzICh4bWl0L3JlY2VpdmUpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0NPTk5FQ1RJT05fVFlQRSwgIC8vIE5BcnkKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRfSU5URVJWQUwsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzMyKDB4RkYsMHhGRiwweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgzMiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgwKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NLEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT00sSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4pLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlQsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1VTQUdFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwgLy8gPSBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX1NQRUVET01FVEVSCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksIC8vID0gSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9TUEVFRCB2YWx1ZQorCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworCisKKy8qKgorICogRnVsbCBjdXN0b20gc2Vuc29yIGV4YW1wbGUgd2l0aCBmZWF0dXJlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGN1czRfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsICAgICAgICAgLy8gVVNBR0VfUEFHRSAoU2Vuc29yKQorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PVEhFUl9DVVNUT00sIC8vIFVTQUdFIChTaW1wbGUgQ3VzdG9tKQorICAgIEhJRF9DT0xMRUNUSU9OKEFwcGxpY2F0aW9uKSwKKworICAgIC8vZmVhdHVyZSByZXBvcnRzICh4bWl0L3JlY2VpdmUpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0NPTk5FQ1RJT05fVFlQRSwgIC8vIE5BcnkKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRfSU5URVJWQUwsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzMyKDB4RkYsMHhGRiwweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgzMiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgwKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NLEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT00sSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4pLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlQsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1VTQUdFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX0JPT0xFQU5fQVJSQVksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMiwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfNCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfNSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfNiwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorCisjaWYgMSAvL2RlZmluZSB2ZW5kb3Itc3BlY2lmaWMgKG5vbi1zcGVjKSBjdXN0b20gZGF0YWZpZWxkcworICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfNywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfOCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfOSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTAsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzExLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xMiwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTMsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzE0LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xNSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTYsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzE3LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xOCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzIwLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yMSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjIsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzIzLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yNCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjUsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzI2LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yNywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjgsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyNlbmRpZgorICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKKworCisvKioKKyAqIEh1bWFuIHByZXNlbmNlIHNlbnNvciBleGFtcGxlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIHByZXNfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0JJT01FVFJJQ19QUkVTRU5DRSwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL2ZlYXR1cmUgcmVwb3J0cyAoeG1pdC9yZWNlaXZlKQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9DT05ORUNUSU9OX1RZUEUsICAvLyBOQXJ5CisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUX0lOVEVSVkFMLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8zMigweEZGLDB4RkYsMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMzIpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMCksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlQsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQklPTUVUUklDX0hVTUFOX1BSRVNFTkNFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLCAvLyBGYWxzZQorICAgIEhJRF9MT0dJQ0FMX01BWF84KDEpLCAvLyBUcnVlCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307CisKKworLyoqCisgKiBQcm94aW1pdHkgc2Vuc29yIGV4YW1wbGUuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgcHJveF9yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfQklPTUVUUklDX1BST1hJTUlUWSwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL2ZlYXR1cmUgcmVwb3J0cyAoeG1pdC9yZWNlaXZlKQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9DT05ORUNUSU9OX1RZUEUsICAvLyBOQXJ5CisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUX0lOVEVSVkFMLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8zMigweEZGLDB4RkYsMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMzIpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMCksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0JJT01FVFJJQ19IVU1BTl9QUk9YSU1JVFlfUkFOR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEQpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgIm1ldGVyIiB0byAiY2VudGltZXRlciIKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9CSU9NRVRSSUNfSFVNQU5fUFJPWElNSVRZX1JBTkdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBEKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0ICJtZXRlciIgdG8gImNlbnRpbWV0ZXIiCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfQklPTUVUUklDX0hVTUFOX1BST1hJTUlUWV9SQU5HRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4pLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRCksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCAibWV0ZXIiIHRvICJjZW50aW1ldGVyIgorICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlQsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQklPTUVUUklDX0hVTUFOX1BST1hJTUlUWV9PVVRfT0ZfUkFOR0UsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksIC8vIEZhbHNlCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMSksIC8vIFRydWUKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQklPTUVUUklDX0hVTUFOX1BST1hJTUlUWV9SQU5HRSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEQpLCAgLy8gc2NhbGUgZGVmYXVsdCB1bml0ICJtZXRlciIgdG8gImNlbnRpbWV0ZXIiCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKKworCisvKioKKyAqIEJhcm9tZXRlciBzZW5zb3IgZXhhbXBsZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBiYXJfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0VOVklST05NRU5UQUxfQVRNT1NQSEVSSUNfUFJFU1NVUkUsCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9mZWF0dXJlIHJlcG9ydHMgKHhtaXQvcmVjZWl2ZSkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfQ09OTkVDVElPTl9UWVBFLCAgLy8gTkFyeQorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVF9JTlRFUlZBTCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMzIoMHhGRiwweEZGLDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDMyKSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDApLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX0FUTU9TUEhFUklDX1BSRVNTVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0ICJCYXIiIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX0FUTU9TUEhFUklDX1BSRVNTVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgIkJhciIgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfQVRNT1NQSEVSSUNfUFJFU1NVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCAiQmFyIiB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX0FUTU9TUEhFUklDX1BSRVNTVVJFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0ICJCYXIiIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworCisKKy8qKgorICogSHVtaWRpdHkgc2Vuc29yIGV4YW1wbGUuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgaHVtaV9yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfRU5WSVJPTk1FTlRBTF9IVU1JRElUWSwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL2ZlYXR1cmUgcmVwb3J0cyAoeG1pdC9yZWNlaXZlKQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9DT05ORUNUSU9OX1RZUEUsICAvLyBOQXJ5CisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUX0lOVEVSVkFMLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8zMigweEZGLDB4RkYsMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMzIpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMCksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfUkVMQVRJVkVfSFVNSURJVFksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4MTAsMHgyNyksIC8vIDEwMDAwID0gMC4wMCB0byAxMDAuMDAgcGVyY2VudCB3aXRoIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX1JFTEFUSVZFX0hVTUlESVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4MTAsMHgyNyksIC8vIDEwMDAwID0gMC4wMCB0byAxMDAuMDAgcGVyY2VudCB3aXRoIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX1JFTEFUSVZFX0hVTUlESVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4MTAsMHgyNyksIC8vIDEwMDAwID0gMC4wMCB0byAxMDAuMDAgcGVyY2VudCB3aXRoIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5ULAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfUkVMQVRJVkVfSFVNSURJVFksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4MTAsMHgyNyksIC8vIDEwMDAwID0gMC4wMCB0byAxMDAuMDAgcGVyY2VudCB3aXRoIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0ICJwZXJjZW50IgorICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworCisKKy8qKgorICogVGVtcGVyYXR1cmUgc2Vuc29yIGV4YW1wbGUuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgdGVtcF9yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfRU5WSVJPTk1FTlRBTF9URU1QRVJBVFVSRSwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL2ZlYXR1cmUgcmVwb3J0cyAoeG1pdC9yZWNlaXZlKQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9DT05ORUNUSU9OX1RZUEUsICAvLyBOQXJ5CisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUX0lOVEVSVkFMLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8zMigweEZGLDB4RkYsMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMzIpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMCksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfVEVNUEVSQVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgIkNlbHNpdXMiCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfVEVNUEVSQVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgIkNlbHNpdXMiCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfVEVNUEVSQVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgIkNlbHNpdXMiCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlQsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMTYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfVEVNUEVSQVRVUkUsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0ICJDZWxzaXVzIgorICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworCisKKy8qKgorICogQW1iaWVudCBsaWdodCBzZW5zb3IgZXhhbXBsZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBhbHNfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsICAgICAgICAgLy8gVVNBR0VfUEFHRSAoU2Vuc29yKQorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9MSUdIVF9BTUJJRU5UTElHSFQsIC8vIFVTQUdFIChBbWJpZW50TGlnaHQpCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9mZWF0dXJlIHJlcG9ydHMgKHhtaXQvcmVjZWl2ZSkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfQ09OTkVDVElPTl9UWVBFLCAgLy8gTkFyeQorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVF9JTlRFUlZBTCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMzIoMHhGRiwweEZGLDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDMyKSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDApLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MSUdIVF9JTExVTUlOQU5DRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfUkVMX1BDVCksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4MTAsMHgyNyksIC8vIDEwMDAwID0gMC4wMCB0byAxMDAuMDAgcGVyY2VudCB3aXRoIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MSUdIVF9JTExVTUlOQU5DRSxISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEYpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAxIGRpZ2l0IHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MSUdIVF9JTExVTUlOQU5DRSxISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEYpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAxIGRpZ2l0IHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2FkZCB0aGlzIGRlZmluaXRpb24gaWYgcmVxdWlyZWQgYnkgdGhlIHNwZWNpZmljIGFwcGxpY2F0aW9uCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVNQT05TRV9DVVJWRSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEwKSwgLy9hcyByZXF1aXJlZCBmb3IgbiBwYWlyIG9mIHZhbHVlcworICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MCksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDAgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MSUdIVF9JTExVTUlOQU5DRSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBGKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMSBkaWdpdCBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xJR0hUX0NPTE9SX1RFTVBFUkFUVVJFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDApLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTElHSFRfQ0hST01BVElDSVRZX1gsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwQyksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDQgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTElHSFRfQ0hST01BVElDSVRZX1ksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwQyksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDQgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKKworCisvKioKKyAqIDNEIGFjY2VsZXJvbWV0ZXIgc2Vuc29yIGV4YW1wbGUuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgYWNjZWwzX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fQUNDRUxFUk9NRVRFUl8zRCwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL2ZlYXR1cmUgcmVwb3J0cyAoeG1pdC9yZWNlaXZlKQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9DT05ORUNUSU9OX1RZUEUsICAvLyBOQXJ5CisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUX0lOVEVSVkFMLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8zMigweEZGLDB4RkYsMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMzIpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMCksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FDQ0VMRVJBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksICAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgR3MgdG8gY2VudGktR3MKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgR3MgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BQ0NFTEVSQVRJT04sSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVgpLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksICAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgR3MgdG8gY2VudGktR3MKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgR3MgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BQ0NFTEVSQVRJT04sSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4pLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksICAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgR3MgdG8gY2VudGktR3MKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgR3MgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5ULAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BQ0NFTEVSQVRJT05fWF9BWElTLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksICAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgR3MgdG8gY2VudGktR3MKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgR3MgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQUNDRUxFUkFUSU9OX1lfQVhJUywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAgLy8gc2NhbGUgZGVmYXVsdCB1bml0IEdzIHRvIGNlbnRpLUdzCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IEdzIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FDQ0VMRVJBVElPTl9aX0FYSVMsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCBHcyB0byBjZW50aS1HcworICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBHcyBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisKKyAgICAvL2luY2x1ZGUgdGhlIGZvbGxvd2luZyBkYXRhZmllbGQgaWYgcmVxdWlyZWQgdG8gc3VwcG9ydCB0aGUgk3NoYWtllCBldmVudAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksIC8vIEZhbHNlID0gU3RpbGwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgxKSwgLy8gVHJ1ZSA9IEluIE1vdGlvbgorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworCisKKy8qKgorICogM0QgZ3lyb3Njb3BlIHNlbnNvciBleGFtcGxlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGd5cm8zX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fR1lST01FVEVSXzNELAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vZmVhdHVyZSByZXBvcnRzICh4bWl0L3JlY2VpdmUpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0NPTk5FQ1RJT05fVFlQRSwgIC8vIE5BcnkKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRfSU5URVJWQUwsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzMyKDB4RkYsMHhGRiwweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgzMiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgwKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FOR1VMQVJfVkVMT0NJVFksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FOR1VMQVJfVkVMT0NJVFksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FOR1VMQVJfVkVMT0NJVFksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQU5HVUxBUl9WRUxPQ0lUWV9YX0FYSVMsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BTkdVTEFSX1ZFTE9DSVRZX1lfQVhJUywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FOR1VMQVJfVkVMT0NJVFlfWl9BWElTLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworCisKKy8qKgorICogM0QgY29tcGFzcyBzZW5zb3IgZXhhbXBsZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBjb21wM19yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfT1JJRU5UQVRJT05fQ09NUEFTU18zRCwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL2ZlYXR1cmUgcmVwb3J0cyAoeG1pdC9yZWNlaXZlKQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9DT05ORUNUSU9OX1RZUEUsICAvLyBOQXJ5CisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUX0lOVEVSVkFMLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8zMigweEZGLDB4RkYsMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMzIpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMCksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0hFQURJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfSEVBRElORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVgpLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRiksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDEgZGlnaXQgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0hFQURJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEYpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAxIGRpZ2l0IHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19GTFVYLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0ZMVVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEYpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAxIGRpZ2l0IHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19GTFVYLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBGKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMSBkaWdpdCBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9DT01QRU5TQVRFRF9NQUdORVRJQ19OT1JUSCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEYpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAxIGRpZ2l0IHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9DT01QRU5TQVRFRF9UUlVFX05PUlRILAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRiksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDEgZGlnaXQgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX05PUlRILAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRiksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDEgZGlnaXQgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1RSVUVfTk9SVEgsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBGKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMSBkaWdpdCBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfRkxVWF9YX0FYSVMsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBEKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvICJtaWxsaUdhdXNzIgorICAgIC8vIHRvIHByb3ZpZGUgMyBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0ZMVVhfWV9BWElTLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRCksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byAibWlsbGlHYXVzcyIKKyAgICAvLyB0byBwcm92aWRlIDMgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19GTFVYX1pfQVhJUywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEQpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gIm1pbGxpR2F1c3MiCisgICAgLy8gdG8gcHJvdmlkZSAzIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1lfTE9XLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1lfTUVESVVNLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1lfSElHSCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307CisKKworLyoqCisgKiAzRCBpbmNsaW5vbWF0ZXIgZXhhbXBsZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBpbmMzX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9JTkNMSU5PTUVURVJfM0QsCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9mZWF0dXJlIHJlcG9ydHMgKHhtaXQvcmVjZWl2ZSkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfQ09OTkVDVElPTl9UWVBFLCAgLy8gTkFyeQorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVF9JTlRFUlZBTCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMzIoMHhGRiwweEZGLDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDMyKSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDApLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9USUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1RJTFQsSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVgpLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9USUxULEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9USUxUX1gsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1RJTFRfWSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fVElMVF9aLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1ksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWV9MT1csCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWV9NRURJVU0sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWV9ISUdILAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKKworCisvKioKKyAqIERldmljZSBvcmllbnRhdGlvbiBzZW5zb3IgZXhhbXBsZS4gTm90ZSB0aGlzIG1hcHMgdG8gcm90YXRpb24gdmVjdG9yIHNlbnNvciBpbiBhbmRyb2lkLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGRldm9yX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9ERVZJQ0VfT1JJRU5UQVRJT04sCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9mZWF0dXJlIHJlcG9ydHMgKHhtaXQvcmVjZWl2ZSkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfQ09OTkVDVElPTl9UWVBFLCAgLy8gTkFyeQorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVF9JTlRFUlZBTCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMzIoMHhGRiwweEZGLDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDMyKSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDApLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0ICJtZXRlciIgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1FVQVRFUk5JT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fUVVBVEVSTklPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVgpLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwMSksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1FVQVRFUk5JT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MDEpLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2luY2x1ZGUgdGhpcyBpZiB0aGUgdmFsdWVzIGFyZSBjYWxjdWxhdGVkIGluIGZpcm13YXJlCisgICAgLy9vdGhlcndpc2UsIHRoZSBkcml2ZXIgd2lsbCBjYWxjdWxhdGUgdGhlc2UgdmFsdWVzIGZyb20gdGhlIFF1YXRlcm5pb24KKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1JPVEFUSU9OX01BVFJJWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1JPVEFUSU9OX01BVFJJWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVgpLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1JPVEFUSU9OX01BVFJJWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4pLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlQsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fUVVBVEVSTklPTiwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDQpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorCisgICAgLy9pbmNsdWRlIHRoaXMgaWYgdGhlIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBpbiBmaXJtd2FyZQorICAgIC8vb3RoZXJ3aXNlLCB0aGUgZHJpdmVyIHdpbGwgY2FsY3VsYXRlIHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBRdWF0ZXJuaW9uCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1JPVEFUSU9OX01BVFJJWCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDkpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEYpLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZX0xPVywKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZX01FRElVTSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZX0hJR0gsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworfSAvLyBhbm5veW1vdXMgbmFtZXNwYWNlCisKKy8qKgorICogR2xvYmFsIHRlc3QgdmVjdG9yIGVudHJ5LgorICovCisjZGVmaW5lIFRFU1RfREVTQ1JJUFRPUihuYW1lKSBcCisgICAgeyBuYW1lICMjIF9yZXBvcnRfZGVzY3JpcHRvciwgc2l6ZW9mKG5hbWUgIyMgX3JlcG9ydF9kZXNjcmlwdG9yKSwgI25hbWUgfQorCitjb25zdCBUZXN0SGlkRGVzY3JpcHRvciBnRGVzY3JpcHRvckFycmF5W10gPSB7CisgICAgVEVTVF9ERVNDUklQVE9SKGFjY2VsMyksCisgICAgVEVTVF9ERVNDUklQVE9SKGNvbDEpLAorICAgIFRFU1RfREVTQ1JJUFRPUihjb2wyKSwKKyAgICBURVNUX0RFU0NSSVBUT1IoY29sMyksCisgICAgVEVTVF9ERVNDUklQVE9SKGN1czEpLAorICAgIFRFU1RfREVTQ1JJUFRPUihjdXMyKSwKKyAgICBURVNUX0RFU0NSSVBUT1IoY3VzMyksCisgICAgVEVTVF9ERVNDUklQVE9SKGN1czQpLAorICAgIFRFU1RfREVTQ1JJUFRPUihwcmVzKSwKKyAgICBURVNUX0RFU0NSSVBUT1IocHJveCksCisgICAgVEVTVF9ERVNDUklQVE9SKGJhciksCisgICAgVEVTVF9ERVNDUklQVE9SKGh1bWkpLAorICAgIFRFU1RfREVTQ1JJUFRPUih0ZW1wKSwKKyAgICBURVNUX0RFU0NSSVBUT1IoYWxzKSwKKyAgICBURVNUX0RFU0NSSVBUT1IoZ3lybzMpLAorICAgIFRFU1RfREVTQ1JJUFRPUihjb21wMyksCisgICAgVEVTVF9ERVNDUklQVE9SKGluYzMpLAorICAgIFRFU1RfREVTQ1JJUFRPUihkZXZvciksCisgICAge251bGxwdHIsIDAsIG51bGxwdHJ9IC8vc2VudGluZWwKK307CisjdW5kZWYgVEVTVF9ERVNDUklQVE9SCisKK2NvbnN0IFRlc3RIaWREZXNjcmlwdG9yICpmaW5kVGVzdERlc2NyaXB0b3IoY29uc3QgY2hhciAqbmFtZSkgeworICAgIGlmIChuYW1lID09IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgZm9yIChjb25zdCBUZXN0SGlkRGVzY3JpcHRvciAqcCA9IGdEZXNjcmlwdG9yQXJyYXk7IDsgKytwKSB7CisgICAgICAgIGlmIChwLT5kYXRhID09IG51bGxwdHIgfHwgcC0+bGVuID09IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChzdHJjbXAocC0+bmFtZSwgbmFtZSkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9UZXN0SGlkRGVzY3JpcHRvci5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvVGVzdEhpZERlc2NyaXB0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTdjYjcyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvVGVzdEhpZERlc2NyaXB0b3IuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgSElEVVRJTF9URVNUX0hJRERFU0NSSVBUT1JfSF8KKyNkZWZpbmUgSElEVVRJTF9URVNUX0hJRERFU0NSSVBUT1JfSF8KKworI2luY2x1ZGUgPGNzdGRkZWY+CisKK3N0cnVjdCBUZXN0SGlkRGVzY3JpcHRvciB7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICBzaXplX3QgbGVuOworICAgIGNvbnN0IGNoYXIgKm5hbWU7Cit9OworCitleHRlcm4gY29uc3QgVGVzdEhpZERlc2NyaXB0b3IgZ0Rlc2NyaXB0b3JBcnJheVtdOworY29uc3QgVGVzdEhpZERlc2NyaXB0b3IgKmZpbmRUZXN0RGVzY3JpcHRvcihjb25zdCBjaGFyICpuYW1lKTsKKworI2VuZGlmIC8vIEhJRFVUSUxfVEVTVF9ISURERVNDUklQVE9SX0hfCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9UZXN0SGlkU2Vuc29yU3BlYy5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvVGVzdEhpZFNlbnNvclNwZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjJjYjZjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvVGVzdEhpZFNlbnNvclNwZWMuaApAQCAtMCwwICsxLDg1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIEhJRFVUSUxfVEVTVF9ISURTRU5TT1JTUEVDX0gKKyNkZWZpbmUgSElEVVRJTF9URVNUX0hJRFNFTlNPUlNQRUNfSAorLyoqCisgKiBFeGFtcGxlIEhJRCBzZW5zb3IgZGVmaW5pdGlvbiBpbiBmcm9tIHB1Ymxpc2hlZCBkb2N1bWVudCAiSElEIFNlbnNvcnMgVXNhZ2UiCisgKiAoaGlkLXNlbnNvcnMtdXNhZ2UuZG9jeCkuIFRoaXMgZmlsZSBpcyBhZGRlZCBhcyBwYXJ0IG9mIHRoZSB0ZXN0IGNhc2UuCisgKgorICogSXQgaXMgc2xpZ2h0bHkgbW9kaWZpZWQgaW4gb3JkZXIgdG8gY29tcGlsZS4KKyAqLworI2RlZmluZSBISURfVVNBR0VfUEFHRV9TRU5TT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUsMHgyMAorCisvL3NlbnNvciBjYXRlZ29yeSB1c2FnZXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0NPTExFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4MDEKKy8vc2Vuc29yIGNhdGVnb3J5IGJpb21ldHJpYworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0NBVEVHT1JZX0JJT01FVFJJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgxMAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfQklPTUVUUklDX1BSRVNFTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgxMQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfQklPTUVUUklDX1BST1hJTUlUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgxMgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfQklPTUVUUklDX1RPVUNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgxMworLy9zZW5zb3IgY2F0ZWdvcnkgZWxlY3RyaWNhbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0NBVEVHT1JZX0VMRUNUUklDQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgyMAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfRUxFQ1RSSUNBTF9DQVBBQ0lUQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgyMQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfRUxFQ1RSSUNBTF9DVVJSRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgyMgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfRUxFQ1RSSUNBTF9QT1dFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgyMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfRUxFQ1RSSUNBTF9JTkRVQ1RBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgyNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfRUxFQ1RSSUNBTF9SRVNJU1RBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgyNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfRUxFQ1RSSUNBTF9WT0xUQUdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgyNgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfRUxFQ1RSSUNBTF9QT1RFTlRJT01FVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgyNworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfRUxFQ1RSSUNBTF9GUkVRVUVOQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgyOAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfRUxFQ1RSSUNBTF9QRVJJT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgyOQorLy9zZW5zb3IgY2F0ZWdvcnkgZW52aXJvbm1lbnRhbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0NBVEVHT1JZX0VOVklST05NRU5UQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgzMAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfRU5WSVJPTk1FTlRBTF9BVE1PU1BIRVJJQ19QUkVTU1VSRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgzMQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfRU5WSVJPTk1FTlRBTF9IVU1JRElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgzMgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfRU5WSVJPTk1FTlRBTF9URU1QRVJBVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgzMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfRU5WSVJPTk1FTlRBTF9XSU5EX0RJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgzNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfRU5WSVJPTk1FTlRBTF9XSU5EX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgzNQorLy9zZW5zb3IgY2F0ZWdvcnkgbGlnaHQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9DQVRFR09SWV9MSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NDAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0xJR0hUX0FNQklFTlRMSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NDEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0xJR0hUX0NPTlNVTUVSX0lORlJBUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NDIKKy8vc2Vuc29yIGNhdGVnb3J5IGxvY2F0aW9uCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfQ0FURUdPUllfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDUwCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9MT0NBVElPTl9CUk9BRENBU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDUxCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9MT0NBVElPTl9ERUFEX1JFQ0tPTklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDUyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9MT0NBVElPTl9HUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDUzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9MT0NBVElPTl9MT09LVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDU0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9MT0NBVElPTl9PVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDU1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9MT0NBVElPTl9TVEFUSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDU2CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9MT0NBVElPTl9UUklBTkdVTEFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDU3CisvL3NlbnNvciBjYXRlZ29yeSBtZWNoYW5pY2FsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfQ0FURUdPUllfTUVDSEFOSUNBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDYwCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NRUNIQU5JQ0FMX0JPT0xFQU5fU1dJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDYxCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NRUNIQU5JQ0FMX0JPT0xFQU5fU1dJVENIX0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDYyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NRUNIQU5JQ0FMX01VTFRJVkFMVUVfU1dJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDYzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NRUNIQU5JQ0FMX0ZPUkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDY0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NRUNIQU5JQ0FMX1BSRVNTVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDY1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NRUNIQU5JQ0FMX1NUUkFJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDY2CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NRUNIQU5JQ0FMX1NDQUxFX1dFSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDY3CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NRUNIQU5JQ0FMX1ZJQlJBVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDY4CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NRUNIQU5JQ0FMX0hBTExfRUZGRUNUX1NXSVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDY5CisvL3NlbnNvciBjYXRlZ29yeSBtb3Rpb24KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9DQVRFR09SWV9NT1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NzAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9BQ0NFTEVST01FVEVSXzFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NzEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9BQ0NFTEVST01FVEVSXzJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NzIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9BQ0NFTEVST01FVEVSXzNEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NzMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9HWVJPTUVURVJfMUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NzQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9HWVJPTUVURVJfMkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NzUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9HWVJPTUVURVJfM0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NzYKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9NT1RJT05fREVURUNUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NzcKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9TUEVFRE9NRVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NzgKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9BQ0NFTEVST01FVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NzkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9HWVJPTUVURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4N0EKKy8vc2Vuc29yIGNhdGVnb3J5IG9yaWVudGF0aW9uCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfQ0FURUdPUllfT1JJRU5UQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDgwCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9DT01QQVNTXzFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDgxCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9DT01QQVNTXzJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDgyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9DT01QQVNTXzNEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDgzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9JTkNMSU5PTUVURVJfMUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDg0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9JTkNMSU5PTUVURVJfMkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDg1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9JTkNMSU5PTUVURVJfM0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDg2CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9ESVNUQU5DRV8xRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDg3CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9ESVNUQU5DRV8yRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDg4CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9ESVNUQU5DRV8zRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDg5CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9ERVZJQ0VfT1JJRU5UQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDhBCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9DT01QQVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDhCCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9JTkNMSU5PTUVURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDhDCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9ESVNUQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDhECisvL3NlbnNvciBjYXRlZ29yeSBzY2FubmVyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfQ0FURUdPUllfU0NBTk5FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDkwCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9TQ0FOTkVSX0JBUkNPREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDkxCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9TQ0FOTkVSX1JGSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDkyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9TQ0FOTkVSX05GQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDkzCisvL3NlbnNvciBjYXRlZ29yeSB0aW1lCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfQ0FURUdPUllfVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweEEwCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9USU1FX0FMQVJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweEExCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9USU1FX1JUQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweEEyCisvL3NlbnNvciBjYXRlZ29yeSBvdGhlcgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0NBVEVHT1JZX09USEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHhFMAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1RIRVJfQ1VTVE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHhFMQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1RIRVJfR0VORVJJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHhFMgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfT1RIRVJfR0VORVJJQ19FTlVNRVJBVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHhFMworCisvL3VuaXQgdXNhZ2VzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfTk9UX1NQRUNJRklFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NSwweDAwICAgICAgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19MVVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY3LDB4RTEsMHgwMCwweDAwLDB4MDEgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0tFTFZJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjcsMHgwMSwweDAwLDB4MDEsMHgwMCAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfRkFIUkVOSEVJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NywweDAzLDB4MDAsMHgwMSwweDAwIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19QQVNDQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY2LDB4RjEsMHhFMSAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX05FV1RPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjYsMHgxMSwweEUxICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfTUVURVJTX1BFUl9TRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NiwweDExLDB4RjAgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19NRVRFUlNfUEVSX1NFQ19TUVJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY2LDB4MTEsMHhFMCAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0ZBUkFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjcsMHhFMSwweDRGLDB4MjAsMHgwMCAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfQU1QRVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NywweDAxLDB4MDAsMHgxMCwweDAwIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19XQVRUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY2LDB4MjEsMHhEMSAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0hFTlJZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjcsMHgyMSwweEUxLDB4RTAsMHgwMCAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfT0hNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NywweDIxLDB4RDEsMHhFMCwweDAwIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19WT0xUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY3LDB4MjEsMHhEMSwweEYwLDB4MDAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0hFUlRaICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjYsMHgwMSwweEYwICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVHUkVFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NSwweDE0ICAgICAgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERUdSRUVTX1BFUl9TRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY2LDB4MTQsMHhGMCAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFR1JFRVNfUEVSX1NFQ19TUVJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjYsMHgxNCwweEUwICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfUkFESUFOUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NSwweDEyICAgICAgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19SQURJQU5TX1BFUl9TRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY2LDB4MTIsMHhGMCAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX1JBRElBTlNfUEVSX1NFQ19TUVJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjYsMHgxMiwweEUwICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfU0VDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NiwweDAxLDB4MTAgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19HQVVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY3LDB4MDEsMHhFMSwweEYwLDB4MDAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjYsMHgwMSwweDAxICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfQ0VOVElNRVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NSwweDExICAgICAgICAgICAgICAgIC8vIFVuaXQKKyNpZmRlZiBERUZJTkVfTk9OX0hJRF9VTklUUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0NFTFNJVVMgICAgICAgICAgICAgICJVc2UgVW5pdChLZWx2aW4pIGFuZCBzdWJ0cmFjdCAyNzMuMTUiCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfS0lMT0dSQU0gICAgICAgICAgICAgIlVzZSBVbml0KGdyYW0pIGFuZCBVbml0RXhwb25lbnQoMHgwMykiCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfTUVURVIgICAgICAgICAgICAgICAgIlVzZSBVbml0KGNlbnRpbWV0ZXIpIGFuZCBVbml0RXhwb25lbnQoMHgwMikiCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfQkFSICAgICAgICAgICAgICAgICAgIlVzZSBVbml0KFBhc2NhbCkgYW5kIFVuaXRFeHBvbmVudCgweDA1KSIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19LTk9UICAgICAgICAgICAgICAgICAiVXNlIFVuaXQobS9zKSBhbmQgbXVsdGlwbHkgYnkgMTg1Mi8zNjAwIgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX1BFUkNFTlQgICAgICAgICAgICAgICJVc2UgVW5pdChOb3RfU3BlY2lmaWVkKSIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19HICAgICAgICAgICAgICAgICAgICAiVXNlIFVuaXQobS9zMikgYW5kIGRpdmlkZSBieSA5LjgiCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfTUlMTElTRUNPTkQgICAgICAgICAgIlVzZSBVbml0KHNlY29uZCkgYW5kIFVuaXRFeHBvbmVudCgweDBEKSIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19NSUxMSUdBVVNTICAgICAgICAgICAiVXNlIFVuaXQoR2F1c3MpIGFuZCBVbml0RXhwb25lbnQoMHgwRCkiCisjZW5kaWYKKy8vdW5pdCBkZXByZWNhdGVkIHVzYWdlcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfTFVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0tFTFZJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9DRUxTSVVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfUEFTQ0FMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX05FV1RPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9NRVRFUlNfUEVSX1NFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfS0lMT0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX01FVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9NRVRFUlNfUEVSX1NFQ19TUVJEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfRkFSQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0FNUEVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9XQVRUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfSEVOUlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX09ITSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9WT0xUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfSEVSVFogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0JBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9ERUdSRUVTX0FOVElfQ0xPQ0tXSVNFICAgICAgICAgICAgICAgICAgICAgICAgMHgxMgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfREVHUkVFU19DTE9DS1dJU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0RFR1JFRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9ERUdSRUVTX1BFUl9TRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfS05PVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTYKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX1BFUkNFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9TRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfTUlMTElTRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFBCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9CWVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfTUlMTElHQVVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUMKKworLy9kYXRhIHR5cGUgdXNhZ2UgbW9kaWZpZXJzIC0tIHdlIHVzZSB0aGVtIGFzIG1vZGlmaWVycyBmb3Igc2Vuc29yIHByb3BlcnRpZXMgJiBkYXRhIGZpZWxkcworLy90byBjcmVhdGUgdGhyZXNob2xkcywgZm9yIGV4YW1wbGUuCisvL05PVEU6IHRoZSB1c2FnZSB0YWJsZXMgYWN0dWFsbHkgZGVmaW5lIHRoZXNlIGFzIHR3byBieXRlcywgYnV0IGluIG9yZGVyCisvL3RvIGdldCB0aGUgZGVmaW5lIG1hY3JvcyB0byB3b3JrIHNvIHRoZXNlIGFyZSCRb3ItZWSSIHRoZXNlIGFyZSBkZWZpbmVkCisvL2hlcmUgYXMgb25seSBvbmUgYnl0ZS4KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQUNDVVJBQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX1JFU09MVVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9USFJFU0hPTERfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfVEhSRVNIT0xEX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NBTElCUkFUSU9OX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DQUxJQlJBVElPTl9NVUxUSVBMSUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfUkVQT1JUX0lOVEVSVkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhBMCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0ZSRVFVRU5DWV9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QjAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9QRVJJT0RfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX1JBTkdFX1BDVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhEMCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9SRUxfUENUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RTAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9WRU5ET1JfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEYwIC8vIFVTCisKKworLy9zdGF0ZSB1c2FnZXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDEsMHgwMiAvLyBOQXJ5CisvL3N0YXRlIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMiwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMywweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNiwweDA4IC8vIFNlbAorLy9zdGF0ZSBlbnVtcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcgLy8gRW51bQorLy9zdGF0ZSBkZXByZWNhdGVkIGVudW1zCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfREVQUkVDQVRFRF9VTktOT1dOX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX0RFUFJFQ0FURURfTk9UX0FWQUlMQUJMRV9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9ERVBSRUNBVEVEX1JFQURZX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfREVQUkVDQVRFRF9OT19EQVRBX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX0RFUFJFQ0FURURfSU5JVElBTElaSU5HX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9ERVBSRUNBVEVEX0FDQ0VTU19ERU5JRURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfREVQUkVDQVRFRF9FUlJPUl9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNgorCisvL2V2ZW50IHVzYWdlcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMiwweDAyIC8vIE5BcnkKKy8vZXZlbnQgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDEwLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDExLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDEyLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDEzLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE0LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE1LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTUFYX1JFQUNIRURfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE2LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTUlOX1JFQUNIRURfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE3LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfSElHSF9USFJFU0hPTERfQ1JPU1NfVVBXQVJEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE4LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfSElHSF9USEVTSE9MRF9DUk9TU19BQk9WRV9TRUwgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfSElHSF9USFJFU0hPTERfQ1JPU1NfVVBXQVJEX1NFTAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0hJR0hfVEhSRVNIT0xEX0NST1NTX0RPV05XQVJEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxOSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0hJR0hfVEhSRVNIT0xEX0NST1NTX0JFTE9XX1NFTCAgICAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0hJR0hfVEhSRVNIT0xEX0NST1NTX0RPV05XQVJEX1NFTAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0xPV19USFJFU0hPTERfQ1JPU1NfVVBXQVJEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxQSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0xPV19USFJFU0hPTERfQ1JPU1NfQUJPVkVfU0VMICAgICAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0xPV19USFJFU0hPTERfQ1JPU1NfVVBXQVJEX1NFTAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0xPV19USFJFU0hPTERfQ1JPU1NfRE9XTldBUkRfU0VMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxQiwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0xPV19USFJFU0hPTERfQ1JPU1NfQkVMT1dfU0VMICAgICAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0xPV19USFJFU0hPTERfQ1JPU1NfRE9XTldBUkRfU0VMCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfWkVST19USFJFU0hPTERfQ1JPU1NfVVBXQVJEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFDLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfWkVST19USFJFU0hPTERfQ1JPU1NfQUJPVkVfU0VMICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfWkVST19USFJFU0hPTERfQ1JPU1NfVVBXQVJEX1NFTAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1pFUk9fVEhSRVNIT0xEX0NST1NTX0RPV05XQVJEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxRCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1pFUk9fVEhSRVNIT0xEX0NST1NTX0JFTE9XX1NFTCAgICAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1pFUk9fVEhSRVNIT0xEX0NST1NTX0RPV05XQVJEX1NFTAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BFUklPRF9FWENFRURFRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxRSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0ZSRVFVRU5DWV9FWENFRURFRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxRiwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NPTVBMRVhfVFJJR0dFUl9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyMCwweDA4IC8vIFNlbAorLy9ldmVudCBlbnVtcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX01BWF9SRUFDSEVEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX01JTl9SRUFDSEVEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDggLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0hJR0hfVEhSRVNIT0xEX0NST1NTX1VQV0FSRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDkgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0hJR0hfVEhFU0hPTERfQ1JPU1NfQUJPVkVfRU5VTSAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfSElHSF9USFJFU0hPTERfQ1JPU1NfVVBXQVJEX0VOVU0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ISUdIX1RIUkVTSE9MRF9DUk9TU19ET1dOV0FSRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAweDBBIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ISUdIX1RIUkVTSE9MRF9DUk9TU19CRUxPV19FTlVNICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0hJR0hfVEhSRVNIT0xEX0NST1NTX0RPV05XQVJEX0VOVU0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9MT1dfVEhSRVNIT0xEX0NST1NTX1VQV0FSRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9MT1dfVEhSRVNIT0xEX0NST1NTX0FCT1ZFX0VOVU0gICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0xPV19USFJFU0hPTERfQ1JPU1NfVVBXQVJEX0VOVU0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9MT1dfVEhSRVNIT0xEX0NST1NTX0RPV05XQVJEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAweDBDIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9MT1dfVEhSRVNIT0xEX0NST1NTX0JFTE9XX0VOVU0gICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0xPV19USFJFU0hPTERfQ1JPU1NfRE9XTldBUkRfRU5VTQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1pFUk9fVEhSRVNIT0xEX0NST1NTX1VQV0FSRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1pFUk9fVEhSRVNIT0xEX0NST1NTX0FCT1ZFX0VOVU0gIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfWkVST19USFJFU0hPTERfQ1JPU1NfVVBXQVJEX0VOVU0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9aRVJPX1RIUkVTSE9MRF9DUk9TU19ET1dOV0FSRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAweDBFIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9aRVJPX1RIUkVTSE9MRF9DUk9TU19CRUxPV19FTlVNICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1pFUk9fVEhSRVNIT0xEX0NST1NTX0RPV05XQVJEX0VOVU0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QRVJJT0RfRVhDRUVERURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9GUkVRVUVOQ1lfRVhDRUVERURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DT01QTEVYX1RSSUdHRVJfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExIC8vIEVudW0KKy8vZXZlbnQgZGVwcmVjYXRlZCBlbnVtcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfVU5LTk9XTl9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX1NUQVRFX0NIQU5HRURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9QUk9QRVJUWV9DSEFOR0VEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfREFUQV9VUERBVEVfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX1BPTExfUkVTUE9OU0VfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9DSEFOR0VfU0VOU0lUSVZJVFlfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfTUFYX1JFQUNIRURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX01JTl9SRUFDSEVEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9ISUdIX1RIUkVTSEhPTERfQ1JPU1NfQUJPVkVfRU5VTSAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfSElHSF9USFJFU0hIT0xEX0NST1NTX0JFTE9XX0VOVU0gICAgICAgICAgICAgIDB4MDkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX0xPV19USFJFU0hIT0xEX0NST1NTX0FCT1ZFX0VOVU0gICAgICAgICAgICAgICAweDBBCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9MT1dfVEhSRVNISE9MRF9DUk9TU19CRUxPV19FTlVNICAgICAgICAgICAgICAgMHgwQgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfWkVST19USFJFU0hPTERfQ1JPU1NfQUJPVkVfRU5VTSAgICAgICAgICAgICAgIDB4MEMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX1pFUk9fVEhSRVNIT0xEX0NST1NTX0JFTE9XX0VOVU0gICAgICAgICAgICAgICAweDBECisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9QRVJJT0RfRVhDRUVERURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfRlJFUVVFTkNZX0VYQ0VFREVEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgIDB4MEYKKworLy9wcm9wZXJ0eSB1c2FnZXMgKGdldC9zZXQgZmVhdHVyZSByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAwLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9GUklFTkRMWV9OQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDEsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BFUlNJU1RFTlRfVU5JUVVFX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMiwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAzLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9NSU5JTVVNX1JFUE9SVF9JTlRFUlZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDQsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9NQU5VRkFDVFVSRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNSwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX01PREVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA2LDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfU0VSSUFMX05VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDcsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9ERVNDUklQVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwOCwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0NPTk5FQ1RJT05fVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA5LDB4MDMgLy8gTkFyeQorLy9iZWdpbiBjb25uZWN0aW9uIHR5cGUgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfU0VMICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDMwLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDMxLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX1NFTCAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDMyLDB4MDggLy8gU2VsCisvL2VuZCBjb25uZWN0aW9uIHR5cGUgc2VsZWN0b3JzCisvL2JlZ2luIGNvbm5lY3Rpb24gdHlwZSBlbnVtcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX0VOVU0gICAgICAgICAgICAgICAgICAgIDB4MDEgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgIDB4MDIgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9FTlVNICAgICAgICAgICAgICAgICAgICAgIDB4MDMgLy8gRW51bQorLy9lbmQgY29ubmVjdGlvbiB0eXBlIGVudW1zCisvL2JlZ2luIGNvbm5lY3Rpb24gdHlwZSBkZXByZWNhdGVkIGVudW1zCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9FTlVNICAgICAgICAgMHgwMCAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfRU5VTSAgICAgICAgICAgMHgwMSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfRU5VTSAgICAgICAgICAgMHgwMiAvLyBFbnVtCisvL2VuZCBjb25uZWN0aW9uIHR5cGUgZGVwcmVjYXRlZCBlbnVtcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9ERVZJQ0VfUEFUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwQSwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfSEFSRFdBUkVfUkVWSVNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBCLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9GSVJNV0FSRV9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEMsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFTEVBU0VfREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwRCwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUX0lOVEVSVkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBFLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEYsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NIQU5HRV9TRU5TSVRJVklUWV9SQU5HRV9QQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMCwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ0hBTkdFX1NFTlNJVElWSVRZX1JFTF9QQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDExLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9BQ0NVUkFDWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTIsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFU09MVVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMywweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkFOR0VfTUFYSU1VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE0LDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SQU5HRV9NSU5JTVVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTUsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNiwweDAzIC8vIE5BcnkKKy8vYmVnaW4gcmVwb3J0aW5nIHN0YXRlIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0MCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfUkVQT1JUSU5HX1NUQVRFX09OX05PTkVfU0VMICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDEsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1JFUE9SVElOR19TVEFURV9PTl9BTExfU0VMICAgICAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTCAgICAgICAgICAgICAgICAgIDB4MEEsMHg0MiwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfUkVQT1JUSU5HX1NUQVRFX09OX1RIUkVTSE9MRF9TRUwgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX1NFTCAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQzLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9TRUwgICAgICAgICAgICAgICAgICAgMHgwQSwweDQ0LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9TRUwgICAgICAgICAgICAgMHgwQSwweDQ1LDB4MDggLy8gU2VsCisvL2VuZCByZXBvcnRpbmcgc3RhdGUgc2VsZWN0b3JzCisvL2JlZ2luIHJlcG9ydGluZyBzdGF0ZSBlbnVtcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfUkVQT1JUSU5HX1NUQVRFX09OX05PTkVfRU5VTSAgICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19FTlVNCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMiAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9SRVBPUlRJTkdfU1RBVEVfT05fQUxMX0VOVU0gICAgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19FTlVNCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfRU5VTSAgICAgICAgICAgICAgICAgMHgwMyAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9SRVBPUlRJTkdfU1RBVEVfT05fVEhSRVNIT0xEX0VOVU0gSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19FTlVNCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUxfV0FLRV9FTlVNICAgICAgICAgICAgICAgICAgIDB4MDQgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTF9XQUtFX0VOVU0gICAgICAgICAgICAgICAgICAweDA1IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX0VOVU0gICAgICAgICAgICAweDA2IC8vIEVudW0KKy8vZW5kIHJlcG9ydGluZyBzdGF0ZSBlbnVtcworLy9iZWdpbiByZXBvcnRpbmcgc3RhdGUgZGVwcmVjYXRlZCBlbnVtcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19FTlVNICAgICAgICAgICAgIDB4MDAgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfREVQUkVDQVRFRF9SRVBPUlRJTkdfU1RBVEVfT05fTk9ORV9FTlVNICAgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfRU5VTQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfRU5VTSAgICAgICAgICAgIDB4MDEgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfREVQUkVDQVRFRF9SRVBPUlRJTkdfU1RBVEVfT05fQUxMX0VOVU0gICAgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX0VOVU0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX0VOVU0gICAgICAweDAyIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX0RFUFJFQ0FURURfUkVQT1JUSU5HX1NUQVRFX09OX1RIUkVTSE9MRF9FTlVNIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19FTlVNCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfRU5VTSAgICAgICAgMHgwMyAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX0VOVU0gICAgICAgMHgwNCAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX0VOVU0gMHgwNSAvLyBFbnVtCisvL2VuZCByZXBvcnRpbmcgc3RhdGUgZGVwcmVjYXRlZCBlbnVtcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NBTVBMSU5HX1JBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNywweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVTUE9OU0VfQ1VSVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE4LDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTksMHgwMyAvLyBOQXJ5CisvL2JlZ2luIHBvd2VyIHN0YXRlIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfU0VMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MiwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX1NFTCAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MywweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9TRUwgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1NCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1NSwweDA4IC8vIFNlbAorLy9lbmQgcG93ZXIgc3RhdGUgc2VsZWN0b3JzCisvL2JlZ2luIHBvd2VyIHN0YXRlIGVudW1zCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMyAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfRU5VTSAgICAgICAgICAgICAgICAgMHgwNCAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX0VOVU0gICAgICAgICAgICAgICAgICAgMHgwNSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiAvLyBFbnVtCisvL2VuZCBwb3dlciBzdGF0ZSBlbnVtcworLy9iZWdpbiBkZXByZWNhdGVkIHBvd2VyIHN0YXRlIGVudW1zCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9QT1dFUl9TVEFURV9VTkRFRklORURfRU5VTSAgICAgICAgICAgICAgICAgMHgwMCAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX0VOVU0gICAgICAgICAgICAgMHgwMSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfRU5VTSAgICAgICAgICAgICAgMHgwMiAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9FTlVNICAgICAgMHgwMyAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfRU5VTSAgICAgICAgMHgwNCAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfRU5VTSAgICAgICAgICAgICAgMHgwNSAvLyBFbnVtCisvL2VuZCBkZXByZWNhdGVkIHBvd2VyIHN0YXRlIGVudW1zCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9GRUFUVVJFX1BBR0VfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFBLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX0ZFQVRVUkVfUEFHRV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUIsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfSU5QVVRfUEFHRV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxQywweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9JTlBVVF9QQUdFX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFELDB4MDMKKworLy9kYXRhIHR5cGUgbG9jYXRpb24KKy8vZGF0YSBmaWVsZCB1c2FnZXMgKGlucHV0IHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDAsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fREVTSVJFRF9BQ0NVUkFDWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9BTFRJVFVERV9BTlRFTk5BX1NFQUxFVkVMICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAyLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0RJRkZFUkVOVElBTF9SRUZFUkVOQ0VfU1RBVElPTl9JRCAgICAgICAgICAgICAgICAweDBBLDB4MDMsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fQUxUSVRJREVfRUxJUFNPSURfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9BTFRJVElERV9FTElQU09JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA1LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0FMVElUVURFX1NFQUxFVkVMX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDYsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fQUxUSVRVREVfU0VBTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9ER1BTX0RBVEFfQUdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA4LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0VSUk9SX1JBRElVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDksMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fRklYX1FVQUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwQSwweDA0IC8vIE5BcnkKKy8vYmVnaW4gZml4IHF1YWxpdHkgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9GSVhfUVVBTElUWV9OT19GSVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDcwLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9GSVhfUVVBTElUWV9HUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDcxLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9GSVhfUVVBTElUWV9ER1BTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDcyLDB4MDggLy8gU2VsCisvL2VuZCBmaXggcXVhbGl0eSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0ZJWF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEIsMHgwNCAvLyBOQXJ5CisvL2JlZ2luIGZpeCB0eXBlIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRklYX1RZUEVfTk9fRklYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4MCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRklYX1RZUEVfR1BTX1NQU19NT0RFX0ZJWF9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4MSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRklYX1RZUEVfREdQU19TUFNfTU9ERV9GSVhfVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4MiwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRklYX1RZUEVfR1BTX1BQU19NT0RFX0ZJWF9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4MywweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRklYX1RZUEVfUkVBTF9USU1FX0tJTkVNQVRJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4NCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRklYX1RZUEVfRkxPQVRfUlRLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4NSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRklYX1RZUEVfRVNUSU1BVEVEX0RFQURfUkVDS09OSU5HICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4NiwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRklYX1RZUEVfTUFOVUFMX0lOUFVUX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4NywweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRklYX1RZUEVfU0lNVUxBVE9SX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4OCwweDA4IC8vIFNlbAorLy9lbmQgZml4IHR5cGUgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9HRU9JREFMX1NFUEFSQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBDLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0dQU19PUEVSQVRJT05fTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEQsMHgwNCAvLyBOQXJ5CisvL2JlZ2luIGdwcyBvcGVyYXRpb24gbW9kZSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dQU19PUF9NT0RFX01BTlVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4OTAsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dQU19PUF9NT0RFX0FVVE9NQVRJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4OTEsMHgwOCAvLyBTZWwKKy8vZW5kIGdwcyBvcGVyYXRpb24gbW9kZSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0dQU19TRUxFQ1RJT05fTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEUsMHgwNCAvLyBOQXJ5CisvL2JlZ2luIGdwcyBzZWxlY3Rpb24gbW9kZSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dQU19TRUxfTU9ERV9BVVRPTk9NT1VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QTAsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dQU19TRUxfTU9ERV9ER1BTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QTEsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dQU19TRUxfTU9ERV9FU1RJTUFURURfREVBRF9SRUNLT05JTkcgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QTIsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dQU19TRUxfTU9ERV9NQU5VQUxfSU5QVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QTMsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dQU19TRUxfTU9ERV9TSU1VTEFUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QTQsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dQU19TRUxfTU9ERV9EQVRBX05PVF9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QTUsMHgwOCAvLyBTZWwKKy8vZW5kIGdwcyBzZWxlY3Rpb24gbW9kZSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0dQU19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEYsMHgwNCAvLyBOQXJ5CisvL2JlZ2luIGdwcyBzdGF0dXMgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HUFNfU1RBVFVTX0RBVEFfVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEIwLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HUFNfU1RBVFVTX0RBVEFfTk9UX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEIxLDB4MDggLy8gU2VsCisvL2VuZCBncHMgc3RhdHVzIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fUE9TSVRJT05fRElMVVRJT05fT0ZfUFJFQ0lTSU9OICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9IT1JJWk9OVEFMX0RJTFVUSU9OX09GX1BSRUNJU0lPTiAgICAgICAgICAgICAgICAgMHgwQSwweDExLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX1ZFUlRJQ0FMX0RJTFVUSU9OX09GX1BSRUNJU0lPTiAgICAgICAgICAgICAgICAgICAweDBBLDB4MTIsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fTEFUSVRVREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9MT05HSVRVREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE0LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX1RSVUVfSEVBRElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTUsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fTUFHTkVUSUNfSEVBRElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9NQUdORVRJQ19WQVJJQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE3LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTgsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fU0FURUxMSVRFU19JTl9WSUVXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxOSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9TQVRFTExJVEVTX0lOX1ZJRVdfQVpJTVVUSCAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFBLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX1NBVEVMTElURVNfSU5fVklFV19FTEVWQVRJT04gICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUIsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fU0FURUxMSVRFU19JTl9WSUVXX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxQywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9TQVRFTExJVEVTX0lOX1ZJRVdfUFJOcyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFELDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX1NBVEVMTElURVNfSU5fVklFV19TVE5fUkFUSU8gICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUUsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fU0FURUxMSVRFU19VU0VEX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxRiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9TQVRFTExJVEVTX1VTRURfUFJOcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDIwLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX05NRUFfU0VOVEVOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fQUREUkVTU19MSU5FXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyMiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9BRERSRVNTX0xJTkVfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDIzLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0NJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjQsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fU1RBVEVfT1JfUFJPVklOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyNSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9DT1VOVFJZX09SX1JFR0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI2LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX1BPU1RBTF9DT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjcsMHgwNAorLy9wcm9wZXJ0eSB1c2FnZXMgKGdldC9zZXQgZmVhdHVyZSByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDJBLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9MT0NBVElPTl9ERVNJUkVEX0FDQ1VSQUNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MkIsMHgwNCAvLyBOQXJ5CisvL2JlZ2luIGxvY2F0aW9uIGRlc2lyZWQgYWNjdXJhY3kgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREVTSVJFRF9BQ0NVUkFDWV9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDYwLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREVTSVJFRF9BQ0NVUkFDWV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDYxLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREVTSVJFRF9BQ0NVUkFDWV9NRURJVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDYyLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREVTSVJFRF9BQ0NVUkFDWV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDYzLDB4MDggLy8gU2VsCisvL2VuZCBsb2NhdGlvbiBkZXNpcmVkIGFjY3VyYWN5IHNlbGVjdG9ycworCisvL2RhdGEgdHlwZSBlbnZpcm9ubWVudGFsCisvL2RhdGEgZmllbGQgdXNhZ2VzIChpbnB1dCByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDMwLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfQVRNT1NQSEVSSUNfUFJFU1NVUkUgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9SRUZFUkVOQ0VfUFJFU1NVUkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzMiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX1JFTEFUSVZFX0hVTUlESVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDMzLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfVEVNUEVSQVRVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzQsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9XSU5EX0RJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzNSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX1dJTkRfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDM2LDB4MDQKKy8vcHJvcGVydHkgdXNhZ2VzIChnZXQvc2V0IGZlYXR1cmUgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0VOVklST05NRU5UQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0MCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfRU5WSVJPTk1FTlRBTF9SRUZFUkVOQ0VfUFJFU1NVUkUgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQxLDB4MDQKKworLy9kYXRhIHR5cGUgbW90aW9uCisvL2RhdGEgZmllbGQgdXNhZ2VzIChpbnB1dCByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUwLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FDQ0VMRVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQUNDRUxFUkFUSU9OX1hfQVhJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUzLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BQ0NFTEVSQVRJT05fWV9BWElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTQsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FDQ0VMRVJBVElPTl9aX0FYSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1NSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQU5HVUxBUl9WRUxPQ0lUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU2LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BTkdVTEFSX1ZFTE9DSVRZX1hfQVhJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTcsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FOR1VMQVJfVkVMT0NJVFlfWV9BWElTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1OCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQU5HVUxBUl9WRUxPQ0lUWV9aX0FYSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU5LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BTkdVTEFSX1BPU0lUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FOR1VMQVJfUE9TSVRJT05fWF9BWElTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1QiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQU5HVUxBUl9QT1NJVElPTl9ZX0FYSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVDLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BTkdVTEFSX1BPU0lUSU9OX1pfQVhJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUQsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1RSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fSU5URU5TSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVGLDB4MDQKKworLy9kYXRhIHR5cGUgb3JpZW50YXRpb24KKy8vZGF0YSBmaWVsZCB1c2FnZXMgKGlucHV0IHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzAsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfSEVBRElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19IRUFESU5HX1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDcyLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0hFQURJTkdfWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzMsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfSEVBRElOR19aICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3NCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9DT01QRU5TQVRFRF9NQUdORVRJQ19OT1JUSCAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc1LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX0NPTVBFTlNBVEVEX1RSVUVfTk9SVEggICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzYsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfTk9SVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3NywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9UUlVFX05PUlRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc4LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX0RJU1RBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzksMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fRElTVEFOQ0VfWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3QSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9ESVNUQU5DRV9ZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDdCLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX0RJU1RBTkNFX1ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4N0MsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fRElTVEFOQ0VfT1VUX09GX1JBTkdFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3RCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9USUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDdFLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1RJTFRfWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4N0YsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fVElMVF9ZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4MCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9USUxUX1ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDgxLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1JPVEFUSU9OX01BVFJJWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODIsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fUVVBVEVSTklPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4MywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19GTFVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDg0LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0ZMVVhfWF9BWElTICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODUsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfRkxVWF9ZX0FYSVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4NiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19GTFVYX1pfQVhJUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDg3LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDg4LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEUwLDB4MDgKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWV9NRURJVU0gICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEUxLDB4MDgKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEUyLDB4MDgKKworLy9kYXRhIHR5cGUgbWVjaGFuaWNhbAorLy9kYXRhIGZpZWxkIHVzYWdlcyAoaW5wdXQgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTUVDSEFOSUNBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg5MCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NRUNIQU5JQ0FMX0JPT0xFQU5fU1dJVENIX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDkxLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01FQ0hBTklDQUxfQk9PTEVBTl9TV0lUQ0hfQVJSQVlfU1RBVEVTICAgICAgICAgICAgICAgICAgICAweDBBLDB4OTIsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTUVDSEFOSUNBTF9NVUxUSVZBTFVFX1NXSVRDSF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg5MywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NRUNIQU5JQ0FMX0ZPUkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDk0LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01FQ0hBTklDQUxfQUJTT0xVVEVfUFJFU1NVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4OTUsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTUVDSEFOSUNBTF9HQVVHRV9QUkVTU1VSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg5NiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NRUNIQU5JQ0FMX1NUUkFJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDk3LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01FQ0hBTklDQUxfV0VJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4OTgsMHgwNAorLy9wcm9wZXJ0eSB1c2FnZXMgKGdldC9zZXQgZmVhdHVyZSByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfTUVDSEFOSUNBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEEwLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9NRUNIQU5JQ0FMX1ZJQlJBVElPTl9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QTEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTUVDSEFOSUNBTF9WSUJSQVRJT05fU1BFRURfRk9SV0FSRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhBMiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NRUNIQU5JQ0FMX1ZJQlJBVElPTl9TUEVFRF9CQUNLV0FSRCAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEEzLDB4MDQKKworLy9kYXRhIHR5cGUgYmlvbWV0cmljCisvL2RhdGEgZmllbGQgdXNhZ2VzIChpbnB1dCByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9CSU9NRVRSSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEIwLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0JJT01FVFJJQ19IVU1BTl9QUkVTRU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QjEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQklPTUVUUklDX0hVTUFOX1BST1hJTUlUWV9SQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhCMiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9CSU9NRVRSSUNfSFVNQU5fUFJPWElNSVRZX09VVF9PRl9SQU5HRSAgICAgICAgICAgICAgICAgICAgMHgwQSwweEIzLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0JJT01FVFJJQ19IVU1BTl9UT1VDSF9TVEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QjQsMHgwNAorCisvL2RhdGEgdHlwZSBsaWdodCBzZW5zb3IKKy8vZGF0YSBmaWVsZCB1c2FnZXMgKGlucHV0IHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RDAsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTElHSFRfSUxMVU1JTkFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhEMSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MSUdIVF9DT0xPUl9URU1QRVJBVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEQyLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xJR0hUX0NIUk9NQVRJQ0lUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RDMsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTElHSFRfQ0hST01BVElDSVRZX1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhENCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MSUdIVF9DSFJPTUFUSUNJVFlfWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEQ1LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xJR0hUX0NPTlNVTUVSX0lSX1NFTlRFTkNFX1JFQ0VJVkUgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RDYsMHgwNAorLy9wcm9wZXJ0eSB1c2FnZXMgKGdldC9zZXQgZmVhdHVyZSByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfTElHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEUwLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9MSUdIVF9DT05TVU1FUl9JUl9TRU5URU5DRV9TRU5EICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RTEsMHgwNAorCisvL2RhdGEgdHlwZSBzY2FubmVyCisvL2RhdGEgZmllbGQgdXNhZ2VzIChpbnB1dCByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9TQ0FOTkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEYwLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX1NDQU5ORVJfUkZJRF9UQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RjEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfU0NBTk5FUl9ORkNfU0VOVEVOQ0VfUkVDRUlWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhGMiwweDA0CisvL3Byb3BlcnR5IHVzYWdlcyAoZ2V0L3NldCBmZWF0dXJlIHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TQ0FOTkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RjgsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NDQU5ORVJfTkZDX1NFTlRFTkNFX1NFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhGOSwweDA0CisKKy8vZGF0YSB0eXBlIGVsZWN0cmljYWwKKy8vZGF0YSBmaWVsZCB1c2FnZXMgKGlucHV0IHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VMRUNUUklDQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDAsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRUxFQ1RSSUNBTF9DQVBBQ0lUQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTEVDVFJJQ0FMX0NVUlJFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAyLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VMRUNUUklDQUxfUE9XRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDMsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRUxFQ1RSSUNBTF9JTkRVQ1RBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTEVDVFJJQ0FMX1JFU0lTVEFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA1LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VMRUNUUklDQUxfVk9MVEFHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDYsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRUxFQ1RSSUNBTF9GUkVRVUVOQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNywweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTEVDVFJJQ0FMX1BFUklPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA4LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VMRUNUUklDQUxfUEVSQ0VOVF9PRl9SQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDksMHgwNQorCisvL2RhdGEgdHlwZSB0aW1lCisvL2RhdGEgZmllbGQgdXNhZ2VzIChpbnB1dCByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9USU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDIwLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX1RJTUVfWUVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjEsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfVElNRV9NT05USCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyMiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9USU1FX0RBWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDIzLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX1RJTUVfREFZX09GX1dFRUsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjQsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfVElNRV9IT1VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyNSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9USU1FX01JTlVURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI2LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX1RJTUVfU0VDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjcsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfVElNRV9NSUxMSVNFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyOCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9USU1FX1RJTUVTVEFNUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI5LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX1RJTUVfSlVMSUFOX0RBWV9PRl9ZRUFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MkEsMHgwNQorLy9wcm9wZXJ0eSB1c2FnZXMgKGdldC9zZXQgZmVhdHVyZSByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDMwLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9USU1FX1RJTUVfWk9ORV9PRkZTRVRfRlJPTV9VVEMgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzEsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1RJTUVfVElNRV9aT05FX05BTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzMiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfVElNRV9EQVlMSUdIVF9TQVZJTkdTX1RJTUVfT0JTRVJWRUQgICAgICAgICAgICAgICAgICAgMHgwQSwweDMzLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9USU1FX1RJTUVfVFJJTV9BREpVU1RNRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzQsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1RJTUVfQVJNX0FMQVJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzNSwweDA1CisKKy8vZGF0YSB0eXBlIGN1c3RvbQorLy9kYXRhIGZpZWxkIHVzYWdlcyAoaW5wdXQgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0MCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVVNBR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQxLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9CT09MRUFOX0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDIsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0MywweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQ0LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDUsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0NiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQ3LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDgsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0OSwweDA1CisKKyNpZiAxIC8vZGVmaW5lIHZlbmRvci1zcGVjaWZpYyAobm9uLXNwZWMpIGN1c3RvbSBkYXRhZmllbGRzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDRBLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NEIsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0QywweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDRELDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NEUsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0RiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUwLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTEsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUzLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTQsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1NSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU2LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTcsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1OCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU5LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUEsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1QiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVDLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUQsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1RSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVGLDB4MDUKKyNlbmRpZgorCisvL2RhdGEgdHlwZSBnZW5lcmljCisvL2RhdGEgZmllbGQgdXNhZ2VzIChpbnB1dCByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDYwLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfR1VJRF9PUl9QUk9QRVJUWUtFWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NjEsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19DQVRFR09SWV9HVUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2MiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX1RZUEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDYzLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfRVZFTlRfUFJPUEVSVFlLRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NjQsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19QUk9QRVJUWV9QUk9QRVJUWUtFWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2NSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX0RBVEFGSUVMRF9QUk9QRVJUWUtFWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDY2LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfRVZFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NjcsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19QUk9QRVJUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2OCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX0RBVEFGSUVMRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDY5LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVU1FUkFUT1JfVEFCTEVfUk9XX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NkEsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRU5VTUVSQVRPUl9UQUJMRV9ST1dfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2QiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX0dVSURfT1JfUFJPUEVSVFlLRVlfS0lORCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDZDLDB4MDUgLy8gTkFyeQorLy9iZWdpbiBHb3JQSyBraW5kIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dPUlBLX0tJTkRfQ0FURUdPUlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhEMCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dPUlBLX0tJTkRfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhEMSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dPUlBLX0tJTkRfRVZFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhEMiwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dPUlBLX0tJTkRfUFJPUEVSVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhEMywweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dPUlBLX0tJTkRfREFUQUZJRUxEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhENCwweDA4IC8vIFNlbAorLy9lbmQgR29yUEsga2luZCBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NkQsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19QUk9QRVJUWUtFWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2RSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX1RPUF9MRVZFTF9DT0xMRUNUSU9OX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDZGLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfUkVQT1JUX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzAsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19SRVBPUlRfSVRFTV9QT1NJVElPTl9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX0ZJUk1XQVJFX1ZBUlRZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDcyLDB4MDUgLy8gTkFyeQorLy9iZWdpbiBmaXJtd2FyZSB2YXJ0eXBlIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfQk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfVUkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfVUkyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfSTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfVUk0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfSTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfVUk4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwOCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfSTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwOSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfUjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwQSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfUjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwQiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfV1NUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwQywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfU1RSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwRCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfQ0xTSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwRSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfVkVDVE9SX1ZUX1VJMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwRiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxOCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxOSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxQSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxQiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxQywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxRCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxRSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjE2RUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxRiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyMCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyMSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyMiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyMywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyNCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyNSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyNiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyNywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyOCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyOSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyQSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRUIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyQiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyQywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyRCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyRSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0ZJUk1XQVJFX1ZBUlRZUEVfVlRfRjMyRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyRiwweDA5IC8vIFNlbAorLy9lbmQgZmlybXdhcmUgdmFydHlwZSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfVU5JVF9PRl9NRUFTVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzMsMHgwNSAvLyBOQXJ5CisvL2JlZ2luIHVuaXQgb2YgbWVhc3VyZSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfTk9UX1NQRUNJRklFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDAsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfTFVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDEsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfREVHUkVFU19LRUxWSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDIsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfREVHUkVFU19DRUxTSVVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDMsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfUEFTQ0FMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDQsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfTkVXVE9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDUsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfTUVURVJTX1BFUl9TRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDYsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfS0lMT0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDcsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfTUVURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDgsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfTUVURVJTX1BFUl9TRUNfU1FSRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDksMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfRkFSQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NEEsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfQU1QRVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NEIsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfV0FUVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NEMsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfSEVOUlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NEQsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfT0hNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NEUsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfVk9MVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NEYsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfSEVSVFogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTAsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfQkFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTEsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfREVHUkVFU19BTlRJX0NMT0NLV0lTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTIsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfREVHUkVFU19DTE9DS1dJU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTMsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfREVHUkVFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTQsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfREVHUkVFU19QRVJfU0VDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTUsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfREVHUkVFU19QRVJfU0VDX1NRUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTYsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfS05PVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTcsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfUEVSQ0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTgsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfU0VDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTksMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfTUlMTElTRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUEsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUIsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfQllURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUMsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfTUlMTElHQVVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUQsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX1VOSVRfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUUsMHgwOSAvLyBTZWwKKy8vZW5kIHVuaXQgb2YgbWVhc3VyZSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfVU5JVF9FWFBPTkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzQsMHgwNSAvLyBOQXJ5CisvL2JlZ2luIHVuaXQgZXhwb25lbnQgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDcwLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDcxLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDcyLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDczLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc0LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc1LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc2LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc3LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc4LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF85ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc5LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDdBLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF9CICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDdCLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF9DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDdDLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDdELDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF9FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDdFLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR0VORVJJQ19FWFBPTkVOVF9GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDdGLDB4MDkgLy8gU2VsCisvL2VuZCB1bml0IGV4cG9uZW50IHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19SRVBPUlRfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3NSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX1JFUE9SVF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc2LDB4MDUKKy8vcHJvcGVydHkgdXNhZ2VzIChnZXQvc2V0IGZlYXR1cmUgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0dFTkVSSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4MCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfRU5VTUVSQVRPUl9UQUJMRV9ST1dfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDgxLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9FTlVNRVJBVE9SX1RBQkxFX1JPV19DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODIsMHgwNQorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE90aGVyIEhJRCBkZWZpbml0aW9ucworLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvL05PVEU6IFRoZXNlIGRlZmluaXRpb25zIGFyZSBkZXNpZ25lZCB0byBwZXJtaXQgY29tcGlsaW5nIHRoZSBISUQgcmVwb3J0IGRlc2NyaXB0b3JzCisvLyB3aXRoIHNvbWV3aGF0IHNlbGYtZXhwbGFuYXRvcnkgaW5mb3JtYXRpb24gdG8gaGVscCByZWFkYWJpbGl0eSBhbmQgcmVkdWNlIGVycm9ycworCisvL2lucHV0LG91dHB1dCxmZWF0dXJlIGZsYWdzCisjZGVmaW5lIERhdGFfQXJyX0FicyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIENvbnN0X0Fycl9BYnMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIERhdGFfVmFyX0FicyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIENvbnN0X1Zhcl9BYnMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIERhdGFfVmFyX1JlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2CisvL2NvbGxlY3Rpb24gZmxhZ3MKKyNkZWZpbmUgUGh5c2ljYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQXBwbGljYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTG9naWNhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgTmFtZWRBcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgVXNhZ2VTd2l0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUKKy8vb3RoZXIKKyNkZWZpbmUgVW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKworI2RlZmluZSBISURfVVNBR0VfUEFHRShhKSAgICAgICAgICAgICAgICAgICAgICAgMHgwNSxhCisjZGVmaW5lIEhJRF9VU0FHRShhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LGEKKyNkZWZpbmUgSElEX1VTQUdFMTYoYSxiKSAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsYSxiCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQShhLGIpICAgICAgICAgICAgICBhfGIgICAgIC8vVGhpcyBvci1zIHRoZSBtb2QgaW50byB1c2FnZQorI2RlZmluZSBISURfQ09MTEVDVElPTihhKSAgICAgICAgICAgICAgICAgICAgICAgMHhBMSxhCisjZGVmaW5lIEhJRF9SRVBPUlRfSUQoYSkgICAgICAgICAgICAgICAgICAgICAgICAweDg1LGEKKyNkZWZpbmUgSElEX1JFUE9SVF9TSVpFKGEpICAgICAgICAgICAgICAgICAgICAgIDB4NzUsYQorI2RlZmluZSBISURfUkVQT1JUX0NPVU5UKGEpICAgICAgICAgICAgICAgICAgICAgMHg5NSxhCisjZGVmaW5lIEhJRF9VU0FHRV9NSU5fOChhKSAgICAgICAgICAgICAgICAgICAgICAweDE5LGEKKyNkZWZpbmUgSElEX1VTQUdFX01JTl8xNihhLGIpICAgICAgICAgICAgICAgICAgIDB4MUEsYSxiCisjZGVmaW5lIEhJRF9VU0FHRV9NQVhfOChhKSAgICAgICAgICAgICAgICAgICAgICAweDI5LGEKKyNkZWZpbmUgSElEX1VTQUdFX01BWF8xNihhLGIpICAgICAgICAgICAgICAgICAgIDB4MkEsYSxiCisjZGVmaW5lIEhJRF9MT0dJQ0FMX01JTl84KGEpICAgICAgICAgICAgICAgICAgICAweDE1LGEKKyNkZWZpbmUgSElEX0xPR0lDQUxfTUlOXzE2KGEsYikgICAgICAgICAgICAgICAgIDB4MTYsYSxiCisjZGVmaW5lIEhJRF9MT0dJQ0FMX01JTl8zMihhLGIsYyxkKSAgICAgICAgICAgICAweDE3LGEsYixjLGQKKyNkZWZpbmUgSElEX0xPR0lDQUxfTUFYXzgoYSkgICAgICAgICAgICAgICAgICAgIDB4MjUsYQorI2RlZmluZSBISURfTE9HSUNBTF9NQVhfMTYoYSxiKSAgICAgICAgICAgICAgICAgMHgyNixhLGIKKyNkZWZpbmUgSElEX0xPR0lDQUxfTUFYXzMyKGEsYixjLGQpICAgICAgICAgICAgIDB4MjcsYSxiLGMsZAorI2RlZmluZSBISURfVU5JVF9FWFBPTkVOVChhKSAgICAgICAgICAgICAgICAgICAgMHg1NSxhCisjZGVmaW5lIEhJRF9JTlBVVChhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxLGEKKyNkZWZpbmUgSElEX09VVFBVVChhKSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEsYQorI2RlZmluZSBISURfRkVBVFVSRShhKSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCMSxhCisjZGVmaW5lIEhJRF9FTkRfQ09MTEVDVElPTiAgICAgICAgICAgICAgICAgICAgICAweEMwCisKKyNlbmRpZiAvLyBISURVVElMX1RFU1RfSElEU0VOU09SU1BFQ19ICmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9UcmlTdGF0ZVRlc3QuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvVHJpU3RhdGVUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGNkZjBiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvVHJpU3RhdGVUZXN0LmNwcApAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSAiVHJpU3RhdGUuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxjc3RkaW50PgorI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKwordXNpbmcgSGlkVXRpbDo6VHJpU3RhdGU7Cit0eXBlZGVmIFRyaVN0YXRlPHVpbnQzMl90PiB0cmlfdWludDMyX3Q7Cit0eXBlZGVmIFRyaVN0YXRlPGludDMyX3Q+IHRyaV9pbnQzMl90OwordHlwZWRlZiBUcmlTdGF0ZTxpbnQxNl90PiB0cmlfaW50MTZfdDsKKworVEVTVChUcmlTdGF0ZVRlc3QsIENvbnN0cnVjdG9yKSB7CisgICAgdHJpX3VpbnQzMl90IGE7CisgICAgRVhQRUNUX0ZBTFNFKGEuaXNTZXQoKSk7CisKKyAgICBhICs9IDE7CisgICAgRVhQRUNUX0ZBTFNFKGEuaXNTZXQoKSk7CisKKyAgICBhIC09IDE7CisgICAgRVhQRUNUX0ZBTFNFKGEuaXNTZXQoKSk7CisKKyAgICBhICo9IDE7CisgICAgRVhQRUNUX0ZBTFNFKGEuaXNTZXQoKSk7CisKKyAgICBhIC89IDE7CisgICAgRVhQRUNUX0ZBTFNFKGEuaXNTZXQoKSk7CisKKyAgICB0cmlfdWludDMyX3QgYjsKKyAgICBiID0gYTsKKyAgICBFWFBFQ1RfRkFMU0UoYi5pc1NldCgpKTsKKworICAgIGEgPSAxOworICAgIEVYUEVDVF9UUlVFKGEuaXNTZXQoKSk7CisKKyAgICBiID0gYTsKKyAgICBFWFBFQ1RfVFJVRShiLmlzU2V0KCkpOworCisgICAgYS5jbGVhcigpOworICAgIEVYUEVDVF9GQUxTRShhLmlzU2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGIuaXNTZXQoKSk7CisKKyAgICB0cmlfdWludDMyX3QgYyhiKTsKKyAgICBFWFBFQ1RfVFJVRShjLmlzU2V0KCkpOworCisgICAgYy5jbGVhcigpOworICAgIEVYUEVDVF9GQUxTRShjLmlzU2V0KCkpOworCisgICAgdHJpX3VpbnQzMl90IGQoYSk7CisgICAgRVhQRUNUX0ZBTFNFKGMuaXNTZXQoKSk7Cit9CisKK1RFU1QoVHJpU3RhdGVUZXN0LCBJbmNBbmREZWNPcGVyYXRpb24pIHsKKyAgICB0cmlfaW50MzJfdCBhKDEpOworCisgICAgRVhQRUNUX0VRKDIsICgrK2EpLmdldCgwKSk7CisgICAgRVhQRUNUX0VRKDIsIChhKyspLmdldCgwKSk7CisgICAgRVhQRUNUX0VRKDMsIGEuZ2V0KDApKTsKKworICAgIEVYUEVDVF9FUSgyLCAoLS1hKS5nZXQoMCkpOworICAgIEVYUEVDVF9FUSgyLCAoYS0tKS5nZXQoMCkpOworICAgIEVYUEVDVF9FUSgxLCBhLmdldCgwKSk7CisKKyAgICB0cmlfdWludDMyX3QgYjsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEwMCksICgrK2IpLmdldCgxMDApKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEwMSksIChiKyspLmdldCgxMDEpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEwMiksIGIuZ2V0KDEwMikpOworICAgIEVYUEVDVF9GQUxTRShiLmlzU2V0KCkpOworCisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHVpbnQzMl90PigxMDMpLCAoLS1iKS5nZXQoMTAzKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHVpbnQzMl90PigxMDQpLCAoYi0tKS5nZXQoMTA0KSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHVpbnQzMl90PigxMDUpLCBiLmdldCgxMDUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoYi5pc1NldCgpKTsKK30KKworVEVTVChUcmlTdGF0ZVRlc3QsIENvbXBhcmlzb24pIHsKKyAgICB0cmlfaW50MzJfdCBhKDEpOworICAgIHRyaV9pbnQzMl90IGIoMSk7CisgICAgdHJpX2ludDMyX3QgYygyKTsKKyAgICB0cmlfaW50MzJfdCBkOworCisgICAgRVhQRUNUX0VRKGEsIGIpOworICAgIEVYUEVDVF9GQUxTRSgoYSAhPSBiKSk7CisgICAgRVhQRUNUX1RSVUUoIShhICE9IGIpKTsKKyAgICBFWFBFQ1RfTkUoLTEsIGEpOworCisgICAgRVhQRUNUX0xUKGEsIGMpOworICAgIEVYUEVDVF9MVChhLCAzKTsKKworICAgIEVYUEVDVF9HVChjLCBiKTsKKyAgICBFWFBFQ1RfR1QoYywgMCk7CisKKyAgICBFWFBFQ1RfTEUoYSwgMSk7CisgICAgRVhQRUNUX0xFKGEsIGMpOworICAgIEVYUEVDVF9MRShhLCAzKTsKKyAgICBFWFBFQ1RfTEUoYSwgYik7CisKKyAgICBFWFBFQ1RfR0UoYywgYik7CisgICAgRVhQRUNUX0dFKGIsIGEpOworICAgIEVYUEVDVF9HRShjLCAwKTsKKyAgICBFWFBFQ1RfR0UoYywgMik7CisKKyAgICBFWFBFQ1RfRkFMU0UoKGEgPT0gZCkuaXNTZXQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKChhID49IGQpLmlzU2V0KCkpOworICAgIEVYUEVDVF9GQUxTRSgoYSA8PSBkKS5pc1NldCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoKGEgIT0gZCkuaXNTZXQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKChhID4gZCkuaXNTZXQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKChhIDwgZCkuaXNTZXQoKSk7CisKKyAgICAvL0VYUEVDVF9FUShhLCBkKTsgLy8gd2lsbCBjYXVzZSBydW50aW1lIGZhaWx1cmUKKyAgICAvLyBkdWUgdG8gY29udmVydGluZyBhIG5vdC1zZXQgVHJpU3RhdGU8Ym9vbD4gdG8gYm9vbAorfQorCitURVNUKFRyaVN0YXRlVGVzdCwgQ29tcG91bmRBc3NpZ24pIHsKKyAgICB0cmlfdWludDMyX3QgeDsKKworICAgIHggKz0gMTA7CisgICAgRVhQRUNUX0ZBTFNFKHguaXNTZXQoKSk7CisgICAgeCAtPSAxMDsKKyAgICBFWFBFQ1RfRkFMU0UoeC5pc1NldCgpKTsKKyAgICB4ICo9IDEwOworICAgIEVYUEVDVF9GQUxTRSh4LmlzU2V0KCkpOworICAgIHggLz0gMTA7CisgICAgRVhQRUNUX0ZBTFNFKHguaXNTZXQoKSk7CisgICAgeCAmPSAxMDsKKyAgICBFWFBFQ1RfRkFMU0UoeC5pc1NldCgpKTsKKyAgICB4IHw9IDEwOworICAgIEVYUEVDVF9GQUxTRSh4LmlzU2V0KCkpOworICAgIHggJT0gMTA7CisgICAgRVhQRUNUX0ZBTFNFKHguaXNTZXQoKSk7CisgICAgeCA8PD0gMTA7CisgICAgRVhQRUNUX0ZBTFNFKHguaXNTZXQoKSk7CisgICAgeCA+Pj0gMTA7CisgICAgRVhQRUNUX0ZBTFNFKHguaXNTZXQoKSk7CisKKyAgICB0cmlfaW50MzJfdCB5LCB6LCB3OworI2RlZmluZSBURVNUX0NPTVBPVU5EX0FTU0lHTihhLCBvcCwgb3BfYywgYikgXAorICAgIHkgPSB6ID0gYTsgXAorICAgIHcgPSBiOyBcCisgICAgeSBvcF9jIGI7IFwKKyAgICBFWFBFQ1RfVFJVRSh5LmlzU2V0KCkpOyBcCisgICAgRVhQRUNUX0VRKHksIChhIG9wIGIpKTsgXAorICAgIEVYUEVDVF9FUSh5LCAoeiBvcCBiKSk7IFwKKyAgICBFWFBFQ1RfRVEoeSwgKGEgb3AgdykpOworCisgICAgVEVTVF9DT01QT1VORF9BU1NJR04oMTIzLCArLCArPSwgNDU2KTsKKyAgICBURVNUX0NPTVBPVU5EX0FTU0lHTigxMjMsIC0sIC09LCA0NTYpOworICAgIFRFU1RfQ09NUE9VTkRfQVNTSUdOKDEyMywgKiwgKj0sIDQ1Nik7CisgICAgVEVTVF9DT01QT1VORF9BU1NJR04oMTIzLCAvLCAvPSwgNDU2KTsKKyAgICBURVNUX0NPTVBPVU5EX0FTU0lHTigxMjMsIHwsIHw9LCA0NTYpOworICAgIFRFU1RfQ09NUE9VTkRfQVNTSUdOKDEyMywgJiwgJj0sIDQ1Nik7CisgICAgVEVTVF9DT01QT1VORF9BU1NJR04oMTIzLCBeLCBePSwgNDU2KTsKKyAgICBURVNUX0NPTVBPVU5EX0FTU0lHTigxMjMsICUsICU9LCA0NTYpOworI3VuZGVmIFRFU1RfQ09NUE9VTkRfQVNTSUdOCisgICAgeSA9IHogPSAxMjM7CisgICAgdyA9IDEwOworICAgIHkgPDw9IDEwOworICAgIEVYUEVDVF9UUlVFKHkuaXNTZXQoKSk7CisgICAgRVhQRUNUX0VRKDEyMyA8PCAxMCwgeSk7CisKKyAgICB5ID0geiA9IDEyMzQ1OworICAgIHcgPSAxMDsKKyAgICB5ID4+PSAxMDsKKyAgICBFWFBFQ1RfVFJVRSh5LmlzU2V0KCkpOworICAgIEVYUEVDVF9FUSgxMjM0NSA+PiAxMCwgeSk7Cit9CisKK1RFU1QoVHJpU3RhdGVUZXN0LCBVbmFyeU9wZXJhdGlvbikgeworICAgIHRyaV9pbnQxNl90IHA7CisgICAgRVhQRUNUX0ZBTFNFKCghcCkuaXNTZXQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKCgtcCkuaXNTZXQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKCh+cCkuaXNTZXQoKSk7CisKKyAgICB0cmlfaW50MTZfdCBxKDEyMzQpOworICAgIEVYUEVDVF9UUlVFKCghcSkuaXNTZXQoKSk7CisgICAgRVhQRUNUX0VRKCFzdGF0aWNfY2FzdDxpbnQxNl90PigxMjM0KSwgKCFxKSk7CisKKyAgICB0cmlfaW50MTZfdCByKDEyMzQpOworICAgIEVYUEVDVF9UUlVFKCgtcikuaXNTZXQoKSk7CisgICAgRVhQRUNUX0VRKC0xMjM0LCAoLXIpKTsKKworICAgIHRyaV9pbnQxNl90IHMoMTIzNCk7CisgICAgRVhQRUNUX1RSVUUoKH5zKS5pc1NldCgpKTsKKyAgICBFWFBFQ1RfRVEofnN0YXRpY19jYXN0PGludDE2X3Q+KDEyMzQpLCB+cyk7Cit9CisKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9SaW5nQnVmZmVyLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9SaW5nQnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODU3YTdjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL1JpbmdCdWZmZXIuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgIlJpbmdCdWZmZXIuaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK1JpbmdCdWZmZXI6OlJpbmdCdWZmZXIoc2l6ZV90IHNpemUpCisgICAgOiBtU2l6ZShzaXplKSwKKyAgICAgIG1EYXRhKChzZW5zb3JzX2V2ZW50X3QgKiltYWxsb2Moc2l6ZW9mKHNlbnNvcnNfZXZlbnRfdCkgKiBtU2l6ZSkpLAorICAgICAgbVJlYWRQb3MoMCksCisgICAgICBtV3JpdGVQb3MoMCkgeworfQorCitSaW5nQnVmZmVyOjp+UmluZ0J1ZmZlcigpIHsKKyAgICBmcmVlKG1EYXRhKTsKKyAgICBtRGF0YSA9IE5VTEw7Cit9CisKK3NzaXplX3QgUmluZ0J1ZmZlcjo6d3JpdGUoY29uc3Qgc2Vuc29yc19ldmVudF90ICpldiwgc2l6ZV90IHNpemUpIHsKKyAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUxvY2spOworCisgICAgc2l6ZV90IG51bUF2YWlsYWJsZVRvUmVhZCA9IG1Xcml0ZVBvcyAtIG1SZWFkUG9zOworICAgIHNpemVfdCBudW1BdmFpbGFibGVUb1dyaXRlID0gbVNpemUgLSBudW1BdmFpbGFibGVUb1JlYWQ7CisKKyAgICBpZiAoc2l6ZSA+IG51bUF2YWlsYWJsZVRvV3JpdGUpIHsKKyAgICAgICAgc2l6ZSA9IG51bUF2YWlsYWJsZVRvV3JpdGU7CisgICAgfQorCisgICAgc2l6ZV90IHdyaXRlUG9zID0gKG1Xcml0ZVBvcyAlIG1TaXplKTsKKyAgICBzaXplX3QgY29weSA9IG1TaXplIC0gd3JpdGVQb3M7CisKKyAgICBpZiAoY29weSA+IHNpemUpIHsKKyAgICAgICAgY29weSA9IHNpemU7CisgICAgfQorCisgICAgbWVtY3B5KCZtRGF0YVt3cml0ZVBvc10sIGV2LCBjb3B5ICogc2l6ZW9mKHNlbnNvcnNfZXZlbnRfdCkpOworCisgICAgaWYgKHNpemUgPiBjb3B5KSB7CisgICAgICAgIG1lbWNweShtRGF0YSwgJmV2W2NvcHldLCAoc2l6ZSAtIGNvcHkpICogc2l6ZW9mKHNlbnNvcnNfZXZlbnRfdCkpOworICAgIH0KKworICAgIG1Xcml0ZVBvcyArPSBzaXplOworCisgICAgaWYgKG51bUF2YWlsYWJsZVRvUmVhZCA9PSAwICYmIHNpemUgPiAwKSB7CisgICAgICAgIG1Ob3RFbXB0eUNvbmRpdGlvbi5icm9hZGNhc3QoKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2l6ZTsKK30KKworc3NpemVfdCBSaW5nQnVmZmVyOjpyZWFkKHNlbnNvcnNfZXZlbnRfdCAqZXYsIHNpemVfdCBzaXplKSB7CisgICAgTXV0ZXg6OkF1dG9sb2NrIGF1dG9Mb2NrKG1Mb2NrKTsKKworICAgIHNpemVfdCBudW1BdmFpbGFibGVUb1JlYWQ7CisgICAgZm9yICg7OykgeworICAgICAgICBudW1BdmFpbGFibGVUb1JlYWQgPSBtV3JpdGVQb3MgLSBtUmVhZFBvczsKKyAgICAgICAgaWYgKG51bUF2YWlsYWJsZVRvUmVhZCA+IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgbU5vdEVtcHR5Q29uZGl0aW9uLndhaXQobUxvY2spOworICAgIH0KKworICAgIGlmIChzaXplID4gbnVtQXZhaWxhYmxlVG9SZWFkKSB7CisgICAgICAgIHNpemUgPSBudW1BdmFpbGFibGVUb1JlYWQ7CisgICAgfQorCisgICAgc2l6ZV90IHJlYWRQb3MgPSAobVJlYWRQb3MgJSBtU2l6ZSk7CisgICAgc2l6ZV90IGNvcHkgPSBtU2l6ZSAtIHJlYWRQb3M7CisKKyAgICBpZiAoY29weSA+IHNpemUpIHsKKyAgICAgICAgY29weSA9IHNpemU7CisgICAgfQorCisgICAgbWVtY3B5KGV2LCAmbURhdGFbcmVhZFBvc10sIGNvcHkgKiBzaXplb2Yoc2Vuc29yc19ldmVudF90KSk7CisKKyAgICBpZiAoc2l6ZSA+IGNvcHkpIHsKKyAgICAgICAgbWVtY3B5KCZldltjb3B5XSwgbURhdGEsIChzaXplIC0gY29weSkgKiBzaXplb2Yoc2Vuc29yc19ldmVudF90KSk7CisgICAgfQorCisgICAgbVJlYWRQb3MgKz0gc2l6ZTsKKworICAgIHJldHVybiBzaXplOworfQorCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvUmluZ0J1ZmZlci5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL1JpbmdCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTZiOGM5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL1JpbmdCdWZmZXIuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBSSU5HX0JVRkZFUl9IXworCisjZGVmaW5lIFJJTkdfQlVGRkVSX0hfCisKKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCYXNlLmg+CisKKyNpbmNsdWRlIDxoYXJkd2FyZS9zZW5zb3JzLmg+CisjaW5jbHVkZSA8dXRpbHMvdGhyZWFkcy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NsYXNzIFJpbmdCdWZmZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJpbmdCdWZmZXIoc2l6ZV90IHNpemUpOworICAgIH5SaW5nQnVmZmVyKCk7CisKKyAgICBzc2l6ZV90IHdyaXRlKGNvbnN0IHNlbnNvcnNfZXZlbnRfdCAqZXYsIHNpemVfdCBzaXplKTsKKyAgICBzc2l6ZV90IHJlYWQoc2Vuc29yc19ldmVudF90ICpldiwgc2l6ZV90IHNpemUpOworCitwcml2YXRlOgorICAgIE11dGV4IG1Mb2NrOworICAgIENvbmRpdGlvbiBtTm90RW1wdHlDb25kaXRpb247CisKKyAgICBzaXplX3QgbVNpemU7CisgICAgc2Vuc29yc19ldmVudF90ICptRGF0YTsKKyAgICBzaXplX3QgbVJlYWRQb3MsIG1Xcml0ZVBvczsKKworICAgIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFJpbmdCdWZmZXIpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmICAvLyBSSU5HX0JVRkZFUl9IXwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL1NlbnNvckV2ZW50Q2FsbGJhY2suaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9TZW5zb3JFdmVudENhbGxiYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4Y2Q3ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9TZW5zb3JFdmVudENhbGxiYWNrLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9TRU5TT1JIQUxfRFNFX1NFTlNPUl9FVkVOVF9DQUxMQkFDS19ICisjZGVmaW5lIEFORFJPSURfU0VOU09SSEFMX0RTRV9TRU5TT1JfRVZFTlRfQ0FMTEJBQ0tfSAorCisjaW5jbHVkZSA8aGFyZHdhcmUvc2Vuc29ycy5oPgorI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIFNlbnNvckhhbEV4dCB7CisKK2NsYXNzIEJhc2VTZW5zb3JPYmplY3Q7CisKKy8vIGlmIHRpbWVzdGFtcCBpbiBzZW5zb3JzX2V2ZW50X3QgaGFzIHRoaXMgdmFsdWUsIGl0IHdpbGwgYmUgZmlsbGVkIGF0IGRpc3BhdGNoZXIuCitjb25zdGV4cHIgaW50NjRfdCBUSU1FU1RBTVBfQVVUT19GSUxMID0gLTE7CisKK2NsYXNzIFNlbnNvckV2ZW50Q2FsbGJhY2sgeworcHVibGljOgorICAgIHZpcnR1YWwgaW50IHN1Ym1pdEV2ZW50KHNwPEJhc2VTZW5zb3JPYmplY3Q+IHNlbnNvciwgY29uc3Qgc2Vuc29yc19ldmVudF90ICZlKSA9IDA7CisgICAgdmlydHVhbCB+U2Vuc29yRXZlbnRDYWxsYmFjaygpID0gZGVmYXVsdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFNlbnNvckhhbEV4dAorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgLy8gQU5EUk9JRF9TRU5TT1JIQUxfRFNFX1NFTlNPUl9FVkVOVF9DQUxMQkFDS19ICmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3Ivc2Vuc29ycy5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3Ivc2Vuc29ycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyMDNiMgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9zZW5zb3JzLmNwcApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKworI2luY2x1ZGUgIkR5bmFtaWNTZW5zb3JNYW5hZ2VyLmgiCisjaW5jbHVkZSAic2Vuc29ycy5oIgorCisjaW5jbHVkZSA8Y3V0aWxzL3Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FEZWJ1Zy5oPgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KK3VzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitTZW5zb3JDb250ZXh0OjpTZW5zb3JDb250ZXh0KGNvbnN0IHN0cnVjdCBod19tb2R1bGVfdCAqbW9kdWxlKSB7CisgICAgbWVtc2V0KCZkZXZpY2UsIDAsIHNpemVvZihkZXZpY2UpKTsKKworICAgIGRldmljZS5jb21tb24udGFnID0gSEFSRFdBUkVfREVWSUNFX1RBRzsKKyAgICBkZXZpY2UuY29tbW9uLnZlcnNpb24gPSBTRU5TT1JTX0RFVklDRV9BUElfVkVSU0lPTl8xXzM7CisgICAgZGV2aWNlLmNvbW1vbi5tb2R1bGUgPSBjb25zdF9jYXN0PGh3X21vZHVsZV90ICo+KG1vZHVsZSk7CisgICAgZGV2aWNlLmNvbW1vbi5jbG9zZSA9IENsb3NlV3JhcHBlcjsKKyAgICBkZXZpY2UuYWN0aXZhdGUgPSBBY3RpdmF0ZVdyYXBwZXI7CisgICAgZGV2aWNlLnNldERlbGF5ID0gU2V0RGVsYXlXcmFwcGVyOworICAgIGRldmljZS5wb2xsID0gUG9sbFdyYXBwZXI7CisgICAgZGV2aWNlLmJhdGNoID0gQmF0Y2hXcmFwcGVyOworICAgIGRldmljZS5mbHVzaCA9IEZsdXNoV3JhcHBlcjsKKworICAgIC8vIGluaXRpYWxpemUgZHluYW1pYyBzZW5zb3IgbWFuYWdlcgorICAgIGludDMyX3QgYmFzZSA9IHByb3BlcnR5X2dldF9pbnQzMigic2Vuc29yLmR5bmFtaWNfc2Vuc29yX2hhbC5oYW5kbGVfYmFzZSIsIGtEeW5hbWljSGFuZGxlQmFzZSk7CisgICAgaW50MzJfdCBjb3VudCA9CisgICAgICAgICAgICBwcm9wZXJ0eV9nZXRfaW50MzIoInNlbnNvci5keW5hbWljX3NlbnNvcl9oYWwuaGFuZGxlX2NvdW50Iiwga01heER5bmFtaWNIYW5kbGVDb3VudCk7CisgICAgbUR5bmFtaWNTZW5zb3JNYW5hZ2VyLnJlc2V0KER5bmFtaWNTZW5zb3JNYW5hZ2VyOjpjcmVhdGVJbnN0YW5jZShiYXNlLCBjb3VudCwgbnVsbHB0cikpOworfQorCitpbnQgU2Vuc29yQ29udGV4dDo6Y2xvc2UoKSB7CisgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBTZW5zb3JDb250ZXh0OjphY3RpdmF0ZShpbnQgaGFuZGxlLCBpbnQgZW5hYmxlZCkgeworICAgIHJldHVybiBtRHluYW1pY1NlbnNvck1hbmFnZXItPmFjdGl2YXRlKGhhbmRsZSwgZW5hYmxlZCk7Cit9CisKK2ludCBTZW5zb3JDb250ZXh0OjpzZXREZWxheShpbnQgaGFuZGxlLCBpbnQ2NF90IGRlbGF5TnMpIHsKKyAgICByZXR1cm4gbUR5bmFtaWNTZW5zb3JNYW5hZ2VyLT5zZXREZWxheShoYW5kbGUsIGRlbGF5TnMpOworfQorCitpbnQgU2Vuc29yQ29udGV4dDo6cG9sbChzZW5zb3JzX2V2ZW50X3QgKmRhdGEsIGludCBjb3VudCkgeworICAgIHJldHVybiBtRHluYW1pY1NlbnNvck1hbmFnZXItPnBvbGwoZGF0YSwgY291bnQpOworfQorCitpbnQgU2Vuc29yQ29udGV4dDo6YmF0Y2goCisgICAgICAgIGludCBoYW5kbGUsCisgICAgICAgIGludDY0X3Qgc2FtcGxpbmdfcGVyaW9kX25zLAorICAgICAgICBpbnQ2NF90IG1heF9yZXBvcnRfbGF0ZW5jeV9ucykgeworICAgIHJldHVybiBtRHluYW1pY1NlbnNvck1hbmFnZXItPmJhdGNoKGhhbmRsZSwgc2FtcGxpbmdfcGVyaW9kX25zLCBtYXhfcmVwb3J0X2xhdGVuY3lfbnMpOworfQorCitpbnQgU2Vuc29yQ29udGV4dDo6Zmx1c2goaW50IGhhbmRsZSkgeworICAgIHJldHVybiBtRHluYW1pY1NlbnNvck1hbmFnZXItPmZsdXNoKGhhbmRsZSk7Cit9CisKKy8vIHN0YXRpYworaW50IFNlbnNvckNvbnRleHQ6OkNsb3NlV3JhcHBlcihzdHJ1Y3QgaHdfZGV2aWNlX3QgKmRldikgeworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNlbnNvckNvbnRleHQgKj4oZGV2KS0+Y2xvc2UoKTsKK30KKworLy8gc3RhdGljCitpbnQgU2Vuc29yQ29udGV4dDo6QWN0aXZhdGVXcmFwcGVyKAorICAgICAgICBzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV90ICpkZXYsIGludCBoYW5kbGUsIGludCBlbmFibGVkKSB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2Vuc29yQ29udGV4dCAqPihkZXYpLT5hY3RpdmF0ZShoYW5kbGUsIGVuYWJsZWQpOworfQorCisvLyBzdGF0aWMKK2ludCBTZW5zb3JDb250ZXh0OjpTZXREZWxheVdyYXBwZXIoCisgICAgICAgIHN0cnVjdCBzZW5zb3JzX3BvbGxfZGV2aWNlX3QgKmRldiwgaW50IGhhbmRsZSwgaW50NjRfdCBkZWxheU5zKSB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2Vuc29yQ29udGV4dCAqPihkZXYpLT5zZXREZWxheShoYW5kbGUsIGRlbGF5TnMpOworfQorCisvLyBzdGF0aWMKK2ludCBTZW5zb3JDb250ZXh0OjpQb2xsV3JhcHBlcigKKyAgICAgICAgc3RydWN0IHNlbnNvcnNfcG9sbF9kZXZpY2VfdCAqZGV2LCBzZW5zb3JzX2V2ZW50X3QgKmRhdGEsIGludCBjb3VudCkgeworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNlbnNvckNvbnRleHQgKj4oZGV2KS0+cG9sbChkYXRhLCBjb3VudCk7Cit9CisKKy8vIHN0YXRpYworaW50IFNlbnNvckNvbnRleHQ6OkJhdGNoV3JhcHBlcigKKyAgICAgICAgc3RydWN0IHNlbnNvcnNfcG9sbF9kZXZpY2VfMSAqZGV2LAorICAgICAgICBpbnQgaGFuZGxlLAorICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgIGludDY0X3Qgc2FtcGxpbmdfcGVyaW9kX25zLAorICAgICAgICBpbnQ2NF90IG1heF9yZXBvcnRfbGF0ZW5jeV9ucykgeworICAgICh2b2lkKSBmbGFnczsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTZW5zb3JDb250ZXh0ICo+KGRldiktPmJhdGNoKAorICAgICAgICAgICAgaGFuZGxlLCBzYW1wbGluZ19wZXJpb2RfbnMsIG1heF9yZXBvcnRfbGF0ZW5jeV9ucyk7Cit9CisKKy8vIHN0YXRpYworaW50IFNlbnNvckNvbnRleHQ6OkZsdXNoV3JhcHBlcihzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV8xICpkZXYsIGludCBoYW5kbGUpIHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTZW5zb3JDb250ZXh0ICo+KGRldiktPmZsdXNoKGhhbmRsZSk7Cit9CisKK3NpemVfdCBTZW5zb3JDb250ZXh0OjpnZXRTZW5zb3JMaXN0KHNlbnNvcl90IGNvbnN0ICoqbGlzdCkgeworICAgICpsaXN0ID0gJihtRHluYW1pY1NlbnNvck1hbmFnZXItPmdldER5bmFtaWNNZXRhU2Vuc29yKCkpOworICAgIHJldHVybiAxOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitzdGF0aWMgc2Vuc29yX3QgY29uc3QgKnNlbnNvcl9saXN0OworCitzdGF0aWMgaW50IG9wZW5fc2Vuc29ycygKKyAgICAgICAgY29uc3Qgc3RydWN0IGh3X21vZHVsZV90ICptb2R1bGUsCisgICAgICAgIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgc3RydWN0IGh3X2RldmljZV90ICoqZGV2KSB7CisgICAgU2Vuc29yQ29udGV4dCAqY3R4ID0gbmV3IFNlbnNvckNvbnRleHQobW9kdWxlKTsKKyAgICBjdHgtPmdldFNlbnNvckxpc3QoJnNlbnNvcl9saXN0KTsKKyAgICAqZGV2ID0gJmN0eC0+ZGV2aWNlLmNvbW1vbjsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBod19tb2R1bGVfbWV0aG9kc190IHNlbnNvcnNfbW9kdWxlX21ldGhvZHMgPSB7CisgICAgLm9wZW4gPSBvcGVuX3NlbnNvcnMKK307CisKK3N0YXRpYyBpbnQgZ2V0X3NlbnNvcnNfbGlzdCgKKyAgICAgICAgc3RydWN0IHNlbnNvcnNfbW9kdWxlX3QgKiwKKyAgICAgICAgc3RydWN0IHNlbnNvcl90IGNvbnN0ICoqbGlzdCkgeworICAgICpsaXN0ID0gc2Vuc29yX2xpc3Q7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc2V0X29wZXJhdGlvbl9tb2RlKHVuc2lnbmVkIGludCBtb2RlKSB7CisgICAgcmV0dXJuIChtb2RlKSA/IC1FSU5WQUwgOiAwOworfQorCitzdHJ1Y3Qgc2Vuc29yc19tb2R1bGVfdCBIQUxfTU9EVUxFX0lORk9fU1lNID0geworICAgIC5jb21tb24gPSB7CisgICAgICAgICAgICAudGFnID0gSEFSRFdBUkVfTU9EVUxFX1RBRywKKyAgICAgICAgICAgIC52ZXJzaW9uX21ham9yID0gMSwKKyAgICAgICAgICAgIC52ZXJzaW9uX21pbm9yID0gMCwKKyAgICAgICAgICAgIC5pZCA9IFNFTlNPUlNfSEFSRFdBUkVfTU9EVUxFX0lELAorICAgICAgICAgICAgLm5hbWUgPSAiR29vZ2xlIER5bmFtaWMgU2Vuc29yIE1hbmFnZXIiLAorICAgICAgICAgICAgLmF1dGhvciA9ICJHb29nbGUiLAorICAgICAgICAgICAgLm1ldGhvZHMgPSAmc2Vuc29yc19tb2R1bGVfbWV0aG9kcywKKyAgICAgICAgICAgIC5kc28gID0gTlVMTCwKKyAgICAgICAgICAgIC5yZXNlcnZlZCA9IHswfSwKKyAgICB9LAorICAgIC5nZXRfc2Vuc29yc19saXN0ID0gZ2V0X3NlbnNvcnNfbGlzdCwKKyAgICAuc2V0X29wZXJhdGlvbl9tb2RlID0gc2V0X29wZXJhdGlvbl9tb2RlLAorfTsKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9zZW5zb3JzLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3Ivc2Vuc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZDg3MDgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3Ivc2Vuc29ycy5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIFNFTlNPUlNfSF8KKyNkZWZpbmUgU0VOU09SU19IXworCisjaW5jbHVkZSA8aGFyZHdhcmUvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxoYXJkd2FyZS9zZW5zb3JzLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BQmFzZS5oPgorI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworICAgIG5hbWVzcGFjZSBTZW5zb3JIYWxFeHQgeworICAgICAgICBjbGFzcyBEeW5hbWljU2Vuc29yTWFuYWdlcjsKKyAgICB9IC8vIG5hbWVzcGFjZSBCYXNlU2Vuc29yT2JqZWN0Cit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKK3VzaW5nIGFuZHJvaWQ6OlNlbnNvckhhbEV4dDo6RHluYW1pY1NlbnNvck1hbmFnZXI7CisKK2NsYXNzIFNlbnNvckNvbnRleHQgeworcHVibGljOgorICAgIHN0cnVjdCBzZW5zb3JzX3BvbGxfZGV2aWNlXzEgZGV2aWNlOworCisgICAgZXhwbGljaXQgU2Vuc29yQ29udGV4dChjb25zdCBzdHJ1Y3QgaHdfbW9kdWxlX3QgKm1vZHVsZSk7CisKKyAgICBzaXplX3QgZ2V0U2Vuc29yTGlzdChzZW5zb3JfdCBjb25zdCAqKmxpc3QpOworCitwcml2YXRlOgorCisgICAgaW50IGNsb3NlKCk7CisgICAgaW50IGFjdGl2YXRlKGludCBoYW5kbGUsIGludCBlbmFibGVkKTsKKyAgICBpbnQgc2V0RGVsYXkoaW50IGhhbmRsZSwgaW50NjRfdCBkZWxheU5zKTsKKyAgICBpbnQgcG9sbChzZW5zb3JzX2V2ZW50X3QgKmRhdGEsIGludCBjb3VudCk7CisKKyAgICBpbnQgYmF0Y2goaW50IGhhbmRsZSwgaW50NjRfdCBzYW1wbGluZ19wZXJpb2RfbnMsCisgICAgICAgICAgICAgIGludDY0X3QgbWF4X3JlcG9ydF9sYXRlbmN5X25zKTsKKworICAgIGludCBmbHVzaChpbnQgaGFuZGxlKTsKKworICAgIC8vIHN0YXRpYyB3cmFwcGVycworICAgIHN0YXRpYyBpbnQgQ2xvc2VXcmFwcGVyKHN0cnVjdCBod19kZXZpY2VfdCAqZGV2KTsKKworICAgIHN0YXRpYyBpbnQgQWN0aXZhdGVXcmFwcGVyKAorICAgICAgICAgICAgc3RydWN0IHNlbnNvcnNfcG9sbF9kZXZpY2VfdCAqZGV2LCBpbnQgaGFuZGxlLCBpbnQgZW5hYmxlZCk7CisKKyAgICBzdGF0aWMgaW50IFNldERlbGF5V3JhcHBlcigKKyAgICAgICAgICAgIHN0cnVjdCBzZW5zb3JzX3BvbGxfZGV2aWNlX3QgKmRldiwgaW50IGhhbmRsZSwgaW50NjRfdCBkZWxheU5zKTsKKworICAgIHN0YXRpYyBpbnQgUG9sbFdyYXBwZXIoCisgICAgICAgICAgICBzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV90ICpkZXYsIHNlbnNvcnNfZXZlbnRfdCAqZGF0YSwgaW50IGNvdW50KTsKKworICAgIHN0YXRpYyBpbnQgQmF0Y2hXcmFwcGVyKAorICAgICAgICAgICAgc3RydWN0IHNlbnNvcnNfcG9sbF9kZXZpY2VfMSAqZGV2LAorICAgICAgICAgICAgaW50IGhhbmRsZSwKKyAgICAgICAgICAgIGludCBmbGFncywKKyAgICAgICAgICAgIGludDY0X3Qgc2FtcGxpbmdfcGVyaW9kX25zLAorICAgICAgICAgICAgaW50NjRfdCBtYXhfcmVwb3J0X2xhdGVuY3lfbnMpOworCisgICAgc3RhdGljIGludCBGbHVzaFdyYXBwZXIoc3RydWN0IHNlbnNvcnNfcG9sbF9kZXZpY2VfMSAqZGV2LCBpbnQgaGFuZGxlKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50MzJfdCBrRHluYW1pY0hhbmRsZUJhc2UgPSAweDEwMDAwOworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50MzJfdCBrRHluYW1pY0hhbmRsZUVuZCA9IDB4MTAwMDAwMDsKKyAgICBzdGF0aWMgY29uc3RleHByIGludDMyX3Qga01heER5bmFtaWNIYW5kbGVDb3VudCA9IGtEeW5hbWljSGFuZGxlRW5kIC0ga0R5bmFtaWNIYW5kbGVCYXNlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPER5bmFtaWNTZW5zb3JNYW5hZ2VyPiBtRHluYW1pY1NlbnNvck1hbmFnZXI7CisKKyAgICBESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhTZW5zb3JDb250ZXh0KTsKK307CisKKyNlbmRpZiAgLy8gU0VOU09SU19IXwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL211bHRpaGFsLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9tdWx0aWhhbC5jcHAKaW5kZXggZjM4ZDkwZC4uMjgxMDExOCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9zZW5zb3JzL211bHRpaGFsLmNwcAorKysgYi9tb2R1bGVzL3NlbnNvcnMvbXVsdGloYWwuY3BwCkBAIC0xNCwzMyArMTQsMzAgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLSNpbmNsdWRlIDxoYXJkd2FyZS9zZW5zb3JzLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGRpcmVudC5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxwb2xsLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPGN1dGlscy9hdG9taWMuaD4KKyNpbmNsdWRlICJTZW5zb3JFdmVudFF1ZXVlLmgiCisjaW5jbHVkZSAibXVsdGloYWwuaCIKIAogI2RlZmluZSBMT0dfTkRFQlVHIDEKICNpbmNsdWRlIDxjdXRpbHMvbG9nLmg+CisjaW5jbHVkZSA8Y3V0aWxzL2F0b21pYy5oPgorI2luY2x1ZGUgPGhhcmR3YXJlL3NlbnNvcnMuaD4KIAogI2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8ZnN0cmVhbT4KICNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgogCi0jaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KICNpbmNsdWRlIDxkbGZjbi5oPgotI2luY2x1ZGUgPFNlbnNvckV2ZW50UXVldWUuaD4KLQorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8cG9sbC5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi1zdGF0aWMgY29uc3QgY2hhciogQ09ORklHX0ZJTEVOQU1FID0gIi9zeXN0ZW0vZXRjL3NlbnNvcnMvaGFscy5jb25mIjsKLXN0YXRpYyBjb25zdCBpbnQgTUFYX0NPTkZfTElORV9MRU5HVEggPSAxMDI0OwogCiBzdGF0aWMgcHRocmVhZF9tdXRleF90IGluaXRfbW9kdWxlc19tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiBzdGF0aWMgcHRocmVhZF9tdXRleF90IGluaXRfc2Vuc29yc19tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CkBAIC0yNTgsOSArMjU1LDkgQEAKICAgICB9CiB9CiAKLS8vIEFuZHJvaWQgTCByZXF1aXJlcyBzZW5zb3IgSEFMcyB0byBiZSBlaXRoZXIgMV8wIG9yIDFfMyBjb21wbGlhbnQKKy8vIEFuZHJvaWQgTiBhbmQgaGlyZSByZXF1aXJlIHNlbnNvciBIQUxzIHRvIGJlIGF0IGxlYXN0IDFfMyBjb21wbGlhbnQKICNkZWZpbmUgSEFMX1ZFUlNJT05fSVNfQ09NUExJQU5UKHZlcnNpb24pICBcCi0gICAgKHZlcnNpb24gPT0gU0VOU09SU19ERVZJQ0VfQVBJX1ZFUlNJT05fMV8wIHx8IHZlcnNpb24gPj0gU0VOU09SU19ERVZJQ0VfQVBJX1ZFUlNJT05fMV8zKQorICAgICh2ZXJzaW9uID49IFNFTlNPUlNfREVWSUNFX0FQSV9WRVJTSU9OXzFfMykKIAogLy8gUmV0dXJucyB0cnVlIGlmIEhBTCBpcyBjb21wbGlhbnQsIGZhbHNlIGlmIEhBTCBpcyBub3QgY29tcGxpYW50IG9yIGlmIGhhbmRsZSBpcyBpbnZhbGlkCiBzdGF0aWMgYm9vbCBoYWxJc0NvbXBsaWFudChzZW5zb3JzX3BvbGxfY29udGV4dF90ICpjdHgsIGludCBoYW5kbGUpIHsKQEAgLTUwNCwxMyArNTAxLDEzIEBACiAgKi8KIHN0YXRpYyB2b2lkIGdldF9zb19wYXRocyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gKnNvX3BhdGhzKSB7CiAgICAgc3RkOjpzdHJpbmcgbGluZTsKLSAgICBzdGQ6Omlmc3RyZWFtIGNvbmZfZmlsZShDT05GSUdfRklMRU5BTUUpOworICAgIHN0ZDo6aWZzdHJlYW0gY29uZl9maWxlKE1VTFRJX0hBTF9DT05GSUdfRklMRV9QQVRIKTsKIAogICAgIGlmKCFjb25mX2ZpbGUpIHsKLSAgICAgICAgQUxPR1coIk5vIG11bHRpaGFsIGNvbmZpZyBmaWxlIGZvdW5kIGF0ICVzIiwgQ09ORklHX0ZJTEVOQU1FKTsKKyAgICAgICAgQUxPR1coIk5vIG11bHRpaGFsIGNvbmZpZyBmaWxlIGZvdW5kIGF0ICVzIiwgTVVMVElfSEFMX0NPTkZJR19GSUxFX1BBVEgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIEFMT0dWKCJNdWx0aWhhbCBjb25maWcgZmlsZSBmb3VuZCBhdCAlcyIsIENPTkZJR19GSUxFTkFNRSk7CisgICAgQUxPR1YoIk11bHRpaGFsIGNvbmZpZyBmaWxlIGZvdW5kIGF0ICVzIiwgTVVMVElfSEFMX0NPTkZJR19GSUxFX1BBVEgpOwogICAgIHdoaWxlIChzdGQ6OmdldGxpbmUoY29uZl9maWxlLCBsaW5lKSkgewogICAgICAgICBBTE9HVigiY29uZmlnIGZpbGUgbGluZTogJyVzJyIsIGxpbmUuY19zdHIoKSk7CiAgICAgICAgIHNvX3BhdGhzLT5wdXNoX2JhY2sobGluZSk7CkBAIC02NjAsNiArNjU3LDEwIEBACiAgICAgLmdldF9zZW5zb3JzX2xpc3QgPSBtb2R1bGVfX2dldF9zZW5zb3JzX2xpc3QKIH07CiAKK3N0cnVjdCBzZW5zb3JzX21vZHVsZV90ICpnZXRfbXVsdGlfaGFsX21vZHVsZV9pbmZvKCkgeworICAgIHJldHVybiAoJkhBTF9NT0RVTEVfSU5GT19TWU0pOworfQorCiBzdGF0aWMgaW50IG9wZW5fc2Vuc29ycyhjb25zdCBzdHJ1Y3QgaHdfbW9kdWxlX3QqIGh3X21vZHVsZSwgY29uc3QgY2hhciogbmFtZSwKICAgICAgICAgc3RydWN0IGh3X2RldmljZV90KiogaHdfZGV2aWNlX291dCkgewogICAgIEFMT0dWKCJvcGVuX3NlbnNvcnMgYmVnaW4uLi4iKTsKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9tdWx0aWhhbC5oIGIvbW9kdWxlcy9zZW5zb3JzL211bHRpaGFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwYzdjYwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9tdWx0aWhhbC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBIQVJEV0FSRV9MSUJIQVJEV0FSRV9NT0RVTEVTX1NFTlNPUlNfTVVMVElIQUxfSF8KKyNkZWZpbmUgSEFSRFdBUkVfTElCSEFSRFdBUkVfTU9EVUxFU19TRU5TT1JTX01VTFRJSEFMX0hfCisKKyNpbmNsdWRlIDxoYXJkd2FyZS9zZW5zb3JzLmg+CisjaW5jbHVkZSA8aGFyZHdhcmUvaGFyZHdhcmUuaD4KKworc3RhdGljIGNvbnN0IGNoYXIqIE1VTFRJX0hBTF9DT05GSUdfRklMRV9QQVRIID0gIi9zeXN0ZW0vZXRjL3NlbnNvcnMvaGFscy5jb25mIjsKKworc3RydWN0IHNlbnNvcnNfbW9kdWxlX3QgKmdldF9tdWx0aV9oYWxfbW9kdWxlX2luZm8odm9pZCk7CisKKyNlbmRpZiAvLyBIQVJEV0FSRV9MSUJIQVJEV0FSRV9NT0RVTEVTX1NFTlNPUlNfTVVMVElIQUxfSF8KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy90ZXN0cy9TZW5zb3JFdmVudFF1ZXVlX3Rlc3QuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL3Rlc3RzL1NlbnNvckV2ZW50UXVldWVfdGVzdC5jcHAKaW5kZXggMzIxOGJiOS4uZDNkNzVlZSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9zZW5zb3JzL3Rlc3RzL1NlbnNvckV2ZW50UXVldWVfdGVzdC5jcHAKKysrIGIvbW9kdWxlcy9zZW5zb3JzL3Rlc3RzL1NlbnNvckV2ZW50UXVldWVfdGVzdC5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBjaGVja0ludChjaGFyKiBtc2csIGludCBleHBlY3RlZCwgaW50IGFjdHVhbCkgeworYm9vbCBjaGVja0ludChjb25zdCBjaGFyKiBtc2csIGludCBleHBlY3RlZCwgaW50IGFjdHVhbCkgewogICAgIGlmIChhY3R1YWwgIT0gZXhwZWN0ZWQpIHsKICAgICAgICAgcHJpbnRmKCIlczsgZXhwZWN0ZWQgJWQ7IGFjdHVhbCB3YXMgJWRcbiIsIG1zZywgZXhwZWN0ZWQsIGFjdHVhbCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE4Nyw3ICsxODcsNyBAQAogfQogCiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgeworaW50IG1haW4oaW50IGFyZ2MgX19hdHRyaWJ1dGUoKHVudXNlZCkpLCBjaGFyICoqYXJndiBfX2F0dHJpYnV0ZSgodW51c2VkKSkpIHsKICAgICBpZiAodGVzdFNpbXBsZVdyaXRlU2l6ZUNvdW50cygpICYmCiAgICAgICAgICAgICB0ZXN0V3JhcHBpbmdXcml0ZVNpemVDb3VudHMoKSAmJgogICAgICAgICAgICAgdGVzdEZ1bGxRdWV1ZUlvKCkpIHsKZGlmZiAtLWdpdCBhL21vZHVsZXMvc291bmR0cmlnZ2VyL0FuZHJvaWQubWsgYi9tb2R1bGVzL3NvdW5kdHJpZ2dlci9BbmRyb2lkLm1rCmluZGV4IGJiNTgwNTMuLjgyNTBmOWIgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvc291bmR0cmlnZ2VyL0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy9zb3VuZHRyaWdnZXIvQW5kcm9pZC5tawpAQCAtMTksNiArMTksNyBAQAogCiBMT0NBTF9NT0RVTEUgOj0gc291bmRfdHJpZ2dlci5zdHViLmRlZmF1bHQKIExPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGh3CitMT0NBTF9QUk9QUklFVEFSWV9NT0RVTEUgOj0gdHJ1ZQogTE9DQUxfU1JDX0ZJTEVTIDo9IHNvdW5kX3RyaWdnZXJfaHcuYwogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJsb2cgbGliY3V0aWxzCiBMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbApkaWZmIC0tZ2l0IGEvbW9kdWxlcy90aGVybWFsL0FuZHJvaWQubWsgYi9tb2R1bGVzL3RoZXJtYWwvQW5kcm9pZC5tawppbmRleCA4MGFkNzhhLi5mZjUxMTQ1IDEwMDY0NAotLS0gYS9tb2R1bGVzL3RoZXJtYWwvQW5kcm9pZC5taworKysgYi9tb2R1bGVzL3RoZXJtYWwvQW5kcm9pZC5tawpAQCAtMTgsNiArMTgsNyBAQAogCiBMT0NBTF9NT0RVTEUgOj0gdGhlcm1hbC5kZWZhdWx0CiBMT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBodworTE9DQUxfUFJPUFJJRVRBUllfTU9EVUxFIDo9IHRydWUKIExPQ0FMX1NSQ19GSUxFUyA6PSB0aGVybWFsLmMKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGlibG9nIGxpYmN1dGlscwogTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKZGlmZiAtLWdpdCBhL21vZHVsZXMvdHZfaW5wdXQvQW5kcm9pZC5icCBiL21vZHVsZXMvdHZfaW5wdXQvQW5kcm9pZC5icAppbmRleCBiZWFjMTMyLi41MDkxOThkIDEwMDY0NAotLS0gYS9tb2R1bGVzL3R2X2lucHV0L0FuZHJvaWQuYnAKKysrIGIvbW9kdWxlcy90dl9pbnB1dC9BbmRyb2lkLmJwCkBAIC0xNSw2ICsxNSw3IEBACiBjY19saWJyYXJ5X3NoYXJlZCB7CiAgICAgbmFtZTogInR2X2lucHV0LmRlZmF1bHQiLAogICAgIHJlbGF0aXZlX2luc3RhbGxfcGF0aDogImh3IiwKKyAgICBwcm9wcmlldGFyeTogdHJ1ZSwKICAgICBzaGFyZWRfbGliczogWwogICAgICAgICAibGliY3V0aWxzIiwKICAgICAgICAgImxpYmxvZyIsCmRpZmYgLS1naXQgYS9tb2R1bGVzL3R2X2lucHV0L3R2X2lucHV0LmNwcCBiL21vZHVsZXMvdHZfaW5wdXQvdHZfaW5wdXQuY3BwCmluZGV4IGY5M2NiMjAuLjRjNDI1MTggMTAwNjQ0Ci0tLSBhL21vZHVsZXMvdHZfaW5wdXQvdHZfaW5wdXQuY3BwCisrKyBiL21vZHVsZXMvdHZfaW5wdXQvdHZfaW5wdXQuY3BwCkBAIC0zNywxOCArMzcsMTggQEAKICAgICAgICAgY29uc3QgY2hhciogbmFtZSwgc3RydWN0IGh3X2RldmljZV90KiogZGV2aWNlKTsKIAogc3RhdGljIHN0cnVjdCBod19tb2R1bGVfbWV0aG9kc190IHR2X2lucHV0X21vZHVsZV9tZXRob2RzID0gewotICAgIG9wZW46IHR2X2lucHV0X2RldmljZV9vcGVuCisgICAgLm9wZW4gPSB0dl9pbnB1dF9kZXZpY2Vfb3BlbgogfTsKIAogdHZfaW5wdXRfbW9kdWxlX3QgSEFMX01PRFVMRV9JTkZPX1NZTSA9IHsKLSAgICBjb21tb246IHsKLSAgICAgICAgdGFnOiBIQVJEV0FSRV9NT0RVTEVfVEFHLAotICAgICAgICB2ZXJzaW9uX21ham9yOiAwLAotICAgICAgICB2ZXJzaW9uX21pbm9yOiAxLAotICAgICAgICBpZDogVFZfSU5QVVRfSEFSRFdBUkVfTU9EVUxFX0lELAotICAgICAgICBuYW1lOiAiU2FtcGxlIFRWIGlucHV0IG1vZHVsZSIsCi0gICAgICAgIGF1dGhvcjogIlRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QiLAotICAgICAgICBtZXRob2RzOiAmdHZfaW5wdXRfbW9kdWxlX21ldGhvZHMsCisgICAgLmNvbW1vbiA9IHsKKyAgICAgICAgLnRhZyA9IEhBUkRXQVJFX01PRFVMRV9UQUcsCisgICAgICAgIC52ZXJzaW9uX21ham9yID0gMCwKKyAgICAgICAgLnZlcnNpb25fbWlub3IgPSAxLAorICAgICAgICAuaWQgPSBUVl9JTlBVVF9IQVJEV0FSRV9NT0RVTEVfSUQsCisgICAgICAgIC5uYW1lID0gIlNhbXBsZSBUViBpbnB1dCBtb2R1bGUiLAorICAgICAgICAuYXV0aG9yID0gIlRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QiLAorICAgICAgICAubWV0aG9kcyA9ICZ0dl9pbnB1dF9tb2R1bGVfbWV0aG9kcywKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9tb2R1bGVzL3VzYmF1ZGlvL0FuZHJvaWQubWsgYi9tb2R1bGVzL3VzYmF1ZGlvL0FuZHJvaWQubWsKaW5kZXggOWRmMWU3OS4uYjM2YmY5ZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy91c2JhdWRpby9BbmRyb2lkLm1rCisrKyBiL21vZHVsZXMvdXNiYXVkaW8vQW5kcm9pZC5tawpAQCAtMTgsNiArMTgsNyBAQAogCiBMT0NBTF9NT0RVTEUgOj0gYXVkaW8udXNiLmRlZmF1bHQKIExPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGh3CitMT0NBTF9QUk9QUklFVEFSWV9NT0RVTEUgOj0gdHJ1ZQogTE9DQUxfU1JDX0ZJTEVTIDo9IFwKIAlhdWRpb19oYWwuYwogTE9DQUxfQ19JTkNMVURFUyArPSBcCmRpZmYgLS1naXQgYS9tb2R1bGVzL3VzYmNhbWVyYS9DYW1lcmEuY3BwIGIvbW9kdWxlcy91c2JjYW1lcmEvQ2FtZXJhLmNwcAppbmRleCA1MDBhOTgyLi4wMzI0ZGE4IDEwMDY0NAotLS0gYS9tb2R1bGVzL3VzYmNhbWVyYS9DYW1lcmEuY3BwCisrKyBiL21vZHVsZXMvdXNiY2FtZXJhL0NhbWVyYS5jcHAKQEAgLTQ5MSw5ICs0OTEsOSBAQAogICAgIC8vIFRPRE86IGR1bXAgYWxsIHNldHRpbmdzCiAgICAgZHByaW50ZihmZCwgIk1vc3QgUmVjZW50IFNldHRpbmdzOiAoJXApXG4iLCBtU2V0dGluZ3MpOwogCi0gICAgZHByaW50ZihmZCwgIk51bWJlciBvZiBzdHJlYW1zOiAlZFxuIiwgbVN0cmVhbXMuc2l6ZSgpKTsKKyAgICBkcHJpbnRmKGZkLCAiTnVtYmVyIG9mIHN0cmVhbXM6ICV6dVxuIiwgbVN0cmVhbXMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1TdHJlYW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGRwcmludGYoZmQsICJTdHJlYW0gJWQvJWQ6XG4iLCBpLCBtU3RyZWFtcy5zaXplKCkpOworICAgICAgICBkcHJpbnRmKGZkLCAiU3RyZWFtICV6dS8lenU6XG4iLCBpLCBtU3RyZWFtcy5zaXplKCkpOwogICAgICAgICBtU3RyZWFtc1tpXS0+ZHVtcChmZCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy91c2JjYW1lcmEvQ2FtZXJhSEFMLmNwcCBiL21vZHVsZXMvdXNiY2FtZXJhL0NhbWVyYUhBTC5jcHAKaW5kZXggZWVjMTA0NC4uMWE1ZWIzYSAxMDA2NDQKLS0tIGEvbW9kdWxlcy91c2JjYW1lcmEvQ2FtZXJhSEFMLmNwcAorKysgYi9tb2R1bGVzL3VzYmNhbWVyYS9DYW1lcmFIQUwuY3BwCkBAIC02OSw3ICs2OSw3IEBACiAKIGludCBDYW1lcmFIQUw6OmdldE51bWJlck9mQ2FtZXJhcygpIHsKICAgICBhbmRyb2lkOjpNdXRleDo6QXV0b2xvY2sgYWwobU1vZHVsZUxvY2spOwotICAgIEFMT0dWKCIlczogJWQiLCBfX2Z1bmNfXywgbUNhbWVyYXMuc2l6ZSgpKTsKKyAgICBBTE9HVigiJXM6ICV6dSIsIF9fZnVuY19fLCBtQ2FtZXJhcy5zaXplKCkpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1DYW1lcmFzLnNpemUoKSk7CiB9CiAKQEAgLTEzMCwyOSArMTMwLDI5IEBACiB9CiAKIHN0YXRpYyBod19tb2R1bGVfbWV0aG9kc190IGdDYW1lcmFNb2R1bGVNZXRob2RzID0gewotICAgIG9wZW4gOiBvcGVuX2RldgorICAgIC5vcGVuID0gb3Blbl9kZXYKIH07CiAKIGNhbWVyYV9tb2R1bGVfdCBIQUxfTU9EVUxFX0lORk9fU1lNIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSA9IHsKLSAgICBjb21tb24gOiB7Ci0gICAgICAgIHRhZyAgICAgICAgICAgICAgICA6IEhBUkRXQVJFX01PRFVMRV9UQUcsCi0gICAgICAgIG1vZHVsZV9hcGlfdmVyc2lvbiA6IENBTUVSQV9NT0RVTEVfQVBJX1ZFUlNJT05fMl80LAotICAgICAgICBoYWxfYXBpX3ZlcnNpb24gICAgOiBIQVJEV0FSRV9IQUxfQVBJX1ZFUlNJT04sCi0gICAgICAgIGlkICAgICAgICAgICAgICAgICA6IENBTUVSQV9IQVJEV0FSRV9NT0RVTEVfSUQsCi0gICAgICAgIG5hbWUgICAgICAgICAgICAgICA6ICJEZWZhdWx0IFVTQiBDYW1lcmEgSEFMIiwKLSAgICAgICAgYXV0aG9yICAgICAgICAgICAgIDogIlRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QiLAotICAgICAgICBtZXRob2RzICAgICAgICAgICAgOiAmZ0NhbWVyYU1vZHVsZU1ldGhvZHMsCi0gICAgICAgIGRzbyAgICAgICAgICAgICAgICA6IE5VTEwsCi0gICAgICAgIHJlc2VydmVkICAgICAgICAgICA6IHswfSwKKyAgICAuY29tbW9uID0geworICAgICAgICAudGFnICAgICAgICAgICAgICAgID0gSEFSRFdBUkVfTU9EVUxFX1RBRywKKyAgICAgICAgLm1vZHVsZV9hcGlfdmVyc2lvbiA9IENBTUVSQV9NT0RVTEVfQVBJX1ZFUlNJT05fMl80LAorICAgICAgICAuaGFsX2FwaV92ZXJzaW9uICAgID0gSEFSRFdBUkVfSEFMX0FQSV9WRVJTSU9OLAorICAgICAgICAuaWQgICAgICAgICAgICAgICAgID0gQ0FNRVJBX0hBUkRXQVJFX01PRFVMRV9JRCwKKyAgICAgICAgLm5hbWUgICAgICAgICAgICAgICA9ICJEZWZhdWx0IFVTQiBDYW1lcmEgSEFMIiwKKyAgICAgICAgLmF1dGhvciAgICAgICAgICAgICA9ICJUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IiwKKyAgICAgICAgLm1ldGhvZHMgICAgICAgICAgICA9ICZnQ2FtZXJhTW9kdWxlTWV0aG9kcywKKyAgICAgICAgLmRzbyAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgICAgIC5yZXNlcnZlZCAgICAgICAgICAgPSB7MH0sCiAgICAgfSwKLSAgICBnZXRfbnVtYmVyX29mX2NhbWVyYXMgOiBnZXRfbnVtYmVyX29mX2NhbWVyYXMsCi0gICAgZ2V0X2NhbWVyYV9pbmZvICAgICAgIDogZ2V0X2NhbWVyYV9pbmZvLAotICAgIHNldF9jYWxsYmFja3MgICAgICAgICA6IHNldF9jYWxsYmFja3MsCi0gICAgZ2V0X3ZlbmRvcl90YWdfb3BzICAgIDogTlVMTCwKLSAgICBvcGVuX2xlZ2FjeSAgICAgICAgICAgOiBOVUxMLAotICAgIHNldF90b3JjaF9tb2RlICAgICAgICA6IE5VTEwsCi0gICAgaW5pdCAgICAgICAgICAgICAgICAgIDogTlVMTCwKLSAgICByZXNlcnZlZCAgICAgICAgICAgICAgOiB7MH0sCisgICAgLmdldF9udW1iZXJfb2ZfY2FtZXJhcyA9IGdldF9udW1iZXJfb2ZfY2FtZXJhcywKKyAgICAuZ2V0X2NhbWVyYV9pbmZvICAgICAgID0gZ2V0X2NhbWVyYV9pbmZvLAorICAgIC5zZXRfY2FsbGJhY2tzICAgICAgICAgPSBzZXRfY2FsbGJhY2tzLAorICAgIC5nZXRfdmVuZG9yX3RhZ19vcHMgICAgPSBOVUxMLAorICAgIC5vcGVuX2xlZ2FjeSAgICAgICAgICAgPSBOVUxMLAorICAgIC5zZXRfdG9yY2hfbW9kZSAgICAgICAgPSBOVUxMLAorICAgIC5pbml0ICAgICAgICAgICAgICAgICAgPSBOVUxMLAorICAgIC5yZXNlcnZlZCAgICAgICAgICAgICAgPSB7MH0sCiB9OwogfSAvLyBleHRlcm4gIkMiCiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvdXNiY2FtZXJhL0hvdHBsdWdUaHJlYWQuY3BwIGIvbW9kdWxlcy91c2JjYW1lcmEvSG90cGx1Z1RocmVhZC5jcHAKaW5kZXggODBmMThjOC4uNjE4OGVkZSAxMDA2NDQKLS0tIGEvbW9kdWxlcy91c2JjYW1lcmEvSG90cGx1Z1RocmVhZC5jcHAKKysrIGIvbW9kdWxlcy91c2JjYW1lcmEvSG90cGx1Z1RocmVhZC5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKIH0KIAogYm9vbCBIb3RwbHVnVGhyZWFkOjp0aHJlYWRMb29wKCkgeworICAgICh2b2lkKW1Nb2R1bGU7ICAvLyBzaWxlbmNlIHdhcm5pbmcgYWJvdXQgdW51c2VkIG1lbWJlci4KIAogICAgIC8qKgogICAgICAqIENoZWNrIGNhbWVyYSBjb25uZWN0aW9uIHN0YXR1cyBjaGFuZ2UsIGlmIGNvbm5lY3RlZCwgZG8gYmVsb3c6CmRpZmYgLS1naXQgYS9tb2R1bGVzL3VzYmNhbWVyYS9TdHJlYW0uY3BwIGIvbW9kdWxlcy91c2JjYW1lcmEvU3RyZWFtLmNwcAppbmRleCA0NWU3ZmMyLi5kNDE4Nzk4IDEwMDY0NAotLS0gYS9tb2R1bGVzL3VzYmNhbWVyYS9TdHJlYW0uY3BwCisrKyBiL21vZHVsZXMvdXNiY2FtZXJhL1N0cmVhbS5jcHAKQEAgLTE3MiwxMCArMTcyLDkgQEAKICAgICAvLyBUb0RvOiBwcmV0dHlwcmludCB1c2FnZSBtYXNrIGZsYWdzCiAgICAgZHByaW50ZihmZCwgIkdyYWxsb2MgVXNhZ2UgTWFzazogJSMiIFBSSXgzMiAiXG4iLCBtU3RyZWFtLT51c2FnZSk7CiAgICAgZHByaW50ZihmZCwgIk1heCBCdWZmZXIgQ291bnQ6ICUiIFBSSXUzMiAiXG4iLCBtU3RyZWFtLT5tYXhfYnVmZmVycyk7Ci0gICAgZHByaW50ZihmZCwgIk51bWJlciBvZiBCdWZmZXJzIGluIHVzZSBieSBIQUw6ICUiIFBSSXUzMiAiXG4iLCBtQnVmZmVycy5zaXplKCkpOworICAgIGRwcmludGYoZmQsICJOdW1iZXIgb2YgQnVmZmVycyBpbiB1c2UgYnkgSEFMOiAlenVcbiIsIG1CdWZmZXJzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtQnVmZmVycy5zaXplKCk7IGkrKykgewotICAgICAgICBkcHJpbnRmKGZkLCAiQnVmZmVyICUiIFBSSXUzMiAiLyUiIFBSSXUzMiAiOiAlcFxuIiwgaSwgbUJ1ZmZlcnMuc2l6ZSgpLAotICAgICAgICAgICAgICAgIG1CdWZmZXJzW2ldKTsKKyAgICAgICAgZHByaW50ZihmZCwgIkJ1ZmZlciAlenUvJXp1OiAlcFxuIiwgaSwgbUJ1ZmZlcnMuc2l6ZSgpLCBtQnVmZmVyc1tpXSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9tb2R1bGVzL3VzYmNhbWVyYS9Vc2JDYW1lcmEuY3BwIGIvbW9kdWxlcy91c2JjYW1lcmEvVXNiQ2FtZXJhLmNwcAppbmRleCBlYzk0OWFlLi42NWNiZWM5IDEwMDY0NAotLS0gYS9tb2R1bGVzL3VzYmNhbWVyYS9Vc2JDYW1lcmEuY3BwCisrKyBiL21vZHVsZXMvdXNiY2FtZXJhL1VzYkNhbWVyYS5jcHAKQEAgLTMxNiw3ICszMTYsNyBAQAogICAgIHJldHVybiBzZXRUZW1wbGF0ZShDQU1FUkEzX1RFTVBMQVRFX01BTlVBTCwgbS5nZXQoKSk7CiB9CiAKLWJvb2wgVXNiQ2FtZXJhOjppc1ZhbGlkQ2FwdHVyZVNldHRpbmdzKGNvbnN0IGNhbWVyYV9tZXRhZGF0YV90KiBzZXR0aW5ncykgeworYm9vbCBVc2JDYW1lcmE6OmlzVmFsaWRDYXB0dXJlU2V0dGluZ3MoY29uc3QgY2FtZXJhX21ldGFkYXRhX3QqIC8qc2V0dGluZ3MqLykgewogICAgIC8vIFRPRE86IHJlamVjdCBzZXR0aW5ncyB0aGF0IGNhbm5vdCBiZSBjYXB0dXJlZAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy92ZWhpY2xlL0FuZHJvaWQubWsgYi9tb2R1bGVzL3ZlaGljbGUvQW5kcm9pZC5tawppbmRleCBhNjY2YmM2Li45ZmQ0OWRhIDEwMDY0NAotLS0gYS9tb2R1bGVzL3ZlaGljbGUvQW5kcm9pZC5taworKysgYi9tb2R1bGVzL3ZlaGljbGUvQW5kcm9pZC5tawpAQCAtMTksNiArMTksNyBAQAogTE9DQUxfTU9EVUxFIDo9IHZlaGljbGUuZGVmYXVsdAogCiBMT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBodworTE9DQUxfUFJPUFJJRVRBUllfTU9EVUxFIDo9IHRydWUKIExPQ0FMX0NfSU5DTFVERVMgOj0gaGFyZHdhcmUvbGliaGFyZHdhcmUKIExPQ0FMX1NSQ19GSUxFUyA6PSB2ZWhpY2xlLmMgdGltZVV0aWwuY3BwCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmxvZyBsaWJjdXRpbHMgbGlidXRpbHMKZGlmZiAtLWdpdCBhL21vZHVsZXMvdmVoaWNsZS92ZWhpY2xlLmMgYi9tb2R1bGVzL3ZlaGljbGUvdmVoaWNsZS5jCmluZGV4IDc4NTQ1YWYuLjY2ZTI5YzAgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvdmVoaWNsZS92ZWhpY2xlLmMKKysrIGIvbW9kdWxlcy92ZWhpY2xlL3ZlaGljbGUuYwpAQCAtMjc5LDEwICsyNzksMTAgQEAKICAgICAgICAgICAgIEFMT0dEKCJWYWx1ZSB0eXBlOiBGTE9BVFxuVmFsdWU6ICVmXG4iLCBkYXRhLT52YWx1ZS5mbG9hdF92YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfSU5UMzI6Ci0gICAgICAgICAgICBBTE9HRCgiVmFsdWUgdHlwZTogSU5UMzJcblZhbHVlOiAlZFxuIiwgZGF0YS0+dmFsdWUuaW50MzJfdmFsdWUpOworICAgICAgICAgICAgQUxPR0QoIlZhbHVlIHR5cGU6IElOVDMyXG5WYWx1ZTogJSIgUFJJZDMyICJcbiIsIGRhdGEtPnZhbHVlLmludDMyX3ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZFSElDTEVfVkFMVUVfVFlQRV9JTlQ2NDoKLSAgICAgICAgICAgIEFMT0dEKCJWYWx1ZSB0eXBlOiBJTlQ2NFxuVmFsdWU6ICVsbGRcbiIsIGRhdGEtPnZhbHVlLmludDY0X3ZhbHVlKTsKKyAgICAgICAgICAgIEFMT0dEKCJWYWx1ZSB0eXBlOiBJTlQ2NFxuVmFsdWU6ICUiIFBSSWQ2NCAiXG4iLCBkYXRhLT52YWx1ZS5pbnQ2NF92YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfQk9PTEVBTjoKICAgICAgICAgICAgIEFMT0dEKCJWYWx1ZSB0eXBlOiBCT09MRUFOXG5WYWx1ZTogJWRcbiIsIGRhdGEtPnZhbHVlLmJvb2xlYW5fdmFsdWUpOwpAQCAtMzMxLDIyICszMzEsNiBAQAogICAgICAgICBldmVudC5wcm9wID0gc3ViLT5wcm9wOwogICAgICAgICBldmVudC50aW1lc3RhbXAgPSBlbGFwc2VkUmVhbHRpbWVOYW5vKCk7CiAgICAgICAgIHN3aXRjaCAoc3ViLT5wcm9wKSB7Ci0gICAgICAgICAgICBjYXNlIFZFSElDTEVfUFJPUEVSVFlfRFJJVklOR19TVEFUVVM6Ci0gICAgICAgICAgICAgICAgZXZlbnQudmFsdWVfdHlwZSA9IFZFSElDTEVfVkFMVUVfVFlQRV9JTlQzMjsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKChldmVudC50aW1lc3RhbXAgJiAweDMwMDAwMDAwKT4+MjgpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudmFsdWUuZHJpdmluZ19zdGF0dXMgPSBWRUhJQ0xFX0RSSVZJTkdfU1RBVFVTX1VOUkVTVFJJQ1RFRDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBldmVudC52YWx1ZS5kcml2aW5nX3N0YXR1cyA9IFZFSElDTEVfRFJJVklOR19TVEFUVVNfTk9fVklERU87Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQudmFsdWUuZHJpdmluZ19zdGF0dXMgPSBWRUhJQ0xFX0RSSVZJTkdfU1RBVFVTX05PX0tFWUJPQVJEX0lOUFVUOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBldmVudC52YWx1ZS5kcml2aW5nX3N0YXR1cyA9IFZFSElDTEVfRFJJVklOR19TVEFUVVNfTk9fQ09ORklHOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVkVISUNMRV9QUk9QRVJUWV9HRUFSX1NFTEVDVElPTjoKICAgICAgICAgICAgICAgICBldmVudC52YWx1ZV90eXBlID0gVkVISUNMRV9WQUxVRV9UWVBFX0lOVDMyOwogICAgICAgICAgICAgICAgIHN3aXRjaCAoKGV2ZW50LnRpbWVzdGFtcCAmIDB4MzAwMDAwMDApPj4yOCkgewpkaWZmIC0tZ2l0IGEvbW9kdWxlcy92aWJyYXRvci9BbmRyb2lkLmJwIGIvbW9kdWxlcy92aWJyYXRvci9BbmRyb2lkLmJwCmluZGV4IGY5YWZkNDUuLjNjNGFlYmYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvdmlicmF0b3IvQW5kcm9pZC5icAorKysgYi9tb2R1bGVzL3ZpYnJhdG9yL0FuZHJvaWQuYnAKQEAgLTE4LDYgKzE4LDcgQEAKICAgICAvLyBIQUwgbW9kdWxlIGltcGxlbWVudGF0aW9uIHN0b3JlZCBpbgogICAgIC8vIGh3LzxWSUJSQVRPUl9IQVJEV0FSRV9NT0RVTEVfSUQ+LmRlZmF1bHQuc28KICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgaW5jbHVkZV9kaXJzOiBbImhhcmR3YXJlL2xpYmhhcmR3YXJlIl0sCiAgICAgc3JjczogWyJ2aWJyYXRvci5jIl0sCiAgICAgc2hhcmVkX2xpYnM6IFsibGlibG9nIl0sCmRpZmYgLS1naXQgYS9tb2R1bGVzL3ZyL0FuZHJvaWQubWsgYi9tb2R1bGVzL3ZyL0FuZHJvaWQubWsKaW5kZXggNDNjOGU5Mi4uZTA0YzBkYSAxMDA2NDQKLS0tIGEvbW9kdWxlcy92ci9BbmRyb2lkLm1rCisrKyBiL21vZHVsZXMvdnIvQW5kcm9pZC5tawpAQCAtMTgsNiArMTgsNyBAQAogCiBMT0NBTF9NT0RVTEUgOj0gdnIuZGVmYXVsdAogTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCiBMT0NBTF9TUkNfRklMRVMgOj0gdnIuYwogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJjdXRpbHMKIExPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCmRpZmYgLS1naXQgYS90ZXN0cy9jYW1lcmEyL0FuZHJvaWQubWsgYi90ZXN0cy9jYW1lcmEyL0FuZHJvaWQubWsKaW5kZXggZTQ1ZjQ2Ny4uZTRmOTY0MCAxMDA2NDQKLS0tIGEvdGVzdHMvY2FtZXJhMi9BbmRyb2lkLm1rCisrKyBiL3Rlc3RzL2NhbWVyYTIvQW5kcm9pZC5tawpAQCAtMjUsMTAgKzI1LDEyIEBACiAJbGliZ3VpIFwKIAlsaWJzeW5jIFwKIAlsaWJ1aSBcCi0JbGliZGwKKwlsaWJkbCBcCisJYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuZGV2aWNlQDMuMgogCiBMT0NBTF9DX0lOQ0xVREVTICs9IFwKIAlzeXN0ZW0vbWVkaWEvY2FtZXJhL2luY2x1ZGUgXAorCXN5c3RlbS9tZWRpYS9wcml2YXRlL2NhbWVyYS9pbmNsdWRlIFwKIAlmcmFtZXdvcmtzL2F2L2luY2x1ZGUvIFwKIAlmcmFtZXdvcmtzL2F2L3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlIFwKIAlmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlIFwKZGlmZiAtLWdpdCBhL3Rlc3RzL2NhbWVyYTIvQ2FtZXJhTW9kdWxlRml4dHVyZS5oIGIvdGVzdHMvY2FtZXJhMi9DYW1lcmFNb2R1bGVGaXh0dXJlLmgKaW5kZXggMjU1MTNhZi4uYjBkNDllMiAxMDA2NDQKLS0tIGEvdGVzdHMvY2FtZXJhMi9DYW1lcmFNb2R1bGVGaXh0dXJlLmgKKysrIGIvdGVzdHMvY2FtZXJhMi9DYW1lcmFNb2R1bGVGaXh0dXJlLmgKQEAgLTc0LDcgKzc0LDYgQEAKICAgICB2b2lkIFRlYXJEb3duKCkgewogICAgICAgICBURVNUX0VYVEVOU0lPTl9GT1JLSU5HX1RFQVJfRE9XTjsKIAotICAgICAgICBkZWxldGUgbU1vZHVsZTsKICAgICAgICAgVGVhckRvd25NaXhpbigpOwogCiAgICAgICAgIC8qIGltcG9ydGFudDogZGV2aWNlIG11c3QgYmUgZGVzdHJ1Y3RlZCBiZWZvcmUgY2xvc2luZyBtb2R1bGUsCkBAIC04NSw2ICs4NCw3IEBACiAgICAgICAgICAgICBBU1NFUlRfRVEoMCwgSFdNb2R1bGVIZWxwZXJzOjpjbG9zZU1vZHVsZShtTW9kdWxlLT5nZXREc28oKSkpCiAgICAgICAgICAgICAgICAgPDwgIkZhaWxlZCB0byBjbG9zZSBjYW1lcmEgSEFMIG1vZHVsZSI7CiAgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIG1Nb2R1bGU7CiAgICAgfQogCiAgICAgdm9pZCBDcmVhdGVDYW1lcmEoaW50IGNhbWVyYUlELCAvKm91dCovIHNwPENhbWVyYURldmljZUJhc2U+ICpkZXZpY2UpIHsKQEAgLTk4LDcgKzk4LDcgQEAKICAgICAgICAgICAgIGNhc2UgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzA6CiAgICAgICAgICAgICBjYXNlIENBTUVSQV9ERVZJQ0VfQVBJX1ZFUlNJT05fM18xOgogICAgICAgICAgICAgY2FzZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfMjoKLSAgICAgICAgICAgICAgICAqZGV2aWNlID0gbmV3IENhbWVyYTNEZXZpY2UoY2FtZXJhSUQpOworICAgICAgICAgICAgICAgICpkZXZpY2UgPSBuZXcgQ2FtZXJhM0RldmljZShTdHJpbmc4Ojpmb3JtYXQoIiVkIiwgY2FtZXJhSUQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgZGV2aWNlLT5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvaGFyZHdhcmUvQW5kcm9pZC5icCBiL3Rlc3RzL2hhcmR3YXJlL0FuZHJvaWQuYnAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2OGUyOGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvaGFyZHdhcmUvQW5kcm9pZC5icAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLWNjX2xpYnJhcnlfc3RhdGljIHsKLSAgICBuYW1lOiAic3RhdGljLWhhbC1jaGVjayIsCi0gICAgc3JjczogWwotICAgICAgICAic3RydWN0LXNpemUuY3BwIiwKLSAgICAgICAgInN0cnVjdC1vZmZzZXQuY3BwIiwKLSAgICAgICAgInN0cnVjdC1sYXN0LmNwcCIsCi0gICAgXSwKLSAgICBzaGFyZWRfbGliczogWyJsaWJoYXJkd2FyZSJdLAotICAgIGNmbGFnczogWwotICAgICAgICAiLXN0ZD1nbnUrKzExIiwKLSAgICAgICAgIi1PMCIsCi0gICAgXSwKLQotICAgIGluY2x1ZGVfZGlyczogWyJzeXN0ZW0vbWVkaWEvY2FtZXJhL2luY2x1ZGUiXSwKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL2hhcmR3YXJlL0FuZHJvaWQubWsgYi90ZXN0cy9oYXJkd2FyZS9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNTQwYzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9oYXJkd2FyZS9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMTIgQEAKK0xPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX01PRFVMRSA6PSBzdGF0aWMtaGFsLWNoZWNrCitMT0NBTF9TUkNfRklMRVMgOj0gc3RydWN0LXNpemUuY3BwIHN0cnVjdC1vZmZzZXQuY3BwIHN0cnVjdC1sYXN0LmNwcAorTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJoYXJkd2FyZQorTE9DQUxfQ0ZMQUdTIDo9IC1zdGQ9Z251KysxMSAtTzAKKworTE9DQUxfQ19JTkNMVURFUyArPSBcCisgICAgc3lzdGVtL21lZGlhL2NhbWVyYS9pbmNsdWRlCisKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKZGlmZiAtLWdpdCBhL3Rlc3RzL2hhcmR3YXJlL3N0cnVjdC1vZmZzZXQuY3BwIGIvdGVzdHMvaGFyZHdhcmUvc3RydWN0LW9mZnNldC5jcHAKaW5kZXggMTBjMDg5NS4uN2Y3ZjJlMCAxMDA2NDQKLS0tIGEvdGVzdHMvaGFyZHdhcmUvc3RydWN0LW9mZnNldC5jcHAKKysrIGIvdGVzdHMvaGFyZHdhcmUvc3RydWN0LW9mZnNldC5jcHAKQEAgLTExNiw3ICsxMTYsOSBAQAogICAgIENIRUNLX01FTUJFUl9BVChzZW5zb3JzX3BvbGxfZGV2aWNlXzFfdCwgYmF0Y2gsIDc2LCAxNDQpOwogICAgIENIRUNLX01FTUJFUl9BVChzZW5zb3JzX3BvbGxfZGV2aWNlXzFfdCwgZmx1c2gsIDgwLCAxNTIpOwogICAgIENIRUNLX01FTUJFUl9BVChzZW5zb3JzX3BvbGxfZGV2aWNlXzFfdCwgaW5qZWN0X3NlbnNvcl9kYXRhLCA4NCwgMTYwKTsKLSAgICBDSEVDS19NRU1CRVJfQVQoc2Vuc29yc19wb2xsX2RldmljZV8xX3QsIHJlc2VydmVkX3Byb2NzLCA4OCwgMTY4KTsKKyAgICBDSEVDS19NRU1CRVJfQVQoc2Vuc29yc19wb2xsX2RldmljZV8xX3QsIHJlZ2lzdGVyX2RpcmVjdF9jaGFubmVsLCA4OCwgMTY4KTsKKyAgICBDSEVDS19NRU1CRVJfQVQoc2Vuc29yc19wb2xsX2RldmljZV8xX3QsIGNvbmZpZ19kaXJlY3RfcmVwb3J0LCA5MiwgMTc2KTsKKyAgICBDSEVDS19NRU1CRVJfQVQoc2Vuc29yc19wb2xsX2RldmljZV8xX3QsIHJlc2VydmVkX3Byb2NzLCA5NiwgMTg0KTsKIAogICAgIC8vVHlwZXMgZGVmaW5lZCBpbiBmYi5oCiAgICAgQ0hFQ0tfTUVNQkVSX0FUKGZyYW1lYnVmZmVyX2RldmljZV90LCBjb21tb24sIDAsIDApOwpkaWZmIC0tZ2l0IGEvdGVzdHMvdmVoaWNsZS9SRUFETUUgYi90ZXN0cy92ZWhpY2xlL1JFQURNRQppbmRleCBiOGZjN2Q0Li40MmQyMjEwIDEwMDY0NAotLS0gYS90ZXN0cy92ZWhpY2xlL1JFQURNRQorKysgYi90ZXN0cy92ZWhpY2xlL1JFQURNRQpAQCAtNDksMTMgKzQ5LDEzIEBACiAkIG1tbSBoYXJkd2FyZS9saWJoYXJkd2FyZQogCiBUaGlzIHdpbGwgZ2VuZXJhdGUgdGhlIGZvbGxvd2luZyBiaW5hcmllcyB0aGF0IHdlIGNhcmUgYWJvdXQ6Ci1pKSBvdXQvdGFyZ2V0L3Byb2R1Y3QvWFhYL3N5c3RlbS9saWIvaHcvdmVoaWNsZS5kZWZhdWx0LnNvCitpKSBvdXQvdGFyZ2V0L3Byb2R1Y3QvWFhYL3ZlbmRvci9saWIvaHcvdmVoaWNsZS5kZWZhdWx0LnNvCiBpaSkgb3V0L3RhcmdldC9wcm9kdWN0L1hYWC9kYXRhL25hdGl2ZXRlc3QvdmVoaWNsZV90ZXN0cwogaWlpKSBvdXQvdGFyZ2V0L3Byb2R1Y3QvWFhYL3N5c3RlbS9iaW4vdmVoaWNsZS1oYWwtdG9vbAogCiBUaGUgbG9jYXRpb24gZm9yIHRoZSBmaXJzdCBzaGFyZWQgbGlicmFyeSB3b3VsZCBiZToKLSQgYWRiIHB1c2ggb3V0L3RhcmdldC9wcm9kdWN0L1hYWC9zeXN0ZW0vbGliL2h3L3ZlaGljbGUuZGVmYXVsdC5zbwotL3N5c3RlbS9saWIvaHcKKyQgYWRiIHB1c2ggb3V0L3RhcmdldC9wcm9kdWN0L1hYWC92ZW5kb3IvbGliL2h3L3ZlaGljbGUuZGVmYXVsdC5zbworL3ZlbmRvci9saWIvaHcKIFlvdSBjYW4gYWxzbyB1c2UgJ2FkYiBzeW5jJyBpZiB5b3UgbGlrZSwgYWx0aG91Z2ggdGhpcyBpcyB0aGUgZWFzaWVzdCBsZWFzdAogaGFzc2xlIHdheSBvZiBwdXR0aW5nIGl0IGluIHBsYWNlLgogCmRpZmYgLS1naXQgYS90ZXN0cy92ZWhpY2xlL3ZlaGljbGUtaGFsLXRvb2wuYyBiL3Rlc3RzL3ZlaGljbGUvdmVoaWNsZS1oYWwtdG9vbC5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQK